mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
aa5edca0e2
Summary: This diff migrates the usages Nullable and NonNull annotations to AndroidX instead of javax. The purpose of this change is to bring consistency in the annotations used by the core of RN Reviewed By: makovkastar Differential Revision: D16054504 fbshipit-source-id: 21d888854da088d2a14615a90d4dc058e5286b91
180 lines
5.5 KiB
Java
180 lines
5.5 KiB
Java
// Copyright (c) Facebook, Inc. and its affiliates.
|
|
|
|
// This source code is licensed under the MIT license found in the
|
|
// LICENSE file in the root directory of this source tree.
|
|
|
|
package com.facebook.react;
|
|
|
|
import android.annotation.TargetApi;
|
|
import android.app.Activity;
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.os.Build;
|
|
import android.os.Bundle;
|
|
import android.view.KeyEvent;
|
|
import androidx.annotation.Nullable;
|
|
import com.facebook.infer.annotation.Assertions;
|
|
import com.facebook.react.bridge.Callback;
|
|
import com.facebook.react.modules.core.PermissionListener;
|
|
|
|
/**
|
|
* Delegate class for {@link ReactActivity} and {@link ReactFragmentActivity}. You can subclass this
|
|
* to provide custom implementations for e.g. {@link #getReactNativeHost()}, if your Application
|
|
* class doesn't implement {@link ReactApplication}.
|
|
*/
|
|
public class ReactActivityDelegate {
|
|
|
|
private final @Nullable Activity mActivity;
|
|
private final @Nullable String mMainComponentName;
|
|
|
|
private @Nullable PermissionListener mPermissionListener;
|
|
private @Nullable Callback mPermissionsCallback;
|
|
private ReactDelegate mReactDelegate;
|
|
|
|
@Deprecated
|
|
public ReactActivityDelegate(Activity activity, @Nullable String mainComponentName) {
|
|
mActivity = activity;
|
|
mMainComponentName = mainComponentName;
|
|
}
|
|
|
|
public ReactActivityDelegate(ReactActivity activity, @Nullable String mainComponentName) {
|
|
mActivity = activity;
|
|
mMainComponentName = mainComponentName;
|
|
}
|
|
|
|
protected @Nullable Bundle getLaunchOptions() {
|
|
return null;
|
|
}
|
|
|
|
protected ReactRootView createRootView() {
|
|
return mReactDelegate.createRootView();
|
|
}
|
|
|
|
/**
|
|
* Get the {@link ReactNativeHost} used by this app. By default, assumes {@link
|
|
* Activity#getApplication()} is an instance of {@link ReactApplication} and calls {@link
|
|
* ReactApplication#getReactNativeHost()}. Override this method if your application class does not
|
|
* implement {@code ReactApplication} or you simply have a different mechanism for storing a
|
|
* {@code ReactNativeHost}, e.g. as a static field somewhere.
|
|
*/
|
|
protected ReactNativeHost getReactNativeHost() {
|
|
return ((ReactApplication) getPlainActivity().getApplication()).getReactNativeHost();
|
|
}
|
|
|
|
public ReactInstanceManager getReactInstanceManager() {
|
|
return mReactDelegate.getReactInstanceManager();
|
|
}
|
|
|
|
public String getMainComponentName() {
|
|
return mMainComponentName;
|
|
}
|
|
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
String mainComponentName = getMainComponentName();
|
|
mReactDelegate =
|
|
new ReactDelegate(
|
|
getPlainActivity(), getReactNativeHost(), mainComponentName, getLaunchOptions());
|
|
if (mMainComponentName != null) {
|
|
loadApp(mainComponentName);
|
|
}
|
|
}
|
|
|
|
protected void loadApp(String appKey) {
|
|
mReactDelegate.loadApp(appKey);
|
|
getPlainActivity().setContentView(mReactDelegate.getReactRootView());
|
|
}
|
|
|
|
protected void onPause() {
|
|
mReactDelegate.onHostPause();
|
|
}
|
|
|
|
protected void onResume() {
|
|
mReactDelegate.onHostResume();
|
|
|
|
if (mPermissionsCallback != null) {
|
|
mPermissionsCallback.invoke();
|
|
mPermissionsCallback = null;
|
|
}
|
|
}
|
|
|
|
protected void onDestroy() {
|
|
mReactDelegate.onHostDestroy();
|
|
}
|
|
|
|
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
|
mReactDelegate.onActivityResult(requestCode, resultCode, data, true);
|
|
}
|
|
|
|
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
|
if (getReactNativeHost().hasInstance()
|
|
&& getReactNativeHost().getUseDeveloperSupport()
|
|
&& keyCode == KeyEvent.KEYCODE_MEDIA_FAST_FORWARD) {
|
|
event.startTracking();
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public boolean onKeyUp(int keyCode, KeyEvent event) {
|
|
return mReactDelegate.shouldShowDevMenuOrReload(keyCode, event);
|
|
}
|
|
|
|
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
|
|
if (getReactNativeHost().hasInstance()
|
|
&& getReactNativeHost().getUseDeveloperSupport()
|
|
&& keyCode == KeyEvent.KEYCODE_MEDIA_FAST_FORWARD) {
|
|
getReactNativeHost().getReactInstanceManager().showDevOptionsDialog();
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public boolean onBackPressed() {
|
|
return mReactDelegate.onBackPressed();
|
|
}
|
|
|
|
public boolean onNewIntent(Intent intent) {
|
|
if (getReactNativeHost().hasInstance()) {
|
|
getReactNativeHost().getReactInstanceManager().onNewIntent(intent);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public void onWindowFocusChanged(boolean hasFocus) {
|
|
if (getReactNativeHost().hasInstance()) {
|
|
getReactNativeHost().getReactInstanceManager().onWindowFocusChange(hasFocus);
|
|
}
|
|
}
|
|
|
|
@TargetApi(Build.VERSION_CODES.M)
|
|
public void requestPermissions(
|
|
String[] permissions, int requestCode, PermissionListener listener) {
|
|
mPermissionListener = listener;
|
|
getPlainActivity().requestPermissions(permissions, requestCode);
|
|
}
|
|
|
|
public void onRequestPermissionsResult(
|
|
final int requestCode, final String[] permissions, final int[] grantResults) {
|
|
mPermissionsCallback =
|
|
new Callback() {
|
|
@Override
|
|
public void invoke(Object... args) {
|
|
if (mPermissionListener != null
|
|
&& mPermissionListener.onRequestPermissionsResult(
|
|
requestCode, permissions, grantResults)) {
|
|
mPermissionListener = null;
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
protected Context getContext() {
|
|
return Assertions.assertNotNull(mActivity);
|
|
}
|
|
|
|
protected Activity getPlainActivity() {
|
|
return ((Activity) getContext());
|
|
}
|
|
}
|