@@ -391,7 +391,8 @@ static Activity getCurrentActivity() {
391
391
private static String smsId = null ;
392
392
private static int subscribableStatus = Integer .MAX_VALUE ;
393
393
394
- private static LanguageContext languageContext = null ;
394
+ // changed from private to package-private for unit test access
395
+ static LanguageContext languageContext = null ;
395
396
396
397
static OSRemoteNotificationReceivedHandler remoteNotificationReceivedHandler ;
397
398
static OSNotificationWillShowInForegroundHandler notificationWillShowInForegroundHandler ;
@@ -463,6 +464,22 @@ static OSSharedPreferences getSharedPreferences() {
463
464
@ Nullable private static OSOutcomeEventsController outcomeEventsController ;
464
465
@ Nullable private static OSOutcomeEventsFactory outcomeEventsFactory ;
465
466
@ Nullable private static OSNotificationDataController notificationDataController ;
467
+ private static final Object outcomeEventsControllerSyncLock = new Object () {};
468
+
469
+ static OSOutcomeEventsController getOutcomeEventsController () {
470
+ if (outcomeEventsController == null ) {
471
+ synchronized (outcomeEventsControllerSyncLock ) {
472
+ if (outcomeEventsController == null ) {
473
+ if (outcomeEventsFactory == null ) {
474
+ OneSignalDbHelper dbHelper = getDBHelperInstance ();
475
+ outcomeEventsFactory = new OSOutcomeEventsFactory (logger , apiClient , dbHelper , preferences );
476
+ }
477
+ outcomeEventsController = new OSOutcomeEventsController (sessionManager , outcomeEventsFactory );
478
+ }
479
+ }
480
+ }
481
+ return outcomeEventsController ;
482
+ }
466
483
467
484
@ SuppressWarnings ("WeakerAccess" )
468
485
public static String sdkType = "native" ;
@@ -855,7 +872,7 @@ synchronized private static void init(Context context) {
855
872
initDone = true ;
856
873
OneSignal .Log (LOG_LEVEL .VERBOSE , "OneSignal SDK initialization done." );
857
874
858
- outcomeEventsController .sendSavedOutcomes ();
875
+ getOutcomeEventsController () .sendSavedOutcomes ();
859
876
860
877
// Clean up any pending tasks that were queued up before initialization
861
878
taskRemoteController .startPendingTasks ();
@@ -892,8 +909,7 @@ private static void setupContextListeners(boolean wasAppContextNull) {
892
909
outcomeEventsFactory = new OSOutcomeEventsFactory (logger , apiClient , dbHelper , preferences );
893
910
894
911
sessionManager .initSessionFromCache ();
895
- outcomeEventsController = new OSOutcomeEventsController (sessionManager , outcomeEventsFactory );
896
- outcomeEventsController .cleanCachedUniqueOutcomes ();
912
+ getOutcomeEventsController ().cleanCachedUniqueOutcomes ();
897
913
}
898
914
}
899
915
@@ -971,7 +987,7 @@ private static void doSessionInit() {
971
987
logger .debug ("Starting new session with appEntryState: " + getAppEntryState ());
972
988
973
989
OneSignalStateSynchronizer .setNewSession ();
974
- outcomeEventsController .cleanOutcomes ();
990
+ getOutcomeEventsController () .cleanOutcomes ();
975
991
sessionManager .restartSessionIfNeeded (getAppEntryState ());
976
992
getInAppMessageController ().resetSessionLaunchTime ();
977
993
setLastSessionTime (time .getCurrentTimeMillis ());
0 commit comments