From 0404c64f4f6111aca426dab241a144466e888edd Mon Sep 17 00:00:00 2001 From: Chao Zhang Date: Thu, 7 Apr 2016 20:55:03 +0800 Subject: Gallery2: fix crash if disable gallery's storage permission in settings. GalleryActivity just request WRITE_EXTERNAL_STORAGE permission, so it will occur crash when need READ_EXTERNAL_STORAGE permission; Request both WRITE_EXTERNAL_STORAGE and READ_EXTERNAL_STORAGE permissions in GalleryActivity. Change-Id: I31cf37e231d152cfabaaf2ded0ac0d88f5b9bb8d CRs-Fixed: 997205 --- src/com/android/gallery3d/app/GalleryActivity.java | 49 ++++++++++++++++++---- 1 file changed, 41 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/com/android/gallery3d/app/GalleryActivity.java b/src/com/android/gallery3d/app/GalleryActivity.java index 9d9f92cff..f05528291 100644 --- a/src/com/android/gallery3d/app/GalleryActivity.java +++ b/src/com/android/gallery3d/app/GalleryActivity.java @@ -123,12 +123,8 @@ public final class GalleryActivity extends AbstractGalleryActivity implements On initView(); mSavedInstanceState = savedInstanceState; - if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) - != PackageManager.PERMISSION_GRANTED) { - requestPermissions(new String[] { - Manifest.permission.WRITE_EXTERNAL_STORAGE - }, PERMISSION_REQUEST_STORAGE); - } else { + + if (!needRequestStoragePermission()) { init(); } } @@ -152,8 +148,7 @@ public final class GalleryActivity extends AbstractGalleryActivity implements On int[] grantResults) { switch (requestCode) { case PERMISSION_REQUEST_STORAGE: { - if (grantResults.length > 0 - && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + if (checkPermissionGrantResults(grantResults)) { init(); } else { finish(); @@ -162,6 +157,44 @@ public final class GalleryActivity extends AbstractGalleryActivity implements On } } + private boolean needRequestStoragePermission() { + boolean needRequest = false; + String[] permissions = { + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.READ_EXTERNAL_STORAGE + }; + ArrayList permissionList = new ArrayList(); + for (String permission : permissions) { + if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) { + permissionList.add(permission); + needRequest = true; + } + } + + if (needRequest) { + int count = permissionList.size(); + if (count > 0) { + String[] permissionArray = new String[count]; + for (int i = 0; i < count; i++) { + permissionArray[i] = permissionList.get(i); + } + + requestPermissions(permissionArray, PERMISSION_REQUEST_STORAGE); + } + } + + return needRequest; + } + + private boolean checkPermissionGrantResults(int[] grantResults) { + for (int result : grantResults) { + if (result != PackageManager.PERMISSION_GRANTED) { + return false; + } + } + return true; + } + private static class ActionItem { public int action; public int title; -- cgit v1.2.3