diff options
author | junjiez <junjiez@codeaurora.org> | 2016-08-10 15:43:48 +0800 |
---|---|---|
committer | junjiez <junjiez@codeaurora.org> | 2016-08-17 09:57:20 +0800 |
commit | 11c04b2688513382f3db00ec24c001d4845df531 (patch) | |
tree | cb1d905485c16d5032f94ea226562cb157ed03f2 /src | |
parent | bec67f460a2acb5d239ab5455a8eb0b8a66cfe23 (diff) | |
download | android_packages_apps_Snap-11c04b2688513382f3db00ec24c001d4845df531.tar.gz android_packages_apps_Snap-11c04b2688513382f3db00ec24c001d4845df531.tar.bz2 android_packages_apps_Snap-11c04b2688513382f3db00ec24c001d4845df531.zip |
SnapdragonCamera: fix crash when deny storage permission
The permission group of storage will not be granted automatically
by system when one permission in the group is granted and this
will only happen when device is not in default mode. So we need
to request both read and write storage permissions.
Change-Id: Id8ab4d2dd74a958c17fe3fab19bfe0a61909a602
CRs-Fixed: 1051976
Diffstat (limited to 'src')
-rw-r--r--[-rwxr-xr-x] | src/com/android/camera/CameraActivity.java | 11 | ||||
-rw-r--r-- | src/com/android/camera/PermissionsActivity.java | 39 |
2 files changed, 36 insertions, 14 deletions
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java index 5666331fa..ebc52c6c6 100755..100644 --- a/src/com/android/camera/CameraActivity.java +++ b/src/com/android/camera/CameraActivity.java @@ -1665,9 +1665,14 @@ public class CameraActivity extends Activity private boolean checkPermissions() { boolean requestPermission = false; - if (checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED && - checkSelfPermission(Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED && - checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { + if (checkSelfPermission(Manifest.permission.CAMERA) == + PackageManager.PERMISSION_GRANTED && + checkSelfPermission(Manifest.permission.RECORD_AUDIO) == + PackageManager.PERMISSION_GRANTED && + checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == + PackageManager.PERMISSION_GRANTED && + checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == + PackageManager.PERMISSION_GRANTED) { mHasCriticalPermissions = true; } else { mHasCriticalPermissions = false; diff --git a/src/com/android/camera/PermissionsActivity.java b/src/com/android/camera/PermissionsActivity.java index c5e43e56d..36c061582 100644 --- a/src/com/android/camera/PermissionsActivity.java +++ b/src/com/android/camera/PermissionsActivity.java @@ -23,7 +23,8 @@ public class PermissionsActivity extends Activity { private int mIndexPermissionRequestCamera; private int mIndexPermissionRequestMicrophone; private int mIndexPermissionRequestLocation; - private int mIndexPermissionRequestStorage; + private int mIndexPermissionRequestStorageWrite; + private int mIndexPermissionRequestStorageRead; private boolean mShouldRequestCameraPermission; private boolean mShouldRequestMicrophonePermission; private boolean mShouldRequestLocationPermission; @@ -68,8 +69,10 @@ public class PermissionsActivity extends Activity { } if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) + != PackageManager.PERMISSION_GRANTED || + checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { - mNumPermissionsToRequest++; + mNumPermissionsToRequest = mNumPermissionsToRequest + 2; mShouldRequestStoragePermission = true; } else { mFlagHasStoragePermission = true; @@ -103,12 +106,19 @@ public class PermissionsActivity extends Activity { permissionsRequestIndex++; } if (mShouldRequestStoragePermission) { - permissionsToRequest[permissionsRequestIndex] = Manifest.permission.WRITE_EXTERNAL_STORAGE; - mIndexPermissionRequestStorage = permissionsRequestIndex; + permissionsToRequest[permissionsRequestIndex] = + Manifest.permission.WRITE_EXTERNAL_STORAGE; + mIndexPermissionRequestStorageWrite = permissionsRequestIndex; + permissionsRequestIndex++; + permissionsToRequest[permissionsRequestIndex] = + Manifest.permission.READ_EXTERNAL_STORAGE; + mIndexPermissionRequestStorageRead = permissionsRequestIndex; permissionsRequestIndex++; + } if (mShouldRequestLocationPermission) { - permissionsToRequest[permissionsRequestIndex] = Manifest.permission.ACCESS_COARSE_LOCATION; + permissionsToRequest[permissionsRequestIndex] = + Manifest.permission.ACCESS_COARSE_LOCATION; mIndexPermissionRequestLocation = permissionsRequestIndex; } requestPermissions(permissionsToRequest, PERMISSION_REQUEST_CODE); @@ -120,7 +130,8 @@ public class PermissionsActivity extends Activity { if (mShouldRequestCameraPermission) { if ((grantResults.length >= mIndexPermissionRequestCamera + 1) && - (grantResults[mIndexPermissionRequestCamera] == PackageManager.PERMISSION_GRANTED)) { + (grantResults[mIndexPermissionRequestCamera] == + PackageManager.PERMISSION_GRANTED)) { mFlagHasCameraPermission = true; } else { mCriticalPermissionDenied = true; @@ -128,15 +139,19 @@ public class PermissionsActivity extends Activity { } if (mShouldRequestMicrophonePermission) { if ((grantResults.length >= mIndexPermissionRequestMicrophone + 1) && - (grantResults[mIndexPermissionRequestMicrophone] == PackageManager.PERMISSION_GRANTED)) { + (grantResults[mIndexPermissionRequestMicrophone] == + PackageManager.PERMISSION_GRANTED)) { mFlagHasMicrophonePermission = true; } else { mCriticalPermissionDenied = true; } } if (mShouldRequestStoragePermission) { - if ((grantResults.length >= mIndexPermissionRequestStorage + 1) && - (grantResults[mIndexPermissionRequestStorage] == PackageManager.PERMISSION_GRANTED)) { + if ((grantResults.length >= mIndexPermissionRequestStorageRead + 1) && + (grantResults[mIndexPermissionRequestStorageWrite] == + PackageManager.PERMISSION_GRANTED) && + (grantResults[mIndexPermissionRequestStorageRead] == + PackageManager.PERMISSION_GRANTED)) { mFlagHasStoragePermission = true; } else { mCriticalPermissionDenied = true; @@ -145,14 +160,16 @@ public class PermissionsActivity extends Activity { if (mShouldRequestLocationPermission) { if ((grantResults.length >= mIndexPermissionRequestLocation + 1) && - (grantResults[mIndexPermissionRequestLocation] == PackageManager.PERMISSION_GRANTED)) { + (grantResults[mIndexPermissionRequestLocation] == + PackageManager.PERMISSION_GRANTED)) { // Do nothing } else { // Do nothing } } - if (mFlagHasCameraPermission && mFlagHasMicrophonePermission && mFlagHasStoragePermission) { + if (mFlagHasCameraPermission && mFlagHasMicrophonePermission && + mFlagHasStoragePermission) { handlePermissionsSuccess(); } else if (mCriticalPermissionDenied) { handlePermissionsFailure(); |