package com.dieam.reactnativepushnotification.modules; import android.app.Application; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.util.Log; import java.util.Set; import static com.dieam.reactnativepushnotification.modules.RNPushNotification.LOG_TAG; /** * Set alarms for scheduled notification after system reboot. */ public class RNPushNotificationBootEventReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.i(LOG_TAG, "RNPushNotificationBootEventReceiver loading scheduled notifications"); if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) { SharedPreferences sharedPreferences = context.getSharedPreferences(RNPushNotificationHelper.PREFERENCES_KEY, Context.MODE_PRIVATE); Set<String> ids = sharedPreferences.getAll().keySet(); Application applicationContext = (Application) context.getApplicationContext(); RNPushNotificationHelper rnPushNotificationHelper = new RNPushNotificationHelper(applicationContext); for (String id : ids) { try { String notificationAttributesJson = sharedPreferences.getString(id, null); if (notificationAttributesJson != null) { RNPushNotificationAttributes notificationAttributes = RNPushNotificationAttributes.fromJson(notificationAttributesJson); if (notificationAttributes.getFireDate() < System.currentTimeMillis()) { Log.i(LOG_TAG, "RNPushNotificationBootEventReceiver: Showing notification for " + notificationAttributes.getId()); rnPushNotificationHelper.sendToNotificationCentre(notificationAttributes.toBundle()); } else { Log.i(LOG_TAG, "RNPushNotificationBootEventReceiver: Scheduling notification for " + notificationAttributes.getId()); rnPushNotificationHelper.sendNotificationScheduledCore(notificationAttributes.toBundle()); } } } catch (Exception e) { Log.e(LOG_TAG, "Problem with boot receiver loading notification " + id, e); } } } } }