diff options
author | Jay Wang <jaywang@codeaurora.org> | 2016-03-08 17:04:25 -0800 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-03-18 02:54:22 -0700 |
commit | 7efc8de478a79c6596da3789cdd94aee27bfb2fd (patch) | |
tree | 4b58ad2c888466e3837eb002d636b26ad0cc72c5 /src/com/android/camera/PhotoModule.java | |
parent | 0ebae444312e45870bd4dffa6628f9c8387e4541 (diff) | |
download | android_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.java | 60 |
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()); } |