diff options
author | Byunghun Jeon <bjeon@codeaurora.org> | 2016-09-16 17:09:09 -0700 |
---|---|---|
committer | Jay Wang <jaywang@codeaurora.org> | 2016-09-27 15:54:57 -0700 |
commit | 93b6ff2adea4904e0d161fa6ac9524c6fddce502 (patch) | |
tree | 86e64cf27ef2facb832548127a1d3f7cca23405e | |
parent | c3a465da5ed9ba64512eda37597e96f6ab839fa8 (diff) | |
download | android_packages_apps_Snap-93b6ff2adea4904e0d161fa6ac9524c6fddce502.tar.gz android_packages_apps_Snap-93b6ff2adea4904e0d161fa6ac9524c6fddce502.tar.bz2 android_packages_apps_Snap-93b6ff2adea4904e0d161fa6ac9524c6fddce502.zip |
SnapdragonCamera: Fix flash toggle button
Add flash auto mode to flash toggle button and show flash button
while taking video
Change-Id: Iffc81ba15b1651c45f826a835274c20f46dbb8cd
CRs-Fixed: 1066519
-rw-r--r-- | res/drawable/flash_auto.png | bin | 0 -> 15865 bytes | |||
-rw-r--r-- | res/values/camera2arrays.xml | 3 | ||||
-rw-r--r-- | res/values/qcomstrings.xml | 2 | ||||
-rw-r--r-- | res/xml/capture_preferences.xml | 14 | ||||
-rw-r--r-- | src/com/android/camera/CaptureModule.java | 65 | ||||
-rw-r--r-- | src/com/android/camera/CaptureUI.java | 12 | ||||
-rw-r--r-- | src/com/android/camera/SettingsManager.java | 1 | ||||
-rw-r--r-- | src/com/android/camera/ui/FlashToggleButton.java | 36 |
8 files changed, 94 insertions, 39 deletions
diff --git a/res/drawable/flash_auto.png b/res/drawable/flash_auto.png Binary files differnew file mode 100644 index 000000000..0661ea61d --- /dev/null +++ b/res/drawable/flash_auto.png diff --git a/res/values/camera2arrays.xml b/res/values/camera2arrays.xml index 3108cf8a3..107ae5bb5 100644 --- a/res/values/camera2arrays.xml +++ b/res/values/camera2arrays.xml @@ -321,16 +321,19 @@ <!-- Camera Preferences flash mode dialog box entries --> <string-array name="pref_camera2_flashmode_entries" translatable="false"> <item>@string/pref_camera_flashmode_entry_off</item> + <item>@string/pref_camera_flashmode_entry_auto</item> <item>@string/pref_camera_flashmode_entry_on</item> </string-array> <string-array name="pref_camera2_flashmode_labels" translatable="false"> <item>@string/pref_camera_flashmode_label_off</item> + <item>@string/pref_camera_flashmode_label_auto</item> <item>@string/pref_camera_flashmode_label_on</item> </string-array> <string-array name="pref_camera2_flashmode_entryvalues" translatable="false"> <item>@string/setting_off_value</item> + <item>@string/pref_camera2_flashmode_value_auto</item> <item>@string/setting_on_value</item> </string-array> diff --git a/res/values/qcomstrings.xml b/res/values/qcomstrings.xml index b6e6afdce..b7d30bca7 100644 --- a/res/values/qcomstrings.xml +++ b/res/values/qcomstrings.xml @@ -999,7 +999,7 @@ <string name="pref_camera2_scenemode_default" translatable="false">0</string> <string name="pref_camera2_whitebalance_default" translatable="false">1</string> <string name="pref_camera2_coloreffect_default" translatable="false">0</string> - <string name="pref_camera2_flashmode_default" translatable="false">@string/setting_off_value</string> + <string name="pref_camera2_flashmode_value_auto" translatable="false">auto</string> <string name="pref_camera2_makeup_title" translatable="true">Makeup</string> diff --git a/res/xml/capture_preferences.xml b/res/xml/capture_preferences.xml index 64633c362..93b55bde1 100644 --- a/res/xml/capture_preferences.xml +++ b/res/xml/capture_preferences.xml @@ -31,13 +31,10 @@ xmlns:camera="http://schemas.android.com/apk/res/org.codeaurora.snapcam" camera:title="@string/pref_camera_settings_category"> <IconListPreference - camera:defaultValue="@string/pref_camera2_flashmode_default" + camera:defaultValue="@string/pref_camera2_flashmode_value_auto" camera:entries="@array/pref_camera2_flashmode_entries" camera:entryValues="@array/pref_camera2_flashmode_entryvalues" - camera:icons="@array/pref_camera2_flashmode_icons" camera:key="pref_camera2_flashmode_key" - camera:labelList="@array/pref_camera2_flashmode_labels" - camera:largeIcons="@array/pref_camera2_flashmode_largeicons" camera:singleIcon="@drawable/ic_settings_flash" camera:title="@string/pref_camera_flashmode_title"/> @@ -234,6 +231,15 @@ camera:key="pref_camera2_noise_reduction_key" camera:title="@string/pref_camera_noise_reduction_title"/> + <IconListPreference + camera:defaultValue="@string/pref_camera_video_flashmode_default" + camera:entries="@array/pref_camera2_video_flashmode_entries" + camera:entryValues="@array/pref_camera2_video_flashmode_entryvalues" + camera:icons="@array/video_flashmode_icons" + camera:key="pref_camera2_video_flashmode_key" + camera:singleIcon="@drawable/ic_settings_flash" + camera:title="@string/pref_camera_flashmode_title" /> + <ListPreference camera:defaultValue="@string/pref_camera_video_rotation_default" camera:entries="@array/pref_camera2_video_rotation_entries" diff --git a/src/com/android/camera/CaptureModule.java b/src/com/android/camera/CaptureModule.java index 14789f128..c83abede2 100644 --- a/src/com/android/camera/CaptureModule.java +++ b/src/com/android/camera/CaptureModule.java @@ -285,6 +285,7 @@ public class CaptureModule implements CameraModule, PhotoController, private boolean mHighSpeedCapture = false; private boolean mHighSpeedCaptureSlowMode = false; //HFR private int mHighSpeedCaptureRate; + private CaptureRequest.Builder mVideoRequestBuilder; private static final int SELFIE_FLASH_DURATION = 680; @@ -2401,8 +2402,7 @@ public class CaptureModule implements CameraModule, PhotoController, try { setUpMediaRecorder(cameraId); createVideoSnapshotImageReader(); - final CaptureRequest.Builder mPreviewBuilder = mCameraDevice[cameraId] - .createCaptureRequest(CameraDevice.TEMPLATE_RECORD); + mVideoRequestBuilder = mCameraDevice[cameraId].createCaptureRequest(CameraDevice.TEMPLATE_RECORD); List<Surface> surfaces = new ArrayList<>(); Surface surface = getPreviewSurfaceForSession(cameraId); @@ -2416,10 +2416,10 @@ public class CaptureModule implements CameraModule, PhotoController, } mFrameProcessor.setOutputSurface(surface); mFrameProcessor.setVideoOutputSurface(mMediaRecorder.getSurface()); - addPreviewSurface(mPreviewBuilder, surfaces, cameraId); + addPreviewSurface(mVideoRequestBuilder, surfaces, cameraId); if (!mHighSpeedCapture) surfaces.add(mVideoSnapshotImageReader.getSurface()); - else mPreviewBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, mHighSpeedFPSRange); + else mVideoRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, mHighSpeedFPSRange); if (!mHighSpeedCapture) { mCameraDevice[cameraId].createCaptureSession(surfaces, new CameraCaptureSession @@ -2430,8 +2430,8 @@ public class CaptureModule implements CameraModule, PhotoController, Log.d(TAG, "StartRecordingVideo session onConfigured"); mCurrentSession = cameraCaptureSession; try { - setUpVideoCaptureRequestBuilder(mPreviewBuilder); - mCurrentSession.setRepeatingRequest(mPreviewBuilder.build(), null, mCameraHandler); + setUpVideoCaptureRequestBuilder(mVideoRequestBuilder); + mCurrentSession.setRepeatingRequest(mVideoRequestBuilder.build(), null, mCameraHandler); } catch (CameraAccessException e) { e.printStackTrace(); } @@ -2440,7 +2440,7 @@ public class CaptureModule implements CameraModule, PhotoController, mUI.resetPauseButton(); mRecordingTotalTime = 0L; mRecordingStartTime = SystemClock.uptimeMillis(); - mUI.showRecordingUI(true); + mUI.showRecordingUI(true, false); updateRecordingTime(); } @@ -2460,7 +2460,7 @@ public class CaptureModule implements CameraModule, PhotoController, (CameraConstrainedHighSpeedCaptureSession) mCurrentSession; try { List list = session - .createHighSpeedRequestList(mPreviewBuilder.build()); + .createHighSpeedRequestList(mVideoRequestBuilder.build()); session.setRepeatingBurst(list, null, mCameraHandler); } catch (CameraAccessException e) { Log.e(TAG, "Failed to start high speed video recording " @@ -2480,7 +2480,7 @@ public class CaptureModule implements CameraModule, PhotoController, mUI.resetPauseButton(); mRecordingTotalTime = 0L; mRecordingStartTime = SystemClock.uptimeMillis(); - mUI.showRecordingUI(true); + mUI.showRecordingUI(true, true); updateRecordingTime(); } @@ -2531,10 +2531,20 @@ public class CaptureModule implements CameraModule, PhotoController, applyVideoFlash(builder); } + private void updateVideoFlash() { + if (!mIsRecordingVideo || mHighSpeedCapture) return; + applyVideoFlash(mVideoRequestBuilder); + try { + mCurrentSession.setRepeatingRequest(mVideoRequestBuilder.build(), null, mCameraHandler); + } catch (CameraAccessException e) { + e.printStackTrace(); + } + } + private void applyVideoFlash(CaptureRequest.Builder builder) { - String value = mSettingsManager.getValue(SettingsManager.KEY_FLASH_MODE); + String value = mSettingsManager.getValue(SettingsManager.KEY_VIDEO_FLASH_MODE); if (value == null) return; - boolean flashOn = value.equals("on"); + boolean flashOn = value.equals("torch"); if (flashOn) { builder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_TORCH); @@ -2664,7 +2674,7 @@ public class CaptureModule implements CameraModule, PhotoController, mMediaRecorder.stop(); mMediaRecorder.reset(); saveVideo(); - mUI.showRecordingUI(false); + mUI.showRecordingUI(false, false); mIsRecordingVideo = false; if(mFrameProcessor != null) { @@ -2981,7 +2991,7 @@ public class CaptureModule implements CameraModule, PhotoController, private boolean isFlashOff(int id) { if (!mSettingsManager.isFlashSupported(id)) return true; - return mSettingsManager.getValue(SettingsManager.KEY_FLASH_MODE).equals("1"); + return mSettingsManager.getValue(SettingsManager.KEY_FLASH_MODE).equals("off"); } private void initializePreviewConfiguration(int id) { @@ -3127,24 +3137,26 @@ public class CaptureModule implements CameraModule, PhotoController, } private void applyFlash(CaptureRequest.Builder request, String value) { - boolean flashOn = value.equals("on"); String redeye = mSettingsManager.getValue(SettingsManager.KEY_REDEYE_REDUCTION); - boolean redeyeOn = redeye != null && redeye.equals("on"); - if (redeyeOn) { + if (redeye != null && redeye.equals("on")) { request.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE); } else { - if (flashOn) { - request.set(CaptureRequest.CONTROL_AE_MODE, - CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH); - request.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_SINGLE); - } else { - request.set(CaptureRequest.CONTROL_AE_MODE, - CaptureRequest.CONTROL_AE_MODE_ON); - request.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF); + switch (value) { + case "on": + request.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH); + request.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_SINGLE); + break; + case "auto": + request.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH); + request.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_SINGLE); + break; + case "off": + request.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON); + request.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF); + break; } - } } @@ -3358,6 +3370,9 @@ public class CaptureModule implements CameraModule, PhotoController, case SettingsManager.KEY_LONGSHOT: if (count == 0) restart(); return; + case SettingsManager.KEY_VIDEO_FLASH_MODE: + updateVideoFlash(); + return; case SettingsManager.KEY_FLASH_MODE: if (count == 0) restart(); //Restart is due to ZSL mode change return; diff --git a/src/com/android/camera/CaptureUI.java b/src/com/android/camera/CaptureUI.java index 3531f06ff..ba57f5770 100644 --- a/src/com/android/camera/CaptureUI.java +++ b/src/com/android/camera/CaptureUI.java @@ -485,7 +485,7 @@ public class CaptureUI implements FocusOverlayManager.FocusUI, } public void initFlashButton() { - mFlashButton.init(); + mFlashButton.init(false); } public void initSceneModeButton() { @@ -524,14 +524,20 @@ public class CaptureUI implements FocusOverlayManager.FocusUI, } } - public void showRecordingUI(boolean recording) { - mFlashButton.setVisibility(recording ? View.GONE : View.VISIBLE); + public void showRecordingUI(boolean recording, boolean highspeed) { if (recording) { + if (highspeed) { + mFlashButton.setVisibility(View.GONE); + } else { + mFlashButton.init(true); + } mVideoButton.setImageResource(R.drawable.video_stop); mRecordingTimeView.setText(""); ((ViewGroup)mRootView).addView(mRecordingTimeRect); mMuteButton.setVisibility(View.VISIBLE); } else { + mFlashButton.setVisibility(View.VISIBLE); + mFlashButton.init(false); mVideoButton.setImageResource(R.drawable.video_capture); ((ViewGroup)mRootView).removeView(mRecordingTimeRect); mMuteButton.setVisibility(View.INVISIBLE); diff --git a/src/com/android/camera/SettingsManager.java b/src/com/android/camera/SettingsManager.java index 9d8069b4e..e6ced7439 100644 --- a/src/com/android/camera/SettingsManager.java +++ b/src/com/android/camera/SettingsManager.java @@ -113,6 +113,7 @@ public class SettingsManager implements ListMenu.SettingsListener { public static final String KEY_AUDIO_ENCODER = "pref_camera2_audioencoder_key"; public static final String KEY_DIS = "pref_camera2_dis_key"; public static final String KEY_NOISE_REDUCTION = "pref_camera2_noise_reduction_key"; + public static final String KEY_VIDEO_FLASH_MODE = "pref_camera2_video_flashmode_key"; public static final String KEY_VIDEO_ROTATION = "pref_camera2_video_rotation_key"; public static final String KEY_VIDEO_TIME_LAPSE_FRAME_INTERVAL = "pref_camera2_video_time_lapse_frame_interval_key"; diff --git a/src/com/android/camera/ui/FlashToggleButton.java b/src/com/android/camera/ui/FlashToggleButton.java index d429996f9..2dd37cbbc 100644 --- a/src/com/android/camera/ui/FlashToggleButton.java +++ b/src/com/android/camera/ui/FlashToggleButton.java @@ -41,8 +41,10 @@ import org.codeaurora.snapcam.R; public class FlashToggleButton extends RotateImageView { private SettingsManager mSettingsManager; - private int[] iconResId = {R.drawable.flash_off, R.drawable.flash}; + private int[] cameraFlashIcon = {R.drawable.flash_off, R.drawable.flash_auto, R.drawable.flash}; + private int[] videoFlashIcon = {R.drawable.flash_off, R.drawable.flash}; private int mIndex; + private boolean mIsVideoFlash; public FlashToggleButton(Context context) { super(context); @@ -52,9 +54,16 @@ public class FlashToggleButton extends RotateImageView { super(context, attrs); } - public void init() { + public void init(boolean videoFlash) { + mIsVideoFlash = videoFlash; + String key; + if (mIsVideoFlash) { + key = SettingsManager.KEY_VIDEO_FLASH_MODE; + } else { + key = SettingsManager.KEY_FLASH_MODE; + } mSettingsManager = SettingsManager.getInstance(); - mIndex = mSettingsManager.getValueIndex(SettingsManager.KEY_FLASH_MODE); + mIndex = mSettingsManager.getValueIndex(key); if (mIndex == -1) { setVisibility(GONE); return; @@ -66,14 +75,29 @@ public class FlashToggleButton extends RotateImageView { this.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { - mIndex = (mIndex + 1) % 2; - mSettingsManager.setValueIndex(SettingsManager.KEY_FLASH_MODE, mIndex); + int[] icons; + String key; + if (mIsVideoFlash) { + icons = videoFlashIcon; + key = SettingsManager.KEY_VIDEO_FLASH_MODE; + } else { + icons = cameraFlashIcon; + key = SettingsManager.KEY_FLASH_MODE; + } + mIndex = (mIndex + 1) % icons.length; + mSettingsManager.setValueIndex(key, mIndex); update(); } }); } private void update() { - setImageResource(iconResId[mIndex]); + int[] icons; + if (mIsVideoFlash) { + icons = videoFlashIcon; + } else { + icons = cameraFlashIcon; + } + setImageResource(icons[mIndex]); } } |