diff options
author | Kevin Gabayan <gabayan@google.com> | 2014-06-17 18:19:59 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-06-17 18:19:59 +0000 |
commit | 1ec930eb7cc0ef2b02e997833b712bd8b768bdf9 (patch) | |
tree | 4dfb80d75fadc9b78081f118e182e64da2863386 /src/com | |
parent | 55c14934415cecc0d816ad6ca035fdf317095d95 (diff) | |
parent | 09a46ccb10504579417609d2486dc28e92458bf7 (diff) | |
download | android_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.java | 7 | ||||
-rw-r--r-- | src/com/android/camera/FocusOverlayManager.java | 19 | ||||
-rw-r--r-- | src/com/android/camera/PhotoModule.java | 5 | ||||
-rw-r--r-- | src/com/android/camera/app/CameraApp.java | 10 | ||||
-rw-r--r-- | src/com/android/camera/app/CameraServices.java | 6 |
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. |