OSDN Git Service

Merge "Reduce max size of bitmap returned by crop dialog." into gb-ub-photos-bryce
[android-x86/packages-apps-Camera2.git] / src / com / android / camera / PhotoUI.java
index 9959964..5a7b5bf 100644 (file)
@@ -20,7 +20,6 @@ package com.android.camera;
 import android.hardware.Camera;
 import android.hardware.Camera.Face;
 import android.hardware.Camera.FaceDetectionListener;
-import android.hardware.Camera.Parameters;
 import android.util.Log;
 import android.view.Gravity;
 import android.view.MotionEvent;
@@ -32,7 +31,6 @@ import android.view.ViewGroup;
 import android.view.ViewStub;
 import android.widget.FrameLayout;
 import android.widget.FrameLayout.LayoutParams;
-import android.widget.ImageView;
 import android.widget.Toast;
 
 import com.android.camera.CameraPreference.OnPreferenceChangedListener;
@@ -56,7 +54,8 @@ public class PhotoUI implements PieListener,
     PreviewGestures.SingleTapListener,
     FocusUI,
     LocationManager.Listener,
-    FaceDetectionListener {
+    FaceDetectionListener,
+    PreviewGestures.SwipeListener {
 
     private static final String TAG = "CAM_UI";
 
@@ -82,13 +81,7 @@ public class PhotoUI implements PieListener,
     private View mBlocker;
     private PhotoMenu mMenu;
 
-    // Small indicators which show the camera settings in the viewfinder.
-    private ImageView mExposureIndicator;
-    private ImageView mFlashIndicator;
-    private ImageView mSceneIndicator;
-    private ImageView mHdrIndicator;
-    // A view group that contains all the small indicators.
-    private View mOnScreenIndicators;
+    private OnScreenIndicators mOnScreenIndicators;
 
     private PieRenderer mPieRenderer;
     private ZoomRenderer mZoomRenderer;
@@ -99,6 +92,7 @@ public class PhotoUI implements PieListener,
 
     private int mPreviewWidth = 0;
     private int mPreviewHeight = 0;
+    private View mPreviewThumb;
 
     private OnLayoutChangeListener mLayoutListener = new OnLayoutChangeListener() {
         @Override
@@ -114,6 +108,8 @@ public class PhotoUI implements PieListener,
                 h = width;
             }
             if (mPreviewWidth != w || mPreviewHeight != h) {
+                mPreviewWidth = w;
+                mPreviewHeight = h;
                 mController.onScreenSizeChanged(width, height, w, h);
             }
         }
@@ -141,7 +137,6 @@ public class PhotoUI implements PieListener,
             }
         }
 
-        mRootView.addOnLayoutChangeListener(mLayoutListener);
     }
 
     public View getRootView() {
@@ -149,11 +144,8 @@ public class PhotoUI implements PieListener,
     }
 
     private void initIndicators() {
-        mOnScreenIndicators = mActivity.findViewById(R.id.on_screen_indicators);
-        mExposureIndicator = (ImageView) mOnScreenIndicators.findViewById(R.id.menu_exposure_indicator);
-        mFlashIndicator = (ImageView) mOnScreenIndicators.findViewById(R.id.menu_flash_indicator);
-        mSceneIndicator = (ImageView) mOnScreenIndicators.findViewById(R.id.menu_scenemode_indicator);
-        mHdrIndicator = (ImageView) mOnScreenIndicators.findViewById(R.id.menu_hdr_indicator);
+        mOnScreenIndicators = new OnScreenIndicators(mActivity,
+                mActivity.findViewById(R.id.on_screen_indicators));
     }
 
     public void onCameraOpened(PreferenceGroup prefGroup, ComboPreferences prefs,
@@ -161,6 +153,7 @@ public class PhotoUI implements PieListener,
         if (mPieRenderer == null) {
             mPieRenderer = new PieRenderer(mActivity);
             mPieRenderer.setPieListener(this);
+            mRenderOverlay.addRenderer(mPieRenderer);
         }
         if (mMenu == null) {
             mMenu = new PhotoMenu(mActivity, this, mPieRenderer);
@@ -170,17 +163,18 @@ public class PhotoUI implements PieListener,
 
         if (mZoomRenderer == null) {
             mZoomRenderer = new ZoomRenderer(mActivity);
+            mRenderOverlay.addRenderer(mZoomRenderer);
         }
-        mRenderOverlay.addRenderer(mPieRenderer);
-        mRenderOverlay.addRenderer(mZoomRenderer);
         if (mGestures == null) {
             // this will handle gesture disambiguation and dispatching
-            mGestures = new PreviewGestures(mActivity, this, mZoomRenderer, mPieRenderer);
+            mGestures = new PreviewGestures(mActivity, this, mZoomRenderer, mPieRenderer,
+                    this);
         }
-        mGestures.clearTouchReceivers();
+        mGestures.reset();
         mGestures.setRenderOverlay(mRenderOverlay);
         mGestures.addTouchReceiver(mMenuButton);
-        mGestures.addTouchReceiver(mBlocker);
+        mGestures.addUnclickableArea(mBlocker);
+        enablePreviewThumb(false);
         // make sure to add touch targets for image capture
         if (mController.isImageCaptureIntent()) {
             if (mReviewCancelButton != null) {
@@ -193,23 +187,34 @@ public class PhotoUI implements PieListener,
         mRenderOverlay.requestLayout();
 
         initializeZoom(params);
-        updateOnScreenIndicators(params, prefs);
+        updateOnScreenIndicators(params, prefGroup, prefs);
+    }
+
+    private void openMenu() {
+        if (mPieRenderer != null) {
+            // If autofocus is not finished, cancel autofocus so that the
+            // subsequent touch can be handled by PreviewGestures
+            if (mController.getCameraState() == PhotoController.FOCUSING) {
+                    mController.cancelAutoFocus();
+            }
+            mPieRenderer.showInCenter();
+        }
     }
 
     public void initializeControlByIntent() {
         mBlocker = mActivity.findViewById(R.id.blocker);
+        mPreviewThumb = mActivity.findViewById(R.id.preview_thumb);
+        mPreviewThumb.setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                mActivity.gotoGallery();
+            }
+        });
         mMenuButton = mActivity.findViewById(R.id.menu);
         mMenuButton.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View v) {
-                if (mPieRenderer != null) {
-                    // If autofocus is not finished, cancel autofocus so that the
-                    // subsequent touch can be handled by PreviewGestures
-                    if (mController.getCameraState() == PhotoController.FOCUSING) {
-                            mController.cancelAutoFocus();
-                    }
-                    mPieRenderer.showInCenter();
-                }
+                openMenu();
             }
         });
         if (mController.isImageCaptureIntent()) {
@@ -251,6 +256,7 @@ public class PhotoUI implements PieListener,
         mShutterButton.setImageResource(R.drawable.btn_new_shutter);
         mShutterButton.setOnShutterButtonListener(mController);
         mShutterButton.setVisibility(View.VISIBLE);
+        mRootView.addOnLayoutChangeListener(mLayoutListener);
     }
 
     // called from onResume every other time
@@ -262,6 +268,7 @@ public class PhotoUI implements PieListener,
         if (mMenu != null) {
             mMenu.reloadPreferences();
         }
+        mRootView.addOnLayoutChangeListener(mLayoutListener);
     }
 
     public void initializeZoom(Camera.Parameters params) {
@@ -285,8 +292,10 @@ public class PhotoUI implements PieListener,
         }
     }
 
+    @Override
     public void showGpsOnScreenIndicator(boolean hasSignal) { }
 
+    @Override
     public void hideGpsOnScreenIndicator() { }
 
     public void overrideSettings(final String ... keyvalues) {
@@ -294,95 +303,28 @@ public class PhotoUI implements PieListener,
     }
 
     public void updateOnScreenIndicators(Camera.Parameters params,
-            ComboPreferences prefs) {
+            PreferenceGroup group, ComboPreferences prefs) {
         if (params == null) return;
-        updateSceneOnScreenIndicator(params.getSceneMode());
-        updateExposureOnScreenIndicator(params,
+        mOnScreenIndicators.updateSceneOnScreenIndicator(params.getSceneMode());
+        mOnScreenIndicators.updateExposureOnScreenIndicator(params,
                 CameraSettings.readExposure(prefs));
-        updateFlashOnScreenIndicator(params.getFlashMode());
-        updateHdrOnScreenIndicator(params.getSceneMode());
-    }
-
-    private void updateExposureOnScreenIndicator(Camera.Parameters params, int value) {
-        if (mExposureIndicator == null) {
-            return;
-        }
-        int id = 0;
-        float step = params.getExposureCompensationStep();
-        value = (int) Math.round(value * step);
-        switch(value) {
-        case -3:
-            id = R.drawable.ic_indicator_ev_n3;
-            break;
-        case -2:
-            id = R.drawable.ic_indicator_ev_n2;
-            break;
-        case -1:
-            id = R.drawable.ic_indicator_ev_n1;
-            break;
-        case 0:
-            id = R.drawable.ic_indicator_ev_0;
-            break;
-        case 1:
-            id = R.drawable.ic_indicator_ev_p1;
-            break;
-        case 2:
-            id = R.drawable.ic_indicator_ev_p2;
-            break;
-        case 3:
-            id = R.drawable.ic_indicator_ev_p3;
-            break;
-        }
-        mExposureIndicator.setImageResource(id);
-    }
-
-    private void updateFlashOnScreenIndicator(String value) {
-        if (mFlashIndicator == null) {
-            return;
-        }
-        if (value == null || Parameters.FLASH_MODE_OFF.equals(value)) {
-            mFlashIndicator.setImageResource(R.drawable.ic_indicator_flash_off);
-        } else {
-            if (Parameters.FLASH_MODE_AUTO.equals(value)) {
-                mFlashIndicator.setImageResource(R.drawable.ic_indicator_flash_auto);
-            } else if (Parameters.FLASH_MODE_ON.equals(value)) {
-                mFlashIndicator.setImageResource(R.drawable.ic_indicator_flash_on);
-            } else {
-                mFlashIndicator.setImageResource(R.drawable.ic_indicator_flash_off);
-            }
-        }
-    }
-
-    private void updateSceneOnScreenIndicator(String value) {
-        if (mSceneIndicator == null) {
-            return;
-        }
-        if ((value == null) || Parameters.SCENE_MODE_AUTO.equals(value)
-                || Parameters.SCENE_MODE_HDR.equals(value)) {
-            mSceneIndicator.setImageResource(R.drawable.ic_indicator_sce_off);
-        } else {
-            mSceneIndicator.setImageResource(R.drawable.ic_indicator_sce_on);
-        }
-    }
-
-    private void updateHdrOnScreenIndicator(String value) {
-        if (mHdrIndicator == null) {
-            return;
-        }
-        if ((value != null) && Parameters.SCENE_MODE_HDR.equals(value)) {
-            mHdrIndicator.setImageResource(R.drawable.ic_indicator_hdr_on);
-        } else {
-            mHdrIndicator.setImageResource(R.drawable.ic_indicator_hdr_off);
+        mOnScreenIndicators.updateFlashOnScreenIndicator(params.getFlashMode());
+        int wbIndex = 2;
+        ListPreference pref = group.findPreference(CameraSettings.KEY_WHITE_BALANCE);
+        if (pref != null) {
+            wbIndex = pref.getCurrentIndex();
         }
+        mOnScreenIndicators.updateWBIndicator(wbIndex);
+        boolean location = RecordLocationPreference.get(
+                prefs, mActivity.getContentResolver());
+        mOnScreenIndicators.updateLocationIndicator(location);
     }
 
     public void setCameraState(int state) {
     }
 
     public boolean dispatchTouchEvent(MotionEvent m) {
-        if (mPopup != null) {
-            return mActivity.superDispatchTouchEvent(m);
-        } else if (mGestures != null && mRenderOverlay != null) {
+        if (mGestures != null && mRenderOverlay != null) {
             return mGestures.dispatchTouch(m);
         }
         return false;
@@ -415,7 +357,7 @@ public class PhotoUI implements PieListener,
             mFaceView.setBlockDraw(!full);
         }
         if (mPopup != null) {
-            dismissPopup(false, full);
+            dismissPopup(full);
         }
         if (mGestures != null) {
             mGestures.setEnabled(full);
@@ -434,10 +376,20 @@ public class PhotoUI implements PieListener,
         if (!full && mCountDownView != null) mCountDownView.cancelCountDown();
     }
 
+    public void enablePreviewThumb(boolean enabled) {
+        if (enabled) {
+            mGestures.addTouchReceiver(mPreviewThumb);
+            mPreviewThumb.setVisibility(View.VISIBLE);
+        } else {
+            mGestures.removeTouchReceiver(mPreviewThumb);
+            mPreviewThumb.setVisibility(View.GONE);
+        }
+    }
+
     public boolean removeTopLevelPopup() {
         // Remove the top level popup or dialog box and return true if there's any
         if (mPopup != null) {
-            dismissPopup(true);
+            dismissPopup();
             return true;
         }
         return false;
@@ -453,23 +405,25 @@ public class PhotoUI implements PieListener,
                 LayoutParams.WRAP_CONTENT);
         lp.gravity = Gravity.CENTER;
         ((FrameLayout) mRootView).addView(mPopup, lp);
+        mGestures.addTouchReceiver(mPopup);
     }
 
-    public void dismissPopup(boolean topPopupOnly) {
-        dismissPopup(topPopupOnly, true);
+    public void dismissPopup() {
+        dismissPopup(true);
     }
 
-    private void dismissPopup(boolean topOnly, boolean fullScreen) {
+    private void dismissPopup(boolean fullScreen) {
         if (fullScreen) {
             mActivity.showUI();
             mBlocker.setVisibility(View.VISIBLE);
         }
         setShowMenu(fullScreen);
         if (mPopup != null) {
+            mGestures.removeTouchReceiver(mPopup);
             ((FrameLayout) mRootView).removeView(mPopup);
             mPopup = null;
         }
-        mMenu.popupDismissed(topOnly);
+        mMenu.popupDismissed();
     }
 
     public void onShowSwitcherPopup() {
@@ -491,7 +445,7 @@ public class PhotoUI implements PieListener,
         // Remove all the popups/dialog boxes
         boolean ret = false;
         if (mPopup != null) {
-            dismissPopup(false);
+            dismissPopup();
             ret = true;
         }
         return ret;
@@ -554,6 +508,7 @@ public class PhotoUI implements PieListener,
 
     @Override
     public void onPieOpened(int centerX, int centerY) {
+        dismissPopup();
         mActivity.cancelActivityTouchHandling();
         mActivity.setSwipingEnabled(false);
         if (mFaceView != null) {
@@ -676,7 +631,8 @@ public class PhotoUI implements PieListener,
 
     @Override
     public void clearFocus() {
-        getFocusIndicator().clear();
+        FocusIndicator indicator = getFocusIndicator();
+        if (indicator != null) indicator.clear();
     }
 
     @Override
@@ -722,4 +678,11 @@ public class PhotoUI implements PieListener,
         mFaceView.setFaces(faces);
     }
 
+    @Override
+    public void onSwipe(int direction) {
+        if (direction == PreviewGestures.DIR_UP) {
+            openMenu();
+        }
+    }
+
 }