|
21 | 21 | import com.facebook.infer.annotation.Nullsafe; |
22 | 22 | import com.facebook.react.bridge.Callback; |
23 | 23 | import com.facebook.react.bridge.ReactContext; |
| 24 | +import com.facebook.react.common.LifecycleState; |
24 | 25 | import com.facebook.react.interfaces.fabric.ReactSurface; |
25 | 26 | import com.facebook.react.internal.featureflags.ReactNativeNewArchitectureFeatureFlags; |
26 | 27 | import com.facebook.react.modules.core.PermissionListener; |
@@ -248,14 +249,37 @@ public void requestPermissions( |
248 | 249 |
|
249 | 250 | public void onRequestPermissionsResult( |
250 | 251 | final int requestCode, final String[] permissions, final int[] grantResults) { |
251 | | - mPermissionsCallback = |
| 252 | + Callback permissionsCallback = |
252 | 253 | args -> { |
253 | 254 | if (mPermissionListener != null |
254 | 255 | && mPermissionListener.onRequestPermissionsResult( |
255 | 256 | requestCode, permissions, grantResults)) { |
256 | 257 | mPermissionListener = null; |
257 | 258 | } |
258 | 259 | }; |
| 260 | + |
| 261 | + LifecycleState lifecycle; |
| 262 | + if (isFabricEnabled()) { |
| 263 | + ReactHost reactHost = getReactHost(); |
| 264 | + lifecycle = reactHost != null ? reactHost.getLifecycleState() : LifecycleState.BEFORE_CREATE; |
| 265 | + } else { |
| 266 | + ReactNativeHost reactNativeHost = getReactNativeHost(); |
| 267 | + if (!reactNativeHost.hasInstance()) { |
| 268 | + lifecycle = LifecycleState.BEFORE_CREATE; |
| 269 | + } else { |
| 270 | + lifecycle = reactNativeHost.getReactInstanceManager().getLifecycleState(); |
| 271 | + } |
| 272 | + } |
| 273 | + |
| 274 | + // If the permission request didn't show a dialog to the user, we can call the callback |
| 275 | + // immediately. |
| 276 | + // Otherwise, we need to wait until onResume to call it. |
| 277 | + if (lifecycle == LifecycleState.RESUMED) { |
| 278 | + permissionsCallback.invoke(); |
| 279 | + return; |
| 280 | + } |
| 281 | + |
| 282 | + mPermissionsCallback = permissionsCallback; |
259 | 283 | } |
260 | 284 |
|
261 | 285 | protected Context getContext() { |
|
0 commit comments