summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/layout/floating_recording_time.xml41
-rw-r--r--res/layout/floating_shutter_icon.xml39
-rw-r--r--res/values/qcomarrays.xml10
-rw-r--r--res/values/qcomstrings.xml14
-rw-r--r--res/values/styles.xml6
-rw-r--r--res/xml/video_preferences.xml6
-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
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;
+ }
}