From 6aa895b679cad466650a073d3e2b043c4aef748b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sa=C3=BAl=20Ibarra=20Corretg=C3=A9?= Date: Wed, 1 May 2019 16:02:42 +0200 Subject: [PATCH] android: attempt to fix assertion errors in ReactInstanceManager This is the main one: https://github.com/facebook/react-native/blob/df4e67fe75d781d1eb264128cadf079989542755/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java#L512 Why this happens is a mystery wrapped in an enigma. --- .../src/main/java/org/jitsi/meet/sdk/BaseReactView.java | 3 +-- .../org/jitsi/meet/sdk/JitsiMeetActivityDelegate.java | 9 ++++++++- .../org/jitsi/meet/sdk/ReactInstanceManagerHolder.java | 8 ++++---- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/BaseReactView.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/BaseReactView.java index b71a364b9..9917e38b0 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/BaseReactView.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/BaseReactView.java @@ -111,8 +111,7 @@ public abstract class BaseReactView setBackgroundColor(BACKGROUND_COLOR); - ReactInstanceManagerHolder.initReactInstanceManager( - ((Activity) context).getApplication()); + ReactInstanceManagerHolder.initReactInstanceManager((Activity)context); // Hook this BaseReactView into ExternalAPI. externalAPIScope = UUID.randomUUID().toString(); diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetActivityDelegate.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetActivityDelegate.java index 3567a32af..a0aa2b5af 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetActivityDelegate.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/JitsiMeetActivityDelegate.java @@ -25,6 +25,7 @@ import android.os.Build; import com.calendarevents.CalendarEventsPackage; import com.facebook.react.ReactInstanceManager; import com.facebook.react.bridge.Callback; +import com.facebook.react.bridge.ReactContext; import com.facebook.react.modules.core.PermissionListener; /** @@ -117,7 +118,13 @@ public class JitsiMeetActivityDelegate { = ReactInstanceManagerHolder.getReactInstanceManager(); if (reactInstanceManager != null) { - reactInstanceManager.onHostPause(activity); + // Try to avoid a crash because some devices trip on this assert: + // https://github.com/facebook/react-native/blob/df4e67fe75d781d1eb264128cadf079989542755/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java#L512 + // Why this happens is a mystery wrapped in an enigma. + ReactContext reactContext = reactInstanceManager.getCurrentReactContext(); + if (activity == reactContext.getCurrentActivity()) { + reactInstanceManager.onHostPause(activity); + } } } diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/ReactInstanceManagerHolder.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/ReactInstanceManagerHolder.java index 5fe1fcbf7..71677ecb1 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/ReactInstanceManagerHolder.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/ReactInstanceManagerHolder.java @@ -18,7 +18,6 @@ package org.jitsi.meet.sdk; import android.app.Activity; -import android.app.Application; import android.support.annotation.Nullable; import com.facebook.react.ReactInstanceManager; @@ -175,9 +174,9 @@ class ReactInstanceManagerHolder { * time. All {@code ReactRootView} instances will be tied to the one and * only {@code ReactInstanceManager}. * - * @param application {@code Application} instance which is running. + * @param activity {@code Activity} current running Activity. */ - static void initReactInstanceManager(Application application) { + static void initReactInstanceManager(Activity activity) { if (reactInstanceManager != null) { return; } @@ -215,7 +214,8 @@ class ReactInstanceManagerHolder { reactInstanceManager = ReactInstanceManager.builder() - .setApplication(application) + .setApplication(activity.getApplication()) + .setCurrentActivity(activity) .setBundleAssetName("index.android.bundle") .setJSMainModulePath("index.android") .addPackages(packages)