diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2016-06-10 23:15:55 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-06-10 23:15:55 -0700 |
commit | 15aa5037cfcf185a2d6f37a777cc51fe3a48d341 (patch) | |
tree | 94a63057038ab419e0821806af12693b18ffeec2 | |
parent | 254cdab5fb736013ff556e0537a043b1026195c9 (diff) | |
parent | 6d944a1e422d70abc98ea20e708a4c9a72fab2ea (diff) | |
download | android_packages_apps_Snap-15aa5037cfcf185a2d6f37a777cc51fe3a48d341.tar.gz android_packages_apps_Snap-15aa5037cfcf185a2d6f37a777cc51fe3a48d341.tar.bz2 android_packages_apps_Snap-15aa5037cfcf185a2d6f37a777cc51fe3a48d341.zip |
Merge "SnapdragonCamera: Fixed M permission issue" into camera.lnx.1.0-dev.1.0
-rw-r--r-- | src/com/android/camera/CameraActivity.java | 53 | ||||
-rw-r--r-- | src/com/android/camera/CameraSettings.java | 2 | ||||
-rw-r--r-- | src/com/android/camera/PermissionsActivity.java | 21 |
3 files changed, 43 insertions, 33 deletions
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java index 96ec1b7e9..74bcf5d3d 100644 --- a/src/com/android/camera/CameraActivity.java +++ b/src/com/android/camera/CameraActivity.java @@ -146,9 +146,6 @@ public class CameraActivity extends Activity // This string is used for judge start activity from screenoff or not public static final String GESTURE_CAMERA_NAME = "com.android.camera.CameraGestureActivity"; - private static final int PERMISSIONS_ACTIVITY_REQUEST_CODE = 1; - private static final int PERMISSIONS_RESULT_CODE_OK = 0; - private static final int PERMISSIONS_RESULT_CODE_FAILED = 1; /** * Request code from an activity we started that indicated that we do not @@ -1383,8 +1380,7 @@ public class CameraActivity extends Activity @Override public void onCreate(Bundle state) { super.onCreate(state); - checkPermissions(); - if (!mHasCriticalPermissions) { + if (checkPermissions() || !mHasCriticalPermissions) { Log.v(TAG, "onCreate: Missing critical permissions."); finish(); return; @@ -1583,7 +1579,9 @@ public class CameraActivity extends Activity @Override public void onUserInteraction() { super.onUserInteraction(); - mCurrentModule.onUserInteraction(); + if (mCurrentModule != null) { + mCurrentModule.onUserInteraction(); + } } @Override @@ -1627,10 +1625,6 @@ public class CameraActivity extends Activity mIsEditActivityInProgress = false; } else { super.onActivityResult(requestCode, resultCode, data); - // Close the app if critical permissions are missing. - if (requestCode == PERMISSIONS_ACTIVITY_REQUEST_CODE && resultCode == PERMISSIONS_RESULT_CODE_FAILED) { - finish(); - } } } @@ -1644,12 +1638,13 @@ public class CameraActivity extends Activity /** * Checks if any of the needed Android runtime permissions are missing. * If they are, then launch the permissions activity under one of the following conditions: - * a) The permissions dialogs have not run yet. We will ask for permission only once. - * b) If the missing permissions are critical to the app running, we will display a fatal error dialog. + * a) If critical permissions are missing, display permission request again + * b) If non-critical permissions are missing, just display permission request once. * Critical permissions are: camera, microphone and storage. The app cannot run without them. * Non-critical permission is location. */ - private void checkPermissions() { + private boolean checkPermissions() { + boolean requestPermission = false; if (checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED && @@ -1661,17 +1656,24 @@ public class CameraActivity extends Activity if ((checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) || !mHasCriticalPermissions) { - Intent intent = new Intent(this, PermissionsActivity.class); - startActivity(intent); - finish(); - + final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); + boolean isRequestShown = prefs.getBoolean(CameraSettings.KEY_REQUEST_PERMISSION, false); + if(!isRequestShown || !mHasCriticalPermissions) { + Log.v(TAG, "Request permission"); + Intent intent = new Intent(this, PermissionsActivity.class); + startActivity(intent); + SharedPreferences.Editor editor = prefs.edit(); + editor.putBoolean(CameraSettings.KEY_REQUEST_PERMISSION, true); + editor.apply(); + requestPermission = true; + } } + return requestPermission; } @Override public void onResume() { - checkPermissions(); - if (!mHasCriticalPermissions) { + if (checkPermissions() || !mHasCriticalPermissions) { super.onResume(); Log.v(TAG, "onResume: Missing critical permissions."); finish(); @@ -1742,13 +1744,14 @@ public class CameraActivity extends Activity mWakeLock.release(); Log.d(TAG, "wake lock release"); } + if (mCursor != null) { + getContentResolver().unregisterContentObserver(mLocalImagesObserver); + getContentResolver().unregisterContentObserver(mLocalVideosObserver); + unregisterReceiver(mSDcardMountedReceiver); - getContentResolver().unregisterContentObserver(mLocalImagesObserver); - getContentResolver().unregisterContentObserver(mLocalVideosObserver); - unregisterReceiver(mSDcardMountedReceiver); - - mCursor.close(); - mCursor=null; + mCursor.close(); + mCursor=null; + } super.onDestroy(); } diff --git a/src/com/android/camera/CameraSettings.java b/src/com/android/camera/CameraSettings.java index 6c4247dd8..7a1cf8d74 100644 --- a/src/com/android/camera/CameraSettings.java +++ b/src/com/android/camera/CameraSettings.java @@ -251,6 +251,8 @@ public class CameraSettings { public static final String KEY_SHOW_MENU_HELP = "help_menu"; + public static final String KEY_REQUEST_PERMISSION = "request_permission"; + public static final String KEY_SELFIE_FLASH = "pref_selfie_flash_key"; public static final String EXPOSURE_DEFAULT_VALUE = "0"; diff --git a/src/com/android/camera/PermissionsActivity.java b/src/com/android/camera/PermissionsActivity.java index a55bdb258..1d6219195 100644 --- a/src/com/android/camera/PermissionsActivity.java +++ b/src/com/android/camera/PermissionsActivity.java @@ -8,6 +8,7 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; +import android.util.Log; import android.view.KeyEvent; import org.codeaurora.snapcam.R; @@ -18,8 +19,6 @@ public class PermissionsActivity extends Activity { private static final String TAG = "PermissionsActivity"; private static int PERMISSION_REQUEST_CODE = 1; - private static int RESULT_CODE_OK = 0; - private static int RESULT_CODE_FAILED = 1; private int mIndexPermissionRequestCamera; private int mIndexPermissionRequestMicrophone; @@ -33,6 +32,7 @@ public class PermissionsActivity extends Activity { private boolean mFlagHasCameraPermission; private boolean mFlagHasMicrophonePermission; private boolean mFlagHasStoragePermission; + private boolean mCriticalPermissionDenied; @Override protected void onCreate(Bundle savedInstanceState) { @@ -42,8 +42,12 @@ public class PermissionsActivity extends Activity { @Override protected void onResume() { super.onResume(); - mNumPermissionsToRequest = 0; - checkPermissions(); + if (!mCriticalPermissionDenied) { + mNumPermissionsToRequest = 0; + checkPermissions(); + } else { + mCriticalPermissionDenied = false; + } } private void checkPermissions() { @@ -107,7 +111,6 @@ public class PermissionsActivity extends Activity { permissionsToRequest[permissionsRequestIndex] = Manifest.permission.ACCESS_COARSE_LOCATION; mIndexPermissionRequestLocation = permissionsRequestIndex; } - requestPermissions(permissionsToRequest, PERMISSION_REQUEST_CODE); } @@ -119,21 +122,21 @@ public class PermissionsActivity extends Activity { if (grantResults[mIndexPermissionRequestCamera] == PackageManager.PERMISSION_GRANTED) { mFlagHasCameraPermission = true; } else { - handlePermissionsFailure(); + mCriticalPermissionDenied = true; } } if (mShouldRequestMicrophonePermission) { if (grantResults[mIndexPermissionRequestMicrophone] == PackageManager.PERMISSION_GRANTED) { mFlagHasMicrophonePermission = true; } else { - handlePermissionsFailure(); + mCriticalPermissionDenied = true; } } if (mShouldRequestStoragePermission) { if (grantResults[mIndexPermissionRequestStorage] == PackageManager.PERMISSION_GRANTED) { mFlagHasStoragePermission = true; } else { - handlePermissionsFailure(); + mCriticalPermissionDenied = true; } } @@ -147,6 +150,8 @@ public class PermissionsActivity extends Activity { if (mFlagHasCameraPermission && mFlagHasMicrophonePermission && mFlagHasStoragePermission) { handlePermissionsSuccess(); + } else if (mCriticalPermissionDenied) { + handlePermissionsFailure(); } } |