API v1

Configurações

Android: ConfigurationFragment · ConfigurationViewModel · ChangePasswordFragment

Tela de perfil e configurações do usuário. Permite trocar de empresa ativa (com reresolução de permissões em tempo real), visualizar dados do perfil, acionar download de dados offline e fazer logout.

Funcionalidades

FeatureDetalhe
Avatar com iniciaisBitmap circular gerado dinamicamente com a inicial do nome. Cor aleatória persistida por usuário em SharedPreferences("user_prefs").
Nome e CPFCPF exibido mascarado XXX.XXX.XXX-XX. Nome lido de SharedPreferences("DATA"), chave "nome".
Troca de empresaSpinner com apenas empresas ativas. Ao trocar, permissões são rerresolvidas e o HomeFragment é notificado via chamada direta ao fragment.
Troca de senhaVisível apenas para motoristas (driver == true). Navega para nav_change_pass (ChangePasswordFragment).
Download offlineÍcone com cor de status (verde=sucesso, vermelho=falha, azul=em andamento). Aciona 3 WorkManager workers em paralelo.
LogoutLimpa credenciais, token FCM e navega para nav_login.

Troca de Empresa — Fluxo Detalhado

1

Filtragem de empresas ativas

configurationViewModel.filterActiveCompanies(arrayList) — remove empresas inativas antes de popular o spinner. Se nenhuma empresa ativa for encontrada, o spinner é ocultado.

2

Resolução de permissões (assíncrono)

Loading overlay exibido. Identifica papel (master / motorista / padrão) e calcula permissões igual ao fluxo do Login. Salva em SharedPreferences("DATA"), chave "perms_user".

3

Persistência de papel

Salva flags nos SharedPreferences: "master", "responsavel" e "driver". Controla visibilidade do botão de troca de senha.

4

Notificação do HomeFragment

Localiza o HomeFragment via NavHostFragment.childFragmentManager e chama fragment.onCompanySelected(companyId, isDriver). Se não encontrado, salva em "pending_company_change" para ser aplicado no próximo onResume da Home.

Workers de Download Offline

O botão de download aciona 3 workers do WorkManager em paralelo:

WorkerDados baixados
TripDriverWorkServiceDados de motoristas
TripAtributtedWorkServiceViagens atribuídas
TripCoordinatesWorkServiceCoordenadas de rotas

O ícone de download reflete o estado do worker mais recente:

Estado WorkManagerCor do ícone
SUCCEEDEDVerde
FAILEDVermelho
RUNNINGAzul
ENQUEUEDCinza claro

O status é persistido em SharedPreferences("MyAppData"), chave "data", para exibição correta ao reabrir a tela.

Logout — o que é limpo

// SharedPreferences "DATA"
remove("nome", "user_id", "token_credentials", "user_perms", "user_perms_json")

// SharedPreferences "ButtonLayout"
remove("buttonList")

// SharedPreferences "loginPrefs" (se saveLogin == true)
remove("password")

// SharedPreferences "biometrics"
remove("bio")

// Firebase FCM
FirebaseMessaging.getInstance().deleteToken()

Avatar — imageNameColor()

Gera um Bitmap 120×120px com círculo colorido e inicial em branco. A cor é determinada por:

  1. Lê cor persistida em SharedPreferences("user_prefs") com a chave sendo o nome completo do usuário.
  2. Se não existe, gera uma cor aleatória RGB.
  3. Salva a cor gerada para manter consistência entre sessões.

SharedPreferences relevantes

NomeChaveUso
DATAnome, cpfDados de exibição do perfil
DATAcompany_namesJSON de empresas para o spinner (Array<CompanyData>)
DATAuser_perms_jsonJSONObject com permissões por empresa — fonte para resolução
DATAsectorsJSONArray de setores do usuário
DATAperms_userJSON array final de IDs de permissão (escrito ao trocar empresa)
selected_companycompany_idEmpresa ativa — atualizada ao trocar
mastermasterBoolean — atualizado ao trocar empresa
driverdriverBoolean — controla visibilidade de "Trocar Senha"
responsavelresponsavelBoolean — papel de responsável
credentialstoken_credentialToken legado da empresa — atualizado ao trocar empresa
user_prefs{nome_usuario}Cor do avatar (Int) por nome de usuário
MyAppDatadataStatus do último download offline