Notification system audit: fix 6 defects, close 5 gaps, add rich notifications (v1.1.0)

Defects fixed:
- D1: Fix notification ID range collision (report reminders 700k→2M+)
- D2: Streak risk now checks both dzikir pagi & petang
- D3: _cancelPrayerPending no longer kills non-prayer notifications
- D4: Push notifications carry deeplink in payload for proper routing
- D5: Add reconfigureTimeZoneIfNeeded() for TZ change detection
- D6: Defer launch notification routing until widget tree is ready

Gaps closed:
- G1: Add streak risk + weekly summary toggles to settings UI
- G2: Verified boot reschedule already in place (flutter_local_notifications v21)
- G3: Remove unused mirrorAdzanToInbox field and legacy cleanup calls
- G4: Add notif_push_opened analytics tracking
- G5: Add notif_settings_changed analytics tracking

Enhancements:
- O1: Rich notification with Sudah Sholat action button on report reminders
- O2: Permission check on app resume via WidgetsBindingObserver (30s throttle)
- O2b: Fix stretched notification icon (white crescent moon vector drawable)
- O3: Expired inbox cleanup in background sync
- O4: Haptic feedback on notification bell quick actions

Bump version 1.0.8+9 → 1.1.0+10
This commit is contained in:
Dwindi Ramadhana
2026-06-06 22:38:02 +07:00
parent 2bd8e3666a
commit 4badfb6521
13 changed files with 420 additions and 37 deletions

View File

@@ -749,6 +749,36 @@ class _SettingsScreenState extends ConsumerState<SettingsScreen> {
trailing: const Icon(LucideIcons.chevronRight, size: 20),
onTap: () => _showPushCapDialog(context),
),
const SizedBox(height: 10),
_settingRow(
isDark,
icon: LucideIcons.flame,
iconColor: const Color(0xFFE17055),
title: 'Peringatan Streak',
subtitle: 'Tilawah & dzikir belum tercatat',
trailing: IosToggle(
value: _settings.streakRiskEnabled,
onChanged: (v) {
_settings.streakRiskEnabled = v;
_saveSettings();
},
),
),
const SizedBox(height: 10),
_settingRow(
isDark,
icon: LucideIcons.calendarDays,
iconColor: const Color(0xFF7B61FF),
title: 'Ringkasan Mingguan',
subtitle: 'Ringkasan ibadah setiap hari Senin',
trailing: IosToggle(
value: _settings.weeklySummaryEnabled,
onChanged: (v) {
_settings.weeklySummaryEnabled = v;
_saveSettings();
},
),
),
];
}
@@ -963,7 +993,7 @@ class _SettingsScreenState extends ConsumerState<SettingsScreen> {
icon: LucideIcons.info,
iconColor: AppColors.sage,
title: 'Versi Aplikasi',
subtitle: '1.0.8',
subtitle: '1.1.0',
),
const SizedBox(height: 10),
_settingRow(