Skip to content

Commit

Permalink
Add a requestPermission call immediately after initWithContext to ens…
Browse files Browse the repository at this point in the history
…ure no crash in the manual test
  • Loading branch information
jinliu9508 committed Aug 2, 2024
1 parent e18e4b6 commit 4112dee
Showing 1 changed file with 16 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package com.onesignal.sdktest.application;

import android.annotation.SuppressLint;
import android.os.StrictMode;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.multidex.MultiDexApplication;

import com.onesignal.Continue;
import com.onesignal.OneSignal;
import com.onesignal.inAppMessages.IInAppMessageClickListener;
import com.onesignal.inAppMessages.IInAppMessageClickEvent;
Expand All @@ -28,8 +29,10 @@
import com.onesignal.user.state.IUserStateObserver;
import com.onesignal.user.state.UserChangedState;
import com.onesignal.user.state.UserState;

import org.json.JSONObject;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class MainApplication extends MultiDexApplication {
private static final int SLEEP_TIME_TO_MIMIC_ASYNC_OPERATION = 2000;
Expand All @@ -40,6 +43,7 @@ public MainApplication() {
StrictMode.enableDefaults();
}

@SuppressLint("NewApi")
@Override
public void onCreate() {
super.onCreate();
Expand All @@ -54,8 +58,18 @@ public void onCreate() {
}

OneSignalNotificationSender.setAppId(appId);

OneSignal.initWithContext(this, appId);

// Ensure calling requestPermission in a thread right after initWithContext does not crash
// This will reproduce result similar to Kotlin CouroutineScope.launch{}, which may potentially crash the app
ExecutorService executor = Executors.newSingleThreadExecutor();
@SuppressLint({"NewApi", "LocalSuppress"}) CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
OneSignal.getNotifications().requestPermission(true, Continue.none());
}, executor);
future.join(); // Waits for the task to complete
executor.shutdown();

OneSignal.getInAppMessages().addLifecycleListener(new IInAppMessageLifecycleListener() {
@Override
public void onWillDisplay(@NonNull IInAppMessageWillDisplayEvent event) {
Expand Down

0 comments on commit 4112dee

Please sign in to comment.