summaryrefslogtreecommitdiffstats
path: root/src/com
diff options
context:
space:
mode:
authorCamera Software Integration <camswint@localhost>2015-10-28 16:01:21 -0700
committerGerrit Code Review <gerrit@cyanogenmod.org>2016-02-17 12:54:54 -0800
commit467196121cd51f298ef08aee1847d05270b46c81 (patch)
tree9206bb03da223bb633d5ec4e2de25512789f09e9 /src/com
parent22c9b14239c5fd517f2ebff84d499e3b30a36551 (diff)
downloadandroid_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
Diffstat (limited to 'src/com')
-rw-r--r--src/com/android/camera/CameraSettings.java2
-rw-r--r--src/com/android/camera/PhotoMenu.java2
-rw-r--r--src/com/android/camera/PhotoModule.java45
-rw-r--r--src/com/android/camera/PhotoUI.java31
-rw-r--r--src/com/android/camera/ui/SelfieFlashView.java74
5 files changed, 153 insertions, 1 deletions
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;
+ }
+}