summaryrefslogtreecommitdiffstats
path: root/src/com
diff options
context:
space:
mode:
authorKevin Gabayan <gabayan@google.com>2014-06-17 18:19:59 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2014-06-17 18:19:59 +0000
commit1ec930eb7cc0ef2b02e997833b712bd8b768bdf9 (patch)
tree4dfb80d75fadc9b78081f118e182e64da2863386 /src/com
parent55c14934415cecc0d816ad6ca035fdf317095d95 (diff)
parent09a46ccb10504579417609d2486dc28e92458bf7 (diff)
downloadandroid_packages_apps_Camera2-1ec930eb7cc0ef2b02e997833b712bd8b768bdf9.tar.gz
android_packages_apps_Camera2-1ec930eb7cc0ef2b02e997833b712bd8b768bdf9.tar.bz2
android_packages_apps_Camera2-1ec930eb7cc0ef2b02e997833b712bd8b768bdf9.zip
am 09a46ccb: Merge "MotionManager for motion-aware focus unlock in Camera2. Second revision. Bug: 14222601" into ub-camera-fishlake
* commit '09a46ccb10504579417609d2486dc28e92458bf7': MotionManager for motion-aware focus unlock in Camera2. Second revision. Bug: 14222601
Diffstat (limited to 'src/com')
-rw-r--r--src/com/android/camera/CameraActivity.java7
-rw-r--r--src/com/android/camera/FocusOverlayManager.java19
-rw-r--r--src/com/android/camera/PhotoModule.java5
-rw-r--r--src/com/android/camera/app/CameraApp.java10
-rw-r--r--src/com/android/camera/app/CameraServices.java6
5 files changed, 44 insertions, 3 deletions
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java
index 9a8fb0d18..37fb2638d 100644
--- a/src/com/android/camera/CameraActivity.java
+++ b/src/com/android/camera/CameraActivity.java
@@ -78,6 +78,7 @@ import com.android.camera.app.LocationManager;
import com.android.camera.app.MemoryManager;
import com.android.camera.app.MemoryQuery;
import com.android.camera.app.ModuleManagerImpl;
+import com.android.camera.app.MotionManager;
import com.android.camera.app.OrientationManager;
import com.android.camera.app.OrientationManagerImpl;
import com.android.camera.cameradevice.CameraManager;
@@ -253,6 +254,7 @@ public class CameraActivity extends Activity
}
};
private MemoryManager mMemoryManager;
+ private MotionManager mMotionManager;
@Override
public CameraAppUI getCameraAppUI() {
@@ -1385,6 +1387,7 @@ public class CameraActivity extends Activity
MemoryQuery.REPORT_LABEL_LAUNCH);
}
});
+ mMotionManager = getServices().getMotionManager();
}
/**
@@ -1528,6 +1531,8 @@ public class CameraActivity extends Activity
mPreloader.cancelAllLoads();
resetScreenOn();
+ mMotionManager.stop();
+
UsageStatistics.instance().backgrounded();
super.onPause();
@@ -1669,6 +1674,8 @@ public class CameraActivity extends Activity
final int previewVisibility = getPreviewVisibility();
updatePreviewRendering(previewVisibility);
+
+ mMotionManager.start();
}
private void fillTemporarySessions() {
diff --git a/src/com/android/camera/FocusOverlayManager.java b/src/com/android/camera/FocusOverlayManager.java
index fa7e9653e..53d4d3389 100644
--- a/src/com/android/camera/FocusOverlayManager.java
+++ b/src/com/android/camera/FocusOverlayManager.java
@@ -29,10 +29,12 @@ import android.os.Message;
import com.android.camera.cameradevice.CameraCapabilities;
import com.android.camera.cameradevice.CameraCapabilitiesFactory;
+import com.android.camera.app.MotionManager;
import com.android.camera.debug.Log;
import com.android.camera.settings.SettingsManager;
import com.android.camera.ui.PreviewStatusListener;
import com.android.camera.util.CameraUtil;
+import com.android.camera.util.UsageStatistics;
import java.util.ArrayList;
import java.util.List;
@@ -59,7 +61,8 @@ import java.util.List;
* (10) The camera has no autofocus and supports metering area. Touch the screen
* to change metering area.
*/
-public class FocusOverlayManager implements PreviewStatusListener.PreviewAreaChangedListener {
+public class FocusOverlayManager implements PreviewStatusListener.PreviewAreaChangedListener,
+ MotionManager.MotionListener {
private static final Log.Tag TAG = new Log.Tag("FocusOverlayMgr");
private static final int RESET_TOUCH_FOCUS = 0;
@@ -93,9 +96,9 @@ public class FocusOverlayManager implements PreviewStatusListener.PreviewAreaCha
private final Handler mHandler;
Listener mListener;
private boolean mPreviousMoving;
-
private final FocusUI mUI;
private final Rect mPreviewRect = new Rect(0, 0, 0, 0);
+ private boolean mFocusLocked;
public interface FocusUI {
public boolean hasFaces();
@@ -147,6 +150,7 @@ public class FocusOverlayManager implements PreviewStatusListener.PreviewAreaCha
mListener = listener;
setMirror(mirror);
mUI = ui;
+ mFocusLocked = false;
}
public void setParameters(Parameters parameters, CameraCapabilities capabilities) {
@@ -276,6 +280,7 @@ public class FocusOverlayManager implements PreviewStatusListener.PreviewAreaCha
// If this is triggered by touch focus, cancel focus after a
// while.
if (mFocusArea != null) {
+ mFocusLocked = true;
mHandler.sendEmptyMessageDelayed(RESET_TOUCH_FOCUS, RESET_TOUCH_FOCUS_DELAY);
}
if (shutterButtonPressed) {
@@ -389,13 +394,20 @@ public class FocusOverlayManager implements PreviewStatusListener.PreviewAreaCha
onPreviewStopped();
}
+ @Override
+ public void onMoving() {
+ if (mFocusLocked) {
+ Log.d(TAG, "onMoving: Early focus unlock.");
+ cancelAutoFocus();
+ }
+ }
+
/**
* Triggers the autofocus and sets the specified state.
*
* @param focusingState The state to use when focus is in progress.
*/
private void autoFocus(int focusingState) {
- Log.v(TAG, "Start autofocus.");
mListener.autoFocus();
mState = focusingState;
// Pause the face view because the driver will keep sending face
@@ -430,6 +442,7 @@ public class FocusOverlayManager implements PreviewStatusListener.PreviewAreaCha
mListener.cancelAutoFocus();
mUI.resumeFaceDetection();
mState = STATE_IDLE;
+ mFocusLocked = false;
updateFocusUI();
mHandler.removeMessages(RESET_TOUCH_FOCUS);
}
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java
index fb9a6b799..a35a1ddb4 100644
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -56,6 +56,7 @@ import com.android.camera.app.LocationManager;
import com.android.camera.app.MediaSaver;
import com.android.camera.app.MemoryManager;
import com.android.camera.app.MemoryManager.MemoryListener;
+import com.android.camera.app.MotionManager;
import com.android.camera.cameradevice.CameraCapabilities;
import com.android.camera.cameradevice.CameraManager;
import com.android.camera.cameradevice.CameraManager.CameraAFCallback;
@@ -1577,6 +1578,10 @@ public class PhotoModule
defaultFocusModes,
mInitialParams, this, mMirror,
mActivity.getMainLooper(), mUI.getFocusUI());
+ MotionManager motionManager = getServices().getMotionManager();
+ if (motionManager != null) {
+ motionManager.addListener(mFocusManager);
+ }
}
mAppController.addPreviewAreaSizeChangedListener(mFocusManager);
}
diff --git a/src/com/android/camera/app/CameraApp.java b/src/com/android/camera/app/CameraApp.java
index df2bb4fcf..6f24b0057 100644
--- a/src/com/android/camera/app/CameraApp.java
+++ b/src/com/android/camera/app/CameraApp.java
@@ -18,10 +18,12 @@ package com.android.camera.app;
import android.app.Application;
import android.app.NotificationManager;
+import android.content.ContentResolver;
import android.content.Context;
import com.android.camera.MediaSaverImpl;
import com.android.camera.debug.LogHelper;
+import com.android.camera.app.MotionManager;
import com.android.camera.processing.ProcessingServiceManager;
import com.android.camera.remote.RemoteShutterListener;
import com.android.camera.session.CaptureSessionManager;
@@ -45,6 +47,7 @@ public class CameraApp extends Application implements CameraServices {
private MemoryManagerImpl mMemoryManager;
private PlaceholderManager mPlaceHolderManager;
private RemoteShutterListener mRemoteShutterListener;
+ private MotionManager mMotionManager;
@Override
public void onCreate() {
@@ -70,6 +73,8 @@ public class CameraApp extends Application implements CameraServices {
mRemoteShutterListener = RemoteShutterHelper.create(this);
clearNotifications();
+
+ mMotionManager = new MotionManager(context);
}
@Override
@@ -83,6 +88,11 @@ public class CameraApp extends Application implements CameraServices {
}
@Override
+ public MotionManager getMotionManager() {
+ return mMotionManager;
+ }
+
+ @Override
@Deprecated
public MediaSaver getMediaSaver() {
return mMediaSaver;
diff --git a/src/com/android/camera/app/CameraServices.java b/src/com/android/camera/app/CameraServices.java
index b6c8ec727..9ceee90b2 100644
--- a/src/com/android/camera/app/CameraServices.java
+++ b/src/com/android/camera/app/CameraServices.java
@@ -37,6 +37,12 @@ public interface CameraServices {
public MemoryManager getMemoryManager();
/**
+ * Returns the motion manager which senses when significant motion of the
+ * camera should unlock a locked focus.
+ */
+ public MotionManager getMotionManager();
+
+ /**
* Returns the media saver instance.
* <p>
* Deprecated. Use {@link #getCaptureSessionManager()} whenever possible.