Skip to content

Commit b780f7c

Browse files
committed
Simulate model adding while model is loading
1 parent e311bf1 commit b780f7c

File tree

2 files changed

+21
-0
lines changed
  • Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/application
  • OneSignalSDK/onesignal/core/src/main/java/com/onesignal/common/modeling

2 files changed

+21
-0
lines changed

Examples/OneSignalDemo/app/src/main/java/com/onesignal/sdktest/application/MainApplication.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.onesignal.sdktest.application;
22

33
import android.annotation.SuppressLint;
4+
import android.os.Handler;
5+
import android.os.Looper;
46
import android.os.StrictMode;
57
import android.util.Log;
68
import androidx.annotation.NonNull;
@@ -61,6 +63,17 @@ public void onCreate() {
6163

6264
OneSignal.initWithContext(this, appId);
6365

66+
67+
final Handler handler = new Handler(Looper.getMainLooper());
68+
handler.postDelayed(new Runnable() {
69+
@Override
70+
public void run() {
71+
// addTag after 100 ms to reliably accessing the operation model store AFTER the loading
72+
OneSignal.getUser().removeTag("tag");
73+
OneSignal.getUser().addTag("tag", "test");
74+
}
75+
}, 100);
76+
6477
// Ensure calling requestPermission in a thread right after initWithContext does not crash
6578
// This will reproduce result similar to Kotlin CouroutineScope.launch{}, which may potentially crash the app
6679
ExecutorService executor = Executors.newSingleThreadExecutor();

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/common/modeling/Model.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ package com.onesignal.common.modeling
22

33
import com.onesignal.common.events.EventProducer
44
import com.onesignal.common.events.IEventNotifier
5+
import com.onesignal.debug.LogLevel
6+
import com.onesignal.debug.internal.logging.Logging
7+
import com.onesignal.user.internal.operations.LoginUserOperation
58
import org.json.JSONArray
69
import org.json.JSONObject
710
import java.math.BigDecimal
@@ -81,6 +84,11 @@ open class Model(
8184
fun initializeFromJson(jsonObject: JSONObject) {
8285
synchronized(data) {
8386
data.clear()
87+
if (this is LoginUserOperation) {
88+
// loading operationModelStore will get stuck for 15 seconds while locking data
89+
Logging.log(LogLevel.DEBUG, "initializeFromJson LoginUserOperation")
90+
Thread.sleep(15000)
91+
}
8492
for (property in jsonObject.keys()) {
8593
val jsonValue = jsonObject.get(property)
8694
if (jsonValue is JSONObject) {

0 commit comments

Comments
 (0)