summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzafir <zafir@google.com>2015-07-15 01:14:10 -0700
committerJay Wang <jaywang@codeaurora.org>2016-06-02 16:47:25 -0700
commit7c97b9156018f544361c2d1685072f1a3d47251a (patch)
tree2f353bec36a9ae1b5cf444bf4d17633d11314708
parentf6ced59d086a755d6f720600181c023c29d202ca (diff)
downloadandroid_packages_apps_Snap-7c97b9156018f544361c2d1685072f1a3d47251a.tar.gz
android_packages_apps_Snap-7c97b9156018f544361c2d1685072f1a3d47251a.tar.bz2
android_packages_apps_Snap-7c97b9156018f544361c2d1685072f1a3d47251a.zip
Fixes to M permissions.
Previously, we called PermissionsActivity with startActivityForResult(). However, this creates race conditions as we check for permissions and the CameraActivity continues to operate. Now, we end CameraActivity and launch a new instance upon successful permissions resolution. We can also put the preload filmstrip logic back in its original place in onCreate. The checks for permissions happen in both onCreate and onResume. Bug: 22442745, 22478144, 22497152 CRs-Fixed: 1019847 Change-Id: I82e9125a46581db44aa61d4ee94aec5a820e9df0 (cherry picked from commit ac0e2425e77a9b69e76d2f31876798825ea44584)
-rw-r--r--src/com/android/camera/CameraActivity.java13
-rw-r--r--src/com/android/camera/PermissionsActivity.java20
2 files changed, 28 insertions, 5 deletions
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java
index 5f93bb93e..68c8e5b18 100644
--- a/src/com/android/camera/CameraActivity.java
+++ b/src/com/android/camera/CameraActivity.java
@@ -1383,6 +1383,11 @@ public class CameraActivity extends Activity
public void onCreate(Bundle state) {
super.onCreate(state);
checkPermissions();
+ if (!mHasCriticalPermissions) {
+ Log.v(TAG, "onCreate: Missing critical permissions.");
+ finish();
+ return;
+ }
// Check if this is in the secure camera mode.
Intent intent = getIntent();
String action = intent.getAction();
@@ -1655,15 +1660,19 @@ public class CameraActivity extends Activity
if ((checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) ||
!mHasCriticalPermissions) {
Intent intent = new Intent(this, PermissionsActivity.class);
- startActivityForResult(intent, PERMISSIONS_ACTIVITY_REQUEST_CODE);
+ startActivity(intent);
+ finish();
+
}
}
@Override
public void onResume() {
+ checkPermissions();
if (!mHasCriticalPermissions) {
super.onResume();
- Log.v(TAG, "Missing critical permissions.");
+ Log.v(TAG, "onResume: Missing critical permissions.");
+ finish();
return;
}
// Hide action bar first since we are in full screen mode first, and
diff --git a/src/com/android/camera/PermissionsActivity.java b/src/com/android/camera/PermissionsActivity.java
index f2d907c68..a55bdb258 100644
--- a/src/com/android/camera/PermissionsActivity.java
+++ b/src/com/android/camera/PermissionsActivity.java
@@ -2,10 +2,13 @@ package com.android.camera;
import android.Manifest;
import android.app.Activity;
+import android.app.Dialog;
import android.app.AlertDialog;
import android.content.DialogInterface;
+import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
+import android.view.KeyEvent;
import org.codeaurora.snapcam.R;
/**
@@ -148,17 +151,28 @@ public class PermissionsActivity extends Activity {
}
private void handlePermissionsSuccess() {
- setResult(RESULT_CODE_OK, null);
+ Intent intent = new Intent(this, CameraActivity.class);
+ startActivity(intent);
finish();
}
private void handlePermissionsFailure() {
new AlertDialog.Builder(this).setTitle(getResources().getString(R.string.camera_error_title))
.setMessage(getResources().getString(R.string.error_permissions))
- .setPositiveButton(getResources().getString(R.string.dialog_dismiss), new DialogInterface.OnClickListener() {
+ .setCancelable(false)
+ .setOnKeyListener(new Dialog.OnKeyListener() {
+ @Override
+ public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
+ if (keyCode == KeyEvent.KEYCODE_BACK) {
+ finish();
+ }
+ return true;
+ }
+ })
+ .setPositiveButton(getResources().getString(R.string.dialog_dismiss),
+ new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
- setResult(RESULT_CODE_FAILED, null);
finish();
}
})