diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactActivity.java b/ReactAndroid/src/main/java/com/facebook/react/ReactActivity.java index 75f2b694b..926b665e6 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactActivity.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactActivity.java @@ -9,6 +9,8 @@ package com.facebook.react; +import javax.annotation.Nullable; + import android.app.Activity; import android.content.Intent; import android.os.Bundle; @@ -35,7 +37,9 @@ public abstract class ReactActivity extends Activity * This is used to schedule rendering of the component. * e.g. "MoviesApp" */ - protected abstract String getMainComponentName(); + protected @Nullable String getMainComponentName() { + return null; + } /** * Called at construction time, override if you have a custom delegate implementation. @@ -120,4 +124,8 @@ public abstract class ReactActivity extends Activity protected final ReactInstanceManager getReactInstanceManager() { return mDelegate.getReactInstanceManager(); } + + protected final void loadApp(String appKey) { + mDelegate.loadApp(appKey); + } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactActivityDelegate.java b/ReactAndroid/src/main/java/com/facebook/react/ReactActivityDelegate.java index a5b0da68e..5afb72203 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactActivityDelegate.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactActivityDelegate.java @@ -33,19 +33,21 @@ public class ReactActivityDelegate { private final @Nullable Activity mActivity; private final @Nullable FragmentActivity mFragmentActivity; - private final String mMainComponentName; + private final @Nullable String mMainComponentName; private @Nullable ReactRootView mReactRootView; private @Nullable DoubleTapReloadRecognizer mDoubleTapReloadRecognizer; private @Nullable PermissionListener mPermissionListener; - public ReactActivityDelegate(Activity activity, String mainComponentName) { + public ReactActivityDelegate(Activity activity, @Nullable String mainComponentName) { mActivity = activity; mMainComponentName = mainComponentName; mFragmentActivity = null; } - public ReactActivityDelegate(FragmentActivity fragmentActivity, String mainComponentName) { + public ReactActivityDelegate( + FragmentActivity fragmentActivity, + @Nullable String mainComponentName) { mFragmentActivity = fragmentActivity; mMainComponentName = mainComponentName; mActivity = null; @@ -85,13 +87,22 @@ public class ReactActivityDelegate { } } + if (mMainComponentName != null) { + loadApp(mMainComponentName); + } + mDoubleTapReloadRecognizer = new DoubleTapReloadRecognizer(); + } + + protected void loadApp(String appKey) { + if (mReactRootView != null) { + throw new IllegalStateException("Cannot loadApp while app is already running."); + } mReactRootView = createRootView(); mReactRootView.startReactApplication( getReactNativeHost().getReactInstanceManager(), - mMainComponentName, + appKey, getLaunchOptions()); getPlainActivity().setContentView(mReactRootView); - mDoubleTapReloadRecognizer = new DoubleTapReloadRecognizer(); } protected void onPause() { diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactFragmentActivity.java b/ReactAndroid/src/main/java/com/facebook/react/ReactFragmentActivity.java index a966a29bd..9671b0a1d 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactFragmentActivity.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactFragmentActivity.java @@ -9,6 +9,8 @@ package com.facebook.react; +import javax.annotation.Nullable; + import android.content.Intent; import android.os.Bundle; import android.support.v4.app.FragmentActivity; @@ -36,7 +38,9 @@ public abstract class ReactFragmentActivity extends FragmentActivity implements * This is used to schedule rendering of the component. * e.g. "MoviesApp" */ - protected abstract String getMainComponentName(); + protected @Nullable String getMainComponentName() { + return null; + } /** * Called at construction time, override if you have a custom delegate implementation. @@ -121,4 +125,8 @@ public abstract class ReactFragmentActivity extends FragmentActivity implements protected final ReactInstanceManager getReactInstanceManager() { return mDelegate.getReactInstanceManager(); } + + protected final void loadApp(String appKey) { + mDelegate.loadApp(appKey); + } }