diff options
author | Jay Wang <jaywang@codeaurora.org> | 2015-05-05 10:37:52 -0700 |
---|---|---|
committer | Byunghun Jeon <bjeon@codeaurora.org> | 2015-09-16 17:15:18 -0700 |
commit | 59b05fd1d75943f037aec41def16cdceb6443ecf (patch) | |
tree | bdc41665161e398f9992e7baff76243e1c1f3f9e /src/com/android/camera/VideoUI.java | |
parent | 465c11e451e18b7f3e8109fdbbc56b866f7f8a56 (diff) | |
download | android_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/com/android/camera/VideoUI.java')
-rw-r--r-- | src/com/android/camera/VideoUI.java | 81 |
1 files changed, 78 insertions, 3 deletions
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(); + } + } } |