diff options
-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 | ||||
-rw-r--r-- | src_pd/com/android/camera/app/MotionManager.java | 56 |
6 files changed, 100 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. diff --git a/src_pd/com/android/camera/app/MotionManager.java b/src_pd/com/android/camera/app/MotionManager.java new file mode 100644 index 000000000..d6851d467 --- /dev/null +++ b/src_pd/com/android/camera/app/MotionManager.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.camera.app; + +import android.content.Context; +import com.android.camera.debug.Log; + +import java.util.LinkedList; + +public class MotionManager { + public static interface MotionListener { + public void onMoving(); + } + + private final LinkedList<MotionListener> mListeners = + new LinkedList<MotionListener>(); + + public MotionManager(Context context) { + } + + public void addListener(MotionListener listener) { + } + + public void removeListener(MotionListener listener) { + } + + public void reset() { + } + + public void start() { + } + + public void stop() { + } + + public boolean isEnabled() { + return false; + } + + public void onGyroUpdate(long t, float x, float y, float z) { + } +} |