diff options
-rw-r--r-- | res/values/qcomarrays.xml | 10 | ||||
-rw-r--r-- | res/values/qcomstrings.xml | 10 | ||||
-rw-r--r-- | res/xml/camera_preferences.xml | 8 | ||||
-rw-r--r-- | src/com/android/camera/CameraSettings.java | 22 | ||||
-rw-r--r-- | src/com/android/camera/PhotoMenu.java | 1 | ||||
-rw-r--r-- | src/com/android/camera/PhotoModule.java | 60 |
6 files changed, 105 insertions, 6 deletions
diff --git a/res/values/qcomarrays.xml b/res/values/qcomarrays.xml index e078477ba..c4c7be482 100644 --- a/res/values/qcomarrays.xml +++ b/res/values/qcomarrays.xml @@ -831,5 +831,15 @@ <item>@drawable/ic_settings_filter</item> <item>@drawable/ic_settings_filter_on</item> </string-array> + + <string-array name="pref_camera_instant_capture_entries" translatable="true"> + <item>@string/pref_camera_instant_capture_entry_enable</item> + <item>@string/pref_camera_instant_capture_entry_disable</item> + </string-array> + + <string-array name="pref_camera_instant_capture_entry_values" translatable="false"> + <item>@string/pref_camera_instant_capture_value_enable</item> + <item>@string/pref_camera_instant_capture_value_disable</item> + </string-array> </resources> diff --git a/res/values/qcomstrings.xml b/res/values/qcomstrings.xml index 94b89a010..e724dbb8c 100644 --- a/res/values/qcomstrings.xml +++ b/res/values/qcomstrings.xml @@ -200,6 +200,16 @@ <string name="pref_camera_manual_focus_value_diopter_mode">diopter-mode</string> <string name="pref_camera_manual_focus_value_off">off</string> + <!-- Instant Capture entry --> + <string name="pref_camera_instant_capture_title" translatable="true">Instant Capture</string> + <string name="pref_camera_instant_capture_entry_enable" translatable="true">Enable</string> + <string name="pref_camera_instant_capture_entry_disable" translatable="true">Disable</string> + + <!-- Instant Capture entry values --> + <string name="pref_camera_instant_capture_default" translatable="false">0</string> + <string name="pref_camera_instant_capture_value_enable" translatable="false">1</string> + <string name="pref_camera_instant_capture_value_disable" translatable="false">0</string> + <!-- Settings screen, ZSL location dialog choices --> <string name="pref_camera_zsl_entry_off">Off</string> <string name="pref_camera_zsl_entry_on">On</string> diff --git a/res/xml/camera_preferences.xml b/res/xml/camera_preferences.xml index 8a0668fa0..a0d06f59f 100644 --- a/res/xml/camera_preferences.xml +++ b/res/xml/camera_preferences.xml @@ -358,4 +358,12 @@ camera:title="@string/pref_camera_manual_focus_title" camera:entries="@array/pref_camera_manual_focus_entries" camera:entryValues="@array/pref_camera_manual_focus_entry_values" /> + + <ListPreference + camera:key="pref_camera_instant_capture_key" + camera:defaultValue="@string/pref_camera_instant_capture_default" + camera:title="@string/pref_camera_instant_capture_title" + camera:entries="@array/pref_camera_instant_capture_entries" + camera:entryValues="@array/pref_camera_instant_capture_entry_values" /> + </PreferenceGroup> diff --git a/src/com/android/camera/CameraSettings.java b/src/com/android/camera/CameraSettings.java index 180a46097..5ad62b413 100644 --- a/src/com/android/camera/CameraSettings.java +++ b/src/com/android/camera/CameraSettings.java @@ -123,6 +123,7 @@ public class CameraSettings { public static final String KEY_DIS = "pref_camera_dis_key"; public static final String KEY_LONGSHOT = "pref_camera_longshot_key"; + public static final String KEY_INSTANT_CAPTURE = "pref_camera_instant_capture_key"; private static final String KEY_QC_SUPPORTED_AE_BRACKETING_MODES = "ae-bracket-hdr-values"; private static final String KEY_QC_SUPPORTED_AF_BRACKETING_MODES = "af-bracket-values"; @@ -165,6 +166,7 @@ public class CameraSettings { public static final String KEY_VIDEO_HSR = "video-hsr"; public static final String KEY_QC_SEE_MORE_MODE = "see-more"; public static final String KEY_QC_NOISE_REDUCTION_MODE = "noise-reduction-mode"; + public static final String KEY_QC_INSTANT_CAPTURE = "instant-capture"; public static final String KEY_INTERNAL_PREVIEW_RESTART = "internal-restart"; public static final String KEY_QC_ZSL_HDR_SUPPORTED = "zsl-hdr-supported"; @@ -662,6 +664,13 @@ public class CameraSettings { ListPreference manualFocus = group.findPreference(KEY_MANUAL_FOCUS); ListPreference manualExposure = group.findPreference(KEY_MANUAL_EXPOSURE); ListPreference manualWB = group.findPreference(KEY_MANUAL_WB); + ListPreference instantCapture = group.findPreference(KEY_INSTANT_CAPTURE); + + if (instantCapture != null) { + if (!isInstantCaptureSupported(mParameters)) { + removePreference(group, instantCapture.getKey()); + } + } if (hdr_need_1x != null) { filterUnsupportedOptions(group, @@ -1385,4 +1394,17 @@ public class CameraSettings { return split(str); } + public static boolean isInstantCaptureSupported(Parameters params) { + boolean ret = false; + if (null != params) { + // TODO: need to uncomment this code once get parameter + // is supported + //String val = params.get(KEY_QC_INSTANT_CAPTURE); + //if (null != val) { + ret = true; + //} + } + return ret; + } + } diff --git a/src/com/android/camera/PhotoMenu.java b/src/com/android/camera/PhotoMenu.java index 2e90e825b..2309ce988 100644 --- a/src/com/android/camera/PhotoMenu.java +++ b/src/com/android/camera/PhotoMenu.java @@ -226,6 +226,7 @@ public class PhotoMenu extends MenuController CameraSettings.KEY_DENOISE, CameraSettings.KEY_ADVANCED_FEATURES, CameraSettings.KEY_AE_BRACKET_HDR, + CameraSettings.KEY_INSTANT_CAPTURE, CameraSettings.KEY_MANUAL_EXPOSURE, CameraSettings.KEY_MANUAL_WB, CameraSettings.KEY_MANUAL_FOCUS 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()); } |