summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Aminzade <monzy@google.com>2013-08-13 14:44:25 -0700
committerDan Aminzade <monzy@google.com>2013-08-14 15:20:50 -0700
commit92ae10ec320405d07c85a9e80be40293c65d85e0 (patch)
tree4e17bc48c66410e56fac06a14ddf1791dcabe0e2
parent18a29449cf72bb693eb63e30ba2b7e70853c454b (diff)
downloadandroid_packages_apps_Snap-92ae10ec320405d07c85a9e80be40293c65d85e0.tar.gz
android_packages_apps_Snap-92ae10ec320405d07c85a9e80be40293c65d85e0.tar.bz2
android_packages_apps_Snap-92ae10ec320405d07c85a9e80be40293c65d85e0.zip
Add support for remote shutter control via broadcast intents.
Send CAMERA_STOPPED and CAMERA_STARTED intents on pause/resume, to notify Gem to hide and show the camera card, and receive the SHUTTER broadcast intent to trigger the shutter. This change resolves b/10185077. Change-Id: I1e38039874b74460f5c815e9d2672789691e9e2f
-rw-r--r--src/com/android/camera/PhotoModule.java161
1 files changed, 97 insertions, 64 deletions
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java
index 1b0432f51..1e50d93fd 100644
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -18,10 +18,12 @@ package com.android.camera;
import android.annotation.TargetApi;
import android.app.Activity;
+import android.content.BroadcastReceiver;
import android.content.ContentProviderClient;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
+import android.content.IntentFilter;
import android.content.SharedPreferences.Editor;
import android.content.res.Configuration;
import android.graphics.Bitmap;
@@ -74,14 +76,14 @@ import java.util.ArrayList;
import java.util.List;
public class PhotoModule
- implements CameraModule,
- PhotoController,
- FocusOverlayManager.Listener,
- CameraPreference.OnPreferenceChangedListener,
- ShutterButton.OnShutterButtonListener,
- MediaSaveService.Listener,
- OnCountDownFinishedListener,
- SensorEventListener {
+ implements CameraModule,
+ PhotoController,
+ FocusOverlayManager.Listener,
+ CameraPreference.OnPreferenceChangedListener,
+ ShutterButton.OnShutterButtonListener,
+ MediaSaveService.Listener,
+ OnCountDownFinishedListener,
+ SensorEventListener {
private static final String TAG = "CAM_PhotoModule";
@@ -200,8 +202,8 @@ public class PhotoModule
new AutoFocusCallback();
private final Object mAutoFocusMoveCallback =
ApiHelper.HAS_AUTO_FOCUS_MOVE_CALLBACK
- ? new AutoFocusMoveCallback()
- : null;
+ ? new AutoFocusMoveCallback()
+ : null;
private final CameraErrorCallback mErrorCallback = new CameraErrorCallback();
@@ -308,8 +310,8 @@ public class PhotoModule
}
case SWITCH_CAMERA_START_ANIMATION: {
- // TODO: Need to revisit
- // ((CameraScreenNail) mActivity.mCameraScreenNail).animateSwitchCamera();
+ // TODO: Need to revisit
+ // ((CameraScreenNail) mActivity.mCameraScreenNail).animateSwitchCamera();
break;
}
@@ -335,6 +337,19 @@ public class PhotoModule
}
}
+ private BroadcastReceiver mReceiver = null;
+
+ private class ShutterBroadcastReceiver extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ if (action.equals("com.android.camera.SHUTTER")) {
+ onShutterButtonFocus(true);
+ onShutterButtonClick();
+ }
+ }
+ }
+
@Override
public void init(CameraActivity activity, View parent) {
mActivity = activity;
@@ -410,8 +425,8 @@ public class PhotoModule
private void setLocationPreference(String value) {
mPreferences.edit()
- .putString(CameraSettings.KEY_RECORD_LOCATION, value)
- .apply();
+ .putString(CameraSettings.KEY_RECORD_LOCATION, value)
+ .apply();
// TODO: Fix this to use the actual onSharedPreferencesChanged listener
// instead of invoking manually
onSharedPreferenceChanged();
@@ -780,8 +795,8 @@ public class PhotoModule
implements CameraAFMoveCallback {
@Override
public void onAutoFocusMoving(
- boolean moving, CameraProxy camera) {
- mFocusManager.onAutoFocusMoving(moving);
+ boolean moving, CameraProxy camera) {
+ mFocusManager.onAutoFocusMoving(moving);
}
}
@@ -826,14 +841,14 @@ public class PhotoModule
private void setCameraState(int state) {
mCameraState = state;
switch (state) {
- case PhotoController.PREVIEW_STOPPED:
- case PhotoController.SNAPSHOT_IN_PROGRESS:
- case PhotoController.SWITCHING_CAMERA:
- mUI.enableGestures(false);
- break;
- case PhotoController.IDLE:
- mUI.enableGestures(true);
- break;
+ case PhotoController.PREVIEW_STOPPED:
+ case PhotoController.SNAPSHOT_IN_PROGRESS:
+ case PhotoController.SWITCHING_CAMERA:
+ mUI.enableGestures(false);
+ break;
+ case PhotoController.IDLE:
+ mUI.enableGestures(true);
+ break;
}
}
@@ -922,7 +937,7 @@ public class PhotoModule
}
private void overrideCameraSettings(final String flashMode,
- final String whiteBalance, final String focusMode) {
+ final String whiteBalance, final String focusMode) {
mUI.overrideSettings(
CameraSettings.KEY_FLASH_MODE, flashMode,
CameraSettings.KEY_WHITE_BALANCE, whiteBalance,
@@ -1120,13 +1135,18 @@ public class PhotoModule
if (seconds > 0) {
mUI.startCountDown(seconds, playSound);
} else {
- mSnapshotOnIdle = false;
- mFocusManager.doSnap();
+ mSnapshotOnIdle = false;
+ mFocusManager.doSnap();
}
}
@Override
public void installIntentFilter() {
+ // Install an intent filter to receive remote shutter events.
+ IntentFilter intentFilter =
+ new IntentFilter("com.android.camera.SHUTTER");
+ mReceiver = new ShutterBroadcastReceiver();
+ mActivity.registerReceiver(mReceiver, intentFilter);
}
@Override
@@ -1198,10 +1218,23 @@ public class PhotoModule
if (msensor != null) {
mSensorManager.registerListener(this, msensor, SensorManager.SENSOR_DELAY_NORMAL);
}
+
+ installIntentFilter();
+ Intent intent = new Intent("com.android.camera.CAMERA_STARTED");
+ mActivity.sendBroadcast(intent);
}
@Override
public void onPauseBeforeSuper() {
+
+ Intent intent = new Intent("com.android.camera.CAMERA_STOPPED");
+ mActivity.sendBroadcast(intent);
+
+ if (mReceiver != null) {
+ mActivity.unregisterReceiver(mReceiver);
+ mReceiver = null;
+ }
+
mPaused = true;
Sensor gsensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
if (gsensor != null) {
@@ -1354,32 +1387,32 @@ public class PhotoModule
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
- case KeyEvent.KEYCODE_VOLUME_UP:
- case KeyEvent.KEYCODE_VOLUME_DOWN:
- case KeyEvent.KEYCODE_FOCUS:
- if (/*TODO: mActivity.isInCameraApp() &&*/ mFirstTimeInitialized) {
- if (event.getRepeatCount() == 0) {
+ case KeyEvent.KEYCODE_VOLUME_UP:
+ case KeyEvent.KEYCODE_VOLUME_DOWN:
+ case KeyEvent.KEYCODE_FOCUS:
+ if (/*TODO: mActivity.isInCameraApp() &&*/ mFirstTimeInitialized) {
+ if (event.getRepeatCount() == 0) {
+ onShutterButtonFocus(true);
+ }
+ return true;
+ }
+ return false;
+ case KeyEvent.KEYCODE_CAMERA:
+ if (mFirstTimeInitialized && event.getRepeatCount() == 0) {
+ onShutterButtonClick();
+ }
+ return true;
+ case KeyEvent.KEYCODE_DPAD_CENTER:
+ // If we get a dpad center event without any focused view, move
+ // the focus to the shutter button and press it.
+ if (mFirstTimeInitialized && event.getRepeatCount() == 0) {
+ // Start auto-focus immediately to reduce shutter lag. After
+ // the shutter button gets the focus, onShutterButtonFocus()
+ // will be called again but it is fine.
onShutterButtonFocus(true);
+ mUI.pressShutterButton();
}
return true;
- }
- return false;
- case KeyEvent.KEYCODE_CAMERA:
- if (mFirstTimeInitialized && event.getRepeatCount() == 0) {
- onShutterButtonClick();
- }
- return true;
- case KeyEvent.KEYCODE_DPAD_CENTER:
- // If we get a dpad center event without any focused view, move
- // the focus to the shutter button and press it.
- if (mFirstTimeInitialized && event.getRepeatCount() == 0) {
- // Start auto-focus immediately to reduce shutter lag. After
- // the shutter button gets the focus, onShutterButtonFocus()
- // will be called again but it is fine.
- onShutterButtonFocus(true);
- mUI.pressShutterButton();
- }
- return true;
}
return false;
}
@@ -1387,18 +1420,18 @@ public class PhotoModule
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
switch (keyCode) {
- case KeyEvent.KEYCODE_VOLUME_UP:
- case KeyEvent.KEYCODE_VOLUME_DOWN:
- if (/*mActivity.isInCameraApp() && */ mFirstTimeInitialized) {
- onShutterButtonClick();
+ case KeyEvent.KEYCODE_VOLUME_UP:
+ case KeyEvent.KEYCODE_VOLUME_DOWN:
+ if (/*mActivity.isInCameraApp() && */ mFirstTimeInitialized) {
+ onShutterButtonClick();
+ return true;
+ }
+ return false;
+ case KeyEvent.KEYCODE_FOCUS:
+ if (mFirstTimeInitialized) {
+ onShutterButtonFocus(false);
+ }
return true;
- }
- return false;
- case KeyEvent.KEYCODE_FOCUS:
- if (mFirstTimeInitialized) {
- onShutterButtonFocus(false);
- }
- return true;
}
return false;
}
@@ -1600,8 +1633,8 @@ public class PhotoModule
mSceneMode = CameraUtil.SCENE_MODE_HDR;
} else {
mSceneMode = mPreferences.getString(
- CameraSettings.KEY_SCENE_MODE,
- mActivity.getString(R.string.pref_camera_scenemode_default));
+ CameraSettings.KEY_SCENE_MODE,
+ mActivity.getString(R.string.pref_camera_scenemode_default));
}
if (CameraUtil.isSupported(mSceneMode, mParameters.getSupportedSceneModes())) {
if (!mParameters.getSceneMode().equals(mSceneMode)) {
@@ -1790,7 +1823,7 @@ public class PhotoModule
@Override
public void onUserInteraction() {
- if (!mActivity.isFinishing()) keepScreenOnAwhile();
+ if (!mActivity.isFinishing()) keepScreenOnAwhile();
}
private void resetScreenOn() {