Skip to content

Commit 4126313

Browse files
committed
Fixes IAM NPE with getDisplayPosition
* It is possible for messageView to become null if you dismissed the IAM then closed the Activity before the IAM animation finishes. Then if the IAM animation finishes before the next Activity is shown. * Fixed by adding a null check to calculateHeightAndShowWebViewAfterNewActivity as it is not require now that an IAM is no longer showing.
1 parent 1c443f5 commit 4126313

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,9 @@ private static int pageRectToViewHeight(final @NonNull Activity activity, @NonNu
239239
// Every time an Activity is shown we update the height of the WebView since the available
240240
// screen size may have changed. (Expect for Fullscreen)
241241
private void calculateHeightAndShowWebViewAfterNewActivity() {
242+
if (messageView == null)
243+
return;
244+
242245
// Don't need a CSS / HTML height update for fullscreen
243246
if (messageView.getDisplayPosition() == Position.FULL_SCREEN) {
244247
showMessageView(null);

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,26 @@ public void testMessageDismissingWhileDeviceIsRotating() throws Exception {
242242
assertTrue(OneSignalPackagePrivateHelper.isInAppMessageShowing());
243243
}
244244

245+
// This test reproduces https://github.com/OneSignal/OneSignal-Android-SDK/issues/1000
246+
@Test
247+
public void testMessageDismissingWhileNewActivityIsBeingStarted() throws Exception {
248+
initializeSdkWithMultiplePendingMessages();
249+
250+
// 1. Add trigger to show IAM
251+
OneSignal.addTriggers(new HashMap<String, Object>() {{
252+
put("test_2", 2);
253+
}});
254+
255+
// 2. Activity IAM is displaying over is dismissed
256+
blankActivityController.stop();
257+
258+
// 3. IAM is dismissed before a new Activity is shown
259+
OneSignalPackagePrivateHelper.WebViewManager.callDismissAndAwaitNextMessage();
260+
261+
// 4. An Activity put in to focus, successful we don't throw.
262+
blankActivityController.resume();
263+
}
264+
245265

246266
private void nextResponseMultiplePendingMessages() throws JSONException {
247267
final OSTestInAppMessage testFirstMessage = InAppMessagingHelpers.buildTestMessageWithSingleTrigger(OSTriggerKind.CUSTOM, "test_1", OSTestTrigger.OSTriggerOperator.EQUAL_TO.toString(), 3);

0 commit comments

Comments
 (0)