summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/layout/capture_module.xml2
-rw-r--r--res/xml/capture_preferences.xml8
-rw-r--r--src/com/android/camera/CaptureModule.java46
-rw-r--r--src/com/android/camera/CaptureUI.java31
-rw-r--r--src/com/android/camera/SettingsManager.java5
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">
-
+ <include layout="@layout/selfie_flash_view" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
diff --git a/res/xml/capture_preferences.xml b/res/xml/capture_preferences.xml
index 9ffe7d537..a55cae460 100644
--- a/res/xml/capture_preferences.xml
+++ b/res/xml/capture_preferences.xml
@@ -295,4 +295,12 @@
camera:key="pref_camera2_hfr_key"
camera:singleIcon="@drawable/ic_settings_fps"
camera:title="@string/pref_camera_hfr_title" />
+
+ <IconListPreference
+ camera:defaultValue="@string/pref_selfie_flash_default"
+ camera:entries="@array/pref_selfie_flash_entries"
+ camera:entryValues="@array/pref_selfie_flash_entryvalues"
+ camera:key="pref_selfie_flash_key"
+ camera:singleIcon="@drawable/ic_settings_flash"
+ camera:title="@string/pref_selfie_flash_title" />
</PreferenceGroup>
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) {