diogomene15 / TrabalhoFinal-GCS

Trabalho final da disciplina de Gerência de Configuração de Software, realizado pelos alunos Diogo de Lima Menezes, João Pedro Cintra Karpinski e Luis Henrique Souza Carvalho
0 stars 0 forks source link

Adição de suporte para utilização de tema escuro/noturno #3

Open diogomene15 opened 1 month ago

diogomene15 commented 1 month ago

O projeto atual da aplicação possui uma interface de usuário padrão com tema claro. No entanto, com a crescente adoção de modos escuros nas aplicações modernas, tornou-se evidente a necessidade de oferecer aos usuários a opção de alternar entre o modo claro e o modo escuro. Essa funcionalidade não só melhora a acessibilidade e a experiência do usuário, especialmente em ambientes de pouca luz, mas também está alinhada com as tendências atuais de design de interfaces.

A ausência de um modo escuro pode causar desconforto visual aos usuários que preferem ou necessitam de uma interface menos luminosa, além de não aproveitar as economias de energia proporcionadas por telas OLED/AMOLED em dispositivos móveis. Além disso, muitos usuários estão habituados a aplicativos que oferecem essa opção, e a falta dela pode impactar negativamente a percepção e a usabilidade da nossa aplicação.

Desse modo, acredito que seja interessante a criação de um conjunto de funcionalidades que adicionem o suporte à utilização de tema escuro, caso o usuário possua essa preferência. Para isso, recomendo a utilização de definições de arquivos de tema (theme.xml), da mesma maneira como já está definido o tema padrão da aplicação (tema claro). Dessa forma, não se fará necessária a personalização de cada uma das telas, o que adicionaria grande complexidade de manutenção, principalmente ao considerar-se a criação de novas telas, ou temas, no futuro. Após correta definição de temas de cor, acredito ser importante que se ofereça aos usuários, por meio de um elemento de seleção no menu suspenso (já acessível em todas as telas da aplicação, por padrão), a possibilidade de alterar sua preferência de tema de cor. Após a alteração da preferência, deve-se realizar a persistência da configuração selecionada pelo usuário. Num primeiro momento, onde nenhuma preferência foi explicitamente selecionada pelo usuário, deve-se realizar a verificação do tema padrão de cor no sistema. Uma possível maneira de se realizar isso, é utilizando o seguinte padrão, com a criação de uma classe responsável por verificar e aplicar a preferência do sistema:

import android.content.res.Configuration;
import androidx.appcompat.app.AppCompatDelegate;

public class ThemeUtils {

    public static boolean isSystemInDarkMode() {
        int nightModeFlags = 
            Resources.getSystem().getConfiguration().uiMode & 
            Configuration.UI_MODE_NIGHT_MASK;
        return nightModeFlags == Configuration.UI_MODE_NIGHT_YES;
    }

    public static void applySystemThemePreference() {
        if (isSystemInDarkMode()) {
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
        } else {
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
        }
    }
}

Não obstante, solicito o envolvimento da equipe de UI/UX, assim como os responsáveis pelos Requisitos e Desenvolvimento. Dessa forma, a partir da validação sobre a funcionalidade, pela equipe de Requisitos, posterior prototipação e definição de meios e preferências pela equipe de UI/UX, e, por fim, discussões e definições técnicas relacionadas ao código pela equipe de Desenvolvimento, será possível manter um conjunto de discussões e tomadas de decisões documentadas e rastreáveis, a partir dessa issue de origem. Contudo, é claro, caso necessário deve-se ramificar esta issue em sub-tarefas (sub-issues), que devem ser relacionadas explicitamente a esta.

diogomene15 commented 1 month ago

@luishscarvalho, poderia auxiliar no atendimento dessa demanda? Estarei te colocando como participante. Qualquer dúvida, fico à disposição.

luishscarvalho commented 1 month ago

Entendido @diogomene15! Vamos prosseguir com a discussão e validação da implementação do modo escuro para a aplicação, envolvendo as equipes de UI/UX, Requisitos e Desenvolvimento conforme sugerido. Vamos manter as discussões documentadas e considerar a criação de sub-tarefas conforme necessário.