diff options
-rw-r--r-- | res/layout/floating_recording_time.xml | 41 | ||||
-rw-r--r-- | res/layout/floating_shutter_icon.xml | 39 | ||||
-rw-r--r-- | res/values/qcomarrays.xml | 10 | ||||
-rw-r--r-- | res/values/qcomstrings.xml | 14 | ||||
-rw-r--r-- | res/values/styles.xml | 6 | ||||
-rw-r--r-- | res/xml/video_preferences.xml | 6 | ||||
-rw-r--r-- | src/com/android/camera/CameraActivity.java | 8 | ||||
-rw-r--r-- | src/com/android/camera/CameraSettings.java | 2 | ||||
-rw-r--r-- | src/com/android/camera/VideoMenu.java | 3 | ||||
-rw-r--r-- | src/com/android/camera/VideoModule.java | 5 | ||||
-rw-r--r-- | src/com/android/camera/VideoUI.java | 81 | ||||
-rw-r--r-- | src/com/android/camera/ui/FilmStripView.java | 8 | ||||
-rw-r--r-- | src/com/android/camera/util/CameraUtil.java | 14 |
13 files changed, 222 insertions, 15 deletions
diff --git a/res/layout/floating_recording_time.xml b/res/layout/floating_recording_time.xml new file mode 100644 index 000000000..6c23a2182 --- /dev/null +++ b/res/layout/floating_recording_time.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- 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. +--> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:orientation="horizontal" + android:layout_height="wrap_content" + android:layout_width="wrap_content"> + <com.android.camera.PauseButton android:id="@+id/video_pause" + android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:padding="23dp" + android:src="@drawable/btn_pause_recording"/> + <include layout="@layout/viewfinder_labels_video" + android:id="@+id/labels" /> +</LinearLayout> + diff --git a/res/layout/floating_shutter_icon.xml b/res/layout/floating_shutter_icon.xml new file mode 100644 index 000000000..59fc72896 --- /dev/null +++ b/res/layout/floating_shutter_icon.xml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- 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. +--> +<com.android.camera.ShutterButton xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/shutter_button" + android:layout_width="@dimen/shutter_size" + android:layout_height="@dimen/shutter_size" + android:layout_gravity="bottom|center_horizontal" + android:layout_marginBottom="@dimen/shutter_offset" + android:clickable="true" + android:contentDescription="@string/accessibility_shutter_button" + android:focusable="true" + android:scaleType="fitCenter" + android:src="@drawable/shutter_button_video_stop" /> diff --git a/res/values/qcomarrays.xml b/res/values/qcomarrays.xml index 78d796dd3..02686864e 100644 --- a/res/values/qcomarrays.xml +++ b/res/values/qcomarrays.xml @@ -811,5 +811,15 @@ <item>@drawable/ic_ts_makeup_on</item> </string-array> + <!-- VideoCamera Preferences partial ui recording entry--> + <string-array name="pref_camera_video_partial_ui_entries" translatable="false"> + <item>@string/pref_camera_video_partial_ui_entry_false</item> + <item>@string/pref_camera_video_partial_ui_entry_true</item> + </string-array> + + <string-array name="pref_camera_video_partial_ui_entryvalues" translatable="false"> + <item>@string/pref_video_partial_ui_value_false</item> + <item>@string/pref_video_partial_ui_value_true</item> + </string-array> </resources> diff --git a/res/values/qcomstrings.xml b/res/values/qcomstrings.xml index 9e5e152d0..eace72dad 100644 --- a/res/values/qcomstrings.xml +++ b/res/values/qcomstrings.xml @@ -862,6 +862,20 @@ <string name="pref_camera_video_rotation_entry_180">180</string> <string name="pref_camera_video_rotation_entry_270">270</string> + <!-- Settings screen, Partial UI recording default value --> + <string name="pref_camera_video_partial_ui_default">@string/pref_video_partial_ui_value_false</string> + + <!-- Settings screen, partial ui recording title --> + <string name="pref_camera_video_partial_ui_title">Partial UI Recording</string> + + <!-- Settings screen, partial ui recording radio button choices --> + <string name="pref_camera_video_partial_ui_entry_false">@string/setting_off</string> + <string name="pref_camera_video_partial_ui_entry_true">@string/setting_on</string> + + <!-- Partial ui recording values. Do not translate. --> + <string name="pref_video_partial_ui_value_false">false</string> + <string name="pref_video_partial_ui_value_true">true</string> + <!-- The message is shown in toast when click showOnMap Menu and there is no map app --> <string name="map_activity_not_found_err">There is no map app for show location.</string> diff --git a/res/values/styles.xml b/res/values/styles.xml index c6b99624e..b1d3843ca 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -24,9 +24,9 @@ <item name="android:windowActionBar">false</item> <item name="android:windowTitleSize">0dp</item> <item name="android:windowActionBarOverlay">true</item> - <item name="android:windowBackground">@android:color/black</item> - <item name="android:colorBackground">@android:color/black</item> - <item name="android:colorBackgroundCacheHint">@android:color/black</item> + <item name="android:windowBackground">@null</item> + <item name="android:colorBackground">@null</item> + <item name="android:colorBackgroundCacheHint">@null</item> <item name="android:actionBarStyle">@style/Holo.ActionBar</item> </style> <style name="Theme.CameraBase" parent="android:Theme.Holo"/> diff --git a/res/xml/video_preferences.xml b/res/xml/video_preferences.xml index 31b2d4c31..99786ce26 100644 --- a/res/xml/video_preferences.xml +++ b/res/xml/video_preferences.xml @@ -163,4 +163,10 @@ camera:title="@string/pref_camera_video_rotation_title" camera:entries="@array/pref_camera_video_rotation_entries" camera:entryValues="@array/pref_camera_video_rotation_entryvalues" /> + <ListPreference + camera:key="pref_camera_video_partial_ui_key" + camera:defaultValue="@string/pref_camera_video_partial_ui_default" + camera:title="@string/pref_camera_video_partial_ui_title" + camera:entries="@array/pref_camera_video_partial_ui_entries" + camera:entryValues="@array/pref_camera_video_partial_ui_entryvalues" /> </PreferenceGroup> 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; + } } |