summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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
-rw-r--r--src_pd/com/android/camera/app/MotionManager.java56
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) {
+ }
+}