Skip to content

Commit 04ea523

Browse files
committed
Check for null outcomeEventsController when calling its methods
- Use lazy initialization and singleton pattern to access and create outcomeEventsController - When we call outcomeEventsController's methods, check if it is null, and if so, initialize it - Follow https://www.infoworld.com/article/2077568/java-tip-67--lazy-instantiation.html
1 parent 1086758 commit 04ea523

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

OneSignalSDK/onesignal/src/main/java/com/onesignal/OneSignal.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,22 @@ static OSSharedPreferences getSharedPreferences() {
442442
@Nullable private static OSOutcomeEventsController outcomeEventsController;
443443
@Nullable private static OSOutcomeEventsFactory outcomeEventsFactory;
444444
@Nullable private static OSNotificationDataController notificationDataController;
445+
private static final Object outcomeEventsControllerSyncLock = new Object() {};
446+
447+
static OSOutcomeEventsController getOutcomeEventsController() {
448+
if (outcomeEventsController == null) {
449+
synchronized(outcomeEventsControllerSyncLock) {
450+
if (outcomeEventsController == null) {
451+
if (outcomeEventsFactory == null) {
452+
OneSignalDbHelper dbHelper = getDBHelperInstance();
453+
outcomeEventsFactory = new OSOutcomeEventsFactory(logger, apiClient, dbHelper, preferences);
454+
}
455+
outcomeEventsController = new OSOutcomeEventsController(sessionManager, outcomeEventsFactory);
456+
}
457+
}
458+
}
459+
return outcomeEventsController;
460+
}
445461

446462
@SuppressWarnings("WeakerAccess")
447463
public static String sdkType = "native";
@@ -834,7 +850,7 @@ synchronized private static void init(Context context) {
834850
initDone = true;
835851
OneSignal.Log(LOG_LEVEL.VERBOSE, "OneSignal SDK initialization done.");
836852

837-
outcomeEventsController.sendSavedOutcomes();
853+
getOutcomeEventsController().sendSavedOutcomes();
838854

839855
// Clean up any pending tasks that were queued up before initialization
840856
taskRemoteController.startPendingTasks();
@@ -871,8 +887,7 @@ private static void setupContextListeners(boolean wasAppContextNull) {
871887
outcomeEventsFactory = new OSOutcomeEventsFactory(logger, apiClient, dbHelper, preferences);
872888

873889
sessionManager.initSessionFromCache();
874-
outcomeEventsController = new OSOutcomeEventsController(sessionManager, outcomeEventsFactory);
875-
outcomeEventsController.cleanCachedUniqueOutcomes();
890+
getOutcomeEventsController().cleanCachedUniqueOutcomes();
876891
}
877892
}
878893

@@ -950,7 +965,7 @@ private static void doSessionInit() {
950965
logger.debug("Starting new session with appEntryState: " + getAppEntryState());
951966

952967
OneSignalStateSynchronizer.setNewSession();
953-
outcomeEventsController.cleanOutcomes();
968+
getOutcomeEventsController().cleanOutcomes();
954969
sessionManager.restartSessionIfNeeded(getAppEntryState());
955970
getInAppMessageController().resetSessionLaunchTime();
956971
setLastSessionTime(time.getCurrentTimeMillis());

0 commit comments

Comments
 (0)