Skip to content

Commit 43214e9

Browse files
committed
Added setAppContext which triggers dependents
* Added null check to flushBufferToDisk
1 parent 9746135 commit 43214e9

File tree

5 files changed

+96
-12
lines changed

5 files changed

+96
-12
lines changed

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -496,6 +496,11 @@ public static OneSignal.Builder getCurrentOrNewInitBuilder() {
496496
return mInitBuilder;
497497
}
498498

499+
static void setAppContext(Context context) {
500+
appContext = context.getApplicationContext();
501+
OneSignalPrefs.startDelayedWrite();
502+
}
503+
499504
/**
500505
* Initializes OneSignal to register the device for push notifications.
501506
*<br/>
@@ -552,7 +557,7 @@ public static void init(Context context, String googleProjectNumber, String oneS
552557
}
553558

554559
public static void init(Context context, String googleProjectNumber, String oneSignalAppId, NotificationOpenedHandler notificationOpenedHandler, NotificationReceivedHandler notificationReceivedHandler) {
555-
appContext = context.getApplicationContext();
560+
OneSignal.setAppContext(context);
556561

557562
if (requiresUserPrivacyConsent && !userProvidedPrivacyConsent()) {
558563
OneSignal.Log(LOG_LEVEL.VERBOSE, "OneSignal SDK initialization delayed, user privacy consent is set to required for this application.");
@@ -574,9 +579,6 @@ public static void init(Context context, String googleProjectNumber, String oneS
574579
return;
575580

576581
if (initDone) {
577-
if (context != null)
578-
appContext = context.getApplicationContext();
579-
580582
if (mInitBuilder.mNotificationOpenedHandler != null)
581583
fireCallbackForOpenedNotifications();
582584

@@ -587,7 +589,6 @@ public static void init(Context context, String googleProjectNumber, String oneS
587589

588590
foreground = contextIsActivity;
589591
appId = oneSignalAppId;
590-
appContext = context.getApplicationContext();
591592

592593
saveFilterOtherGCMReceivers(mInitBuilder.mFilterOtherGCMReceivers);
593594

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

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
class OneSignalPrefs {
3939

4040
// SharedPreferences Instances
41-
static final String PREFS_ONESIGNAL = OneSignal.class.getSimpleName();
41+
public static final String PREFS_ONESIGNAL = OneSignal.class.getSimpleName();
4242
static final String PREFS_PLAYER_PURCHASES = "GTPlayerPurchases";
4343

4444
// PREFERENCES KEYS
@@ -113,6 +113,10 @@ public void run() {
113113
}
114114

115115
private void flushBufferToDisk() {
116+
// A flush will be triggered later once a context via OneSignal.setAppContext(...)
117+
if (OneSignal.appContext == null)
118+
return;
119+
116120
for (String pref : prefsToApply.keySet()) {
117121
SharedPreferences prefsToWrite = getSharedPrefsByName(pref);
118122
SharedPreferences.Editor editor = prefsToWrite.edit();
@@ -146,19 +150,23 @@ public static void initializePool() {
146150
prefsHandler = new WritePrefHandlerThread();
147151
}
148152

149-
static void saveString(final String prefsName, final String key, final String value) {
153+
public static void startDelayedWrite() {
154+
prefsHandler.startDelayedWrite();
155+
}
156+
157+
public static void saveString(final String prefsName, final String key, final String value) {
150158
save(prefsName, key, value);
151159
}
152160

153-
static void saveBool(String prefsName, String key, boolean value) {
161+
public static void saveBool(String prefsName, String key, boolean value) {
154162
save(prefsName, key, value);
155163
}
156164

157-
static void saveInt(String prefsName, String key, int value) {
165+
public static void saveInt(String prefsName, String key, int value) {
158166
save(prefsName, key, value);
159167
}
160168

161-
static void saveLong(String prefsName, String key, long value) {
169+
public static void saveLong(String prefsName, String key, long value) {
162170
save(prefsName, key, value);
163171
}
164172

@@ -167,7 +175,7 @@ static private void save(String prefsName, String key, Object value) {
167175
synchronized (pref) {
168176
pref.put(key, value);
169177
}
170-
prefsHandler.startDelayedWrite();
178+
startDelayedWrite();
171179
}
172180

173181
static String getString(String prefsName, String key, String defValue) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ private static void internalSyncOnFocusTime() {
175175

176176
private static Thread syncBgThread;
177177
static void doBackgroundSync(Context context, SyncRunnable runnable) {
178-
OneSignal.appContext = context.getApplicationContext();
178+
OneSignal.setAppContext(context);
179179
syncBgThread = new Thread(runnable, "OS_SYNCSRV_BG_SYNC");
180180
syncBgThread.start();
181181
}

OneSignalSDK/unittest/src/test/java/com/onesignal/OneSignalPackagePrivateHelper.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,4 +181,6 @@ public static void OneSignal_onAppLostFocus() {
181181

182182
public static String OneSignal_appId() { return OneSignal.appId; }
183183

184+
185+
public static void OneSignal_setAppContext(Context context) { OneSignal.setAppContext(context); }
184186
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package com.test.onesignal;
2+
3+
import android.app.Activity;
4+
import android.content.Context;
5+
import android.content.SharedPreferences;
6+
7+
import com.onesignal.BuildConfig;
8+
import com.onesignal.OneSignal;
9+
10+
import org.junit.AfterClass;
11+
import org.junit.Before;
12+
import org.junit.BeforeClass;
13+
import org.junit.Test;
14+
import org.junit.runner.RunWith;
15+
import org.robolectric.Robolectric;
16+
import org.robolectric.RobolectricTestRunner;
17+
import org.robolectric.android.controller.ActivityController;
18+
import org.robolectric.annotation.Config;
19+
import org.robolectric.shadows.ShadowLog;
20+
21+
import com.onesignal.OneSignalPackagePrivateHelper.OneSignalPrefs;
22+
import com.onesignal.StaticResetHelper;
23+
import com.onesignal.example.BlankActivity;
24+
25+
import static com.onesignal.OneSignalPackagePrivateHelper.OneSignal_setAppContext;
26+
import static org.junit.Assert.assertEquals;
27+
28+
@Config(packageName = "com.onesignal.example",
29+
constants = BuildConfig.class,
30+
instrumentedPackages = {"com.onesignal"},
31+
sdk = 21)
32+
@RunWith(RobolectricTestRunner.class)
33+
public class OneSignalPrefsRunner {
34+
private static Activity blankActivity;
35+
36+
@BeforeClass // Runs only once, before any tests
37+
public static void setUpClass() {
38+
ShadowLog.stream = System.out;
39+
TestHelpers.beforeTestSuite();
40+
StaticResetHelper.saveStaticValues();
41+
}
42+
43+
@Before // Before each test
44+
public void beforeEachTest() {
45+
OneSignalPrefs.initializePool();
46+
ActivityController<BlankActivity> blankActivityController = Robolectric.buildActivity(BlankActivity.class).create();
47+
blankActivity = blankActivityController.get();
48+
}
49+
50+
@AfterClass
51+
public static void afterEverything() {
52+
StaticResetHelper.restSetStaticFields();
53+
}
54+
55+
@Test
56+
public void testNullContextDoesNotCrash() throws Exception {
57+
OneSignalPrefs.saveString(OneSignalPrefs.PREFS_ONESIGNAL,"key", "value");
58+
TestHelpers.flushBufferedSharedPrefs();
59+
}
60+
61+
@Test
62+
public void tesWriteWithNullContextAndSavesAfterSetting() throws Exception {
63+
OneSignalPrefs.saveString(OneSignalPrefs.PREFS_ONESIGNAL,"key", "value");
64+
TestHelpers.flushBufferedSharedPrefs();
65+
66+
OneSignal_setAppContext(blankActivity);
67+
TestHelpers.flushBufferedSharedPrefs();
68+
69+
final SharedPreferences prefs = blankActivity.getSharedPreferences(OneSignalPrefs.PREFS_ONESIGNAL, Context.MODE_PRIVATE);
70+
String value = prefs.getString("key", "");
71+
assertEquals(value, "value");
72+
}
73+
}

0 commit comments

Comments
 (0)