From ce967c6fbe9ff7337cc95bdd93a0c08a0688769a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20Magalh=C3=A3es?= Date: Mon, 23 Oct 2017 23:24:30 -0700 Subject: [PATCH] Requesting permission results into ArrayIndexOutOfBoundsException MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Summary: Reported in Issue #15928 Fixing bug when permission showing dialog and user go to home and re-open minimized app. 1. Ask for permission 2. Minimize app (Press HomeButton) 3. Open app again via shortcut [ANDROID] [BUGFIX] [PermissionsModule.java] - Fixed bug when asked for permission Cause: java.lang.ArrayIndexOutOfBoundsException ยท length=0; index=0 Closes https://github.com/facebook/react-native/pull/16507 Differential Revision: D6133708 Pulled By: shergin fbshipit-source-id: 9c05d1d5d16fedf718ad5113df69a4df3af62013 --- .../react/modules/permissions/PermissionsModule.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/permissions/PermissionsModule.java b/ReactAndroid/src/main/java/com/facebook/react/modules/permissions/PermissionsModule.java index 6054964349d1c9..634dc89555fc05 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/modules/permissions/PermissionsModule.java +++ b/ReactAndroid/src/main/java/com/facebook/react/modules/permissions/PermissionsModule.java @@ -15,7 +15,6 @@ import android.os.Build; import android.os.Process; import android.util.SparseArray; - import com.facebook.react.bridge.Callback; import com.facebook.react.bridge.Promise; import com.facebook.react.bridge.ReactApplicationContext; @@ -27,7 +26,6 @@ import com.facebook.react.module.annotations.ReactModule; import com.facebook.react.modules.core.PermissionAwareActivity; import com.facebook.react.modules.core.PermissionListener; - import java.util.ArrayList; /** @@ -116,7 +114,7 @@ mRequestCode, new Callback() { @Override public void invoke(Object... args) { int[] results = (int[]) args[0]; - if (results[0] == PackageManager.PERMISSION_GRANTED) { + if (results.length > 0 && results[0] == PackageManager.PERMISSION_GRANTED) { promise.resolve(GRANTED); } else { PermissionAwareActivity activity = (PermissionAwareActivity) args[1]; @@ -175,7 +173,7 @@ public void invoke(Object... args) { PermissionAwareActivity activity = (PermissionAwareActivity) args[1]; for (int j = 0; j < permissionsToCheck.size(); j++) { String permission = permissionsToCheck.get(j); - if (results[j] == PackageManager.PERMISSION_GRANTED) { + if (results.length > 0 && results[j] == PackageManager.PERMISSION_GRANTED) { grantedPermissions.putString(permission, GRANTED); } else { if (activity.shouldShowRequestPermissionRationale(permission)) {