summaryrefslogtreecommitdiffstats
path: root/src/com/android/camera/PhotoModule.java
diff options
context:
space:
mode:
authorJay Wang <jaywang@codeaurora.org>2016-03-08 17:04:25 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2016-03-18 02:54:22 -0700
commit7efc8de478a79c6596da3789cdd94aee27bfb2fd (patch)
tree4b58ad2c888466e3837eb002d636b26ad0cc72c5 /src/com/android/camera/PhotoModule.java
parent0ebae444312e45870bd4dffa6628f9c8387e4541 (diff)
downloadandroid_packages_apps_Snap-7efc8de478a79c6596da3789cdd94aee27bfb2fd.tar.gz
android_packages_apps_Snap-7efc8de478a79c6596da3789cdd94aee27bfb2fd.tar.bz2
android_packages_apps_Snap-7efc8de478a79c6596da3789cdd94aee27bfb2fd.zip
SnapdragonCamera: Add the developer option for instant capture
A developer option is added to support instant capture feature in the camera HAL. Once option is enabled, Snapdragon camera application will take a snapshot as soon as it is resumed from the lock screen by pressing power button twice. For this to work, user also needs to enable "Press power button twice for camera" under display setting. Change-Id: I84794759ee1edc9424c37b71bd0c2b761a77bee1 CRs-Fixed: 970691
Diffstat (limited to 'src/com/android/camera/PhotoModule.java')
-rw-r--r--src/com/android/camera/PhotoModule.java60
1 files changed, 54 insertions, 6 deletions
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java
index b844dc833..5a71814a7 100644
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -195,7 +195,7 @@ public class PhotoModule
private boolean mLongshotSave = false;
private boolean mRefocus = false;
private boolean mLastPhotoTakenWithRefocus = false;
-
+ private boolean mInstantCaptureSnapShot = false;
private int mLongShotCaptureCount;
private int mLongShotCaptureCountLimit;
@@ -1248,6 +1248,14 @@ public class PhotoModule
public void onPictureTaken(final byte [] jpegData, CameraProxy camera) {
mUI.stopSelfieFlash();
mUI.enableShutter(true);
+ if (mInstantCaptureSnapShot == true) {
+ Log.v(TAG, "Instant capture picture taken!");
+ mInstantCaptureSnapShot = false;
+
+ // When take picture request is sent before starting preview, onPreviewFrame()
+ // callback doesn't happen so removing preview cover here, instead.
+ mUI.hidePreviewCover();
+ }
if (mPaused) {
return;
}
@@ -2337,7 +2345,7 @@ public class PhotoModule
mInitialParams = mParameters;
if (mFocusManager == null) initializeFocusManager();
initializeCapabilities();
- mHandler.sendEmptyMessageDelayed(CAMERA_OPEN_DONE,100);
+ mHandler.sendEmptyMessageDelayed(CAMERA_OPEN_DONE, 100);
return;
}
@@ -2351,11 +2359,18 @@ public class PhotoModule
if (MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA.equals(action)
|| MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE.equals(action)) {
Log.v(TAG, "On resume, from lock screen.");
+
// Note: onPauseAfterSuper() will delete this runnable, so we will
// at most have 1 copy queued up.
mHandler.postDelayed(new Runnable() {
public void run() {
onResumeTasks();
+
+ // Check if there is a need to take a snapshot without
+ // waiting for the shutter click
+ if (isInstantCaptureEnabled()) {
+ mInstantCaptureSnapShot = true;
+ }
}
}, ON_RESUME_TASKS_DELAY_MSEC);
} else {
@@ -2369,9 +2384,9 @@ public class PhotoModule
mRefocusSound = mSoundPool.load(mActivity, R.raw.camera_click_x5, 1);
}
- mHandler.post(new Runnable(){
+ mHandler.post(new Runnable() {
@Override
- public void run(){
+ public void run() {
mActivity.updateStorageSpaceAndHint();
updateRemainingPhotos();
}
@@ -2825,13 +2840,14 @@ public class PhotoModule
setDisplayOrientation();
- if (!mSnapshotOnIdle) {
+ if (!mSnapshotOnIdle && !mInstantCaptureSnapShot) {
// If the focus mode is continuous autofocus, call cancelAutoFocus to
// resume it because it may have been paused by autoFocus call.
if (CameraUtil.FOCUS_MODE_CONTINUOUS_PICTURE.equals(mFocusManager.getFocusMode())) {
mCameraDevice.cancelAutoFocus();
}
} else {
+ Log.v(TAG, "Trigger snapshot from start preview.");
mHandler.post(mDoSnapRunnable);
}
}
@@ -2897,6 +2913,17 @@ public class PhotoModule
return mRestartPreview;
}
+ private boolean isInstantCaptureEnabled() {
+ String instantCapture = mPreferences.getString(
+ CameraSettings.KEY_INSTANT_CAPTURE,
+ mActivity.getString(R.string.pref_camera_instant_capture_default));
+ if (instantCapture.equals(mActivity.getString(
+ R.string.pref_camera_instant_capture_value_enable))) {
+ return true;
+ }
+ return false;
+ }
+
private void qcomUpdateAdvancedFeatures(String ubiFocus,
String chromaFlash,
String reFocus,
@@ -3177,6 +3204,23 @@ public class PhotoModule
mParameters.set(CameraSettings.KEY_SNAPCAM_HDR_NEED_1X, hdrNeed1x);
}
+ // Set Instant Capture
+ String instantCapture = mPreferences.getString(
+ CameraSettings.KEY_INSTANT_CAPTURE,
+ mActivity.getString(R.string.pref_camera_instant_capture_default));
+
+ if (instantCapture.equals(mActivity.getString(
+ R.string.pref_camera_instant_capture_value_enable))) {
+ if (!mInstantCaptureSnapShot) {
+ // Disable instant capture after first snapshot is taken
+ instantCapture = mActivity.getString(
+ R.string.pref_camera_instant_capture_value_disable);
+ }
+ }
+ Log.v(TAG, "Instant capture = " + instantCapture + ", mInstantCaptureSnapShot = "
+ + mInstantCaptureSnapShot);
+ mParameters.set(CameraSettings.KEY_QC_INSTANT_CAPTURE, instantCapture);
+
// Set Advanced features.
String advancedFeature = mPreferences.getString(
CameraSettings.KEY_ADVANCED_FEATURES,
@@ -3798,7 +3842,11 @@ public class PhotoModule
}
// Set focus mode.
- if ((mManual3AEnabled & MANUAL_FOCUS) == 0) {
+ if (mInstantCaptureSnapShot == true) {
+ Log.v(TAG, "Change the focuse mode to "+ Parameters.FOCUS_MODE_INFINITY);
+ mFocusManager.overrideFocusMode(Parameters.FOCUS_MODE_INFINITY);
+ mParameters.setFocusMode(Parameters.FOCUS_MODE_INFINITY);
+ } else if ((mManual3AEnabled & MANUAL_FOCUS) == 0) {
mFocusManager.overrideFocusMode(null);
mParameters.setFocusMode(mFocusManager.getFocusMode());
}