Skip to content

Commit 7b91516

Browse files
author
Rodrigo Gomez Palacio
authored
Merge pull request #1424 from OneSignal/message-view-bug-fix
Add synchronization to to fix possible race condition
2 parents f43b983 + e22f1b6 commit 7b91516

File tree

1 file changed

+25
-14
lines changed

1 file changed

+25
-14
lines changed

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

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class WebViewManager extends ActivityLifecycleHandler.ActivityAvailableListener
3838
private static final String TAG = WebViewManager.class.getCanonicalName();
3939
private static final int MARGIN_PX_SIZE = dpToPx(24);
4040
private static final int IN_APP_MESSAGE_INIT_DELAY = 200;
41+
private final Object messageViewSyncLock = new Object() {};
4142

4243
enum Position {
4344
TOP_BANNER,
@@ -343,23 +344,25 @@ void stopped(@NonNull Activity activity) {
343344
void lostFocus() {
344345
OneSignal.getInAppMessageController().messageWasDismissedByBackPress(message);
345346
removeActivityListener();
346-
messageView = null;
347+
setMessageView(null);
347348
}
348349

349350
private void showMessageView(@Nullable Integer newHeight) {
350-
if (messageView == null) {
351-
OneSignal.Log(OneSignal.LOG_LEVEL.WARN, "No messageView found to update a with a new height.");
352-
return;
353-
}
351+
synchronized (messageViewSyncLock) {
352+
if (messageView == null) {
353+
OneSignal.Log(OneSignal.LOG_LEVEL.WARN, "No messageView found to update a with a new height.");
354+
return;
355+
}
354356

355-
OneSignal.Log(OneSignal.LOG_LEVEL.DEBUG, "In app message, showing first one with height: " + newHeight);
356-
messageView.setWebView(webView);
357-
if (newHeight != null) {
358-
lastPageHeight = newHeight;
359-
messageView.updateHeight(newHeight);
357+
OneSignal.Log(OneSignal.LOG_LEVEL.DEBUG, "In app message, showing first one with height: " + newHeight);
358+
messageView.setWebView(webView);
359+
if (newHeight != null) {
360+
lastPageHeight = newHeight;
361+
messageView.updateHeight(newHeight);
362+
}
363+
messageView.showView(activity);
364+
messageView.checkIfShouldDismiss();
360365
}
361-
messageView.showView(activity);
362-
messageView.checkIfShouldDismiss();
363366
}
364367

365368
@SuppressLint({"SetJavaScriptEnabled", "AddJavascriptInterface"})
@@ -405,9 +408,16 @@ private void setWebViewToMaxSize(Activity activity) {
405408
webView.layout(0,0, getWebViewMaxSizeX(activity), getWebViewMaxSizeY(activity));
406409
}
407410

411+
private void setMessageView(InAppMessageView view) {
412+
synchronized (messageViewSyncLock) {
413+
messageView = view;
414+
}
415+
}
416+
408417
private void createNewInAppMessageView(@NonNull Position displayLocation, int pageHeight, boolean dragToDismissDisabled) {
409418
lastPageHeight = pageHeight;
410-
messageView = new InAppMessageView(webView, displayLocation, pageHeight, message.getDisplayDuration(), dragToDismissDisabled);
419+
InAppMessageView newView = new InAppMessageView(webView, displayLocation, pageHeight, message.getDisplayDuration(), dragToDismissDisabled);
420+
setMessageView(newView);
411421
messageView.setMessageController(new InAppMessageView.InAppMessageViewListener() {
412422
@Override
413423
public void onMessageWasShown() {
@@ -469,7 +479,8 @@ protected void dismissAndAwaitNextMessage(@Nullable final OneSignalGenericCallba
469479
@Override
470480
public void onComplete() {
471481
dismissFired = false;
472-
messageView = null;
482+
setMessageView(null);
483+
473484
if (callback != null)
474485
callback.onComplete();
475486
}

0 commit comments

Comments
 (0)