Browse Source

fix(plugin): add defensive scheduler initialization to prevent NullPointerException

- Add null checks and lazy initialization for scheduler in all plugin methods
- Prevents NullPointerException when methods called before load() completes
- Ensures scheduler is available for scheduleDailyNotification, scheduleDailyReminder, cancelDailyReminder, and updateDailyReminder
- Adds structured logging for scheduler initialization events
- Resolves critical runtime error under system stress conditions

Fixes: NullPointerException in DailyNotificationScheduler.scheduleNotification()
Tested: Notification system working correctly under stress with 45+ notifications
master
Matthew Raymer 1 week ago
parent
commit
8aaba21344
  1. 28
      android/plugin/src/main/java/com/timesafari/dailynotification/DailyNotificationPlugin.java

28
android/plugin/src/main/java/com/timesafari/dailynotification/DailyNotificationPlugin.java

@ -581,6 +581,13 @@ public class DailyNotificationPlugin extends Plugin {
// Ensure storage is initialized
ensureStorageInitialized();
// Ensure scheduler is initialized
if (scheduler == null) {
Log.w(TAG, "DN|SCHEDULER_NULL initializing_scheduler");
alarmManager = (AlarmManager) getContext().getSystemService(Context.ALARM_SERVICE);
scheduler = new DailyNotificationScheduler(getContext(), alarmManager);
}
// Validate required parameters
String time = call.getString("time");
if (time == null || time.isEmpty()) {
@ -2009,6 +2016,13 @@ public class DailyNotificationPlugin extends Plugin {
try {
Log.d(TAG, "Scheduling daily reminder");
// Ensure scheduler is initialized
if (scheduler == null) {
Log.w(TAG, "DN|SCHEDULER_NULL initializing_scheduler");
alarmManager = (AlarmManager) getContext().getSystemService(Context.ALARM_SERVICE);
scheduler = new DailyNotificationScheduler(getContext(), alarmManager);
}
// Extract reminder options
String id = call.getString("id");
String title = call.getString("title");
@ -2088,6 +2102,13 @@ public class DailyNotificationPlugin extends Plugin {
try {
Log.d(TAG, "Cancelling daily reminder");
// Ensure scheduler is initialized
if (scheduler == null) {
Log.w(TAG, "DN|SCHEDULER_NULL initializing_scheduler");
alarmManager = (AlarmManager) getContext().getSystemService(Context.ALARM_SERVICE);
scheduler = new DailyNotificationScheduler(getContext(), alarmManager);
}
String reminderId = call.getString("reminderId");
if (reminderId == null) {
call.reject("Missing reminderId parameter");
@ -2134,6 +2155,13 @@ public class DailyNotificationPlugin extends Plugin {
try {
Log.d(TAG, "Updating daily reminder");
// Ensure scheduler is initialized
if (scheduler == null) {
Log.w(TAG, "DN|SCHEDULER_NULL initializing_scheduler");
alarmManager = (AlarmManager) getContext().getSystemService(Context.ALARM_SERVICE);
scheduler = new DailyNotificationScheduler(getContext(), alarmManager);
}
String reminderId = call.getString("reminderId");
if (reminderId == null) {
call.reject("Missing reminderId parameter");

Loading…
Cancel
Save