OSDN Git Service

Fixes to M permissions.
authorzafir <zafir@google.com>
Wed, 15 Jul 2015 08:14:10 +0000 (01:14 -0700)
committerAlan Newberger <alann@google.com>
Fri, 17 Jul 2015 20:13:35 +0000 (13:13 -0700)
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: 224427452247814422497152
Change-Id: I82e9125a46581db44aa61d4ee94aec5a820e9df0

src/com/android/camera/CameraActivity.java
src/com/android/camera/PermissionsActivity.java

index 1897b28..3997705 100644 (file)
@@ -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;
index 9d2708f..a3981ef 100644 (file)
@@ -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();
                     }
                 })