Skip to content

Commit 1c1850e

Browse files
authored
Merge pull request #2293 from OneSignal/fix/player-log-listener-concurrency
Player Model - Fix concurrency with modifying log listeners
2 parents f15ef19 + 16c9f6c commit 1c1850e

File tree

3 files changed

+49
-1
lines changed

3 files changed

+49
-1
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
import java.util.List;
7474
import java.util.Map;
7575
import java.util.TimeZone;
76+
import java.util.concurrent.CopyOnWriteArrayList;
7677

7778
import static com.onesignal.GenerateNotification.BUNDLE_KEY_ACTION_ID;
7879
import static com.onesignal.GenerateNotification.BUNDLE_KEY_ANDROID_NOTIFICATION_ID;
@@ -1348,7 +1349,7 @@ private static void callLogListeners(@NonNull final LOG_LEVEL level, @NonNull St
13481349
}
13491350
}
13501351

1351-
private static final List<OneSignalLogListener> logListeners = new ArrayList<>();
1352+
private static final List<OneSignalLogListener> logListeners = new CopyOnWriteArrayList<>();
13521353

13531354
public static void addLogListener(@NonNull OneSignalLogListener listener) {
13541355
logListeners.add(listener);

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,10 @@ public static boolean OneSignal_isInForeground() {
328328
return OneSignal.isInForeground();
329329
}
330330

331+
public static void OneSignal_Log(@NonNull OneSignal.LOG_LEVEL level, @NonNull String message) {
332+
OneSignal.Log(level,message);
333+
}
334+
331335
static public class OSSharedPreferencesWrapper extends com.onesignal.OSSharedPreferencesWrapper {}
332336

333337
static public class RemoteOutcomeParams extends OneSignalRemoteParams.InfluenceParams {

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

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@
9191
import com.onesignal.StaticResetHelper;
9292
import com.onesignal.SyncJobService;
9393
import com.onesignal.SyncService;
94+
import com.onesignal.debug.OneSignalLogEvent;
95+
import com.onesignal.debug.OneSignalLogListener;
9496
import com.onesignal.example.BlankActivity;
9597
import com.onesignal.example.MainActivity;
9698
import com.onesignal.influence.data.OSTrackerFactory;
@@ -133,6 +135,7 @@
133135
import static com.onesignal.OneSignalPackagePrivateHelper.FCMBroadcastReceiver_processBundle;
134136
import static com.onesignal.OneSignalPackagePrivateHelper.NotificationBundleProcessor_Process;
135137
import static com.onesignal.OneSignalPackagePrivateHelper.NotificationOpenedProcessor_processFromContext;
138+
import static com.onesignal.OneSignalPackagePrivateHelper.OneSignal_Log;
136139
import static com.onesignal.OneSignalPackagePrivateHelper.OneSignal_getSessionListener;
137140
import static com.onesignal.OneSignalPackagePrivateHelper.OneSignal_handleNotificationOpen;
138141
import static com.onesignal.OneSignalPackagePrivateHelper.OneSignal_isInForeground;
@@ -4167,6 +4170,46 @@ public void testAndroidManifestConfigChangeFlags_orientationFlag() throws Except
41674170
assertFalse(mainHasFlag);
41684171
}
41694172

4173+
// ####### Unit test log listener ########
4174+
@Test
4175+
public void testAddLogListener() {
4176+
final String[] lastMessage = new String[1];
4177+
OneSignal.addLogListener(event -> lastMessage[0] = event.getEntry());
4178+
4179+
OneSignal_Log(OneSignal.LOG_LEVEL.DEBUG, "test");
4180+
assertEquals(lastMessage[0], "test");
4181+
}
4182+
4183+
@Test
4184+
public void testRemoveLogListener() {
4185+
final String[] lastMessage = new String[1];
4186+
OneSignalLogListener listener = event -> lastMessage[0] = event.getEntry();
4187+
OneSignal.addLogListener(listener);
4188+
4189+
OneSignal.removeLogListener(listener);
4190+
OneSignal_Log(OneSignal.LOG_LEVEL.DEBUG, "test");
4191+
assertNull(lastMessage[0]);
4192+
}
4193+
4194+
@Test
4195+
public void testNestedAddLogListenerDoesNotThrow() {
4196+
OneSignalLogListener listener = event -> OneSignal.addLogListener(event2 -> {});
4197+
4198+
OneSignal.addLogListener(listener);
4199+
4200+
OneSignal_Log(OneSignal.LOG_LEVEL.DEBUG, "test");
4201+
}
4202+
4203+
@Test
4204+
public void testNestedRemoveLogListenerDoesNotThrow() {
4205+
final OneSignalLogListener[] listener = new OneSignalLogListener[1];
4206+
4207+
listener[0] = event -> OneSignal.removeLogListener(listener[0]);
4208+
OneSignal.addLogListener(listener[0]);
4209+
4210+
OneSignal_Log(OneSignal.LOG_LEVEL.DEBUG, "test");
4211+
}
4212+
41704213
// ####### Unit test helper methods ########
41714214

41724215
private static OSNotification createTestOSNotification() throws Exception {

0 commit comments

Comments
 (0)