OSDN Git Service

Make preview visibility logic more robust.
authorSascha Haeberling <haeberling@google.com>
Thu, 13 Mar 2014 16:04:32 +0000 (09:04 -0700)
committerSascha Haeberling <haeberling@google.com>
Thu, 13 Mar 2014 16:06:43 +0000 (09:06 -0700)
  Bug: 13213657
  Bug: 13403920

Filmstrip and mode switcher are two separate entities so we need to
track their visibilities separately and derive preview visibility
from their joint state.

Change-Id: I24b810b6c2bb0ac4ec60678f92c36172242b7b1c

src/com/android/camera/CameraActivity.java

index 58f310d..890920a 100644 (file)
@@ -180,12 +180,15 @@ public class CameraActivity extends Activity
     private SettingsManager mSettingsManager;
 
     private ModeListView mModeListView;
+    private boolean mModeListVisible = false;
     private int mCurrentModeIndex;
     private CameraModule mCurrentModule;
     private ModuleManagerImpl mModuleManager;
     private FrameLayout mAboveFilmstripControlLayout;
     private FilmstripController mFilmstripController;
     private boolean mFilmstripVisible;
+    /** Whether the filmstrip fully covers the preview. */
+    private boolean mFilmstripCoversPreview = false;
     private int mResultCodeForTesting;
     private Intent mResultDataForTesting;
     private OnScreenHint mStorageHint;
@@ -503,10 +506,8 @@ public class CameraActivity extends Activity
                 @Override
                 public void onSwipeOutBegin() {
                     mActionBar.hide();
-                    if (mCurrentModule != null) {
-                        mCurrentModule
-                                .onPreviewVisibilityChanged(ModuleController.VISIBILITY_VISIBLE);
-                    }
+                    mFilmstripCoversPreview = false;
+                    updatePreviewVisibility();
                 }
 
                 @Override
@@ -525,10 +526,6 @@ public class CameraActivity extends Activity
                     mFilmstripVisible = true;
                     decrementPeekAnimPlayTimes();
                     updateUiByData(mFilmstripController.getCurrentId());
-                    if (mCurrentModule != null) {
-                        mCurrentModule
-                                .onPreviewVisibilityChanged(ModuleController.VISIBILITY_HIDDEN);
-                    }
                 }
 
                 @Override
@@ -680,6 +677,8 @@ public class CameraActivity extends Activity
                 mActionBar.hide();
             }
         }
+        mFilmstripCoversPreview = visible;
+        updatePreviewVisibility();
     }
 
     private void hideSessionProgress() {
@@ -1159,11 +1158,8 @@ public class CameraActivity extends Activity
         mModeListView.setVisibilityChangedListener(new ModeListVisibilityChangedListener() {
             @Override
             public void onVisibilityChanged(boolean visible) {
-                if (mCurrentModule != null) {
-                    int visibility = visible ? ModuleController.VISIBILITY_COVERED
-                            : ModuleController.VISIBILITY_VISIBLE;
-                    mCurrentModule.onPreviewVisibilityChanged(visibility);
-                }
+                mModeListVisible = visible;
+                updatePreviewVisibility();
             }
         });
 
@@ -1301,6 +1297,25 @@ public class CameraActivity extends Activity
         }
     }
 
+    /**
+     * Call this whenever the mode drawer or filmstrip change the visibility
+     * state.
+     */
+    private void updatePreviewVisibility() {
+        if (mCurrentModule == null) {
+            return;
+        }
+        int visibility;
+        if (mFilmstripCoversPreview) {
+            visibility = ModuleController.VISIBILITY_HIDDEN;
+        } else if (mModeListVisible){
+            visibility = ModuleController.VISIBILITY_COVERED;
+        } else {
+            visibility = ModuleController.VISIBILITY_VISIBLE;
+        }
+        mCurrentModule.onPreviewVisibilityChanged(visibility);
+    }
+
     private void setRotationAnimation() {
         int rotationAnimation = WindowManager.LayoutParams.ROTATION_ANIMATION_ROTATE;
         rotationAnimation = WindowManager.LayoutParams.ROTATION_ANIMATION_CROSSFADE;
@@ -1801,9 +1816,7 @@ public class CameraActivity extends Activity
     private void openModule(CameraModule module) {
         module.init(this, isSecureCamera(), isCaptureIntent());
         module.resume();
-        int visibility = mFilmstripVisible ? ModuleController.VISIBILITY_HIDDEN
-                : ModuleController.VISIBILITY_VISIBLE;
-        module.onPreviewVisibilityChanged(visibility);
+        updatePreviewVisibility();
     }
 
     private void closeModule(CameraModule module) {