From ac0e2425e77a9b69e76d2f31876798825ea44584 Mon Sep 17 00:00:00 2001 From: zafir Date: Wed, 15 Jul 2015 01:14:10 -0700 Subject: 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 Change-Id: I82e9125a46581db44aa61d4ee94aec5a820e9df0 --- src/com/android/camera/CameraActivity.java | 24 +++++++++++------------- src/com/android/camera/PermissionsActivity.java | 5 ++--- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java index 1897b289b..3997705b3 100644 --- a/src/com/android/camera/CameraActivity.java +++ b/src/com/android/camera/CameraActivity.java @@ -1440,6 +1440,12 @@ public class CameraActivity extends QuickActivity mFeatureConfig = OneCameraFeatureConfigCreator.createDefault(getContentResolver(), getServices().getMemoryManager()); mFatalErrorHandler = new FatalErrorHandlerImpl(this); + checkPermissions(); + if (!mHasCriticalPermissions) { + Log.v(TAG, "onCreate: Missing critical permissions."); + finish(); + return; + } profile.mark(); if (!Glide.isSetup()) { Context context = getAndroidContext(); @@ -1621,6 +1627,8 @@ public class CameraActivity extends QuickActivity mCurrentModule.init(this, isSecureCamera(), isCaptureIntent()); profile.mark("Init CurrentModule"); + preloadFilmstripItems(); + setupNfcBeamPush(); mLocalImagesObserver = new FilmstripContentObserver(); @@ -1850,7 +1858,8 @@ public class CameraActivity extends QuickActivity mPaused = false; checkPermissions(); if (!mHasCriticalPermissions) { - Log.v(TAG, "Missing critical permissions."); + Log.v(TAG, "onResume: Missing critical permissions."); + finish(); return; } if (!mSecureCamera) { @@ -1897,18 +1906,8 @@ public class CameraActivity extends QuickActivity !mSettingsManager.getBoolean(SettingsManager.SCOPE_GLOBAL, Keys.KEY_HAS_SEEN_PERMISSIONS_DIALOGS)) || !mHasCriticalPermissions) { Intent intent = new Intent(this, PermissionsActivity.class); - startActivityForResult(intent, PERMISSIONS_ACTIVITY_REQUEST_CODE); - } - } - - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - // Close the app if critical permissions are missing. - if (requestCode == PERMISSIONS_ACTIVITY_REQUEST_CODE && resultCode == PERMISSIONS_RESULT_CODE_FAILED) { + startActivity(intent); finish(); - } else if (requestCode == PERMISSIONS_ACTIVITY_REQUEST_CODE && resultCode == PERMISSIONS_RESULT_CODE_OK) { - mHasCriticalPermissions = true; } } @@ -1964,7 +1963,6 @@ public class CameraActivity extends QuickActivity Profile profile = mProfiler.create("CameraActivity.resume").start(); CameraPerformanceTracker.onEvent(CameraPerformanceTracker.ACTIVITY_RESUME); Log.v(TAG, "Build info: " + Build.DISPLAY); - preloadFilmstripItems(); updateStorageSpaceAndHint(null); mLastLayoutOrientation = getResources().getConfiguration().orientation; diff --git a/src/com/android/camera/PermissionsActivity.java b/src/com/android/camera/PermissionsActivity.java index 9d2708fd0..a3981ef0f 100644 --- a/src/com/android/camera/PermissionsActivity.java +++ b/src/com/android/camera/PermissionsActivity.java @@ -214,7 +214,8 @@ public class PermissionsActivity extends QuickActivity { } private void handlePermissionsSuccess() { - setResult(RESULT_CODE_OK, null); + Intent intent = new Intent(this, CameraActivity.class); + startActivity(intent); finish(); } @@ -226,7 +227,6 @@ public class PermissionsActivity extends QuickActivity { @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { - setResult(RESULT_CODE_FAILED, null); finish(); } return true; @@ -236,7 +236,6 @@ public class PermissionsActivity extends QuickActivity { new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - setResult(RESULT_CODE_FAILED, null); finish(); } }) -- cgit v1.2.3