fix(android): target alarm broadcast to app package so receiver is triggered
Set Intent.setPackage(context.packageName) when creating PendingIntents for AlarmManager so the broadcast is delivered to DailyNotificationReceiver on all OEMs. Alarms were firing but the receiver was not invoked when the component was not explicitly package-targeted. - NotifyReceiver: setPackage on schedule, cancel, and isAlarmScheduled intents - ReactivationManager: alarmsExist() use DailyNotificationReceiver + setPackage - DailyNotificationScheduler: setPackage on ExactAlarmManager path intent
This commit is contained in:
@@ -154,8 +154,9 @@ public class DailyNotificationScheduler {
|
|||||||
cancelNotification(duplicateId);
|
cancelNotification(duplicateId);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create intent for the notification
|
// Create intent for the notification; setPackage ensures AlarmManager delivery on all OEMs
|
||||||
Intent intent = new Intent(context, DailyNotificationReceiver.class);
|
Intent intent = new Intent(context, DailyNotificationReceiver.class);
|
||||||
|
intent.setPackage(context.getPackageName());
|
||||||
intent.setAction(com.timesafari.dailynotification.DailyNotificationConstants.ACTION_NOTIFICATION);
|
intent.setAction(com.timesafari.dailynotification.DailyNotificationConstants.ACTION_NOTIFICATION);
|
||||||
intent.putExtra(com.timesafari.dailynotification.DailyNotificationConstants.EXTRA_NOTIFICATION_ID, content.getId());
|
intent.putExtra(com.timesafari.dailynotification.DailyNotificationConstants.EXTRA_NOTIFICATION_ID, content.getId());
|
||||||
|
|
||||||
|
|||||||
@@ -147,6 +147,7 @@ class NotifyReceiver : BroadcastReceiver() {
|
|||||||
// Strategy: Check both by scheduleId (stable) and by trigger time (catches different scheduleIds for same time)
|
// Strategy: Check both by scheduleId (stable) and by trigger time (catches different scheduleIds for same time)
|
||||||
val requestCode = getRequestCode(stableScheduleId)
|
val requestCode = getRequestCode(stableScheduleId)
|
||||||
val checkIntent = Intent(context, com.timesafari.dailynotification.DailyNotificationReceiver::class.java).apply {
|
val checkIntent = Intent(context, com.timesafari.dailynotification.DailyNotificationReceiver::class.java).apply {
|
||||||
|
setPackage(context.packageName)
|
||||||
action = "com.timesafari.daily.NOTIFICATION"
|
action = "com.timesafari.daily.NOTIFICATION"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -270,8 +271,10 @@ class NotifyReceiver : BroadcastReceiver() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FIX: Use DailyNotificationReceiver (registered in manifest) instead of NotifyReceiver
|
// FIX: Use DailyNotificationReceiver (registered in manifest) instead of NotifyReceiver
|
||||||
// FIX: Set action to match manifest registration
|
// FIX: Set action to match manifest registration; setPackage() ensures AlarmManager
|
||||||
|
// delivery reaches this app on all OEMs (see daily-notification-plugin-android-receiver-issue)
|
||||||
val intent = Intent(context, com.timesafari.dailynotification.DailyNotificationReceiver::class.java).apply {
|
val intent = Intent(context, com.timesafari.dailynotification.DailyNotificationReceiver::class.java).apply {
|
||||||
|
setPackage(context.packageName)
|
||||||
action = "com.timesafari.daily.NOTIFICATION" // Must match manifest intent-filter action
|
action = "com.timesafari.daily.NOTIFICATION" // Must match manifest intent-filter action
|
||||||
putExtra("notification_id", notificationId) // DailyNotificationReceiver expects this extra
|
putExtra("notification_id", notificationId) // DailyNotificationReceiver expects this extra
|
||||||
putExtra("schedule_id", stableScheduleId) // Add stable scheduleId for tracking
|
putExtra("schedule_id", stableScheduleId) // Add stable scheduleId for tracking
|
||||||
@@ -409,6 +412,7 @@ class NotifyReceiver : BroadcastReceiver() {
|
|||||||
val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
|
val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
|
||||||
// FIX: Use DailyNotificationReceiver to match what was scheduled
|
// FIX: Use DailyNotificationReceiver to match what was scheduled
|
||||||
val intent = Intent(context, com.timesafari.dailynotification.DailyNotificationReceiver::class.java).apply {
|
val intent = Intent(context, com.timesafari.dailynotification.DailyNotificationReceiver::class.java).apply {
|
||||||
|
setPackage(context.packageName)
|
||||||
action = "com.timesafari.daily.NOTIFICATION"
|
action = "com.timesafari.daily.NOTIFICATION"
|
||||||
}
|
}
|
||||||
val requestCode = when {
|
val requestCode = when {
|
||||||
@@ -440,6 +444,7 @@ class NotifyReceiver : BroadcastReceiver() {
|
|||||||
fun isAlarmScheduled(context: Context, scheduleId: String? = null, triggerAtMillis: Long? = null): Boolean {
|
fun isAlarmScheduled(context: Context, scheduleId: String? = null, triggerAtMillis: Long? = null): Boolean {
|
||||||
// FIX: Use DailyNotificationReceiver to match what was scheduled
|
// FIX: Use DailyNotificationReceiver to match what was scheduled
|
||||||
val intent = Intent(context, com.timesafari.dailynotification.DailyNotificationReceiver::class.java).apply {
|
val intent = Intent(context, com.timesafari.dailynotification.DailyNotificationReceiver::class.java).apply {
|
||||||
|
setPackage(context.packageName)
|
||||||
action = "com.timesafari.daily.NOTIFICATION"
|
action = "com.timesafari.daily.NOTIFICATION"
|
||||||
}
|
}
|
||||||
val requestCode = when {
|
val requestCode = when {
|
||||||
|
|||||||
@@ -440,9 +440,9 @@ class ReactivationManager(private val context: Context) {
|
|||||||
*/
|
*/
|
||||||
private fun alarmsExist(): Boolean {
|
private fun alarmsExist(): Boolean {
|
||||||
return try {
|
return try {
|
||||||
// Check if any PendingIntent for our receiver exists
|
// Check if any PendingIntent for our receiver exists (must match NotifyReceiver schedule path)
|
||||||
// This is more reliable than nextAlarmClock
|
val intent = Intent(context, com.timesafari.dailynotification.DailyNotificationReceiver::class.java).apply {
|
||||||
val intent = Intent(context, NotifyReceiver::class.java).apply {
|
setPackage(context.packageName)
|
||||||
action = "com.timesafari.daily.NOTIFICATION"
|
action = "com.timesafari.daily.NOTIFICATION"
|
||||||
}
|
}
|
||||||
val pendingIntent = PendingIntent.getBroadcast(
|
val pendingIntent = PendingIntent.getBroadcast(
|
||||||
|
|||||||
Reference in New Issue
Block a user