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
This commit is contained in:
@@ -581,6 +581,13 @@ public class DailyNotificationPlugin extends Plugin {
|
|||||||
// Ensure storage is initialized
|
// Ensure storage is initialized
|
||||||
ensureStorageInitialized();
|
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
|
// Validate required parameters
|
||||||
String time = call.getString("time");
|
String time = call.getString("time");
|
||||||
if (time == null || time.isEmpty()) {
|
if (time == null || time.isEmpty()) {
|
||||||
@@ -2009,6 +2016,13 @@ public class DailyNotificationPlugin extends Plugin {
|
|||||||
try {
|
try {
|
||||||
Log.d(TAG, "Scheduling daily reminder");
|
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
|
// Extract reminder options
|
||||||
String id = call.getString("id");
|
String id = call.getString("id");
|
||||||
String title = call.getString("title");
|
String title = call.getString("title");
|
||||||
@@ -2088,6 +2102,13 @@ public class DailyNotificationPlugin extends Plugin {
|
|||||||
try {
|
try {
|
||||||
Log.d(TAG, "Cancelling daily reminder");
|
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");
|
String reminderId = call.getString("reminderId");
|
||||||
if (reminderId == null) {
|
if (reminderId == null) {
|
||||||
call.reject("Missing reminderId parameter");
|
call.reject("Missing reminderId parameter");
|
||||||
@@ -2134,6 +2155,13 @@ public class DailyNotificationPlugin extends Plugin {
|
|||||||
try {
|
try {
|
||||||
Log.d(TAG, "Updating daily reminder");
|
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");
|
String reminderId = call.getString("reminderId");
|
||||||
if (reminderId == null) {
|
if (reminderId == null) {
|
||||||
call.reject("Missing reminderId parameter");
|
call.reject("Missing reminderId parameter");
|
||||||
|
|||||||
Reference in New Issue
Block a user