summaryrefslogtreecommitdiffstats
path: root/src/com/android/camera
diff options
context:
space:
mode:
authorJay Wang <jaywang@codeaurora.org>2016-05-20 17:44:17 -0700
committerJay Wang <jaywang@codeaurora.org>2016-06-02 16:51:28 -0700
commit6d944a1e422d70abc98ea20e708a4c9a72fab2ea (patch)
treedaf5a5c007514e3e210f11b0c89925c5908210fe /src/com/android/camera
parent7c97b9156018f544361c2d1685072f1a3d47251a (diff)
downloadandroid_packages_apps_Snap-6d944a1e422d70abc98ea20e708a4c9a72fab2ea.tar.gz
android_packages_apps_Snap-6d944a1e422d70abc98ea20e708a4c9a72fab2ea.tar.bz2
android_packages_apps_Snap-6d944a1e422d70abc98ea20e708a4c9a72fab2ea.zip
SnapdragonCamera: Fixed M permission issue
- Resolved NPE while sending permission request - Made change to request non-critical permissions once only, but the critical permssions all th time. - Removed unused contant defines CRs-Fixed: 1019847 Change-Id: Ib997244cbcc041d86c094c7ee7a902bff56e92ad
Diffstat (limited to 'src/com/android/camera')
-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 68c8e5b18..f6e832e45 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
@@ -1382,8 +1379,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;
@@ -1581,7 +1577,9 @@ public class CameraActivity extends Activity
@Override
public void onUserInteraction() {
super.onUserInteraction();
- mCurrentModule.onUserInteraction();
+ if (mCurrentModule != null) {
+ mCurrentModule.onUserInteraction();
+ }
}
@Override
@@ -1625,10 +1623,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();
- }
}
}
@@ -1642,12 +1636,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 &&
@@ -1659,17 +1654,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();
@@ -1740,13 +1742,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 acf0f135b..4393c6225 100644
--- a/src/com/android/camera/CameraSettings.java
+++ b/src/com/android/camera/CameraSettings.java
@@ -255,6 +255,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();
}
}