summaryrefslogtreecommitdiffstats
path: root/src/com/android/camera/FocusOverlayManager.java
diff options
context:
space:
mode:
authorSanthosh Kumar H E <skhara@codeaurora.org>2013-12-05 16:36:52 +0530
committerSanthosh Kumar H E <skhara@codeaurora.org>2013-12-06 18:58:24 +0530
commitdbdb7620da136374eea95170261032f910015db0 (patch)
tree007242cdb44941ecb855751c85da69aa97cc6a43 /src/com/android/camera/FocusOverlayManager.java
parent1c7734057201ffd1b6d165d9e24793ef3d213043 (diff)
parentdf2b0819907c440a660e228414a18184732816d1 (diff)
downloadandroid_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.java42
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() {