diff options
author | Santhosh Kumar H E <skhara@codeaurora.org> | 2013-12-05 16:36:52 +0530 |
---|---|---|
committer | Santhosh Kumar H E <skhara@codeaurora.org> | 2013-12-06 18:58:24 +0530 |
commit | dbdb7620da136374eea95170261032f910015db0 (patch) | |
tree | 007242cdb44941ecb855751c85da69aa97cc6a43 /src/com/android/camera/FocusOverlayManager.java | |
parent | 1c7734057201ffd1b6d165d9e24793ef3d213043 (diff) | |
parent | df2b0819907c440a660e228414a18184732816d1 (diff) | |
download | android_packages_apps_Snap-dbdb7620da136374eea95170261032f910015db0.tar.gz android_packages_apps_Snap-dbdb7620da136374eea95170261032f910015db0.tar.bz2 android_packages_apps_Snap-dbdb7620da136374eea95170261032f910015db0.zip |
Merge remote-tracking branch into merge_branch
Delay onResume tasks to speed up lockscreen onResume->onPause->onResume launch sequence.
Import translations. DO NOT MERGE
gcam: Clean up placeholders, and add deletion robustness.
Fix issue of focus indicator staying on without being hidden
Ensure view size gets updated after phone decors change.
Show the 100% state of the progress at least one frame.
Add parameters and deduplicate parameter changes
Revert parallel opening camera in photo mode.
Differentiate the InProgressData from the normal PhotoData.
Close mode menus if another control is touched
Start gcam module directly when handling capture intent.
Import translations. DO NOT MERGE
Add a null check to fix NPE
Add logging to various actions
Ensure mOpenCameraThread has been setup before dereferencing.
Add logging to various actions
Ensure mOpenCameraThread has been setup before dereferencing.
Add GCam progress indicator.
hide preview cover on arrival of new preview data if hidden
Fix photo mode is getting stuck in a single CameraState.
...
Conflicts:
res/layout/photo_module.xml
res/values/arrays.xml
src/com/android/camera/CameraActivity.java
src/com/android/camera/PhotoUI.java
src/com/android/camera/Storage.java
src/com/android/camera/WideAnglePanoramaModule.java
src/com/android/camera/ui/FilmStripView.java
Change-Id: Ic41b4e7e07b2b0ed7936b78a6c5f05270d05985f
Diffstat (limited to 'src/com/android/camera/FocusOverlayManager.java')
-rw-r--r-- | src/com/android/camera/FocusOverlayManager.java | 42 |
1 files changed, 29 insertions, 13 deletions
diff --git a/src/com/android/camera/FocusOverlayManager.java b/src/com/android/camera/FocusOverlayManager.java index 37d632745..9558944c0 100644 --- a/src/com/android/camera/FocusOverlayManager.java +++ b/src/com/android/camera/FocusOverlayManager.java @@ -29,6 +29,7 @@ import android.os.Message; import android.util.Log; import com.android.camera.util.CameraUtil; +import com.android.camera.util.UsageStatistics; import java.util.ArrayList; import java.util.List; @@ -76,8 +77,6 @@ public class FocusOverlayManager { private boolean mAeAwbLock; private Matrix mMatrix; - private int mPreviewWidth; // The width of the preview frame layout. - private int mPreviewHeight; // The height of the preview frame layout. private boolean mMirror; // true if the camera is front-facing. private int mDisplayOrientation; private List<Object> mFocusArea; // focus area in driver format @@ -94,6 +93,7 @@ public class FocusOverlayManager { private boolean mZslEnabled = false; //QCom Parameter to disable focus for ZSL private FocusUI mUI; + private final Rect mPreviewRect = new Rect(0, 0, 0, 0); public interface FocusUI { public boolean hasFaces(); @@ -160,13 +160,25 @@ public class FocusOverlayManager { } public void setPreviewSize(int previewWidth, int previewHeight) { - if (mPreviewWidth != previewWidth || mPreviewHeight != previewHeight) { - mPreviewWidth = previewWidth; - mPreviewHeight = previewHeight; + if (mPreviewRect.width() != previewWidth || mPreviewRect.height() != previewHeight) { + setPreviewRect(new Rect(0, 0, previewWidth, previewHeight)); + } + } + + /** This setter should be the only way to mutate mPreviewRect. */ + public void setPreviewRect(Rect previewRect) { + if (!mPreviewRect.equals(previewRect)) { + mPreviewRect.set(previewRect); setMatrix(); } } + /** Returns a copy of mPreviewRect so that outside class cannot modify preview + * rect except deliberately doing so through the setter. */ + public Rect getPreviewRect() { + return new Rect(mPreviewRect); + } + public void setMirror(boolean mirror) { mMirror = mirror; setMatrix(); @@ -178,10 +190,9 @@ public class FocusOverlayManager { } private void setMatrix() { - if (mPreviewWidth != 0 && mPreviewHeight != 0) { + if (mPreviewRect.width() != 0 && mPreviewRect.height() != 0) { Matrix matrix = new Matrix(); - CameraUtil.prepareMatrix(matrix, mMirror, mDisplayOrientation, - mPreviewWidth, mPreviewHeight); + CameraUtil.prepareMatrix(matrix, mMirror, mDisplayOrientation, getPreviewRect()); // In face detection, the matrix converts the driver coordinates to UI // coordinates. In tap focus, the inverted matrix converts the UI // coordinates to driver coordinates. @@ -348,12 +359,15 @@ public class FocusOverlayManager { public void onSingleTapUp(int x, int y) { if (!mInitialized || mState == STATE_FOCUSING_SNAP_ON_FINISH) return; + UsageStatistics.onEvent(UsageStatistics.COMPONENT_CAMERA, + UsageStatistics.ACTION_TOUCH_FOCUS, x + "," + y); + // Let users be able to cancel previous touch focus. if ((!mFocusDefault) && (mState == STATE_FOCUSING || mState == STATE_SUCCESS || mState == STATE_FAIL)) { cancelAutoFocus(); } - if (mPreviewWidth == 0 || mPreviewHeight == 0) return; + if (mPreviewRect.width() == 0 || mPreviewRect.height() == 0) return; mFocusDefault = false; // Initialize mFocusArea. if (mFocusAreaSupported) { @@ -512,7 +526,7 @@ public class FocusOverlayManager { mMeteringArea = null; if (mFocusAreaSupported) { - initializeFocusAreas(mPreviewWidth / 2, mPreviewHeight / 2); + initializeFocusAreas(mPreviewRect.centerX(), mPreviewRect.centerY()); } // Reset metering area when no specific region is selected. if (mMeteringAreaSupported) { @@ -523,8 +537,10 @@ public class FocusOverlayManager { private void calculateTapArea(int x, int y, float areaMultiple, Rect rect) { int areaSize = (int) (getAreaSize() * areaMultiple); - int left = CameraUtil.clamp(x - areaSize / 2, 0, mPreviewWidth - areaSize); - int top = CameraUtil.clamp(y - areaSize / 2, 0, mPreviewHeight - areaSize); + int left = CameraUtil.clamp(x - areaSize / 2, mPreviewRect.left, + mPreviewRect.right - areaSize); + int top = CameraUtil.clamp(y - areaSize / 2, mPreviewRect.top, + mPreviewRect.bottom - areaSize); RectF rectF = new RectF(left, top, left + areaSize, top + areaSize); mMatrix.mapRect(rectF); @@ -534,7 +550,7 @@ public class FocusOverlayManager { private int getAreaSize() { // Recommended focus area size from the manufacture is 1/8 of the image // width (i.e. longer edge of the image) - return Math.max(mPreviewWidth, mPreviewHeight) / 8; + return Math.max(mPreviewRect.width(), mPreviewRect.height()) / 8; } /* package */ int getFocusState() { |