summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJay Wang <jaywang@codeaurora.org>2015-05-05 10:37:52 -0700
committerByunghun Jeon <bjeon@codeaurora.org>2015-09-16 17:15:18 -0700
commit59b05fd1d75943f037aec41def16cdceb6443ecf (patch)
treebdc41665161e398f9992e7baff76243e1c1f3f9e /src
parent465c11e451e18b7f3e8109fdbbc56b866f7f8a56 (diff)
downloadandroid_packages_apps_Snap-59b05fd1d75943f037aec41def16cdceb6443ecf.tar.gz
android_packages_apps_Snap-59b05fd1d75943f037aec41def16cdceb6443ecf.tar.bz2
android_packages_apps_Snap-59b05fd1d75943f037aec41def16cdceb6443ecf.zip
SnapdragonCamera: Use floating components during video record.
During recording, there are only 2 widgets on UI. Directly attaching them to window manager and making main UI layer fully transparent can reduce power consumption. Change-Id: I8c4f4768ab91d50fc72080f0f6d7316ee2e60ef4
Diffstat (limited to 'src')
-rw-r--r--src/com/android/camera/CameraActivity.java8
-rw-r--r--src/com/android/camera/CameraSettings.java2
-rw-r--r--src/com/android/camera/VideoMenu.java3
-rw-r--r--src/com/android/camera/VideoModule.java5
-rw-r--r--src/com/android/camera/VideoUI.java81
-rw-r--r--src/com/android/camera/ui/FilmStripView.java8
-rw-r--r--src/com/android/camera/util/CameraUtil.java14
7 files changed, 109 insertions, 12 deletions
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java
index 69a1182b0..a4873b5f8 100644
--- a/src/com/android/camera/CameraActivity.java
+++ b/src/com/android/camera/CameraActivity.java
@@ -674,6 +674,14 @@ public class CameraActivity extends Activity
}
}
+ public void hideAboveFilmStripControlLayout() {
+ mAboveFilmstripControlLayout.setVisibility(View.INVISIBLE);
+ }
+
+ public void showAboveFilmStripControlLayout() {
+ mAboveFilmstripControlLayout.setVisibility(View.VISIBLE);
+ }
+
private void hidePanoStitchingProgress() {
mPanoStitchingPanel.setVisibility(View.GONE);
}
diff --git a/src/com/android/camera/CameraSettings.java b/src/com/android/camera/CameraSettings.java
index 7aa96d52d..da3dbfda3 100644
--- a/src/com/android/camera/CameraSettings.java
+++ b/src/com/android/camera/CameraSettings.java
@@ -122,6 +122,8 @@ public class CameraSettings {
public static final String KEY_LONGSHOT = "pref_camera_longshot_key";
+ public static final String KEY_VIDEO_PARTIAL_UI = "pref_camera_video_partial_ui_key";
+
private static final String KEY_QC_SUPPORTED_AE_BRACKETING_MODES = "ae-bracket-hdr-values";
private static final String KEY_QC_SUPPORTED_AF_BRACKETING_MODES = "af-bracket-values";
private static final String KEY_QC_SUPPORTED_RE_FOCUS_MODES = "re-focus-values";
diff --git a/src/com/android/camera/VideoMenu.java b/src/com/android/camera/VideoMenu.java
index b914f2cf8..8dbc4f2aa 100644
--- a/src/com/android/camera/VideoMenu.java
+++ b/src/com/android/camera/VideoMenu.java
@@ -133,7 +133,8 @@ public class VideoMenu extends MenuController
CameraSettings.KEY_POWER_MODE,
CameraSettings.KEY_VIDEO_ROTATION,
CameraSettings.KEY_VIDEO_CDS_MODE,
- CameraSettings.KEY_VIDEO_TNR_MODE
+ CameraSettings.KEY_VIDEO_TNR_MODE,
+ CameraSettings.KEY_VIDEO_PARTIAL_UI
};
mFrontBackSwitcher.setVisibility(View.INVISIBLE);
initSwitchItem(CameraSettings.KEY_CAMERA_ID, mFrontBackSwitcher);
diff --git a/src/com/android/camera/VideoModule.java b/src/com/android/camera/VideoModule.java
index 2bd5e1584..72adee0b7 100644
--- a/src/com/android/camera/VideoModule.java
+++ b/src/com/android/camera/VideoModule.java
@@ -2314,6 +2314,11 @@ public class VideoModule implements CameraModule,
mParameters.setVideoRotation(videoRotation);
}
+ //partial ui setting
+ String partialUi = mPreferences.getString(CameraSettings.KEY_VIDEO_PARTIAL_UI,
+ mActivity.getString(R.string.pref_camera_video_partial_ui_default));
+ mUI.setPartialUiRecording(Boolean.valueOf(partialUi));
+
//set power mode settings
updatePowerMode();
}
diff --git a/src/com/android/camera/VideoUI.java b/src/com/android/camera/VideoUI.java
index bac1e3c11..fcd07449a 100644
--- a/src/com/android/camera/VideoUI.java
+++ b/src/com/android/camera/VideoUI.java
@@ -20,6 +20,7 @@ import java.util.List;
import org.codeaurora.snapcam.R;
+import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.Color;
@@ -27,6 +28,7 @@ import android.graphics.Point;
import android.graphics.drawable.ColorDrawable;
import android.hardware.Camera.Parameters;
import android.util.Log;
+import android.util.TypedValue;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
@@ -35,6 +37,7 @@ import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLayoutChangeListener;
import android.view.ViewGroup;
+import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.FrameLayout.LayoutParams;
import android.widget.ImageView;
@@ -101,6 +104,11 @@ public class VideoUI implements PieRenderer.PieListener,
private RotateLayout mSubMenuLayout;
private LinearLayout mPreviewMenuLayout;
+ private ShutterButton mFloatingShutter;
+ private RotateLayout mFloatingRecordingTimeRect;
+ private View mFloatingTimeLapse;
+ private boolean mPartialUiRecording;
+
private View mPreviewCover;
private SurfaceView mSurfaceView = null;
private int mMaxPreviewWidth = 0;
@@ -885,6 +893,28 @@ public class VideoUI implements PieRenderer.PieListener,
if (recording) {
mShutterButton.setImageResource(R.drawable.shutter_button_video_stop);
hideSwitcher();
+
+ if(mPartialUiRecording) {
+ mActivity.hideAboveFilmStripControlLayout();
+ mCameraControls.setVisibility(View.INVISIBLE);
+ mRenderOverlay.setVisibility(View.INVISIBLE);
+ mFloatingTimeLapse.setVisibility(mIsTimeLapse ? View.VISIBLE : View.GONE);
+
+ ((ViewGroup)mRootView).requestTransparentRegion((View) mSurfaceView.getParent());
+
+ int leftOffset = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50, mActivity.getResources().getDisplayMetrics());
+ CameraUtil.addView(mActivity, mRecordingTimeRect, leftOffset, 0,
+ Gravity.TOP | Gravity.LEFT,
+ WindowManager.LayoutParams.WRAP_CONTENT,
+ WindowManager.LayoutParams.WRAP_CONTENT);
+
+ mShutterButton.setVisibility(View.GONE);
+
+ int shutterBottomOffset = (int)mActivity.getResources().getDimension(R.dimen.shutter_offset);
+ CameraUtil.addView(mActivity, mFloatingShutter, 0, shutterBottomOffset, Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL,
+ mShutterButton.getMeasuredWidth(), mShutterButton.getMeasuredHeight());
+ }
+
mRecordingTimeView.setText("");
mRecordingTimeView.setVisibility(View.VISIBLE);
mPauseButton.setVisibility(View.VISIBLE);
@@ -893,8 +923,20 @@ public class VideoUI implements PieRenderer.PieListener,
if (!mController.isVideoCaptureIntent()) {
showSwitcher();
}
- mRecordingTimeView.setVisibility(View.GONE);
- mPauseButton.setVisibility(View.GONE);
+
+ if(mPartialUiRecording) {
+ mShutterButton.setVisibility(View.VISIBLE);
+ WindowManager wm = (WindowManager) mActivity.getSystemService(Context.WINDOW_SERVICE);
+ wm.removeView(mRecordingTimeRect);
+ wm.removeView(mFloatingShutter);
+
+ mActivity.showAboveFilmStripControlLayout();
+ mCameraControls.setVisibility(View.VISIBLE);
+ mRenderOverlay.setVisibility(View.VISIBLE);
+ } else {
+ mRecordingTimeView.setVisibility(View.GONE);
+ mPauseButton.setVisibility(View.GONE);
+ }
}
}
@@ -979,7 +1021,10 @@ public class VideoUI implements PieRenderer.PieListener,
}
public void clickShutter() {
- mShutterButton.performClick();
+ if(mRecordingStarted && mPartialUiRecording)
+ mFloatingShutter.performClick();
+ else
+ mShutterButton.performClick();
}
public void pressShutter(boolean pressed) {
@@ -1132,4 +1177,34 @@ public class VideoUI implements PieRenderer.PieListener,
public void adjustOrientation() {
setOrientation(mOrientation, false);
}
+
+ public void setPartialUiRecording(boolean enable) {
+ mPartialUiRecording = enable;
+
+ if(mPartialUiRecording) {
+ if(mFloatingShutter == null) {
+ mFloatingShutter = (ShutterButton)View.inflate(mActivity, R.layout.floating_shutter_icon, null);
+ mFloatingShutter.setOnShutterButtonListener(mController);
+ }
+
+ if(mFloatingRecordingTimeRect == null) {
+ mFloatingRecordingTimeRect = new RotateLayout(mActivity, null);
+ mFloatingRecordingTimeRect.addView(View.inflate(mActivity, R.layout.floating_recording_time, null));
+ mFloatingTimeLapse = mFloatingRecordingTimeRect.findViewById(R.id.time_lapse_label);
+ }
+
+ mRootView.findViewById(R.id.recording_time_rect).setVisibility(View.GONE);
+ mRecordingTimeRect = mFloatingRecordingTimeRect;
+
+ mRecordingTimeView = (TextView) mRecordingTimeRect.findViewById(R.id.recording_time);
+ mPauseButton = (PauseButton) mRecordingTimeRect.findViewById(R.id.video_pause);
+ mPauseButton.setOnPauseButtonListener(this);
+ } else {
+ mRecordingTimeRect = (RotateLayout) mRootView.findViewById(R.id.recording_time_rect);
+ mRecordingTimeRect.setVisibility(View.VISIBLE);
+
+ mRecordingTimeView = (TextView) mRootView.findViewById(R.id.recording_time);
+ initializePauseButton();
+ }
+ }
}
diff --git a/src/com/android/camera/ui/FilmStripView.java b/src/com/android/camera/ui/FilmStripView.java
index 01469baeb..d254acff3 100644
--- a/src/com/android/camera/ui/FilmStripView.java
+++ b/src/com/android/camera/ui/FilmStripView.java
@@ -685,7 +685,6 @@ public class FilmStripView extends ViewGroup implements BottomControlsListener {
}
private void init(CameraActivity cameraActivity) {
- setWillNotDraw(false);
mActivity = cameraActivity;
mScale = 1.0f;
mDataIdOnUserScrolling = 0;
@@ -1423,13 +1422,6 @@ public class FilmStripView extends ViewGroup implements BottomControlsListener {
}
@Override
- public void onDraw(Canvas c) {
- // TODO: remove layoutViewItems() here.
- layoutViewItems(false);
- super.onDraw(c);
- }
-
- @Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
mDrawArea.left = l;
mDrawArea.top = t;
diff --git a/src/com/android/camera/util/CameraUtil.java b/src/com/android/camera/util/CameraUtil.java
index 5fb00ca65..daa190f85 100644
--- a/src/com/android/camera/util/CameraUtil.java
+++ b/src/com/android/camera/util/CameraUtil.java
@@ -28,6 +28,7 @@ import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
+import android.graphics.PixelFormat;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.RectF;
@@ -60,6 +61,7 @@ import com.android.camera.CameraManager;
import com.android.camera.CameraSettings;
import com.android.camera.ui.RotateTextToast;
import com.android.camera.util.IntentHelper;
+
import org.codeaurora.snapcam.R;
import java.io.Closeable;
@@ -1164,4 +1166,16 @@ public class CameraUtil {
return retRatio;
}
+ public static WindowManager.LayoutParams addView(Context context, View v, int x, int y,
+ int gravity, int width, int height) {
+ WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
+ WindowManager.LayoutParams params = new WindowManager.LayoutParams(width, height,
+ WindowManager.LayoutParams.TYPE_APPLICATION_PANEL,
+ WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT);
+ params.gravity = gravity;
+ params.x = x;
+ params.y = y;
+ wm.addView(v, params);
+ return params;
+ }
}