From 5bb5959688e810c73171be97b0f70815b1742b8d Mon Sep 17 00:00:00 2001 From: Byunghun Jeon Date: Fri, 22 Jul 2016 15:55:34 -0700 Subject: SnapdragonCamera: Add selfie flash to camera2 Add selfie flash to camera2 CRs-Fixed: 1047161 Change-Id: I2ee7033d7854bb15fb9eabe215aaf063b440aee4 --- res/layout/capture_module.xml | 2 +- res/xml/capture_preferences.xml | 8 +++++ src/com/android/camera/CaptureModule.java | 46 ++++++++++++++++++++++++++--- src/com/android/camera/CaptureUI.java | 31 +++++++++++++++++++ src/com/android/camera/SettingsManager.java | 5 ++++ 5 files changed, 87 insertions(+), 5 deletions(-) diff --git a/res/layout/capture_module.xml b/res/layout/capture_module.xml index dd7d3cb1b..41757c535 100644 --- a/res/layout/capture_module.xml +++ b/res/layout/capture_module.xml @@ -27,7 +27,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center"> - + + + diff --git a/src/com/android/camera/CaptureModule.java b/src/com/android/camera/CaptureModule.java index db0cef352..5566737e5 100644 --- a/src/com/android/camera/CaptureModule.java +++ b/src/com/android/camera/CaptureModule.java @@ -65,12 +65,10 @@ import android.provider.MediaStore; import android.util.Log; import android.util.Range; import android.util.Size; -import android.view.Display; import android.view.KeyEvent; import android.view.OrientationEventListener; import android.view.Surface; import android.view.SurfaceHolder; -import android.view.SurfaceView; import android.view.View; import android.widget.Toast; @@ -277,6 +275,24 @@ public class CaptureModule implements CameraModule, PhotoController, private boolean mHighSpeedCaptureSlowMode = false; //HFR private int mHighSpeedCaptureRate; + 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() { + takePicture(); + } + }); + } catch(InterruptedException e) { + } + selfieThread = null; + } + } + private SelfieThread selfieThread; + private class MediaSaveNotifyThread extends Thread { private Uri uri; @@ -1376,6 +1392,7 @@ public class CaptureModule implements CameraModule, PhotoController, mActivity.runOnUiThread(new Runnable() { @Override public void run() { + mUI.stopSelfieFlash(); mUI.enableShutter(true); } }); @@ -1605,6 +1622,10 @@ public class CaptureModule implements CameraModule, PhotoController, if (mIsRecordingVideo) { stopRecordingVideo(getMainCameraId()); } + if (selfieThread != null) { + selfieThread.interrupt(); + } + mUI.stopSelfieFlash(); } @Override @@ -1946,10 +1967,27 @@ public class CaptureModule implements CameraModule, PhotoController, } } + private void checkSelfieFlashAndTakePicture() { + String value = mSettingsManager.getValue(SettingsManager.KEY_SELFIE_FLASH); + if (value == null) { + takePicture(); + return; + } + if (value.equals("on") && getMainCameraId() == FRONT_ID) { + mUI.startSelfieFlash(); + if (selfieThread == null) { + selfieThread = new SelfieThread(); + selfieThread.start(); + } + } else { + takePicture(); + } + } + @Override public void onCountDownFinished() { mUI.showUIAfterCountDown(); - takePicture(); + checkSelfieFlashAndTakePicture(); } @Override @@ -2602,7 +2640,7 @@ public class CaptureModule implements CameraModule, PhotoController, warningToast("It's still busy processing previous scene mode request."); return; } - takePicture(); + checkSelfieFlashAndTakePicture(); } } } diff --git a/src/com/android/camera/CaptureUI.java b/src/com/android/camera/CaptureUI.java index 47a1a857c..4953c5fad 100644 --- a/src/com/android/camera/CaptureUI.java +++ b/src/com/android/camera/CaptureUI.java @@ -44,6 +44,7 @@ import android.view.SurfaceHolder; import android.view.View; import android.view.ViewGroup; import android.view.ViewPropertyAnimator; +import android.view.Window; import android.view.WindowManager; import android.widget.FrameLayout; import android.widget.ImageView; @@ -67,6 +68,7 @@ import com.android.camera.ui.RenderOverlay; import com.android.camera.ui.RotateImageView; import com.android.camera.ui.RotateLayout; import com.android.camera.ui.RotateTextToast; +import com.android.camera.ui.SelfieFlashView; import com.android.camera.ui.TrackingFocusRenderer; import com.android.camera.ui.ZoomRenderer; import com.android.camera.util.CameraUtil; @@ -100,6 +102,7 @@ public class CaptureUI implements FocusOverlayManager.FocusUI, private static final int ANIMATION_DURATION = 300; private static final int CLICK_THRESHOLD = 200; String[] mSettingKeys = new String[]{ + SettingsManager.KEY_SELFIE_FLASH, SettingsManager.KEY_FLASH_MODE, SettingsManager.KEY_RECORD_LOCATION, SettingsManager.KEY_PICTURE_SIZE, @@ -156,6 +159,8 @@ public class CaptureUI implements FocusOverlayManager.FocusUI, private ImageView mThumbnail; private Camera2FaceView mFaceView; private Point mDisplaySize = new Point(); + private SelfieFlashView mSelfieView; + private float mScreenBrightness = 0.0f; private SurfaceHolder.Callback callbackMono = new SurfaceHolder.Callback() { // SurfaceHolder callbacks @@ -1674,6 +1679,32 @@ public class CaptureUI implements FocusOverlayManager.FocusUI, } } + 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 hideSurfaceView() { mSurfaceView.setVisibility(View.INVISIBLE); } diff --git a/src/com/android/camera/SettingsManager.java b/src/com/android/camera/SettingsManager.java index a3778b444..bc7ef2da8 100644 --- a/src/com/android/camera/SettingsManager.java +++ b/src/com/android/camera/SettingsManager.java @@ -116,6 +116,7 @@ public class SettingsManager implements ListMenu.SettingsListener { public static final String KEY_FACE_DETECTION = "pref_camera2_facedetection_key"; public static final String KEY_AUTO_VIDEOSNAP_SIZE = "pref_camera2_videosnap_key"; public static final String KEY_VIDEO_HIGH_FRAME_RATE = "pref_camera2_hfr_key"; + public static final String KEY_SELFIE_FLASH = "pref_selfie_flash_key"; private static final String TAG = "SnapCam_SettingsManager"; private static SettingsManager sInstance; @@ -600,6 +601,10 @@ public class SettingsManager implements ListMenu.SettingsListener { if (hfr != null) { buildHFR(); } + + if (!mIsFrontCameraPresent || !isFacingFront(mCameraId)) { + removePreference(mPreferenceGroup, KEY_SELFIE_FLASH); + } } private void buildExposureCompensation(int cameraId) { -- cgit v1.2.3