mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-04-29 04:35:36 +08:00
Hook up onActivityResult into react native and fb4a
Differential Revision: D2602975 fb-gh-sync-id: 3b81f059ee4dca2b63ce07304a552e9deaa28909
This commit is contained in:
committed by
facebook-github-bot-9
parent
97f9aa842c
commit
3ee3041d68
@@ -14,8 +14,10 @@ import javax.annotation.Nullable;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
import android.app.Application;
|
import android.app.Application;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
@@ -88,6 +90,7 @@ public class ReactInstanceManager {
|
|||||||
private final Context mApplicationContext;
|
private final Context mApplicationContext;
|
||||||
private @Nullable DefaultHardwareBackBtnHandler mDefaultBackButtonImpl;
|
private @Nullable DefaultHardwareBackBtnHandler mDefaultBackButtonImpl;
|
||||||
private String mSourceUrl;
|
private String mSourceUrl;
|
||||||
|
private @Nullable Activity mCurrentActivity;
|
||||||
|
|
||||||
private final ReactInstanceDevCommandsHandler mDevInterface =
|
private final ReactInstanceDevCommandsHandler mDevInterface =
|
||||||
new ReactInstanceDevCommandsHandler() {
|
new ReactInstanceDevCommandsHandler() {
|
||||||
@@ -317,6 +320,7 @@ public class ReactInstanceManager {
|
|||||||
mDevSupportManager.setDevSupportEnabled(false);
|
mDevSupportManager.setDevSupportEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mCurrentActivity = null;
|
||||||
if (mCurrentReactContext != null) {
|
if (mCurrentReactContext != null) {
|
||||||
mCurrentReactContext.onPause();
|
mCurrentReactContext.onPause();
|
||||||
}
|
}
|
||||||
@@ -333,7 +337,7 @@ public class ReactInstanceManager {
|
|||||||
* @param defaultBackButtonImpl a {@link DefaultHardwareBackBtnHandler} from an Activity that owns
|
* @param defaultBackButtonImpl a {@link DefaultHardwareBackBtnHandler} from an Activity that owns
|
||||||
* this instance of {@link ReactInstanceManager}.
|
* this instance of {@link ReactInstanceManager}.
|
||||||
*/
|
*/
|
||||||
public void onResume(DefaultHardwareBackBtnHandler defaultBackButtonImpl) {
|
public void onResume(Activity activity, DefaultHardwareBackBtnHandler defaultBackButtonImpl) {
|
||||||
UiThreadUtil.assertOnUiThread();
|
UiThreadUtil.assertOnUiThread();
|
||||||
|
|
||||||
mLifecycleState = LifecycleState.RESUMED;
|
mLifecycleState = LifecycleState.RESUMED;
|
||||||
@@ -343,8 +347,9 @@ public class ReactInstanceManager {
|
|||||||
mDevSupportManager.setDevSupportEnabled(true);
|
mDevSupportManager.setDevSupportEnabled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mCurrentActivity = activity;
|
||||||
if (mCurrentReactContext != null) {
|
if (mCurrentReactContext != null) {
|
||||||
mCurrentReactContext.onResume();
|
mCurrentReactContext.onResume(activity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -360,6 +365,12 @@ public class ReactInstanceManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
|
if (mCurrentReactContext != null) {
|
||||||
|
mCurrentReactContext.onActivityResult(requestCode, resultCode, data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void showDevOptionsDialog() {
|
public void showDevOptionsDialog() {
|
||||||
UiThreadUtil.assertOnUiThread();
|
UiThreadUtil.assertOnUiThread();
|
||||||
mDevSupportManager.showDevOptionsDialog();
|
mDevSupportManager.showDevOptionsDialog();
|
||||||
@@ -577,7 +588,7 @@ public class ReactInstanceManager {
|
|||||||
|
|
||||||
private void moveReactContextToCurrentLifecycleState(ReactApplicationContext reactContext) {
|
private void moveReactContextToCurrentLifecycleState(ReactApplicationContext reactContext) {
|
||||||
if (mLifecycleState == LifecycleState.RESUMED) {
|
if (mLifecycleState == LifecycleState.RESUMED) {
|
||||||
reactContext.onResume();
|
reactContext.onResume(mCurrentActivity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
// Copyright 2004-present Facebook. All Rights Reserved.
|
||||||
|
|
||||||
|
package com.facebook.react.bridge;
|
||||||
|
|
||||||
|
import android.content.Intent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Listener for receiving activity events.
|
||||||
|
*/
|
||||||
|
public interface ActivityEventListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when host (activity/service) receives an {@link Activity#onActivityResult} call.
|
||||||
|
*/
|
||||||
|
void onActivityResult(int requestCode, int resultCode, Intent data);
|
||||||
|
}
|
||||||
@@ -13,13 +13,16 @@ import javax.annotation.Nullable;
|
|||||||
|
|
||||||
import java.util.concurrent.CopyOnWriteArraySet;
|
import java.util.concurrent.CopyOnWriteArraySet;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.ContextWrapper;
|
import android.content.ContextWrapper;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
|
|
||||||
|
import com.facebook.infer.annotation.Assertions;
|
||||||
import com.facebook.react.bridge.queue.CatalystQueueConfiguration;
|
import com.facebook.react.bridge.queue.CatalystQueueConfiguration;
|
||||||
import com.facebook.react.bridge.queue.MessageQueueThread;
|
import com.facebook.react.bridge.queue.MessageQueueThread;
|
||||||
import com.facebook.infer.annotation.Assertions;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Abstract ContextWrapper for Android applicaiton or activity {@link Context} and
|
* Abstract ContextWrapper for Android applicaiton or activity {@link Context} and
|
||||||
@@ -29,6 +32,8 @@ public class ReactContext extends ContextWrapper {
|
|||||||
|
|
||||||
private final CopyOnWriteArraySet<LifecycleEventListener> mLifecycleEventListeners =
|
private final CopyOnWriteArraySet<LifecycleEventListener> mLifecycleEventListeners =
|
||||||
new CopyOnWriteArraySet<>();
|
new CopyOnWriteArraySet<>();
|
||||||
|
private final CopyOnWriteArraySet<ActivityEventListener> mActivityEventListeners =
|
||||||
|
new CopyOnWriteArraySet<>();
|
||||||
|
|
||||||
private @Nullable CatalystInstance mCatalystInstance;
|
private @Nullable CatalystInstance mCatalystInstance;
|
||||||
private @Nullable LayoutInflater mInflater;
|
private @Nullable LayoutInflater mInflater;
|
||||||
@@ -36,6 +41,7 @@ public class ReactContext extends ContextWrapper {
|
|||||||
private @Nullable MessageQueueThread mNativeModulesMessageQueueThread;
|
private @Nullable MessageQueueThread mNativeModulesMessageQueueThread;
|
||||||
private @Nullable MessageQueueThread mJSMessageQueueThread;
|
private @Nullable MessageQueueThread mJSMessageQueueThread;
|
||||||
private @Nullable NativeModuleCallExceptionHandler mNativeModuleCallExceptionHandler;
|
private @Nullable NativeModuleCallExceptionHandler mNativeModuleCallExceptionHandler;
|
||||||
|
private @Nullable Activity mCurrentActivity;
|
||||||
|
|
||||||
public ReactContext(Context base) {
|
public ReactContext(Context base) {
|
||||||
super(base);
|
super(base);
|
||||||
@@ -116,11 +122,20 @@ public class ReactContext extends ContextWrapper {
|
|||||||
mLifecycleEventListeners.remove(listener);
|
mLifecycleEventListeners.remove(listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addActivityEventListener(ActivityEventListener listener) {
|
||||||
|
mActivityEventListeners.add(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeActivityEventListener(ActivityEventListener listener) {
|
||||||
|
mActivityEventListeners.remove(listener);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Should be called by the hosting Fragment in {@link Fragment#onResume}
|
* Should be called by the hosting Fragment in {@link Fragment#onResume}
|
||||||
*/
|
*/
|
||||||
public void onResume() {
|
public void onResume(@Nullable Activity activity) {
|
||||||
UiThreadUtil.assertOnUiThread();
|
UiThreadUtil.assertOnUiThread();
|
||||||
|
mCurrentActivity = activity;
|
||||||
for (LifecycleEventListener listener : mLifecycleEventListeners) {
|
for (LifecycleEventListener listener : mLifecycleEventListeners) {
|
||||||
listener.onHostResume();
|
listener.onHostResume();
|
||||||
}
|
}
|
||||||
@@ -131,6 +146,7 @@ public class ReactContext extends ContextWrapper {
|
|||||||
*/
|
*/
|
||||||
public void onPause() {
|
public void onPause() {
|
||||||
UiThreadUtil.assertOnUiThread();
|
UiThreadUtil.assertOnUiThread();
|
||||||
|
mCurrentActivity = null;
|
||||||
for (LifecycleEventListener listener : mLifecycleEventListeners) {
|
for (LifecycleEventListener listener : mLifecycleEventListeners) {
|
||||||
listener.onHostPause();
|
listener.onHostPause();
|
||||||
}
|
}
|
||||||
@@ -149,6 +165,15 @@ public class ReactContext extends ContextWrapper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Should be called by the hosting Fragment in {@link Fragment#onActivityResult}
|
||||||
|
*/
|
||||||
|
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
|
for (ActivityEventListener listener : mActivityEventListeners) {
|
||||||
|
listener.onActivityResult(requestCode, resultCode, data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void assertOnUiQueueThread() {
|
public void assertOnUiQueueThread() {
|
||||||
Assertions.assertNotNull(mUiMessageQueueThread).assertIsOnThread();
|
Assertions.assertNotNull(mUiMessageQueueThread).assertIsOnThread();
|
||||||
}
|
}
|
||||||
@@ -199,4 +224,13 @@ public class ReactContext extends ContextWrapper {
|
|||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Same as {@link Activity#startActivityForResult(Intent, int)}, this just redirects the call to
|
||||||
|
* the current activity.
|
||||||
|
*/
|
||||||
|
public void startActivityForResult(Intent intent, int code, Bundle bundle) {
|
||||||
|
Assertions.assertNotNull(mCurrentActivity);
|
||||||
|
mCurrentActivity.startActivityForResult(intent, code, bundle);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user