summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-06-10 23:15:55 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2016-06-10 23:15:55 -0700
commit15aa5037cfcf185a2d6f37a777cc51fe3a48d341 (patch)
tree94a63057038ab419e0821806af12693b18ffeec2
parent254cdab5fb736013ff556e0537a043b1026195c9 (diff)
parent6d944a1e422d70abc98ea20e708a4c9a72fab2ea (diff)
downloadandroid_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.java53
-rw-r--r--src/com/android/camera/CameraSettings.java2
-rw-r--r--src/com/android/camera/PermissionsActivity.java21
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();
}
}