diff options
author | Camera Software Integration <camswint@localhost> | 2015-10-28 16:01:21 -0700 |
---|---|---|
committer | Gerrit Code Review <gerrit@cyanogenmod.org> | 2016-02-17 12:54:54 -0800 |
commit | 467196121cd51f298ef08aee1847d05270b46c81 (patch) | |
tree | 9206bb03da223bb633d5ec4e2de25512789f09e9 | |
parent | 22c9b14239c5fd517f2ebff84d499e3b30a36551 (diff) | |
download | android_packages_apps_Snap-467196121cd51f298ef08aee1847d05270b46c81.tar.gz android_packages_apps_Snap-467196121cd51f298ef08aee1847d05270b46c81.tar.bz2 android_packages_apps_Snap-467196121cd51f298ef08aee1847d05270b46c81.zip |
SnapdragonCamera: Implementing SelfieFlash feature
Introducing SelfieFlash feature.
Change-Id: I7b73d9db585038640b715092b01e037538ef68aa
CRs-Fixed: 937232
-rw-r--r-- | res/layout/photo_module.xml | 1 | ||||
-rw-r--r-- | res/layout/selfie_flash_view.xml | 35 | ||||
-rw-r--r-- | res/values/qcomarrays.xml | 11 | ||||
-rw-r--r-- | res/values/qcomstrings.xml | 4 | ||||
-rw-r--r-- | res/xml/camera_preferences.xml | 7 | ||||
-rw-r--r-- | src/com/android/camera/CameraSettings.java | 2 | ||||
-rw-r--r-- | src/com/android/camera/PhotoMenu.java | 2 | ||||
-rw-r--r-- | src/com/android/camera/PhotoModule.java | 45 | ||||
-rw-r--r-- | src/com/android/camera/PhotoUI.java | 31 | ||||
-rw-r--r-- | src/com/android/camera/ui/SelfieFlashView.java | 74 |
10 files changed, 211 insertions, 1 deletions
diff --git a/res/layout/photo_module.xml b/res/layout/photo_module.xml index 7487e73b2..e1211baea 100644 --- a/res/layout/photo_module.xml +++ b/res/layout/photo_module.xml @@ -25,6 +25,7 @@ android:layout_height="match_parent" android:layout_gravity="center" > <include layout="@layout/count_down_to_capture" /> + <include layout="@layout/selfie_flash_view" /> <FrameLayout android:id="@+id/preview_container" android:layout_width="match_parent" diff --git a/res/layout/selfie_flash_view.xml b/res/layout/selfie_flash_view.xml new file mode 100644 index 000000000..14ac8eae8 --- /dev/null +++ b/res/layout/selfie_flash_view.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (c) 2015, The Linux Foundation. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of The Linux Foundation nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--> +<com.android.camera.ui.SelfieFlashView xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/selfie_flash" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="invisible" > +</com.android.camera.ui.SelfieFlashView> diff --git a/res/values/qcomarrays.xml b/res/values/qcomarrays.xml index 3124eaa41..6ae192645 100644 --- a/res/values/qcomarrays.xml +++ b/res/values/qcomarrays.xml @@ -498,6 +498,17 @@ <item>enable</item> </string-array> + <!-- Selfie flash --> + <string-array name="pref_selfie_flash_entries" translatable="false"> + <item>@string/setting_off</item> + <item>@string/setting_on</item> + </string-array> + + <string-array name="pref_selfie_flash_entryvalues" translatable="false"> + <item>off</item> + <item>on</item> + </string-array> + <!-- Face detection --> <string-array name="pref_camera_facedetection_entries" translatable="false"> <item>@string/setting_off</item> diff --git a/res/values/qcomstrings.xml b/res/values/qcomstrings.xml index 856fc241a..d96375f68 100644 --- a/res/values/qcomstrings.xml +++ b/res/values/qcomstrings.xml @@ -156,6 +156,10 @@ <string name="pref_camera_facedetection_title">Face detection</string> <string name="pref_camera_facedetection_default" translatable="false">on</string> + <!-- Selfie Flash --> + <string name="pref_selfie_flash_title">Selfie flash</string> + <string name="pref_selfie_flash_default" translatable="false">off</string> + <!-- Red eye reduction --> <string name="pref_camera_redeyereduction_title">Red eye reduction</string> <string name="pref_camera_redeyereduction_default" translatable="false">disable</string> diff --git a/res/xml/camera_preferences.xml b/res/xml/camera_preferences.xml index 70bcfa07b..871144356 100644 --- a/res/xml/camera_preferences.xml +++ b/res/xml/camera_preferences.xml @@ -240,6 +240,13 @@ camera:entries="@array/pref_camera_skinToneEnhancement_entries" camera:entryValues="@array/pref_camera_skinToneEnhancement_entryvalues" /> <IconListPreference + camera:key="pref_selfie_flash_key" + camera:defaultValue="@string/pref_selfie_flash_default" + camera:entries="@array/pref_selfie_flash_entries" + camera:entryValues="@array/pref_selfie_flash_entryvalues" + camera:singleIcon="@drawable/ic_settings_flash" + camera:title="@string/pref_selfie_flash_title" /> + <IconListPreference camera:key="pref_camera_facedetection_key" camera:defaultValue="@string/pref_camera_facedetection_default" camera:title="@string/pref_camera_facedetection_title" diff --git a/src/com/android/camera/CameraSettings.java b/src/com/android/camera/CameraSettings.java index fb1048bd5..3d5f76549 100644 --- a/src/com/android/camera/CameraSettings.java +++ b/src/com/android/camera/CameraSettings.java @@ -238,6 +238,8 @@ public class CameraSettings { public static final String KEY_QC_SUPPORTED_MANUAL_EXPOSURE_MODES = "manual-exposure-modes"; public static final String KEY_QC_SUPPORTED_MANUAL_WB_MODES = "manual-wb-modes"; + public static final String KEY_SELFIE_FLASH = "pref_selfie_flash_key"; + public static final String EXPOSURE_DEFAULT_VALUE = "0"; public static final String VALUE_ON = "on"; public static final String VALUE_OFF = "off"; diff --git a/src/com/android/camera/PhotoMenu.java b/src/com/android/camera/PhotoMenu.java index 4b158590d..271640d29 100644 --- a/src/com/android/camera/PhotoMenu.java +++ b/src/com/android/camera/PhotoMenu.java @@ -142,6 +142,7 @@ public class PhotoMenu extends MenuController } mOtherKeys1 = new String[] { + CameraSettings.KEY_SELFIE_FLASH, CameraSettings.KEY_FLASH_MODE, CameraSettings.KEY_RECORD_LOCATION, CameraSettings.KEY_PICTURE_SIZE, @@ -162,6 +163,7 @@ public class PhotoMenu extends MenuController }; mOtherKeys2 = new String[] { + CameraSettings.KEY_SELFIE_FLASH, CameraSettings.KEY_FLASH_MODE, CameraSettings.KEY_RECORD_LOCATION, CameraSettings.KEY_PICTURE_SIZE, diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java index 8a0533a1d..36fde8b06 100644 --- a/src/com/android/camera/PhotoModule.java +++ b/src/com/android/camera/PhotoModule.java @@ -351,6 +351,23 @@ public class PhotoModule private int mJpegFileSizeEstimation = 0; private int mRemainingPhotos = -1; + private static final int SELFIE_FLASH_DURATION = 680; + + private class SelfieThread extends Thread { + public void run() { + try { + Thread.sleep(SELFIE_FLASH_DURATION); + mActivity.runOnUiThread(new Runnable() { + public void run() { + mFocusManager.doSnap(); + } + }); + } catch(InterruptedException e) { + } + selfieThread = null; + } + } + private SelfieThread selfieThread; private MediaSaveService.OnMediaSavedListener mOnMediaSavedListener = new MediaSaveService.OnMediaSavedListener() { @@ -1157,6 +1174,7 @@ public class PhotoModule public void onPictureTaken(final byte [] jpegData, CameraProxy camera) { Log.d(TAG, "JpegPictureCallback: onPictureTaken()"); if (mCameraState != LONGSHOT) { + mUI.stopSelfieFlash(); mUI.enableShutter(true); } if (mPaused) { @@ -1864,6 +1882,9 @@ public class PhotoModule } mUI.overrideSettings(CameraSettings.KEY_FLASH_MODE, flashMode); } + + if(mCameraId != CameraHolder.instance().getFrontCameraId()) + CameraSettings.removePreferenceFromScreen(mPreferenceGroup, CameraSettings.KEY_SELFIE_FLASH); } private void overrideCameraSettings(final String flashMode, @@ -2152,8 +2173,25 @@ public class PhotoModule mActivity.getString(R.string.pref_camera_zsl_default)); mUI.overrideSettings(CameraSettings.KEY_ZSL, zsl); mUI.startCountDown(seconds, playSound); + } else { mSnapshotOnIdle = false; + initiateSnap(); + } + } + + private void initiateSnap() + { + if(mPreferences.getString(CameraSettings.KEY_SELFIE_FLASH, + mActivity.getString(R.string.pref_selfie_flash_default)) + .equalsIgnoreCase("on") && + mCameraId == CameraHolder.instance().getFrontCameraId()) { + mUI.startSelfieFlash(); + if(selfieThread == null) { + selfieThread = new SelfieThread(); + selfieThread.start(); + } + } else { mFocusManager.doSnap(); } mShutterPressing = false; @@ -2324,6 +2362,11 @@ public class PhotoModule mSensorManager.unregisterListener(this, msensor); } + if(selfieThread != null) { + selfieThread.interrupt(); + } + mUI.stopSelfieFlash(); + Log.d(TAG, "remove idle handleer in onPause"); removeIdleHandler(); } @@ -4301,7 +4344,7 @@ public class PhotoModule @Override public void onCountDownFinished() { mSnapshotOnIdle = false; - mFocusManager.doSnap(); + initiateSnap(); mFocusManager.onShutterUp(); mUI.overrideSettings(CameraSettings.KEY_ZSL, null); mUI.showUIAfterCountDown(); diff --git a/src/com/android/camera/PhotoUI.java b/src/com/android/camera/PhotoUI.java index 19aa3a71b..d2827fce4 100644 --- a/src/com/android/camera/PhotoUI.java +++ b/src/com/android/camera/PhotoUI.java @@ -47,6 +47,8 @@ import android.view.View.OnClickListener; import android.view.View.OnLayoutChangeListener; import android.view.ViewGroup; import android.view.ViewStub; +import android.view.Window; +import android.view.WindowManager; import android.widget.FrameLayout; import android.widget.FrameLayout.LayoutParams; import android.widget.ImageView; @@ -70,6 +72,7 @@ import com.android.camera.ui.PieRenderer.PieListener; import com.android.camera.ui.RenderOverlay; import com.android.camera.ui.RotateLayout; import com.android.camera.ui.RotateTextToast; +import com.android.camera.ui.SelfieFlashView; import com.android.camera.ui.ZoomRenderer; import com.android.camera.ui.focus.FocusRing; import com.android.camera.util.CameraUtil; @@ -95,6 +98,7 @@ public class PhotoUI implements PieListener, private PopupWindow mPopup; private ShutterButton mShutterButton; private CountDownView mCountDownView; + private SelfieFlashView mSelfieView; private FaceView mFaceView; private RenderOverlay mRenderOverlay; @@ -146,6 +150,7 @@ public class PhotoUI implements PieListener, private int mBottomMargin = 0; private int mOrientation; + private float mScreenBrightness = 0.0f; public interface SurfaceTextureSizeChangedListener { public void onSurfaceTextureSizeChanged(int uncroppedWidth, int uncroppedHeight); @@ -1109,6 +1114,32 @@ public class PhotoUI implements PieListener, hideUIWhileCountDown(); } + public void startSelfieFlash() { + if(mSelfieView == null) + mSelfieView = (SelfieFlashView) (mRootView.findViewById(R.id.selfie_flash)); + mSelfieView.bringToFront(); + mSelfieView.open(); + mScreenBrightness = setScreenBrightness(1F); + } + + public void stopSelfieFlash() { + if(mSelfieView == null) + mSelfieView = (SelfieFlashView) (mRootView.findViewById(R.id.selfie_flash)); + mSelfieView.close(); + if(mScreenBrightness != 0.0f) + setScreenBrightness(mScreenBrightness); + } + + private float setScreenBrightness(float brightness) { + float originalBrightness; + Window window = mActivity.getWindow(); + WindowManager.LayoutParams layout = window.getAttributes(); + originalBrightness = layout.screenBrightness; + layout.screenBrightness = brightness; + window.setAttributes(layout); + return originalBrightness; + } + public void showPreferencesToast() { if (mNotSelectableToast == null) { String str = mActivity.getResources().getString(R.string.not_selectable_in_scene_mode); diff --git a/src/com/android/camera/ui/SelfieFlashView.java b/src/com/android/camera/ui/SelfieFlashView.java new file mode 100644 index 000000000..8e73bef7d --- /dev/null +++ b/src/com/android/camera/ui/SelfieFlashView.java @@ -0,0 +1,74 @@ +/* + Copyright (c) 2015, The Linux Foundation. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of The Linux Foundation nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +package com.android.camera.ui; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.RectF; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; + +public class SelfieFlashView extends View { + + private static final String TAG = "CAM_SelfieFlashView"; + private Paint targetPaint; + private RectF rectF; + + public SelfieFlashView(Context context, AttributeSet attrs) { + super(context, attrs); + targetPaint = new Paint(); + targetPaint.setColor(Color.WHITE); + } + + @Override + protected void onDraw(Canvas canvas) { + rectF = new RectF(); + rectF.left = 0; + rectF.right = canvas.getWidth(); + rectF.top = 0; + rectF.bottom = canvas.getHeight(); + canvas.drawRect(rectF, targetPaint); + } + + public void open() { + setVisibility(View.VISIBLE); + } + + public void close() { + setVisibility(View.GONE); + } + + @Override + public boolean onTouchEvent(MotionEvent e){ + return true; + } +} |