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
+114
View File
@@ -3073,6 +3073,120 @@ abstract class AppLocalizations {
/// In es, this message translates to:
/// **'Pausada por vacaciones'**
String get alarmCardVacationPausedBadge;
/// No description provided for @alarmDiagnosticsExactAlarmsTitle.
///
/// In es, this message translates to:
/// **'Programación de alarma exacta'**
String get alarmDiagnosticsExactAlarmsTitle;
/// No description provided for @alarmDiagnosticsExactAlarmsHint.
///
/// In es, this message translates to:
/// **'Permite que la alarma suene en el minuto exacto que elegiste, incluso con el teléfono en reposo.'**
String get alarmDiagnosticsExactAlarmsHint;
/// No description provided for @alarmDiagnosticsNotificationsTitle.
///
/// In es, this message translates to:
/// **'Notificaciones'**
String get alarmDiagnosticsNotificationsTitle;
/// No description provided for @alarmDiagnosticsNotificationsHint.
///
/// In es, this message translates to:
/// **'Necesarias para mostrar la alarma y el aviso previo.'**
String get alarmDiagnosticsNotificationsHint;
/// No description provided for @alarmDiagnosticsFullScreenTitle.
///
/// In es, this message translates to:
/// **'Pantalla completa de la alarma'**
String get alarmDiagnosticsFullScreenTitle;
/// No description provided for @alarmDiagnosticsFullScreenHint.
///
/// In es, this message translates to:
/// **'Permite que la pantalla de la alarma aparezca automáticamente, incluso con el teléfono bloqueado.'**
String get alarmDiagnosticsFullScreenHint;
/// No description provided for @alarmDiagnosticsBatteryTitle.
///
/// In es, this message translates to:
/// **'Optimización de batería'**
String get alarmDiagnosticsBatteryTitle;
/// No description provided for @alarmDiagnosticsBatteryHint.
///
/// In es, this message translates to:
/// **'Evita que el sistema cierre PluriWave en segundo plano para que la alarma pueda sonar.'**
String get alarmDiagnosticsBatteryHint;
/// No description provided for @alarmDiagnosticsNativeCountTitle.
///
/// In es, this message translates to:
/// **'Alarmas registradas en Android'**
String get alarmDiagnosticsNativeCountTitle;
/// No description provided for @alarmDiagnosticsNativeCountValue.
///
/// In es, this message translates to:
/// **'Registradas ahora mismo: {count}'**
String alarmDiagnosticsNativeCountValue(int count);
/// No description provided for @alarmDiagnosticsNativeCountAttentionHint.
///
/// In es, this message translates to:
/// **'Tenés una alarma activada, pero todavía ninguna está registrada en el sistema. Volvé a abrir PluriWave o solucioná primero los puntos de arriba.'**
String get alarmDiagnosticsNativeCountAttentionHint;
/// No description provided for @alarmDiagnosticsManufacturerLabel.
///
/// In es, this message translates to:
/// **'Fabricante'**
String get alarmDiagnosticsManufacturerLabel;
/// No description provided for @alarmDiagnosticsSdkLabel.
///
/// In es, this message translates to:
/// **'Versión de Android (SDK)'**
String get alarmDiagnosticsSdkLabel;
/// No description provided for @alarmDiagnosticsNeedsAttentionStatus.
///
/// In es, this message translates to:
/// **'Necesita atención'**
String get alarmDiagnosticsNeedsAttentionStatus;
/// No description provided for @alarmDiagnosticsAutostartTitle.
///
/// In es, this message translates to:
/// **'Un paso manual más en este teléfono'**
String get alarmDiagnosticsAutostartTitle;
/// No description provided for @alarmDiagnosticsAutostartBody.
///
/// In es, this message translates to:
/// **'Los teléfonos {manufacturer} suelen cerrar las apps que están en segundo plano para ahorrar batería. No hay ningún ajuste que PluriWave pueda activar por su cuenta: tenés que activar vos mismo el Inicio automático (a veces llamado \"Autostart\" o \"Actividad en segundo plano\"). Buscalo en Ajustes, dentro de Apps o Batería, o en la app de Seguridad del teléfono.'**
String alarmDiagnosticsAutostartBody(String manufacturer);
/// No description provided for @alarmDiagnosticsFixAction.
///
/// In es, this message translates to:
/// **'Solucionar'**
String get alarmDiagnosticsFixAction;
/// No description provided for @alarmDiagnosticsIntentUnavailable.
///
/// In es, this message translates to:
/// **'No se pudo abrir esa pantalla de ajustes en este teléfono. Buscala manualmente en Ajustes.'**
String get alarmDiagnosticsIntentUnavailable;
/// No description provided for @alarmDiagnosticsUnavailableHint.
///
/// In es, this message translates to:
/// **'Todavía no pudimos revisar tus ajustes de alarma.'**
String get alarmDiagnosticsUnavailableHint;
}
class _AppLocalizationsDelegate