diff options
| author | Chao Zhang <chaoz@codeaurora.org> | 2016-04-07 20:55:03 +0800 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-04-07 06:16:05 -0700 |
| commit | 0404c64f4f6111aca426dab241a144466e888edd (patch) | |
| tree | b1a36dee125d71732dfdaa3b5c2fdd5b4e2f075a /src | |
| parent | 486c32c42f7113e4bebc968d9a8e16b6f2f82eaf (diff) | |
| download | android_packages_apps_Gallery2-0404c64f4f6111aca426dab241a144466e888edd.tar.gz android_packages_apps_Gallery2-0404c64f4f6111aca426dab241a144466e888edd.tar.bz2 android_packages_apps_Gallery2-0404c64f4f6111aca426dab241a144466e888edd.zip | |
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
Diffstat (limited to 'src')
| -rw-r--r-- | src/com/android/gallery3d/app/GalleryActivity.java | 49 |
1 files changed, 41 insertions, 8 deletions
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<String> permissionList = new ArrayList<String>(); + 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; |
