feat(alarmas): replace one-line reliability button with full diagnostics screen

Surface all six DiagnosticoAlarmasAndroid fields instead of three: the
battery-optimization exemption and native pending-alarm count were
already collected but silently dropped by the old widget. Each failing
signal now offers a "Fix this" action that opens the right system
settings screen (exact alarms, notifications, full-screen intent,
battery optimization), guarded by SDK level and never crashing when a
ROM lacks that screen. Manufacturers known for aggressive background
killing (Xiaomi/Redmi/POCO, Huawei, Oppo, Vivo, OnePlus, Samsung) get
an honest explanation that Autostart must be enabled manually, since
there is no API to detect or grant it.

Notifications now deep-links straight to
ACTION_APP_NOTIFICATION_SETTINGS via a new openNotificationSettings
native method, instead of reusing the runtime permission popup meant
for first-time alarm creation.

New copy is added to all 13 ARB locales with real per-language
translations (not Spanish copies), verified by the ARB parity and
anti-copy tests plus the corruption scanner.
This commit is contained in:
2026-07-31 19:10:52 +02:00
parent ef9705a30e
commit 049ab78acb
35 changed files with 2262 additions and 79 deletions
+71
View File
@@ -1702,4 +1702,75 @@ class AppLocalizationsPt extends AppLocalizations {
@override
String get alarmCardVacationPausedBadge => 'Pausada por férias';
@override
String get alarmDiagnosticsExactAlarmsTitle => 'Agendamento exato do alarme';
@override
String get alarmDiagnosticsExactAlarmsHint =>
'Permite que o alarme toque no minuto exato definido, mesmo com o telefone em repouso.';
@override
String get alarmDiagnosticsNotificationsTitle => 'Notificações';
@override
String get alarmDiagnosticsNotificationsHint =>
'Necessárias para mostrar o alarme e o aviso prévio.';
@override
String get alarmDiagnosticsFullScreenTitle =>
'Exibição em tela cheia do alarme';
@override
String get alarmDiagnosticsFullScreenHint =>
'Permite que a tela do alarme apareça automaticamente, mesmo com o telefone bloqueado.';
@override
String get alarmDiagnosticsBatteryTitle => 'Otimização de bateria';
@override
String get alarmDiagnosticsBatteryHint =>
'Evita que o sistema feche o PluriWave em segundo plano, para que o alarme ainda possa tocar.';
@override
String get alarmDiagnosticsNativeCountTitle =>
'Alarmes registrados no Android';
@override
String alarmDiagnosticsNativeCountValue(int count) {
return 'Registrados agora: $count';
}
@override
String get alarmDiagnosticsNativeCountAttentionHint =>
'Você tem um alarme ativado, mas nenhum está registrado no sistema ainda. Reabra o PluriWave ou resolva primeiro os itens acima.';
@override
String get alarmDiagnosticsManufacturerLabel => 'Fabricante';
@override
String get alarmDiagnosticsSdkLabel => 'Versão do Android (SDK)';
@override
String get alarmDiagnosticsNeedsAttentionStatus => 'Precisa de atenção';
@override
String get alarmDiagnosticsAutostartTitle =>
'Mais uma etapa manual neste telefone';
@override
String alarmDiagnosticsAutostartBody(String manufacturer) {
return 'Telefones $manufacturer costumam fechar apps em segundo plano para economizar bateria. Não existe uma configuração que o PluriWave possa ativar sozinho: você precisa ativar por conta própria o Início automático (às vezes chamado de \"Autostart\" ou \"Atividade em segundo plano\") para o PluriWave. Procure em Configurações, em Apps ou Bateria, ou no próprio app de Segurança do telefone.';
}
@override
String get alarmDiagnosticsFixAction => 'Resolver';
@override
String get alarmDiagnosticsIntentUnavailable =>
'Não foi possível abrir essa tela de configurações neste telefone. Tente procurá-la manualmente nas Configurações.';
@override
String get alarmDiagnosticsUnavailableHint =>
'Ainda não conseguimos verificar as configurações do seu alarme.';
}