diff --git a/OneSignalSDK/onesignal/src/main/java/com/onesignal/OneSignal.java b/OneSignalSDK/onesignal/src/main/java/com/onesignal/OneSignal.java index bc8d5b03e3..df6c83efbb 100644 --- a/OneSignalSDK/onesignal/src/main/java/com/onesignal/OneSignal.java +++ b/OneSignalSDK/onesignal/src/main/java/com/onesignal/OneSignal.java @@ -2395,22 +2395,6 @@ static void fireForegroundHandlers(OSNotificationController notificationControll * Method called when opening a notification */ static void handleNotificationOpen(final Activity context, final JSONArray data, @Nullable final String notificationId) { - // Delay call until remote params are set - if (taskRemoteController.shouldQueueTaskForInit(OSTaskRemoteController.HANDLE_NOTIFICATION_OPEN)) { - logger.error("Waiting for remote params. " + - "Moving " + OSTaskRemoteController.HANDLE_NOTIFICATION_OPEN + " operation to a pending queue."); - taskRemoteController.addTaskToQueue(new Runnable() { - @Override - public void run() { - if (appContext != null) { - logger.debug("Running " + OSTaskRemoteController.HANDLE_NOTIFICATION_OPEN + " operation from pending queue."); - handleNotificationOpen(context, data, notificationId); - } - } - }); - return; - } - // If applicable, check if the user provided privacy consent if (shouldLogUserPrivacyConsentErrorMessageForMethodName(null)) return; diff --git a/OneSignalSDK/onesignal/src/main/java/com/onesignal/OneSignalRemoteParams.java b/OneSignalSDK/onesignal/src/main/java/com/onesignal/OneSignalRemoteParams.java index 43c4224696..df6ca8aa24 100644 --- a/OneSignalSDK/onesignal/src/main/java/com/onesignal/OneSignalRemoteParams.java +++ b/OneSignalSDK/onesignal/src/main/java/com/onesignal/OneSignalRemoteParams.java @@ -139,9 +139,14 @@ public void run() { sleepTime = MAX_WAIT_BETWEEN_RETRIES; OneSignal.Log(OneSignal.LOG_LEVEL.INFO, "Failed to get Android parameters, trying again in " + (sleepTime / 1_000) + " seconds."); - OSUtils.sleep(sleepTime); - androidParamsRetries++; - makeAndroidParamsRequest(appId, userId, callback); + try { + Thread.sleep(sleepTime); + androidParamsRetries++; + makeAndroidParamsRequest(appId, userId, callback); + } catch (InterruptedException e) { + // Don't retry if something intentionally wants to stop this action + e.printStackTrace(); + } } }, "OS_PARAMS_REQUEST").start(); } diff --git a/OneSignalSDK/unittest/src/test/java/com/test/onesignal/MainOneSignalClassRunner.java b/OneSignalSDK/unittest/src/test/java/com/test/onesignal/MainOneSignalClassRunner.java index 18af9205eb..f030586d62 100644 --- a/OneSignalSDK/unittest/src/test/java/com/test/onesignal/MainOneSignalClassRunner.java +++ b/OneSignalSDK/unittest/src/test/java/com/test/onesignal/MainOneSignalClassRunner.java @@ -1077,6 +1077,25 @@ public void testOpeningLauncherActivity() throws Exception { assertNull(shadowOf(blankActivity).getNextStartedActivity()); } + @Test + public void testOpeningLauncherActivityWhenOffline() throws Exception { + ShadowOneSignalRestClient.failGetParams = true; + AddLauncherIntentFilter(); + + OneSignalInit(); + // This removes Activity from the unit test's state + assertNotNull(shadowOf(blankActivity).getNextStartedActivity()); + + // Background the app + blankActivityController.pause(); + + // Open a notification + OneSignal_handleNotificationOpen(blankActivity, new JSONArray("[{ \"alert\": \"Test Msg\", \"custom\": { \"i\": \"UUID\" } }]"), ONESIGNAL_NOTIFICATION_ID); + + // Ensure the app is foregrounded + assertNotNull(shadowOf(blankActivity).getNextStartedActivity()); + } + @Test public void testOpeningLaunchUrl() throws Exception { // First init run for appId to be saved