fix(alarms): fallback native scheduling
Build & Deploy Pluriwave / Análisis de código (push) Successful in 27s
Build & Deploy Pluriwave / Build APK + AAB release (push) Successful in 2m28s

This commit is contained in:
2026-05-22 19:23:41 +02:00
parent d7277a9274
commit a976b8e797
@@ -41,13 +41,13 @@ class AlarmScheduler(private val context: Context) {
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
) )
alarmManager.setAlarmClock( val mainScheduled = scheduleMainAlarm(id, triggerAtMillis, showIntent, alarmIntent)
AlarmManager.AlarmClockInfo(triggerAtMillis, showIntent),
alarmIntent
)
Log.d(tag, "alarm.schedule setAlarmClock OK id=$id")
val now = System.currentTimeMillis() val now = System.currentTimeMillis()
if (!mainScheduled) {
Log.w(tag, "alarm.schedule main alarm fallback failed or degraded id=$id")
}
if (preNoticeAtMillis > now) { if (preNoticeAtMillis > now) {
try { try {
alarmManager.setExactAndAllowWhileIdle( alarmManager.setExactAndAllowWhileIdle(
@@ -83,6 +83,55 @@ class AlarmScheduler(private val context: Context) {
} }
} }
private fun scheduleMainAlarm(
id: String,
triggerAtMillis: Long,
showIntent: PendingIntent,
alarmIntent: PendingIntent
): Boolean {
try {
alarmManager.setAlarmClock(
AlarmManager.AlarmClockInfo(triggerAtMillis, showIntent),
alarmIntent
)
Log.d(tag, "alarm.schedule setAlarmClock OK id=$id")
return true
} catch (error: SecurityException) {
Log.e(tag, "alarm.schedule setAlarmClock SecurityException id=$id", error)
} catch (error: Throwable) {
Log.e(tag, "alarm.schedule setAlarmClock ERROR id=$id", error)
}
return try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && alarmManager.canScheduleExactAlarms()) {
alarmManager.setExactAndAllowWhileIdle(
AlarmManager.RTC_WAKEUP,
triggerAtMillis,
alarmIntent
)
Log.d(tag, "alarm.schedule setExactAndAllowWhileIdle fallback OK id=$id")
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setAndAllowWhileIdle(
AlarmManager.RTC_WAKEUP,
triggerAtMillis,
alarmIntent
)
Log.d(tag, "alarm.schedule setAndAllowWhileIdle fallback OK id=$id")
} else {
alarmManager.set(
AlarmManager.RTC_WAKEUP,
triggerAtMillis,
alarmIntent
)
Log.d(tag, "alarm.schedule set fallback OK id=$id")
}
true
} catch (error: Throwable) {
Log.e(tag, "alarm.schedule fallback ERROR id=$id", error)
false
}
}
fun cancelAlarm(id: String) { fun cancelAlarm(id: String) {
Log.d(tag, "alarm.cancel id=$id") Log.d(tag, "alarm.cancel id=$id")
for (slot in 1..3) { for (slot in 1..3) {