Merge "reset capture button state on swipes" into gb-ub-photos-denali
diff --git a/res/drawable-hdpi/ic_hdr_off.png b/res/drawable-hdpi/ic_hdr_off.png
deleted file mode 100644
index 28db73c..0000000
--- a/res/drawable-hdpi/ic_hdr_off.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_hdr_off_disabled.png b/res/drawable-hdpi/ic_hdr_off_disabled.png
new file mode 100644
index 0000000..8cd4956
--- /dev/null
+++ b/res/drawable-hdpi/ic_hdr_off_disabled.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_hdr_off_indicator.png b/res/drawable-hdpi/ic_hdr_off_indicator.png
new file mode 100644
index 0000000..c5c535d
--- /dev/null
+++ b/res/drawable-hdpi/ic_hdr_off_indicator.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_hdr_off_normal.png b/res/drawable-hdpi/ic_hdr_off_normal.png
new file mode 100644
index 0000000..06cb2c4
--- /dev/null
+++ b/res/drawable-hdpi/ic_hdr_off_normal.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_hdr_on_disabled.png b/res/drawable-hdpi/ic_hdr_on_disabled.png
new file mode 100644
index 0000000..4ca8919
--- /dev/null
+++ b/res/drawable-hdpi/ic_hdr_on_disabled.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_hdr_on_indicator.png b/res/drawable-hdpi/ic_hdr_on_indicator.png
new file mode 100644
index 0000000..8b682bd
--- /dev/null
+++ b/res/drawable-hdpi/ic_hdr_on_indicator.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_hdr_on_normal.png b/res/drawable-hdpi/ic_hdr_on_normal.png
new file mode 100644
index 0000000..d5c56e8
--- /dev/null
+++ b/res/drawable-hdpi/ic_hdr_on_normal.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_hdr_off.png b/res/drawable-mdpi/ic_hdr_off.png
deleted file mode 100644
index c5003e6..0000000
--- a/res/drawable-mdpi/ic_hdr_off.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_hdr_off_disabled.png b/res/drawable-mdpi/ic_hdr_off_disabled.png
new file mode 100644
index 0000000..6305f34
--- /dev/null
+++ b/res/drawable-mdpi/ic_hdr_off_disabled.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_hdr_off_indicator.png b/res/drawable-mdpi/ic_hdr_off_indicator.png
new file mode 100644
index 0000000..61e775c
--- /dev/null
+++ b/res/drawable-mdpi/ic_hdr_off_indicator.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_hdr_off_normal.png b/res/drawable-mdpi/ic_hdr_off_normal.png
new file mode 100644
index 0000000..541002e
--- /dev/null
+++ b/res/drawable-mdpi/ic_hdr_off_normal.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_hdr_on_disabled.png b/res/drawable-mdpi/ic_hdr_on_disabled.png
new file mode 100644
index 0000000..ee1a877
--- /dev/null
+++ b/res/drawable-mdpi/ic_hdr_on_disabled.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_hdr_on_indicator.png b/res/drawable-mdpi/ic_hdr_on_indicator.png
new file mode 100644
index 0000000..ed89346
--- /dev/null
+++ b/res/drawable-mdpi/ic_hdr_on_indicator.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_hdr_on_normal.png b/res/drawable-mdpi/ic_hdr_on_normal.png
new file mode 100644
index 0000000..c911e40
--- /dev/null
+++ b/res/drawable-mdpi/ic_hdr_on_normal.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_hdr_off.png b/res/drawable-xhdpi/ic_hdr_off.png
deleted file mode 100644
index 66fe29e..0000000
--- a/res/drawable-xhdpi/ic_hdr_off.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_hdr_off_disabled.png b/res/drawable-xhdpi/ic_hdr_off_disabled.png
new file mode 100644
index 0000000..61e616c
--- /dev/null
+++ b/res/drawable-xhdpi/ic_hdr_off_disabled.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_hdr_off_indicator.png b/res/drawable-xhdpi/ic_hdr_off_indicator.png
new file mode 100644
index 0000000..637bfcb
--- /dev/null
+++ b/res/drawable-xhdpi/ic_hdr_off_indicator.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_hdr_off_normal.png b/res/drawable-xhdpi/ic_hdr_off_normal.png
new file mode 100644
index 0000000..ac26067
--- /dev/null
+++ b/res/drawable-xhdpi/ic_hdr_off_normal.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_hdr_on_disabled.png b/res/drawable-xhdpi/ic_hdr_on_disabled.png
new file mode 100644
index 0000000..fcc7911
--- /dev/null
+++ b/res/drawable-xhdpi/ic_hdr_on_disabled.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_hdr_on_indicator.png b/res/drawable-xhdpi/ic_hdr_on_indicator.png
new file mode 100644
index 0000000..74ae13f
--- /dev/null
+++ b/res/drawable-xhdpi/ic_hdr_on_indicator.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_hdr_on_normal.png b/res/drawable-xhdpi/ic_hdr_on_normal.png
new file mode 100644
index 0000000..cb3ae41
--- /dev/null
+++ b/res/drawable-xhdpi/ic_hdr_on_normal.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_hdr_off_disabled.png b/res/drawable-xxhdpi/ic_hdr_off_disabled.png
new file mode 100644
index 0000000..f29ab46
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_hdr_off_disabled.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_hdr_off_indicator.png b/res/drawable-xxhdpi/ic_hdr_off_indicator.png
new file mode 100644
index 0000000..1204315
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_hdr_off_indicator.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_hdr_off_normal.png b/res/drawable-xxhdpi/ic_hdr_off_normal.png
new file mode 100644
index 0000000..227d173
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_hdr_off_normal.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_hdr_on_disabled.png b/res/drawable-xxhdpi/ic_hdr_on_disabled.png
new file mode 100644
index 0000000..0abd17a
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_hdr_on_disabled.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_hdr_on_indicator.png b/res/drawable-xxhdpi/ic_hdr_on_indicator.png
new file mode 100644
index 0000000..b247343
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_hdr_on_indicator.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_hdr_on_normal.png b/res/drawable-xxhdpi/ic_hdr_on_normal.png
new file mode 100644
index 0000000..879e53d
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_hdr_on_normal.png
Binary files differ
diff --git a/res/drawable/bg_indicators.xml b/res/drawable/bg_indicators.xml
deleted file mode 100644
index 6a67996..0000000
--- a/res/drawable/bg_indicators.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<shape xmlns:android="http://schemas.android.com/apk/res/android"
- android:shape="oval">
- <solid android:color="@color/indicators_background_color" />
-</shape>
diff --git a/res/drawable/ic_hdr_off.xml b/res/drawable/ic_hdr_off.xml
new file mode 100644
index 0000000..0c6e544
--- /dev/null
+++ b/res/drawable/ic_hdr_off.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:constantSize="true">
+ <item android:state_enabled="false">
+ <bitmap
+ android:gravity="center"
+ android:src="@drawable/ic_hdr_off_disabled" />
+ </item>
+ <item android:state_pressed="true">
+ <level-list>
+ <item android:maxLevel="0">
+ <layer-list>
+ <item android:drawable="@drawable/button_background_pressed_light" />
+ <item>
+ <bitmap
+ android:gravity="center"
+ android:src="@drawable/ic_hdr_off_normal" />
+ </item>
+ </layer-list>
+ </item>
+ <item android:maxLevel="1">
+ <layer-list>
+ <item android:drawable="@drawable/button_background_pressed_dark" />
+ <item>
+ <bitmap
+ android:gravity="center"
+ android:src="@drawable/ic_hdr_off_normal" />
+ </item>
+ </layer-list>
+ </item>
+ </level-list>
+ </item>
+ <item>
+ <bitmap
+ android:gravity="center"
+ android:src="@drawable/ic_hdr_off_normal" />
+ </item>
+</selector>
diff --git a/res/drawable/ic_hdr_on.xml b/res/drawable/ic_hdr_on.xml
new file mode 100644
index 0000000..2623a22
--- /dev/null
+++ b/res/drawable/ic_hdr_on.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:constantSize="true">
+ <item android:state_enabled="false">
+ <bitmap
+ android:gravity="center"
+ android:src="@drawable/ic_hdr_on_disabled" />
+ </item>
+ <item android:state_pressed="true">
+ <level-list>
+ <item android:maxLevel="0">
+ <layer-list>
+ <item android:drawable="@drawable/button_background_pressed_light" />
+ <item>
+ <bitmap
+ android:gravity="center"
+ android:src="@drawable/ic_hdr_on_normal" />
+ </item>
+ </layer-list>
+ </item>
+ <item android:maxLevel="1">
+ <layer-list>
+ <item android:drawable="@drawable/button_background_pressed_dark" />
+ <item>
+ <bitmap
+ android:gravity="center"
+ android:src="@drawable/ic_hdr_on_normal" />
+ </item>
+ </layer-list>
+ </item>
+ </level-list>
+ </item>
+ <item>
+ <bitmap
+ android:gravity="center"
+ android:src="@drawable/ic_hdr_on_normal" />
+ </item>
+</selector>
diff --git a/res/layout/filmstrip_bottom_controls.xml b/res/layout/filmstrip_bottom_controls.xml
index d859242..a5dde05 100644
--- a/res/layout/filmstrip_bottom_controls.xml
+++ b/res/layout/filmstrip_bottom_controls.xml
@@ -28,42 +28,70 @@
<!-- A filler view -->
<View
android:layout_width="0dp"
- android:layout_height="match_parent"
+ android:layout_height="1dp"
android:layout_weight="1"
android:visibility="invisible" />
- <FrameLayout
- android:layout_width="wrap_content"
- android:layout_height="wrap_content">
-
- <ImageButton
- android:id="@+id/filmstrip_bottom_control_view"
- style="@style/FilmstripBottomControlButton"
- android:layout_gravity="center"
- android:src="@drawable/ic_view_photosphere"
- android:visibility="invisible" />
-
- <ImageButton
- android:id="@+id/filmstrip_bottom_control_tiny_planet"
- style="@style/FilmstripBottomControlButton"
- android:layout_gravity="center"
- android:src="@drawable/ic_menu_tiny_planet"
- android:visibility="invisible" />
- </FrameLayout>
-
- <ImageButton
- android:id="@+id/filmstrip_bottom_control_edit"
- style="@style/FilmstripBottomControlButton"
- android:src="@drawable/ic_menu_edit_holo_dark"
- android:visibility="invisible" />
-
-
<ImageButton
android:id="@+id/filmstrip_bottom_control_share"
style="@style/FilmstripBottomControlButton"
android:src="@drawable/ic_menu_share_holo_light"
android:visibility="invisible" />
+ <LinearLayout
+ android:layout_width="144dp"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:visibility="visible">
+
+ <View
+ android:layout_width="0dp"
+ android:layout_height="1dp"
+ android:layout_weight="1"
+ android:visibility="invisible" />
+
+ <FrameLayout
+ android:id="@+id/filmstrip_bottom_control_viewer_wrapper"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:visibility="gone">
+
+ <ImageButton
+ android:id="@+id/filmstrip_bottom_control_view"
+ style="@style/FilmstripBottomControlButton"
+ android:layout_gravity="center"
+ android:src="@drawable/ic_view_photosphere"
+ android:visibility="gone" />
+
+ <ImageButton
+ android:id="@+id/filmstrip_bottom_control_tiny_planet"
+ style="@style/FilmstripBottomControlButton"
+ android:layout_gravity="center"
+ android:src="@drawable/ic_menu_tiny_planet"
+ android:visibility="gone" />
+ </FrameLayout>
+
+ <View
+ android:id="@+id/filmstrip_bottom_control_middle_filler"
+ android:layout_width="0dp"
+ android:layout_height="1dp"
+ android:layout_weight="1"
+ android:visibility="invisible" />
+
+ <ImageButton
+ android:id="@+id/filmstrip_bottom_control_edit"
+ style="@style/FilmstripBottomControlButton"
+ android:src="@drawable/ic_menu_edit_holo_dark"
+ android:visibility="gone" />
+
+ <View
+ android:layout_width="0dp"
+ android:layout_height="1dp"
+ android:layout_weight="1"
+ android:visibility="invisible" />
+
+ </LinearLayout>
+
<ImageButton
android:id="@+id/filmstrip_bottom_control_delete"
style="@style/FilmstripBottomControlButton"
@@ -73,7 +101,7 @@
<!-- A filler view -->
<View
android:layout_width="0dp"
- android:layout_height="match_parent"
+ android:layout_height="1dp"
android:layout_weight="1"
android:visibility="invisible" />
diff --git a/res/layout/generic_module.xml b/res/layout/generic_module.xml
index fcd5534..e223fcd 100644
--- a/res/layout/generic_module.xml
+++ b/res/layout/generic_module.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
+<!--
+ Copyright (C) 2013 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,14 +16,19 @@
-->
<!-- This layout is shared by phone and tablet in landscape orientation. -->
<merge xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_height="match_parent"
- android:layout_width="match_parent">
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" >
<TextureView
android:id="@+id/preview_content"
android:layout_width="match_parent"
android:layout_height="match_parent" />
+ <com.android.camera.ui.FocusOverlay
+ android:id="@+id/focus_overlay"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" />
+
<com.android.camera.ui.CaptureAnimationOverlay
android:id="@+id/capture_overlay"
android:layout_width="match_parent"
@@ -33,42 +39,12 @@
android:id="@+id/preview_overlay"
android:layout_width="match_parent"
android:layout_height="match_parent" />
+
<FrameLayout
android:id="@+id/module_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" />
- <com.android.camera.ui.RotatableLinearLayout
- android:id="@+id/indicator_bottombar_wrapper"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
- <com.android.camera.widget.IndicatorOverlay
- android:id="@+id/indicator_overlay"
- android:layout_width="match_parent"
- android:layout_height="0px"
- android:layout_weight="1"
- android:padding="@dimen/indicator_overlay_padding"
- android:layout_gravity="top|center_horizontal" >
- <LinearLayout
- android:id="@+id/indicator_overlay_icons"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:background="@drawable/bg_indicators"
- android:layout_gravity="bottom|right" >
- <ImageView
- android:id="@+id/refocus_indicator"
- style="@style/IndicatorIcon" />
- <ImageView
- android:id="@+id/hdr_indicator"
- style="@style/IndicatorIcon" />
- <ImageView
- android:id="@+id/flash_indicator"
- style="@style/IndicatorIcon" />
- </LinearLayout>
- </com.android.camera.widget.IndicatorOverlay>
+ <include layout="@layout/indicator_bottombar" />
- <include layout="@layout/bottom_bar" />
- </com.android.camera.ui.RotatableLinearLayout>
-</merge>
+</merge>
\ No newline at end of file
diff --git a/res/layout/indicator_bottombar.xml b/res/layout/indicator_bottombar.xml
new file mode 100644
index 0000000..f17f4f7
--- /dev/null
+++ b/res/layout/indicator_bottombar.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!-- This layout is shared by phone and tablet in landscape orientation. -->
+<merge xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent">
+
+ <com.android.camera.ui.RotatableLinearLayout
+ android:id="@+id/indicator_bottombar_wrapper"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical" >
+ <com.android.camera.widget.IndicatorOverlay
+ android:id="@+id/indicator_overlay"
+ android:layout_width="match_parent"
+ android:layout_height="0px"
+ android:layout_weight="1"
+ android:padding="@dimen/indicator_overlay_padding"
+ android:layout_gravity="top|center_horizontal" >
+ <LinearLayout
+ android:id="@+id/indicator_overlay_icons"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:background="@drawable/bg_options_indicator"
+ android:layout_gravity="bottom|right" >
+ <ImageView
+ android:id="@+id/panorama_indicator"
+ style="@style/IndicatorIcon" />
+ <ImageView
+ android:id="@+id/refocus_indicator"
+ style="@style/IndicatorIcon" />
+ <ImageView
+ android:id="@+id/hdr_indicator"
+ style="@style/IndicatorIcon" />
+ <ImageView
+ android:id="@+id/flash_indicator"
+ style="@style/IndicatorIcon" />
+ </LinearLayout>
+ </com.android.camera.widget.IndicatorOverlay>
+
+ <include layout="@layout/bottom_bar" />
+ </com.android.camera.ui.RotatableLinearLayout>
+
+</merge>
diff --git a/res/layout/photo_module.xml b/res/layout/photo_module.xml
index 778ae17..250819b 100644
--- a/res/layout/photo_module.xml
+++ b/res/layout/photo_module.xml
@@ -24,10 +24,6 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center">
- <com.android.camera.ui.FocusOverlay
- android:id="@+id/focus_overlay"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
<ImageView
android:id="@+id/review_image"
android:layout_width="match_parent"
diff --git a/res/layout/video_module.xml b/res/layout/video_module.xml
index f2de26b..4f249db 100644
--- a/res/layout/video_module.xml
+++ b/res/layout/video_module.xml
@@ -21,10 +21,6 @@
style="@style/ViewfinderLabelLayout">
<include layout="@layout/viewfinder_labels_video" android:id="@+id/labels" />
</com.android.camera.ui.RotateLayout>
- <com.android.camera.ui.FocusOverlay
- android:id="@+id/focus_overlay"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
<ImageView android:id="@+id/review_image"
android:layout_height="match_parent"
android:layout_width="match_parent"
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index f33cc29..3ea1f5b 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Videokamera-instellings"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Prentgrootte"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 M pieksels"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 M pieksels"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 M pieksels"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 M pieksels"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 M pieksels (16:9)"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 565f3bb..0b2bdec 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"የካምኮርደር ቅንብሮች"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"የምስል መጠን"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13ሚ ፒክሰሎች"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10ሜ ፒክስሎች"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8ሚ ፒክሰሎች"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5ሚ ፒክሰሎች"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4ሚ ፒክሰል (16:9)"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index bc36843..c7d7d8a 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"إعدادات كاميرا الفيديو"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"حجم الصورة"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 ميغا بكسل"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 ميغا بكسل"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 ميغا بكسل"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 ميغا بكسل"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 ميغا بكسل (16:9)"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 3145069..204186e 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Настройки на видеокамерата"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Размер на снимката"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 мегапиксела"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 мегапиксела"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 мегапиксела"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 мегапиксела"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 мегапиксела (16:9)"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index e156a8f..fd201f0 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Configuració de la càmera de vídeo"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Mida de la foto"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 Mp"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 megapíxels"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 Mp"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 Mp"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 Mp (16:9)"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index f33785f..cd71e05 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Nastavení videokamery"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Velikost fotografie"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 Mpx"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 Mpx"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 Mpx"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 Mpx"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 Mpx (16:9)"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index dc1c607..53c0c40 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Indstillinger for Videokamera"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Billedstørrelse"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 megapixels"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 megapixels"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 megapixels"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 megapixels"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 M pixels (16:9)"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 4f672bc..2312ef4 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Camcorder-Einstellungen"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Bildgröße"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 MP"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 Megapixel"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 MP"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 MP"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 MP (16:9)"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 343fcfa..2a4b941 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Ρυθμίσεις βιντεοκάμερας"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Μέγεθος εικόνας"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13M εικονοστοιχεία"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 M pixel"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8M εικονοστοιχεία"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5M εικονοστοιχεία"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 εκ.εικονοστ.(16:9)"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 2519e2d..1633471 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Camcorder settings"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Picture size"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 M pixels"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 Megapixels"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 M pixels"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 M pixels"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 M pixels (16:9)"</string>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 2519e2d..1633471 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Camcorder settings"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Picture size"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 M pixels"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 Megapixels"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 M pixels"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 M pixels"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 M pixels (16:9)"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index edb1d18..754b967 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Configuración de cámara de video"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Tamaño de imagen"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 megapíxeles"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 MP"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 megapíxeles"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 megapíxeles"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 MP (16:9)"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 11d28a5..225c132 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Ajustes de videocámara"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Tamaño de imagen"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 MP"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 MP"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 MP"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 MP"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 MP (16:9)"</string>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
index 164d77f..2c3d13b 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et-rEE/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Videokaamera seaded"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Pildi suurus"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 megapikslit"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 megapikslit"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 megapikslit"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 megapikslit"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4M pikslit (16 : 9)"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index fa9ead6..8081550 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"تنظیمات دوربین فیلمبرداری"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"اندازه تصویر"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"۱۳ مگاپیکسل"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"۱۰ مگاپیکسل"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"۸ مگاپیکسل"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"۵ مگاپیکسل"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"۴ مگاپیکسل (۱۶:۹)"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 697a7f7..8655bd7 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Videokameran asetukset"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Kuvan koko"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 megapikseliä"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 megapikseliä"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 megapikseliä"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 megapikseliä"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 megapiks. (16:9)"</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 6a1cc5f..bf077d7 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Paramètres de la caméra"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Taille de l\'image"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 mégapixels"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 mégapixels"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 mégapixels"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 mégapixels"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 mégapixels (16:9)"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 9e3d8ca..c7a950b 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Paramètres de la caméra"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Taille de l\'image"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 mégapixels"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 mégapixels"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 mégapixels"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 mégapixels"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 mégapixels (16:9)"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 7802d66..c9ec5e6 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"कैमकॉर्डर सेटिंग"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"फ़ोटो आकार"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13M पिक्सेल"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10M पिक्सेल"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8M पिक्सेल"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5M पिक्सेल"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4M पिक्सेल (16:9)"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 5f97b39..0ad8f8d 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Postavke kamere"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Veličina slike"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 megapiksela"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 megapiksela"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 megapiksela"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 megapiksela"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 megapiksela (16:9)"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index f602248..30ed114 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Videokamera beállításai"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Képméret"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 megapixel"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 megapixel"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 megapixel"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 megapixel"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 megapixel (16:9)"</string>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
index c5f6a45..58c846e 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy-rAM/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Տեսախցիկի կարգավորումներ"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Նկարի չափը"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13Մ պիքսել"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10Մ փիքսել"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8Մ պիքսել"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5Մ պիքսել"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4Մ պիքսել (16:9)"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 199716e..aa3e632 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Setelan perekam video"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Ukuran gambar"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 M piksel"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 megapiksel"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 M piksel"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 M piksel"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4M piksel (16:9)"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 581c20a..2590c55 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Impostazioni videocamera"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Dimensioni immagine"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 Mpixel"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 Mpixel"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 Mpixel"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 Mpixel"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 Mpixel (16:9)"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 51e446f..4615d7a 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"הגדרות של מצלמת וידאו"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"גודל תמונה"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 מגה פיקסל"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10M פיקסלים"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 מגה פיקסל"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 מגה פיקסל"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 מגה פיקסל (16:9)"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index db2db01..0e6c235 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"ビデオ録画の設定"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"画像サイズ"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13メガピクセル"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10Mピクセル"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8メガピクセル"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5メガピクセル"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4Mピクセル(16:9)"</string>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
index 92eeae0..ec00390 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"ვიდეოჩამწერის პარამეტრები"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"სურათის ზომა"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 მეგაპიქსელი"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 მეგაპიქსელი"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 მეგაპიქსელი"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 მეგაპიქსელი"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 მეგაპიქსელი (16:9)"</string>
diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml
index 4e7f1a6..82fbf03 100644
--- a/res/values-km-rKH/strings.xml
+++ b/res/values-km-rKH/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"ការកំណត់ម៉ាស៊ីនថតវីដេអូ"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"ទំហំរូបភាព"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"១៣ មេហ្គាភីកសែល"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"១០ មេហ្គាភីកសែល"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"៨ មេហ្គាភីកសែល"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"៥ មេហ្គាភីកសែល"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"៤ មេហ្គាភីកសែល (16:9)"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 9fe7050..55b997f 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"캠코더 설정"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"사진 크기"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"1300만 화소"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"1천만 픽셀"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"800만 화소"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"500만 화소"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4백만 화소(16:9)"</string>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml
index 5d3abb5..74d7854 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo-rLA/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"ຕັ້ງຄ່າກ້ອງວິດີໂອ"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"ຂະໜາດຮູບ"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 ລ້ານພິກເຊວ"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 ລ້ານພິກເຊວ"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 ລ້ານພິກເຊວ"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 ລ້ານພິກເຊວ"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 ລ້ານພິກເຊວ (16:9)"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 70fb36e..4469bf0 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Vaizdo kameros nustatymai"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Nuotraukos dydis"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 megapikselių"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 megapikselių"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 megapikseliai"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 megapikseliai"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 megapiks. (16:9)"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 569e37e..55772a8 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Videokameras iestatījumi"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Attēla lielums"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 megapikseļi"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 megapikseļi"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 megapikseļi"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 megapikseļi"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 megapikseļi (16:9)"</string>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
index d41e5de..1c3c71f 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn-rMN/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Камерын тохиргоо"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Зургийн хэмжээ"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13M пиксел"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10M пиксел"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8M пиксел"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5M пиксел"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4M пиксел (16:9)"</string>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
index 9447fb0..6b71746 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Tetapan kamkorder"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Saiz gambar"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13M piksel"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10M piksel"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8M piksel"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5M piksel"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4M piksel (16:9)"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 06c0f91..374f187 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Videoinnstillinger"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Bildestørrelse"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 megapiksler"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 megapiksler"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 megapiksler"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 megapiksler"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4M piksler (16:9)"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 7aab02d..95d37c1 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Camcorderinstellingen"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Grootte van foto"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 megapixel"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 megapixel"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 megapixel"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 megapixel"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 megapixel (16:9)"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 9a069e5..dc1cf45 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Ustawienia kamery"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Rozmiar zdjęcia"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 Mpix"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 megapikseli"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 Mpix"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 Mpix"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 megapiksele (16:9)"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 8fe7d33..b0b8d18 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Definições da câmara de vídeo"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Tamanho da imagem"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 MP"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 megapíxeis"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 MP"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 MP"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 megapíxeis (16:9)"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index a17d018..4f33aa3 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Configurações da câmera de vídeo"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Tamanho da imagem"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 MP"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 MP"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 MP"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 MP"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 MP (16:9)"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index d977bdd..acabcf5 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Setările camerei video"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Dimensiune fotografie"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 MP"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 megapixeli"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 MP"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 MP"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 MP (16:9)"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index c219485..212b1b3 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Настройки видеокамеры"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Размер изображения"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 Мпикс."</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 Мпикс."</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 Мпикс."</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 Мпикс."</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 Мпикс. (16:9)"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 0ebc644..ae993fa 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Nastavenie videokamery"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Veľkosť fotografie"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 Mpx"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 Mpx"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 Mpx"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 Mpx"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 megapixely (16:9)"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 9adab19..cc44fc5 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Nastavitve videokamere"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Velikost slike"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 M slikovnih pik"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 mio. slikovnih pik"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 M slikovnih pik"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 M slikovnih pik"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 mio. pik (16 : 9)"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index efe65a7..c4af5ed 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Подешавања камкордера"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Величина слике"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 мегапиксела"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 мегапиксела"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 мегапиксела"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 мегапиксела"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 мегапиксела (16:9)"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 7385cf6..8129c69 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Videokamerainställningar"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Bildstorlek"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 megapixlar"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 megapixlar"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 megapixlar"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 megapixlar"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 megapixlar (16:9)"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 163fec4..a9b71ff 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Mipangilio ya kamkoda"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Ukubwa wa picha"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"Megapikseli 13"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"Megapikseli 10"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"Megapikseli 8"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"Megapikseli 5"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"Pikseli milioni 4 (16:09)"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 964b152..6ab5b91 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"การตั้งค่ากล้องวิดีโอ"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"ขนาดของภาพ"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 ล้านพิกเซล"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 ล้านพิกเซล"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 ล้านพิกเซล"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 ล้านพิกเซล"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4M พิกเซล (16:9)"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 03b7134..509db39 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Mga setting ng camcorder"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Laki ng larawan"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13M pixel"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10M pixel"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8M pixel"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5M pixel"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4M pixels (16:9)"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index d729575..cf9bf5c 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Video kamera ayarları"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Resim boyutu"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 megapiksel"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 M piksel"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 megapiksel"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 megapiksel"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 M piksel (16:9)"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 5a5a28b..2c5febe 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Налаштування відеокамери"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Розмір фото"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13 Мпікс."</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10 Мпікс."</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 Мпікс."</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 Мпікс."</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4 Мпікс. (16:9)"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 358612b..a89a97f 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Cài đặt máy quay video"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Kích thước hình ảnh"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13M pixel"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10M pixel"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8M pixel"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5M pixel"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4M pixel (16:9)"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 6b63a85..766295a 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"摄像机设置"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"照片尺寸"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"1300万像素"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"1000万像素"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"800万像素"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"500万像素"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"400万像素 (16:9)"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index a2b114c..b6e23ee 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"攝錄機設定"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"相片大小"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"1,300 萬像素"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"1 千萬像素"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8 百萬像素"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5 百萬像素"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"400 萬像素 (16:9)"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index dda0c94..dee25fc 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"攝錄影機設定"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"圖片大小"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"1300 萬像素"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"1000 萬像素"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"800 萬像素"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"500 萬像素"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"400 萬像素 (16:9)"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 332984e..d9b4c8d 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -116,6 +116,7 @@
<string name="pref_camcorder_settings_category" msgid="3553148484755353397">"Izilungiselelo zevidiyo-khamela"</string>
<string name="pref_camera_picturesize_title" msgid="686045304547541815">"Usayizi wesithombe"</string>
<string name="pref_camera_picturesize_entry_13mp" msgid="6728485576074234195">"13M amaphikiseli"</string>
+ <string name="pref_camera_picturesize_entry_10mp" msgid="2768659791396478466">"10M amaphikiseli"</string>
<string name="pref_camera_picturesize_entry_8mp" msgid="7088352012301633667">"8M amaphikiseli"</string>
<string name="pref_camera_picturesize_entry_5mp" msgid="1501745661448065284">"5M amaphikiseli"</string>
<string name="pref_camera_picturesize_entry_4mp_wide" msgid="3338812763544573634">"4M amaphikiseli (16:9)"</string>
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 7395607..486e616 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -470,11 +470,21 @@
<item>@drawable/ic_hdr_plus_on</item>
</array>
+ <array name="pref_camera_hdr_icons" translatable="false">
+ <item>@drawable/ic_hdr_off</item>
+ <item>@drawable/ic_hdr_on</item>
+ </array>
+
<array name="pref_camera_hdr_plus_indicator_icons" translatable="false">
<item>@drawable/ic_hdr_plus_off_indicator</item>
<item>@drawable/ic_hdr_plus_on_indicator</item>
</array>
+ <array name="pref_camera_hdr_indicator_icons" translatable="false">
+ <item>@drawable/ic_hdr_off_indicator</item>
+ <item>@drawable/ic_hdr_on_indicator</item>
+ </array>
+
<string-array name="pref_camera_hdr_plus_entryvalues" translatable="false">
<item>@string/setting_off_value</item>
<item>@string/setting_on_value</item>
@@ -490,11 +500,6 @@
<item>@string/pref_camera_scenemode_entry_turn_hdr_off</item>
</string-array>
- <array name="pref_camera_hdr_icons" translatable="false">
- <item>@drawable/ic_hdr_off</item>
- <item>@drawable/ic_hdr</item>
- </array>
-
<string-array name="pref_camera_hdr_entryvalues" translatable="false">
<item>@string/setting_off_value</item>
<item>@string/setting_on_value</item>
@@ -557,6 +562,11 @@
<item>@drawable/ic_refocus_on_indicator</item>
</array>
+ <string-array name="pref_camera_pano_orientation_entryvalues">
+ <item>@string/pano_orientation_horizontal</item>
+ <item>@string/pano_orientation_vertical</item>
+ </string-array>
+
<array name="settings_toggle_icons" translatable="false">
<item>@drawable/ic_options</item>
<item>@drawable/ic_options_active</item>
@@ -579,8 +589,8 @@
<item>@integer/camera_mode_photo</item>
<item>@integer/camera_mode_video</item>
<item>@integer/camera_mode_craft</item>
- <item>@integer/camera_mode_photosphere</item>
<item>@integer/camera_mode_panorama</item>
+ <item>@integer/camera_mode_photosphere</item>
<item>@integer/camera_mode_timelapse</item>
<item>@integer/camera_mode_setting</item>
</integer-array>
@@ -643,8 +653,8 @@
<item>@drawable/ic_camera_normal</item>
<item>@drawable/ic_video_normal</item>
<item>@drawable/ic_camera_normal</item>
- <item>@drawable/ic_camera_normal</item>
- <item>@drawable/ic_camera_normal</item>
+ <item>@null</item>
+ <item>@drawable/ic_panorama_normal</item>
<item>@null</item>
<item>@null</item>
<item>@drawable/ic_craft_normal</item>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 99b9152..fff0349 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -159,7 +159,7 @@
<!-- Filmstrip bottom controls -->
<dimen name="filmstrip_bottom_control_size">48dp</dimen>
- <dimen name="filmstrip_bottom_control_spacing">8dp</dimen>
+ <dimen name="filmstrip_bottom_control_spacing">16dp</dimen>
<!-- Bottom bar ui -->
<dimen name="bottom_bar_height_min">80dp</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4a09e89..e380bab 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -729,4 +729,10 @@
<!-- A message shown to the user, indicating that an HDR+ photo is being processed. [CHAR LIMIT=25] -->
<string name="processing_hdr_plus">Processing HDR+ …</string>
+
+ <string name="pano_orientation_horizontal" translatable="false">pano_horizontal</string>
+ <string name="pano_orientation_vertical" translatable="false">pano_vertical</string>
+
+ <string name="tag_enabled_id" translatable="false">enabled_id</string>
+
</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 3f732c5..be00503 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -277,7 +277,6 @@
<item name="android:alpha">1.0</item>
</style>
<style name="FilmstripBottomControlButton">
- <item name="android:layout_margin">@dimen/filmstrip_bottom_control_spacing</item>
<item name="android:layout_width">@dimen/filmstrip_bottom_control_size</item>
<item name="android:layout_height">@dimen/filmstrip_bottom_control_size</item>
<item name="android:background">@drawable/transparent_button_background</item>
@@ -285,9 +284,8 @@
<item name="android:layout_gravity">center_vertical</item>
</style>
<style name="IndicatorIcon">
- <item name="android:layout_width">@dimen/indicator_icon_radius</item>
- <item name="android:layout_height">@dimen/indicator_icon_radius</item>
- <item name="android:scaleType">center</item>
+ <item name="android:layout_width">wrap_content</item>
+ <item name="android:layout_height">wrap_content</item>
<item name="android:background">@null</item>
</style>
</resources>
diff --git a/src/com/android/camera/ButtonManager.java b/src/com/android/camera/ButtonManager.java
index 22707bf..7cf909c 100644
--- a/src/com/android/camera/ButtonManager.java
+++ b/src/com/android/camera/ButtonManager.java
@@ -38,11 +38,14 @@
public static final int BUTTON_TORCH = 1;
public static final int BUTTON_CAMERA = 2;
public static final int BUTTON_HDRPLUS = 3;
- public static final int BUTTON_REFOCUS = 4;
- public static final int BUTTON_CANCEL = 5;
- public static final int BUTTON_DONE = 6;
- public static final int BUTTON_RETAKE = 7;
- public static final int BUTTON_REVIEW = 8;
+ public static final int BUTTON_HDR = 4;
+ public static final int BUTTON_REFOCUS = 5;
+ public static final int BUTTON_CANCEL = 6;
+ public static final int BUTTON_DONE = 7;
+ public static final int BUTTON_RETAKE = 8;
+ public static final int BUTTON_REVIEW = 9;
+ public static final int BUTTON_PANO_HORIZONTAL = 10;
+ public static final int BUTTON_PANO_VERTICAL = 11;
/** For two state MultiToggleImageButtons, the off index. */
public static final int OFF = 0;
@@ -52,11 +55,11 @@
/** A reference to the application's settings manager. */
private final SettingsManager mSettingsManager;
- /** Bottom bar options buttons. */
- private MultiToggleImageButton mButtonFlash; // same as torch.
- private MultiToggleImageButton mButtonCamera;
- private MultiToggleImageButton mButtonHdrPlus;
- private MultiToggleImageButton mButtonRefocus;
+ /** Bottom bar options toggle buttons. */
+ private MultiToggleImageButton mButtonPos1;
+ private MultiToggleImageButton mButtonPos2;
+ private MultiToggleImageButton mButtonPos3;
+ private MultiToggleImageButton mButtonPos4;
/** Intent UI buttons. */
private ImageButton mButtonCancel;
@@ -122,13 +125,13 @@
* Gets references to all known buttons.
*/
private void getButtonsReferences(View root) {
- mButtonFlash
- = (MultiToggleImageButton) root.findViewById(R.id.flash_toggle_button);
- mButtonCamera
+ mButtonPos1
= (MultiToggleImageButton) root.findViewById(R.id.camera_toggle_button);
- mButtonHdrPlus
+ mButtonPos2
+ = (MultiToggleImageButton) root.findViewById(R.id.flash_toggle_button);
+ mButtonPos3
= (MultiToggleImageButton) root.findViewById(R.id.hdr_plus_toggle_button);
- mButtonRefocus
+ mButtonPos4
= (MultiToggleImageButton) root.findViewById(R.id.refocus_toggle_button);
mButtonCancel
= (ImageButton) root.findViewById(R.id.cancel_button);
@@ -201,30 +204,35 @@
private MultiToggleImageButton getButtonOrError(int buttonId) {
switch (buttonId) {
case BUTTON_FLASH:
- if (mButtonFlash == null) {
+ if (mButtonPos2 == null) {
throw new IllegalStateException("Flash button could not be found.");
}
- return mButtonFlash;
+ return mButtonPos2;
case BUTTON_TORCH:
- if (mButtonFlash == null) {
+ if (mButtonPos2 == null) {
throw new IllegalStateException("Torch button could not be found.");
}
- return mButtonFlash;
+ return mButtonPos2;
case BUTTON_CAMERA:
- if (mButtonCamera == null) {
+ if (mButtonPos1 == null) {
throw new IllegalStateException("Camera button could not be found.");
}
- return mButtonCamera;
+ return mButtonPos1;
case BUTTON_HDRPLUS:
- if (mButtonHdrPlus == null) {
+ if (mButtonPos3 == null) {
+ throw new IllegalStateException("Hdr plus button could not be found.");
+ }
+ return mButtonPos3;
+ case BUTTON_HDR:
+ if (mButtonPos3 == null) {
throw new IllegalStateException("Hdr button could not be found.");
}
- return mButtonHdrPlus;
+ return mButtonPos3;
case BUTTON_REFOCUS:
- if (mButtonRefocus == null) {
+ if (mButtonPos4 == null) {
throw new IllegalStateException("Refocus button could not be found.");
}
- return mButtonRefocus;
+ return mButtonPos4;
default:
throw new IllegalArgumentException("button not known by id=" + buttonId);
}
@@ -237,6 +245,16 @@
*/
private ImageButton getImageButtonOrError(int buttonId) {
switch (buttonId) {
+ case BUTTON_PANO_VERTICAL:
+ if (mButtonPos1 == null) {
+ throw new IllegalStateException("Flash button could not be found.");
+ }
+ return (ImageButton) mButtonPos1;
+ case BUTTON_PANO_HORIZONTAL:
+ if (mButtonPos2 == null) {
+ throw new IllegalStateException("Flash button could not be found.");
+ }
+ return (ImageButton) mButtonPos2;
case BUTTON_CANCEL:
if (mButtonCancel == null) {
throw new IllegalStateException("Cancel button could not be found.");
@@ -266,40 +284,26 @@
* Enable a known button by id, with a state change callback and
* a resource id that points to an array of drawables.
*/
- public void enableButton(int buttonId, ButtonCallback cb, int resIdImages) {
+ public void enableButton(int buttonId, ButtonCallback cb) {
MultiToggleImageButton button = getButtonOrError(buttonId);
switch (buttonId) {
case BUTTON_FLASH:
- if (!mSettingsManager.isCameraBackFacing()) {
- disableButton(BUTTON_FLASH);
- return;
- }
- enableFlashButton(button, cb, resIdImages);
+ enableFlashButton(button, cb, R.array.camera_flashmode_icons);
break;
case BUTTON_TORCH:
- if (!mSettingsManager.isCameraBackFacing()) {
- disableButton(BUTTON_TORCH);
- return;
- }
- enableTorchButton(button, cb, resIdImages);
+ enableTorchButton(button, cb, R.array.video_flashmode_icons);
break;
case BUTTON_CAMERA:
- int modeIndex = mAppController.getCurrentModuleIndex();
- if (modeIndex == sGcamIndex && mSettingsManager.isHdrPlusOn()) {
- disableButton(BUTTON_CAMERA);
- return;
- }
- enableCameraButton(button, cb, resIdImages);
+ enableCameraButton(button, cb, R.array.camera_id_icons);
break;
case BUTTON_HDRPLUS:
- if (!mSettingsManager.isCameraBackFacing()) {
- disableButton(BUTTON_HDRPLUS);
- return;
- }
- enableHdrPlusButton(button, cb, resIdImages);
+ enableHdrPlusButton(button, cb, R.array.pref_camera_hdr_plus_icons);
+ break;
+ case BUTTON_HDR:
+ enableHdrPlusButton(button, cb, R.array.pref_camera_hdr_icons);
break;
case BUTTON_REFOCUS:
- enableRefocusButton(button, cb, resIdImages);
+ enableRefocusButton(button, cb, R.array.refocus_icons);
break;
default:
throw new IllegalArgumentException("button not known by id=" + buttonId);
@@ -311,6 +315,7 @@
mListener.onButtonEnabledChanged(this, buttonId);
}
}
+ button.setTag(R.string.tag_enabled_id, (Integer) buttonId);
if (button.getVisibility() != View.VISIBLE) {
button.setVisibility(View.VISIBLE);
@@ -336,6 +341,14 @@
mListener.onButtonEnabledChanged(this, buttonId);
}
}
+ button.setTag(R.string.tag_enabled_id, (Integer) buttonId);
+
+ if (button.getVisibility() != View.VISIBLE) {
+ button.setVisibility(View.VISIBLE);
+ if (mListener != null) {
+ mListener.onButtonVisibilityChanged(this, buttonId);
+ }
+ }
}
/**
@@ -351,6 +364,14 @@
mListener.onButtonEnabledChanged(this, buttonId);
}
}
+ button.setTag(R.string.tag_enabled_id, (Integer) buttonId);
+
+ if (button.getVisibility() != View.VISIBLE) {
+ button.setVisibility(View.VISIBLE);
+ if (mListener != null) {
+ mListener.onButtonVisibilityChanged(this, buttonId);
+ }
+ }
}
/**
@@ -364,6 +385,7 @@
mListener.onButtonEnabledChanged(this, buttonId);
}
}
+ button.setTag(R.string.tag_enabled_id, null);
if (button.getVisibility() != View.VISIBLE) {
button.setVisibility(View.VISIBLE);
@@ -377,7 +399,12 @@
* Hide a button by id.
*/
public void hideButton(int buttonId) {
- MultiToggleImageButton button = getButtonOrError(buttonId);
+ View button;
+ try {
+ button = (View) getButtonOrError(buttonId);
+ } catch (IllegalArgumentException e) {
+ button = (View) getImageButtonOrError(buttonId);
+ }
if (button.getVisibility() == View.VISIBLE) {
button.setVisibility(View.INVISIBLE);
if (mListener != null) {
@@ -387,18 +414,34 @@
}
/**
- * Check if a button is enabled.
+ * Check if a button is enabled with the given button id..
*/
public boolean isEnabled(int buttonId) {
- MultiToggleImageButton button = getButtonOrError(buttonId);
- return button.isEnabled();
+ View button;
+ try {
+ button = (View) getButtonOrError(buttonId);
+ } catch (IllegalArgumentException e) {
+ button = (View) getImageButtonOrError(buttonId);
+ }
+
+ Integer enabledId = (Integer) button.getTag(R.string.tag_enabled_id);
+ if (enabledId != null) {
+ return (enabledId.intValue() == buttonId) && button.isEnabled();
+ } else {
+ return false;
+ }
}
/**
* Check if a button is visible.
*/
public boolean isVisible(int buttonId) {
- MultiToggleImageButton button = getButtonOrError(buttonId);
+ View button;
+ try {
+ button = (View) getButtonOrError(buttonId);
+ } catch (IllegalArgumentException e) {
+ button = (View) getImageButtonOrError(buttonId);
+ }
return (button.getVisibility() == View.VISIBLE);
}
@@ -472,22 +515,12 @@
if (cb != null) {
cb.onStateChanged(cameraId);
}
- onCameraChanged();
+ mAppController.getCameraAppUI().onChangeCamera();
}
});
}
/**
- * Re-sync the bottom bar buttons with the current module.
- */
- private void onCameraChanged() {
- ModuleController moduleController = mAppController.getCurrentModuleController();
- if (moduleController != null) {
- moduleController.customizeButtons(this);
- }
- }
-
- /**
* Enable an hdr plus button.
*/
private void enableHdrPlusButton(MultiToggleImageButton button,
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java
index 6b67eb5..e8b33b8 100644
--- a/src/com/android/camera/CameraActivity.java
+++ b/src/com/android/camera/CameraActivity.java
@@ -1027,10 +1027,11 @@
int modeIndex = -1;
int photoIndex = getResources().getInteger(R.integer.camera_mode_photo);
+ int videoIndex = getResources().getInteger(R.integer.camera_mode_video);
int gcamIndex = getResources().getInteger(R.integer.camera_mode_gcam);
if (MediaStore.INTENT_ACTION_VIDEO_CAMERA.equals(getIntent().getAction())
|| MediaStore.ACTION_VIDEO_CAPTURE.equals(getIntent().getAction())) {
- modeIndex = photoIndex;
+ modeIndex = videoIndex;
} else if (MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA.equals(getIntent().getAction())
|| MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE.equals(getIntent()
.getAction())) {
@@ -1068,7 +1069,6 @@
syncBottomBarColor();
syncBottomBarShutterIcon();
mCurrentModule.init(this, isSecureCamera(), isCaptureIntent());
- mCurrentModule.customizeButtons(getButtonManager());
if (!mSecureCamera) {
mFilmstripController.setDataAdapter(mDataAdapter);
@@ -1434,7 +1434,7 @@
}
if (refocusOn) {
modeIndex = getResources().getInteger(R.integer.camera_mode_refocus);
- } else if (hdrPlusOn) {
+ } else if (hdrPlusOn && GcamHelper.hasGcamCapture()) {
modeIndex = getResources().getInteger(R.integer.camera_mode_gcam);
} else {
// Do nothing, keep MODULE_CRAFT.
@@ -1619,7 +1619,6 @@
syncBottomBarColor();
syncBottomBarShutterIcon();
module.init(this, isSecureCamera(), isCaptureIntent());
- module.customizeButtons(getButtonManager());
module.resume();
module.onPreviewVisibilityChanged(!mFilmstripVisible);
}
diff --git a/src/com/android/camera/FocusOverlayManager.java b/src/com/android/camera/FocusOverlayManager.java
index 5a211cd..d306cfc 100644
--- a/src/com/android/camera/FocusOverlayManager.java
+++ b/src/com/android/camera/FocusOverlayManager.java
@@ -100,8 +100,8 @@
public void clearFocus();
public void setFocusPosition(int x, int y);
public void onFocusStarted();
- public void onFocusSucceeded(boolean timeOut);
- public void onFocusFailed(boolean timeOut);
+ public void onFocusSucceeded();
+ public void onFocusFailed();
public void pauseFaceDetection();
public void resumeFaceDetection();
}
@@ -324,7 +324,7 @@
mUI.setFocusPosition(mPreviewRect.centerX(), mPreviewRect.centerY());
mUI.onFocusStarted();
} else if (!moving) {
- mUI.onFocusSucceeded(true);
+ mUI.onFocusSucceeded();
}
mPreviousMoving = moving;
}
@@ -353,10 +353,6 @@
calculateTapArea(x, y, 1.5f, mMeteringArea.get(0).rect);
}
- private void resetMeteringAreas() {
- mMeteringArea = null;
- }
-
public void onSingleTapUp(int x, int y) {
if (!mInitialized || mState == STATE_FOCUSING_SNAP_ON_FINISH) return;
@@ -504,11 +500,11 @@
} else {
if (CameraUtil.FOCUS_MODE_CONTINUOUS_PICTURE.equals(mFocusMode)) {
// TODO: check HAL behavior and decide if this can be removed.
- mUI.onFocusSucceeded(false);
+ mUI.onFocusSucceeded();
} else if (mState == STATE_SUCCESS) {
- mUI.onFocusSucceeded(false);
+ mUI.onFocusSucceeded();
} else if (mState == STATE_FAIL) {
- mUI.onFocusFailed(false);
+ mUI.onFocusFailed();
}
}
}
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java
index 6bfc07e..147ac65 100644
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -50,6 +50,7 @@
import com.android.camera.PhotoModule.NamedImages.NamedEntity;
import com.android.camera.app.AppController;
+import com.android.camera.app.CameraAppUI;
import com.android.camera.app.CameraManager.CameraAFCallback;
import com.android.camera.app.CameraManager.CameraAFMoveCallback;
import com.android.camera.app.CameraManager.CameraPictureCallback;
@@ -62,6 +63,8 @@
import com.android.camera.exif.ExifInterface;
import com.android.camera.exif.ExifTag;
import com.android.camera.exif.Rational;
+import com.android.camera.hardware.HardwareSpec;
+import com.android.camera.hardware.HardwareSpecImpl;
import com.android.camera.module.ModuleController;
import com.android.camera.settings.SettingsManager;
import com.android.camera.ui.RotateTextToast;
@@ -340,7 +343,6 @@
mActivity.getCameraProvider().requestCamera(mCameraId);
- initializeControlByIntent();
mQuickCapture = mActivity.getIntent().getBooleanExtra(EXTRA_QUICK_CAPTURE, false);
mLocationManager = mActivity.getLocationManager();
mSensorManager = (SensorManager) (mActivity.getSystemService(Context.SENSOR_SERVICE));
@@ -353,8 +355,8 @@
}
private void initializeControlByIntent() {
- mUI.initializeControlByIntent();
if (mIsImageCaptureIntent) {
+ mActivity.getCameraAppUI().transitionToIntentLayout();
setupCaptureParams();
}
}
@@ -407,6 +409,7 @@
private void onCameraOpened() {
openCameraCommon();
+ initializeControlByIntent();
}
private void switchCamera() {
@@ -479,15 +482,67 @@
}
};
+ private final View.OnClickListener mCancelCallback = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ onCaptureCancelled();
+ }
+ };
+
+ private final View.OnClickListener mDoneCallback = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ onCaptureDone();
+ }
+ };
+
+ private final View.OnClickListener mRetakeCallback = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mActivity.getCameraAppUI().transitionToIntentLayout();
+ onCaptureRetake();
+ }
+ };
+
@Override
- public void customizeButtons(ButtonManager buttonManager) {
- mUI.customizeButtons(buttonManager, mCameraCallback, mHdrPlusCallback,
- mRefocusCallback);
+ public HardwareSpec getHardwareSpec() {
+ return new HardwareSpecImpl(mParameters);
+ }
+
+ @Override
+ public CameraAppUI.BottomBarUISpec getBottomBarSpec() {
+ CameraAppUI.BottomBarUISpec bottomBarSpec = new CameraAppUI.BottomBarUISpec();
+
+ bottomBarSpec.enableCamera = true;
+ bottomBarSpec.cameraCallback = mCameraCallback;
+ bottomBarSpec.enableFlash = true;
+
+ if (mActivity.getCurrentModuleIndex() ==
+ mActivity.getResources().getInteger(R.integer.camera_mode_photo)) {
+ bottomBarSpec.hideHdr= true;
+ bottomBarSpec.hideRefocus = true;
+ } else {
+ bottomBarSpec.enableHdr = true;
+ bottomBarSpec.hdrCallback = mHdrPlusCallback;
+ bottomBarSpec.enableRefocus = true;
+ bottomBarSpec.refocusCallback = mRefocusCallback;
+ }
+
+ if (isImageCaptureIntent()) {
+ bottomBarSpec.showCancel = true;
+ bottomBarSpec.cancelCallback = mCancelCallback;
+ bottomBarSpec.showDone = true;
+ bottomBarSpec.doneCallback = mDoneCallback;
+ bottomBarSpec.showRetake = true;
+ bottomBarSpec.retakeCallback = mRetakeCallback;
+ }
+
+ return bottomBarSpec;
}
// either open a new camera or switch cameras
private void openCameraCommon() {
- mUI.onCameraOpened(mParameters, mCameraCallback, mHdrPlusCallback, mRefocusCallback);
+ mUI.onCameraOpened(mParameters);
if (mIsImageCaptureIntent) {
// Set hdr plus to default: off.
SettingsManager settingsManager = mActivity.getSettingsManager();
diff --git a/src/com/android/camera/PhotoUI.java b/src/com/android/camera/PhotoUI.java
index dc67353..236e4c3 100644
--- a/src/com/android/camera/PhotoUI.java
+++ b/src/com/android/camera/PhotoUI.java
@@ -28,12 +28,10 @@
import android.view.MotionEvent;
import android.view.TextureView;
import android.view.View;
-import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewStub;
import com.android.camera.FocusOverlayManager.FocusUI;
-import com.android.camera.app.CameraAppUI;
import com.android.camera.app.CameraManager;
import com.android.camera.ui.FaceView;
import com.android.camera.ui.PreviewOverlay;
@@ -52,10 +50,10 @@
private final PreviewOverlay mPreviewOverlay;
private final FocusUI mFocusUI;
- private CameraActivity mActivity;
- private PhotoController mController;
+ private final CameraActivity mActivity;
+ private final PhotoController mController;
- private View mRootView;
+ private final View mRootView;
private SurfaceTexture mSurfaceTexture;
private FaceView mFaceView;
@@ -66,36 +64,10 @@
private int mPreviewWidth = 0;
private int mPreviewHeight = 0;
- private TextureView mTextureView;
+ private final TextureView mTextureView;
private float mAspectRatio = UNSET;
private final Object mSurfaceTextureLock = new Object();
- private ButtonManager.ButtonCallback mCameraCallback;
- private ButtonManager.ButtonCallback mHdrCallback;
- private ButtonManager.ButtonCallback mRefocusCallback;
-
- private final OnClickListener mCancelCallback = new OnClickListener() {
- @Override
- public void onClick(View v) {
- mController.onCaptureCancelled();
- }
- };
- private final OnClickListener mDoneCallback = new OnClickListener() {
- @Override
- public void onClick(View v) {
- mController.onCaptureDone();
- }
- };
- private final OnClickListener mRetakeCallback = new OnClickListener() {
- @Override
- public void onClick(View v) {
- customizeButtons(mActivity.getButtonManager(), mCameraCallback, mHdrCallback,
- mRefocusCallback);
- mActivity.getCameraAppUI().transitionToIntentLayout();
- mController.onCaptureRetake();
- }
- };
-
private final GestureDetector.OnGestureListener mPreviewGestureListener
= new GestureDetector.SimpleOnGestureListener() {
@Override
@@ -138,8 +110,8 @@
private class DecodeTask extends AsyncTask<Void, Void, Bitmap> {
private final byte [] mData;
- private int mOrientation;
- private boolean mMirror;
+ private final int mOrientation;
+ private final boolean mMirror;
public DecodeTask(byte[] data, int orientation, boolean mirror) {
mData = data;
@@ -186,7 +158,7 @@
ViewGroup moduleRoot = (ViewGroup) mRootView.findViewById(R.id.module_layout);
mActivity.getLayoutInflater().inflate(R.layout.photo_module,
- (ViewGroup) moduleRoot, true);
+ moduleRoot, true);
// display the view
mTextureView = (TextureView) mRootView.findViewById(R.id.preview_content);
initIndicators();
@@ -263,70 +235,16 @@
// TODO init toggle buttons on bottom bar here
}
- public void onCameraOpened(Camera.Parameters params,
- ButtonManager.ButtonCallback cameraCallback,
- ButtonManager.ButtonCallback hdrCallback,
- ButtonManager.ButtonCallback refocusCallback) {
-
- mCameraCallback = cameraCallback;
- mHdrCallback = hdrCallback;
- mRefocusCallback = refocusCallback;
-
+ public void onCameraOpened(Camera.Parameters params) {
initializeZoom(params);
}
- /**
- * Customize the mode options such that flash and camera
- * switching are enabled in simple photo mode, and flash, camera, refocus,
- * and hdr are enabled in advanced photo mode.
- */
- public void customizeButtons(ButtonManager buttonManager,
- ButtonManager.ButtonCallback cameraCallback,
- ButtonManager.ButtonCallback hdrCallback,
- ButtonManager.ButtonCallback refocusCallback) {
-
- buttonManager.enableButton(ButtonManager.BUTTON_CAMERA,
- cameraCallback, R.array.camera_id_icons);
- buttonManager.enableButton(ButtonManager.BUTTON_FLASH,
- null, R.array.camera_flashmode_icons);
-
- if (mActivity.getCurrentModuleIndex() ==
- mActivity.getResources().getInteger(R.integer.camera_mode_photo)) {
- // Simple photo mode.
- buttonManager.hideButton(ButtonManager.BUTTON_HDRPLUS);
- buttonManager.hideButton(ButtonManager.BUTTON_REFOCUS);
- } else {
- // Advanced photo mode.
- buttonManager.enableButton(ButtonManager.BUTTON_HDRPLUS,
- hdrCallback, R.array.pref_camera_hdr_plus_icons);
- buttonManager.enableButton(ButtonManager.BUTTON_REFOCUS,
- refocusCallback, R.array.refocus_icons);
- }
-
- if (mController.isImageCaptureIntent()) {
- buttonManager.enablePushButton(ButtonManager.BUTTON_CANCEL,
- mCancelCallback);
- buttonManager.enablePushButton(ButtonManager.BUTTON_DONE,
- mDoneCallback);
- buttonManager.enablePushButton(ButtonManager.BUTTON_RETAKE,
- mRetakeCallback);
- }
- }
-
public void animateCapture(final byte[] jpegData, int orientation, boolean mirror) {
// Decode jpeg byte array and then animate the jpeg
DecodeTask task = new DecodeTask(jpegData, orientation, mirror);
task.execute();
}
- public void initializeControlByIntent() {
- if (mController.isImageCaptureIntent()) {
- customizeButtons(mActivity.getButtonManager(), mCameraCallback, mHdrCallback,
- mRefocusCallback);
- mActivity.getCameraAppUI().transitionToIntentLayout();
- }
- }
-
// called from onResume but only the first time
public void initializeFirstTime() {
@@ -379,10 +297,7 @@
mDecodeTaskForReview = new DecodeImageForReview(jpegData, orientation, mirror);
mDecodeTaskForReview.execute();
- customizeButtons(mActivity.getButtonManager(), mCameraCallback, mHdrCallback,
- mRefocusCallback);
mActivity.getCameraAppUI().transitionToIntentReviewLayout();
-
pauseFaceDetection();
}
diff --git a/src/com/android/camera/VideoModule.java b/src/com/android/camera/VideoModule.java
index 963326e..9195195 100644
--- a/src/com/android/camera/VideoModule.java
+++ b/src/com/android/camera/VideoModule.java
@@ -61,6 +61,8 @@
import com.android.camera.app.MemoryManager;
import com.android.camera.app.MemoryManager.MemoryListener;
import com.android.camera.exif.ExifInterface;
+import com.android.camera.hardware.HardwareSpec;
+import com.android.camera.hardware.HardwareSpecImpl;
import com.android.camera.module.ModuleController;
import com.android.camera.settings.SettingsManager;
import com.android.camera.util.AccessibilityUtils;
@@ -294,6 +296,9 @@
}
}
+ private int mShutterIconId;
+
+
/**
* Construct a new video module.
*/
@@ -348,6 +353,10 @@
mUI.showTimeLapseUI(mCaptureTimeLapse);
mPendingSwitchCameraId = -1;
mAppController = app;
+
+ mShutterIconId = CameraUtil.getCameraShutterIconId(
+ mAppController.getCurrentModuleIndex(), mAppController.getAndroidContext());
+
}
@Override
@@ -355,6 +364,12 @@
return true;
}
+ private void initializeControlByIntent() {
+ if (isVideoCaptureIntent()) {
+ mActivity.getCameraAppUI().transitionToIntentLayout();
+ }
+ }
+
@Override
public void onSingleTapUp(View view, int x, int y) {
if (mPaused || mCameraDevice == null) {
@@ -467,9 +482,53 @@
}
};
+ private final View.OnClickListener mCancelCallback = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ onReviewCancelClicked(v);
+ }
+ };
+
+ private final View.OnClickListener mDoneCallback = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ onReviewDoneClicked(v);
+ }
+ };
+ private final View.OnClickListener mReviewCallback = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mActivity.getCameraAppUI().transitionToIntentLayout();
+ onReviewPlayClicked(v);
+ }
+ };
+
@Override
- public void customizeButtons(ButtonManager buttonManager) {
- mUI.customizeButtons(buttonManager, mFlashCallback, mCameraCallback);
+ public HardwareSpec getHardwareSpec() {
+ return new HardwareSpecImpl(mParameters);
+ }
+
+ @Override
+ public CameraAppUI.BottomBarUISpec getBottomBarSpec() {
+ CameraAppUI.BottomBarUISpec bottomBarSpec = new CameraAppUI.BottomBarUISpec();
+
+ bottomBarSpec.enableCamera = true;
+ bottomBarSpec.cameraCallback = mCameraCallback;
+ bottomBarSpec.enableTorchFlash = true;
+ bottomBarSpec.flashCallback = mFlashCallback;
+ bottomBarSpec.hideHdr = true;
+ bottomBarSpec.hideRefocus = true;
+
+ if (isVideoCaptureIntent()) {
+ bottomBarSpec.showCancel = true;
+ bottomBarSpec.cancelCallback = mCancelCallback;
+ bottomBarSpec.showDone = true;
+ bottomBarSpec.doneCallback = mDoneCallback;
+ bottomBarSpec.showReview = true;
+ bottomBarSpec.reviewCallback = mReviewCallback;
+ }
+
+ return bottomBarSpec;
}
@Override
@@ -484,7 +543,7 @@
startPreview();
initializeVideoSnapshot();
mUI.initializeZoom(mParameters);
- mUI.onCameraOpened(mFlashCallback, mCameraCallback);
+ initializeControlByIntent();
}
private void startPlayVideoActivity() {
@@ -573,12 +632,8 @@
if (stop) {
onStopVideoRecording();
- int shutterIconId = CameraUtil.getCameraShutterIconId(
- mAppController.getCurrentModuleIndex(), mAppController.getAndroidContext());
- mAppController.getCameraAppUI().animateBottomBarToFullSize(shutterIconId);
} else {
startVideoRecording();
- mAppController.getCameraAppUI().animateBottomBarToCircle(R.drawable.ic_stop_normal);
}
mUI.enableShutter(false);
mFocusManager.onShutterUp();
@@ -1142,6 +1197,8 @@
mUI.setSwipingEnabled(false);
mUI.showFocusUI(false);
+ mAppController.getCameraAppUI().animateBottomBarToCircle(R.drawable.ic_stop_normal);
+
mActivity.updateStorageSpaceAndHint();
if (mActivity.getStorageSpaceBytes() <= Storage.LOW_STORAGE_THRESHOLD_BYTES) {
Log.v(TAG, "Storage issue, ignore the start request");
@@ -1238,6 +1295,8 @@
mUI.setSwipingEnabled(true);
mUI.showFocusUI(true);
+ mAppController.getCameraAppUI().animateBottomBarToFullSize(mShutterIconId);
+
boolean fail = false;
if (mMediaRecorderRecording) {
boolean shouldAddToMediaStoreNow = false;
@@ -1284,8 +1343,8 @@
}
// release media recorder
releaseMediaRecorder();
- setFocusParameters();
if (!mPaused) {
+ setFocusParameters();
mCameraDevice.lock();
if (!ApiHelper.HAS_SURFACE_TEXTURE_RECORDING) {
stopPreview();
diff --git a/src/com/android/camera/VideoUI.java b/src/com/android/camera/VideoUI.java
index 0956cd1..715b469 100644
--- a/src/com/android/camera/VideoUI.java
+++ b/src/com/android/camera/VideoUI.java
@@ -26,7 +26,6 @@
import android.view.SurfaceView;
import android.view.TextureView;
import android.view.View;
-import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
@@ -72,29 +71,6 @@
private float mSurfaceTextureUncroppedWidth;
private float mSurfaceTextureUncroppedHeight;
- private ButtonManager.ButtonCallback mFlashCallback;
- private ButtonManager.ButtonCallback mCameraCallback;
-
- private final OnClickListener mCancelCallback = new OnClickListener() {
- @Override
- public void onClick(View v) {
- mController.onReviewCancelClicked(v);
- }
- };
- private final OnClickListener mDoneCallback = new OnClickListener() {
- @Override
- public void onClick(View v) {
- mController.onReviewDoneClicked(v);
- }
- };
- private final OnClickListener mReviewCallback = new OnClickListener() {
- @Override
- public void onClick(View v) {
- customizeButtons(mActivity.getButtonManager(), mFlashCallback, mCameraCallback);
- mActivity.getCameraAppUI().transitionToIntentLayout();
- mController.onReviewPlayClicked(v);
- }
- };
private float mAspectRatio = UNSET;
private final AnimationManager mAnimationManager;
@@ -142,7 +118,6 @@
mSurfaceTexture = mTextureView.getSurfaceTexture();
initializeMiscControls();
- initializeControlByIntent();
mAnimationManager = new AnimationManager();
mFocusUI = (FocusOverlay) mRootView.findViewById(R.id.focus_overlay);
}
@@ -153,38 +128,6 @@
mSurfaceView.getHolder().addCallback(this);
}
- /**
- * Customize the mode options such that flash and camera
- * switching are enabled.
- */
- public void customizeButtons(ButtonManager buttonManager,
- ButtonManager.ButtonCallback flashCallback,
- ButtonManager.ButtonCallback cameraCallback) {
-
- buttonManager.enableButton(ButtonManager.BUTTON_CAMERA,
- cameraCallback, R.array.camera_id_icons);
- buttonManager.enableButton(ButtonManager.BUTTON_TORCH,
- flashCallback, R.array.video_flashmode_icons);
- buttonManager.hideButton(ButtonManager.BUTTON_HDRPLUS);
- buttonManager.hideButton(ButtonManager.BUTTON_REFOCUS);
-
- if (mController.isVideoCaptureIntent()) {
- buttonManager.enablePushButton(ButtonManager.BUTTON_CANCEL,
- mCancelCallback);
- buttonManager.enablePushButton(ButtonManager.BUTTON_DONE,
- mDoneCallback);
- buttonManager.enablePushButton(ButtonManager.BUTTON_REVIEW,
- mReviewCallback, R.drawable.ic_play);
- }
- }
-
- private void initializeControlByIntent() {
- if (mController.isVideoCaptureIntent()) {
- customizeButtons(mActivity.getButtonManager(), mFlashCallback, mCameraCallback);
- mActivity.getCameraAppUI().transitionToIntentLayout();
- }
- }
-
public void setPreviewSize(int width, int height) {
if (width == 0 || height == 0) {
Log.w(TAG, "Preview size should not be 0.");
@@ -267,12 +210,6 @@
mTextureView.setVisibility(View.GONE);
}
- public void onCameraOpened(ButtonManager.ButtonCallback flashCallback,
- ButtonManager.ButtonCallback cameraCallback) {
- mFlashCallback = flashCallback;
- mCameraCallback = cameraCallback;
- }
-
private void initializeMiscControls() {
mReviewImage = (ImageView) mRootView.findViewById(R.id.review_image);
mRecordingTimeView = (TextView) mRootView.findViewById(R.id.recording_time);
@@ -331,7 +268,6 @@
}
public void showReviewControls() {
- customizeButtons(mActivity.getButtonManager(), mFlashCallback, mCameraCallback);
mActivity.getCameraAppUI().transitionToIntentReviewLayout();
mReviewImage.setVisibility(View.VISIBLE);
}
diff --git a/src/com/android/camera/app/CameraApp.java b/src/com/android/camera/app/CameraApp.java
index bb27cc9..451d75a 100644
--- a/src/com/android/camera/app/CameraApp.java
+++ b/src/com/android/camera/app/CameraApp.java
@@ -25,6 +25,8 @@
import com.android.camera.session.CaptureSessionManagerImpl;
import com.android.camera.session.PlaceholderManager;
import com.android.camera.session.ProcessingNotificationManager;
+import com.android.camera.session.SessionStorageManager;
+import com.android.camera.session.SessionStorageManagerImpl;
import com.android.camera.util.CameraUtil;
import com.android.camera.util.UsageStatistics;
@@ -35,6 +37,7 @@
public class CameraApp extends Application implements CameraServices {
private MediaSaver mMediaSaver;
private CaptureSessionManager mSessionManager;
+ private SessionStorageManager mSessionStorageManager;
private MemoryManagerImpl mMemoryManager;
private ProcessingNotificationManager mNotificationManager;
private PlaceholderManager mPlaceHolderManager;
@@ -51,8 +54,9 @@
mMediaSaver = new MediaSaverImpl();
mNotificationManager = new ProcessingNotificationManager(this);
mPlaceHolderManager = new PlaceholderManager(context);
+ mSessionStorageManager = SessionStorageManagerImpl.create(this);
mSessionManager = new CaptureSessionManagerImpl(mMediaSaver, getContentResolver(),
- mNotificationManager, mPlaceHolderManager);
+ mNotificationManager, mPlaceHolderManager, mSessionStorageManager);
mMemoryManager = MemoryManagerImpl.create(getApplicationContext(), mMediaSaver);
}
diff --git a/src/com/android/camera/app/CameraAppUI.java b/src/com/android/camera/app/CameraAppUI.java
index 4fa4068..bea5796 100644
--- a/src/com/android/camera/app/CameraAppUI.java
+++ b/src/com/android/camera/app/CameraAppUI.java
@@ -32,9 +32,13 @@
import android.widget.FrameLayout;
import com.android.camera.AnimationManager;
+import com.android.camera.ButtonManager;
import com.android.camera.ShutterButton;
import com.android.camera.TextureViewHelper;
import com.android.camera.filmstrip.FilmstripContentPanel;
+import com.android.camera.hardware.HardwareSpec;
+import com.android.camera.module.ModuleController;
+import com.android.camera.settings.SettingsManager;
import com.android.camera.ui.BottomBar;
import com.android.camera.ui.CaptureAnimationOverlay;
import com.android.camera.ui.MainActivityLayout;
@@ -44,6 +48,7 @@
import com.android.camera.ui.PreviewStatusListener;
import com.android.camera.util.ApiHelper;
import com.android.camera.util.CameraUtil;
+import com.android.camera.util.PhotoSphereHelper;
import com.android.camera.widget.FilmstripLayout;
import com.android.camera.widget.IndicatorIconController;
import com.android.camera.widget.IndicatorOverlay;
@@ -171,6 +176,185 @@
}
}
+ /**
+ * BottomBarUISpec provides a structure for modules
+ * to specify their ideal bottom bar mode options layout.
+ *
+ * Once constructed by a module, this class should be
+ * treated as read only.
+ *
+ * The application then edits this spec according to
+ * hardware limitations and displays the final bottom
+ * bar ui.
+ */
+ public static class BottomBarUISpec {
+ /** Mode options UI */
+
+ /**
+ * Set true if the camera option should be enabled.
+ * If not set or false, and multiple cameras are supported,
+ * the camera option will be disabled.
+ *
+ * If multiple cameras are not supported, this preference
+ * is ignored and the camera option will not be visible.
+ */
+ public boolean enableCamera;
+
+ /**
+ * Set true if the photo flash option should be enabled.
+ * If not set or false, the photo flash option will be
+ * disabled.
+ *
+ * If the hardware does not support multiple flash values,
+ * this preference is ignored and the flash option will
+ * be disabled. It will not be made invisible in order to
+ * preserve a consistent experience across devices and between
+ * front and back cameras.
+ */
+ public boolean enableFlash;
+
+ /**
+ * Set true if the video flash option should be enabled.
+ * Same disable rules apply as the photo flash option.
+ */
+ public boolean enableTorchFlash;
+
+ /**
+ * Set true if the hdr/hdr+ option should be enabled.
+ * If not set or false, the hdr/hdr+ option will be disabled.
+ *
+ * Hdr or hdr+ will be chosen based on hardware limitations,
+ * with hdr+ prefered.
+ *
+ * If hardware supports neither hdr nor hdr+, then the hdr/hdr+
+ * will not be visible.
+ */
+ public boolean enableHdr;
+
+ /**
+ * Set true if hdr/hdr+ should not be visible, regardless of
+ * hardware limitations.
+ */
+ public boolean hideHdr;
+
+ /**
+ * Set true if the refocus option should be enabled.
+ * If not set or false, the refocus option will be disabled.
+ *
+ * This option is not constrained by hardware limitations.
+ */
+ public boolean enableRefocus;
+
+ /**
+ * Set true if refocus should not be visible.
+ */
+ public boolean hideRefocus;
+
+ /**
+ * Set true if the panorama horizontal option should be visible.
+ *
+ * This option is not constrained by hardware limitations.
+ */
+ public boolean enablePanoHorizontal;
+
+ /**
+ * Set true if the panorama vertical option should be visible.
+ *
+ * This option is not constrained by hardware limitations.
+ */
+ public boolean enablePanoVertical;
+
+ /** Intent UI */
+
+ /**
+ * Set true if the intent ui cancel option should be visible.
+ */
+ public boolean showCancel;
+ /**
+ * Set true if the intent ui done option should be visible.
+ */
+ public boolean showDone;
+ /**
+ * Set true if the intent ui retake option should be visible.
+ */
+ public boolean showRetake;
+ /**
+ * Set true if the intent ui review option should be visible.
+ */
+ public boolean showReview;
+
+ /** Mode options callbacks */
+
+ /**
+ * A {@link android.com.android.camera.ButtonManager.ButtonCallback}
+ * that will be executed when the camera option is pressed. This
+ * callback can be null.
+ */
+ public ButtonManager.ButtonCallback cameraCallback;
+
+ /**
+ * A {@link android.com.android.camera.ButtonManager.ButtonCallback}
+ * that will be executed when the flash option is pressed. This
+ * callback can be null.
+ */
+ public ButtonManager.ButtonCallback flashCallback;
+
+ /**
+ * A {@link android.com.android.camera.ButtonManager.ButtonCallback}
+ * that will be executed when the hdr/hdr+ option is pressed. This
+ * callback can be null.
+ */
+ public ButtonManager.ButtonCallback hdrCallback;
+
+ /**
+ * A {@link android.com.android.camera.ButtonManager.ButtonCallback}
+ * that will be executed when the refocus option is pressed. This
+ * callback can be null.
+ */
+ public ButtonManager.ButtonCallback refocusCallback;
+
+ /**
+ * A {@link android.view.View.OnClickListener} that will execute
+ * when the panorama horizontal option is pressed.
+ * This callback can be null.
+ */
+ public View.OnClickListener panoHorizontalCallback;
+
+ /**
+ * A {@link android.view.View.OnClickListener} that will execute
+ * when the panorama vertical option is pressed.
+ * This callback can be null.
+ */
+ public View.OnClickListener panoVerticalCallback;
+
+ /** Intent UI callbacks */
+
+ /**
+ * A {@link android.view.View.OnClickListener} that will execute
+ * when the cancel option is pressed. This callback can be null.
+ */
+ public View.OnClickListener cancelCallback;
+
+ /**
+ * A {@link android.view.View.OnClickListener} that will execute
+ * when the done option is pressed. This callback can be null.
+ */
+ public View.OnClickListener doneCallback;
+
+ /**
+ * A {@link android.view.View.OnClickListener} that will execute
+ * when the retake option is pressed. This callback can be null.
+ */
+ public View.OnClickListener retakeCallback;
+
+ /**
+ * A {@link android.view.View.OnClickListener} that will execute
+ * when the review option is pressed. This callback can be null.
+ */
+ public View.OnClickListener reviewCallback;
+ }
+
+
private final static String TAG = "CameraAppUI";
private final AppController mController;
@@ -594,6 +778,12 @@
* specific changes that depend on the camera or camera settings.
*/
public void onChangeCamera() {
+ ModuleController moduleController = mController.getCurrentModuleController();
+ if (moduleController.isUsingBottomBar()) {
+ applyModuleSpecs(moduleController.getHardwareSpec(),
+ moduleController.getBottomBarSpec());
+ }
+
if (mIndicatorIconController != null) {
// Sync the settings state with the indicator state.
mIndicatorIconController.syncIndicators();
@@ -840,6 +1030,7 @@
mBottomBar.setBackgroundPressedColor(colorId);
}
+ // TODO: refactor this out so it can controlled by the app.
/**
* Sets the shutter button icon on the bottom bar
*/
@@ -881,13 +1072,137 @@
* Performs a transition to the global intent layout.
*/
public void transitionToIntentLayout() {
- mBottomBar.transitionToIntentLayout();
+ ModuleController moduleController = mController.getCurrentModuleController();
+ if (moduleController.isUsingBottomBar()) {
+ applyModuleSpecs(moduleController.getHardwareSpec(),
+ moduleController.getBottomBarSpec());
+ mBottomBar.transitionToIntentLayout();
+ }
}
/**
* Performs a transition to the global intent review layout.
*/
public void transitionToIntentReviewLayout() {
- mBottomBar.transitionToIntentReviewLayout();
+ ModuleController moduleController = mController.getCurrentModuleController();
+ if (moduleController.isUsingBottomBar()) {
+ applyModuleSpecs(moduleController.getHardwareSpec(),
+ moduleController.getBottomBarSpec());
+ mBottomBar.transitionToIntentReviewLayout();
+ }
+ }
+
+ /**
+ * Applies a {@link com.android.camera.CameraAppUI.BottomBarUISpec}
+ * to the bottom bar mode options based on limitations from a
+ * {@link com.android.camera.hardware.HardwareSpec}.
+ *
+ * Options not supported by the hardware are either hidden
+ * or disabled, depending on the option.
+ *
+ * Otherwise, the option is fully enabled and clickable.
+ */
+ public void applyModuleSpecs(final HardwareSpec hardwareSpec,
+ final BottomBarUISpec bottomBarSpec) {
+ if (hardwareSpec == null) {
+ throw new IllegalArgumentException();
+ }
+ if (bottomBarSpec == null) {
+ throw new IllegalArgumentException();
+ }
+
+ ButtonManager buttonManager = mController.getButtonManager();
+ SettingsManager settingsManager = mController.getSettingsManager();
+
+ /** Standard mode options */
+ if (hardwareSpec.isFrontCameraSupported()) {
+ if (bottomBarSpec.enableCamera) {
+ buttonManager.enableButton(ButtonManager.BUTTON_CAMERA,
+ bottomBarSpec.cameraCallback);
+ } else {
+ buttonManager.disableButton(ButtonManager.BUTTON_CAMERA);
+ }
+ } else {
+ // Hide camera icon if front camera not available.
+ buttonManager.hideButton(ButtonManager.BUTTON_CAMERA);
+ }
+
+ if (hardwareSpec.isFlashSupported()) {
+ if (bottomBarSpec.enableFlash && settingsManager.isCameraBackFacing()) {
+ buttonManager.enableButton(ButtonManager.BUTTON_FLASH, bottomBarSpec.flashCallback);
+ } else if (bottomBarSpec.enableTorchFlash && settingsManager.isCameraBackFacing()) {
+ buttonManager.enableButton(ButtonManager.BUTTON_TORCH, bottomBarSpec.flashCallback);
+ } else {
+ buttonManager.disableButton(ButtonManager.BUTTON_FLASH);
+ }
+ } else {
+ // Disable flash icon if not supported by the hardware.
+ buttonManager.disableButton(ButtonManager.BUTTON_FLASH);
+ }
+
+ if (bottomBarSpec.hideHdr) {
+ // Force hide hdr or hdr plus icon.
+ buttonManager.hideButton(ButtonManager.BUTTON_HDRPLUS);
+ } else {
+ if (hardwareSpec.isHdrPlusSupported()) {
+ if (bottomBarSpec.enableHdr && settingsManager.isCameraBackFacing()) {
+ buttonManager.enableButton(ButtonManager.BUTTON_HDRPLUS,
+ bottomBarSpec.hdrCallback);
+ } else {
+ buttonManager.disableButton(ButtonManager.BUTTON_HDRPLUS);
+ }
+ } else if (hardwareSpec.isHdrSupported()) {
+ if (bottomBarSpec.enableHdr && settingsManager.isCameraBackFacing()) {
+ buttonManager.enableButton(ButtonManager.BUTTON_HDR,
+ bottomBarSpec.hdrCallback);
+ } else {
+ buttonManager.disableButton(ButtonManager.BUTTON_HDR);
+ }
+ } else {
+ // Hide hdr plus or hdr icon if neither are supported.
+ buttonManager.hideButton(ButtonManager.BUTTON_HDRPLUS);
+ }
+ }
+
+ if (bottomBarSpec.hideRefocus) {
+ buttonManager.hideButton(ButtonManager.BUTTON_REFOCUS);
+ } else {
+ if (bottomBarSpec.enableRefocus) {
+ buttonManager.enableButton(ButtonManager.BUTTON_REFOCUS,
+ bottomBarSpec.refocusCallback);
+ } else {
+ // Disable refocus icon when not enabled, not dependent
+ // on hardware spec.
+ buttonManager.disableButton(ButtonManager.BUTTON_REFOCUS);
+ }
+ }
+
+ if (bottomBarSpec.enablePanoHorizontal
+ && PhotoSphereHelper.getPanoramaHorizontalDrawableId() > 0) {
+ buttonManager.enablePushButton(ButtonManager.BUTTON_PANO_HORIZONTAL,
+ bottomBarSpec.panoHorizontalCallback,
+ PhotoSphereHelper.getPanoramaHorizontalDrawableId());
+ }
+
+ if (bottomBarSpec.enablePanoVertical
+ && PhotoSphereHelper.getPanoramaVerticalDrawableId() > 0) {
+ buttonManager.enablePushButton(ButtonManager.BUTTON_PANO_VERTICAL,
+ bottomBarSpec.panoVerticalCallback,
+ PhotoSphereHelper.getPanoramaVerticalDrawableId());
+ }
+
+ /** Intent UI */
+ if (bottomBarSpec.showCancel) {
+ buttonManager.enablePushButton(ButtonManager.BUTTON_CANCEL,
+ bottomBarSpec.cancelCallback);
+ }
+ if (bottomBarSpec.showDone) {
+ buttonManager.enablePushButton(ButtonManager.BUTTON_DONE,
+ bottomBarSpec.doneCallback);
+ }
+ if (bottomBarSpec.showRetake) {
+ buttonManager.enablePushButton(ButtonManager.BUTTON_RETAKE,
+ bottomBarSpec.retakeCallback);
+ }
}
}
diff --git a/src/com/android/camera/app/FilmstripBottomControls.java b/src/com/android/camera/app/FilmstripBottomControls.java
index 400139a..2c09592 100644
--- a/src/com/android/camera/app/FilmstripBottomControls.java
+++ b/src/com/android/camera/app/FilmstripBottomControls.java
@@ -32,12 +32,15 @@
private ViewGroup mLayout;
private ImageButton mEditButton;
private ImageButton mViewButton;
+ private View mViewerWrapperLayout;
private ImageButton mTinyPlanetButton;
private ImageButton mDeleteButton;
private ImageButton mShareButton;
+ private View mMiddleFiller;
public FilmstripBottomControls(ViewGroup bottomControlsLayout) {
mLayout = bottomControlsLayout;
+ mMiddleFiller = mLayout.findViewById(R.id.filmstrip_bottom_control_middle_filler);
setupEditButton();
setupViewButton();
setupTinyPlanetButton();
@@ -61,7 +64,8 @@
@Override
public void setEditButtonVisibility(boolean visible) {
- setVisibility(mEditButton, visible);
+ mEditButton.setVisibility(visible ? View.VISIBLE : View.GONE);
+ updateMiddleFillerLayoutVisibility();
}
@Override
@@ -72,12 +76,12 @@
@Override
public void setViewerButtonVisibility(int state) {
if (state == VIEWER_NONE) {
- setVisibility(mViewButton, false);
- return;
+ mViewButton.setVisibility(View.GONE);
+ } else {
+ mViewButton.setImageResource(getViewButtonResource(state));
+ mViewButton.setVisibility(View.VISIBLE);
}
- mViewButton.setImageResource(getViewButtonResource(state));
- setVisibility(mViewButton, true);
-
+ updateMiddleFillerLayoutVisibility();
}
@Override
@@ -87,7 +91,8 @@
@Override
public void setTinyPlanetButtonVisibility(final boolean visible) {
- setVisibility(mTinyPlanetButton, visible);
+ mTinyPlanetButton.setVisibility(visible ? View.VISIBLE : View.GONE);
+ updateMiddleFillerLayoutVisibility();
}
@Override
@@ -97,7 +102,7 @@
@Override
public void setDeleteButtonVisibility(boolean visible) {
- setVisibility(mDeleteButton, visible);
+ mDeleteButton.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
}
@Override
@@ -107,7 +112,7 @@
@Override
public void setShareButtonVisibility(boolean visible) {
- setVisibility(mShareButton, visible);
+ mShareButton.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
}
@Override
@@ -115,13 +120,6 @@
mShareButton.setEnabled(enabled);
}
- /**
- * Sets the visibility of the given view.
- */
- private static void setVisibility(final View view, final boolean visible) {
- view.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
- }
-
private int getViewButtonResource(int state) {
switch (state) {
case VIEWER_REFOCUS:
@@ -146,6 +144,7 @@
}
private void setupViewButton() {
+ mViewerWrapperLayout = mLayout.findViewById(R.id.filmstrip_bottom_control_viewer_wrapper);
mViewButton = (ImageButton) mLayout.findViewById(R.id.filmstrip_bottom_control_view);
mViewButton.setOnClickListener(new View.OnClickListener() {
@Override
@@ -193,4 +192,28 @@
}
});
}
+
+ /**
+ * Updates the visibility of the middle filler view in the center and the
+ * visibility of wrapper layout of viewer buttons and the tinyplanet button.
+ * The middle filler view should be visible when edit button and viewer
+ * buttons are both visible. The wrapper layout of viewer buttons and
+ * tinyplanet should be gone if no viewer button is shown and the
+ * tinyplanet button is invisible.
+ */
+ private void updateMiddleFillerLayoutVisibility() {
+ if (mViewButton.getVisibility() == View.VISIBLE ||
+ mTinyPlanetButton.getVisibility() == View.VISIBLE) {
+ mViewerWrapperLayout.setVisibility(View.VISIBLE);
+ } else {
+ mViewerWrapperLayout.setVisibility(View.GONE);
+ }
+
+ if (mEditButton.getVisibility() == View.VISIBLE &&
+ mViewerWrapperLayout.getVisibility() == View.VISIBLE) {
+ mMiddleFiller.setVisibility(View.INVISIBLE);
+ } else {
+ mMiddleFiller.setVisibility(View.GONE);
+ }
+ }
}
diff --git a/src/com/android/camera/hardware/HardwareSpec.java b/src/com/android/camera/hardware/HardwareSpec.java
new file mode 100644
index 0000000..93c1660
--- /dev/null
+++ b/src/com/android/camera/hardware/HardwareSpec.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.camera.hardware;
+
+/**
+ * HardwareSpec is a interface for specifying whether
+ * high-level features are supported by the camera device
+ * hardware limitations.
+ */
+public interface HardwareSpec {
+
+ /**
+ * Returns whether a front facing camera is available
+ * on the current hardware.
+ */
+ public boolean isFrontCameraSupported();
+
+ /**
+ * Returns whether hdr scene mode is supported on the
+ * current hardware.
+ */
+ public boolean isHdrSupported();
+
+ /**
+ * Returns whether hdr plus is supported on the current
+ * hardware.
+ */
+ public boolean isHdrPlusSupported();
+
+ /**
+ * Returns whether flash is supported and has more than
+ * one supported setting. If flash is supported but is
+ * always off, this method should return false.
+ */
+ public boolean isFlashSupported();
+}
\ No newline at end of file
diff --git a/src/com/android/camera/hardware/HardwareSpecImpl.java b/src/com/android/camera/hardware/HardwareSpecImpl.java
new file mode 100644
index 0000000..180a44e
--- /dev/null
+++ b/src/com/android/camera/hardware/HardwareSpecImpl.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.camera.hardware;
+
+import android.hardware.Camera;
+
+import com.android.camera.util.CameraUtil;
+import com.android.camera.util.GcamHelper;
+
+import java.util.List;
+
+/**
+ * HardwareSpecImpl is the default implementation of
+ * {@link com.android.camera.hardware.HardwareSpec} for
+ * a camera device opened using the {@link android.hardware.Camera}
+ * api.
+ */
+public class HardwareSpecImpl implements HardwareSpec {
+
+ private final boolean mIsFrontCameraSupported;
+ private final boolean mIsHdrSupported;
+ private final boolean mIsHdrPlusSupported;
+ private final boolean mIsFlashSupported;
+
+ /**
+ * Compute the supported values for all
+ * {@link com.android.camera.hardware.HardwareSpec} methods
+ * based on {@link android.hardware.Camera.Parameters}.
+ */
+ public HardwareSpecImpl(Camera.Parameters parameters) {
+ // Cache whether front camera is supported.
+ mIsFrontCameraSupported = (Camera.getNumberOfCameras() > 1);
+
+ // Cache whether hdr is supported.
+ mIsHdrSupported = CameraUtil.isCameraHdrSupported(parameters);
+
+ // Cache whether hdr plus is supported.
+ mIsHdrPlusSupported = GcamHelper.hasGcamCapture();
+
+ // Cache whether flash is supported.
+ mIsFlashSupported = isFlashSupported(parameters);
+ }
+
+ @Override
+ public boolean isFrontCameraSupported() {
+ return mIsFrontCameraSupported;
+ }
+
+ @Override
+ public boolean isHdrSupported() {
+ return mIsHdrSupported;
+ }
+
+ @Override
+ public boolean isHdrPlusSupported() {
+ return mIsHdrPlusSupported;
+ }
+
+ @Override
+ public boolean isFlashSupported() {
+ return mIsFlashSupported;
+ }
+
+ /**
+ * Returns whether flash is supported and flash has more than
+ * one possible value.
+ */
+ private boolean isFlashSupported(Camera.Parameters parameters) {
+ List<String> supportedFlashModes = parameters.getSupportedFlashModes();
+ return !(supportedFlashModes == null || (supportedFlashModes.size() == 1));
+ }
+}
\ No newline at end of file
diff --git a/src/com/android/camera/module/ModuleController.java b/src/com/android/camera/module/ModuleController.java
index a5b3886..e126ad8 100644
--- a/src/com/android/camera/module/ModuleController.java
+++ b/src/com/android/camera/module/ModuleController.java
@@ -20,7 +20,9 @@
import com.android.camera.ButtonManager;
import com.android.camera.app.AppController;
+import com.android.camera.app.CameraAppUI.BottomBarUISpec;
import com.android.camera.app.CameraManager;
+import com.android.camera.hardware.HardwareSpec;
/**
* The controller at app level.
@@ -106,10 +108,18 @@
public void onCameraAvailable(CameraManager.CameraProxy cameraProxy);
/**
- * Called when the module needs to customize global buttons according
- * to its supported feature set.
+ * Returns a {@link com.android.camera.hardware.HardwareSpec}
+ * based on the module's open camera device.
*/
- public void customizeButtons(ButtonManager buttonManager);
+ public HardwareSpec getHardwareSpec();
+
+ /**
+ * Returns a {@link com.android.camera.app.CameraAppUI.BottomBarUISpec}
+ * which represents the module's ideal bottom bar layout of the
+ * mode options. The app edits the final layout based on the
+ * {@link com.android.camera.hardware.HardwareSpec}.
+ */
+ public BottomBarUISpec getBottomBarSpec();
/**
* Used by the app on configuring the bottom bar color and visibility.
diff --git a/src/com/android/camera/module/ModulesInfo.java b/src/com/android/camera/module/ModulesInfo.java
index 5536ea8..1bf50a6 100644
--- a/src/com/android/camera/module/ModulesInfo.java
+++ b/src/com/android/camera/module/ModulesInfo.java
@@ -22,7 +22,6 @@
import com.android.camera.VideoModule;
import com.android.camera.app.AppController;
import com.android.camera.app.ModuleManager;
-import com.android.camera.ui.ModeListView;
import com.android.camera.util.GcamHelper;
import com.android.camera.util.PhotoSphereHelper;
import com.android.camera.util.RefocusHelper;
@@ -168,7 +167,6 @@
@Override
public ModuleController createModule(AppController app) {
- // TODO: remove the type casting.
return RefocusHelper.createRefocusModule(app);
}
});
diff --git a/src/com/android/camera/session/CaptureSessionManager.java b/src/com/android/camera/session/CaptureSessionManager.java
index c9f60fb..52ac483 100644
--- a/src/com/android/camera/session/CaptureSessionManager.java
+++ b/src/com/android/camera/session/CaptureSessionManager.java
@@ -22,6 +22,9 @@
import com.android.camera.app.MediaSaver.OnMediaSavedListener;
import com.android.camera.exif.ExifInterface;
+import java.io.File;
+import java.io.IOException;
+
/**
* Modules use this manager to store capture results.
*/
@@ -109,4 +112,11 @@
* @return The current progress message.
*/
public CharSequence getSessionProgressMessage(Uri uri);
+
+ /**
+ * Gets the directory to be used for temporary data.
+ *
+ * See {@link SessionStorageManager#getSessionDirectory(String)}
+ */
+ public File getSessionDirectory(String subDirectory) throws IOException;
}
diff --git a/src/com/android/camera/session/CaptureSessionManagerImpl.java b/src/com/android/camera/session/CaptureSessionManagerImpl.java
index 1d9dd8f..0bffce3 100644
--- a/src/com/android/camera/session/CaptureSessionManagerImpl.java
+++ b/src/com/android/camera/session/CaptureSessionManagerImpl.java
@@ -28,6 +28,8 @@
import com.android.camera.data.LocalData;
import com.android.camera.exif.ExifInterface;
+import java.io.File;
+import java.io.IOException;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
@@ -182,6 +184,7 @@
private final MediaSaver mMediaSaver;
private final ProcessingNotificationManager mNotificationManager;
private final PlaceholderManager mPlaceholderManager;
+ private final SessionStorageManager mSessionStorageManager;
private final ContentResolver mContentResolver;
/**
@@ -204,15 +207,18 @@
* progress
* @param placeholderManager used to manage placeholders in the filmstrip
* before the final result is ready
+ * @param sessionStorageManager used to tell modules where to store
+ * temporary session data
*/
public CaptureSessionManagerImpl(MediaSaver mediaSaver,
ContentResolver contentResolver, ProcessingNotificationManager notificationManager,
- PlaceholderManager placeholderManager) {
+ PlaceholderManager placeholderManager, SessionStorageManager sessionStorageManager) {
mSessions = new HashMap<String, CaptureSession>();
mMediaSaver = mediaSaver;
mContentResolver = contentResolver;
mNotificationManager = notificationManager;
mPlaceholderManager = placeholderManager;
+ mSessionStorageManager = sessionStorageManager;
}
@Override
@@ -267,6 +273,11 @@
return session.getProgressMessage();
}
+ @Override
+ public File getSessionDirectory(String subDirectory) throws IOException {
+ return mSessionStorageManager.getSessionDirectory(subDirectory);
+ }
+
private void removeSession(String sessionUri) {
mSessions.remove(sessionUri);
}
diff --git a/src/com/android/camera/session/SessionStorageManager.java b/src/com/android/camera/session/SessionStorageManager.java
new file mode 100644
index 0000000..8520c1a
--- /dev/null
+++ b/src/com/android/camera/session/SessionStorageManager.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.camera.session;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Interface for the session storage manager which handles management of storage
+ * space that can be used for temporary session files.
+ */
+public interface SessionStorageManager {
+
+ /**
+ * Returns the directory that can be used for temporary sessions of a
+ * specific type, defined by 'subDirectory'.
+ * <p>
+ * Before returning, this method will make sure the returned directory is
+ * clean of expired session data.
+ *
+ * @param subFolder The subfolder to use/create within the temporary session
+ * space, e.g. "foo".
+ * @return A valid file object that points to an existing directory.
+ * @throws IOException If the directory could not be made available.
+ */
+ public File getSessionDirectory(String subDirectory) throws IOException;
+}
diff --git a/src/com/android/camera/session/SessionStorageManagerImpl.java b/src/com/android/camera/session/SessionStorageManagerImpl.java
new file mode 100644
index 0000000..8673036
--- /dev/null
+++ b/src/com/android/camera/session/SessionStorageManagerImpl.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.camera.session;
+
+import android.content.Context;
+import android.util.Log;
+
+import com.android.camera.util.FileUtil;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.io.IOException;
+
+/**
+ * Default implementation of {@link SessionStorageManager}.
+ */
+public class SessionStorageManagerImpl implements SessionStorageManager {
+ private static final String TAG = "SessionStorageManagerImpl";
+
+ /** Delete temporary session directory remnants after ONE day. */
+ private static final int MAX_SESSION_AGE_MILLIS = 24 * 60 * 60 * 1000;
+
+ /** The base directory for all temporary data. */
+ private final File mBaseDirectory;
+
+ /**
+ * Creates a new {@link SessionStorageManager} instance.
+ *
+ * @param context A valid Android context to be used for determining the
+ * base directory.
+ * @return A session storage manager.
+ */
+ public static SessionStorageManager create(Context context) {
+ return new SessionStorageManagerImpl(context.getExternalFilesDir(null));
+ }
+
+ SessionStorageManagerImpl(File baseDirectory) {
+ mBaseDirectory = baseDirectory;
+ }
+
+ @Override
+ public File getSessionDirectory(String subDirectory) throws IOException {
+ File sessionDirectory = new File(mBaseDirectory, subDirectory);
+ if (!sessionDirectory.exists() && !sessionDirectory.mkdirs()) {
+ throw new IOException("Could not create session directory: " + sessionDirectory);
+ }
+
+ if (!sessionDirectory.isDirectory()) {
+ throw new IOException("Session directory is not a directory: " + sessionDirectory);
+ }
+
+ // Make sure there are no expired sessions in this directory.
+ cleanUpExpiredSessions(sessionDirectory);
+ return sessionDirectory;
+ }
+
+ /**
+ * Goes through all temporary sessions and deletes the ones that are older
+ * than a certain age.
+ */
+ private void cleanUpExpiredSessions(File baseDirectory) {
+ File[] sessionDirs = baseDirectory.listFiles(new FileFilter() {
+ @Override
+ public boolean accept(File file) {
+ return file.isDirectory();
+ }
+ });
+
+ final long nowInMillis = System.currentTimeMillis();
+ for (File sessionDir : sessionDirs) {
+ if (sessionDir.lastModified() < (nowInMillis - MAX_SESSION_AGE_MILLIS)) {
+ if (!FileUtil.deleteDirectoryRecursively(sessionDir)) {
+ Log.w(TAG, "Could not clean up " + sessionDir.getAbsolutePath());
+ }
+ }
+ }
+ }
+}
diff --git a/src/com/android/camera/settings/SettingsCache.java b/src/com/android/camera/settings/SettingsCache.java
index 5b4653b..c6d31e0 100644
--- a/src/com/android/camera/settings/SettingsCache.java
+++ b/src/com/android/camera/settings/SettingsCache.java
@@ -125,6 +125,8 @@
SettingsManager.SETTING_SHIMMY_REMAINING_PLAY_TIMES_INDEX);
mKeyMap.put(SettingsManager.KEY_CAMERA_MODULE_LAST_USED,
SettingsManager.SETTING_KEY_CAMERA_MODULE_LAST_USED_INDEX);
+ mKeyMap.put(SettingsManager.KEY_CAMERA_PANO_ORIENTATION,
+ SettingsManager.SETTING_CAMERA_PANO_ORIENTATION);
}
/**
@@ -201,6 +203,8 @@
return SettingsManager.getShimmyRemainingTimesSetting(mContext);
case SettingsManager.SETTING_KEY_CAMERA_MODULE_LAST_USED_INDEX:
return SettingsManager.getLastUsedCameraModule(mContext);
+ case SettingsManager.SETTING_CAMERA_PANO_ORIENTATION:
+ return SettingsManager.getPanoOrientationSetting(mContext);
default:
return mExtraSettings.settingFromId(id);
}
diff --git a/src/com/android/camera/settings/SettingsManager.java b/src/com/android/camera/settings/SettingsManager.java
index 9251f62..256955c 100644
--- a/src/com/android/camera/settings/SettingsManager.java
+++ b/src/com/android/camera/settings/SettingsManager.java
@@ -21,6 +21,7 @@
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.hardware.Camera.Size;
import android.preference.PreferenceManager;
+import android.util.Log;
import android.util.SparseArray;
import com.android.camera.ListPreference;
@@ -132,6 +133,8 @@
Integer settingId = mSettingsCache.getId(key);
if (settingId != null) {
listener.onSettingChanged(SettingsManager.this, settingId);
+ } else {
+ Log.w(TAG, "Setting id from key=" + key + " is null");
}
}
};
@@ -306,6 +309,7 @@
public static final int SETTING_CAMERA_REFOCUS = 20;
public static final int SETTING_SHIMMY_REMAINING_PLAY_TIMES_INDEX = 21;
public static final int SETTING_KEY_CAMERA_MODULE_LAST_USED_INDEX = 22;
+ public static final int SETTING_CAMERA_PANO_ORIENTATION = 23;
// Shared preference keys.
public static final String KEY_RECORD_LOCATION = "pref_camera_recordlocation_key";
@@ -336,6 +340,7 @@
"pref_shimmy_remaining_play_times";
public static final String KEY_CAMERA_MODULE_LAST_USED =
"pref_camera_module_last_used_index";
+ public static final String KEY_CAMERA_PANO_ORIENTATION = "pref_camera_pano_orientation";
public static final int WHITE_BALANCE_DEFAULT_INDEX = 2;
@@ -804,6 +809,14 @@
KEY_CAMERA_REFOCUS, values, FLUSH_OFF);
}
+ public static Setting getPanoOrientationSetting(Context context) {
+ String defaultValue = context.getString(R.string.pano_orientation_horizontal);
+ String[] values = context.getResources().getStringArray(
+ R.array.pref_camera_pano_orientation_entryvalues);
+ return new Setting(SOURCE_GLOBAL, TYPE_STRING, defaultValue,
+ KEY_CAMERA_PANO_ORIENTATION, values, FLUSH_OFF);
+ }
+
// Utilities.
/**
diff --git a/src/com/android/camera/ui/BottomBar.java b/src/com/android/camera/ui/BottomBar.java
index 4e41bb2..3ee8b73 100644
--- a/src/com/android/camera/ui/BottomBar.java
+++ b/src/com/android/camera/ui/BottomBar.java
@@ -121,6 +121,9 @@
private void setPaintColor(int alpha, int color, boolean isCaptureChange) {
int computedColor = (alpha << 24) | (color & 0x00ffffff);
mCirclePaint.setColor(computedColor);
+ if (mOptionsToggle == null) {
+ mOptionsToggle = (ToggleImageButton) findViewById(R.id.bottombar_options_toggle);
+ }
if (!isCaptureChange) {
mOptionsToggle.setBackgroundColor(computedColor);
}
@@ -251,9 +254,13 @@
* Perform a transition from the bottom bar options layout to the
* bottom bar capture layout.
*/
- private void transitionToCapture() {
+ public void transitionToCapture() {
+ mOptionsOverlay.setVisibility(View.VISIBLE);
mOptionsLayout.setVisibility(View.INVISIBLE);
mCaptureLayout.setVisibility(View.VISIBLE);
+ if (mMode == MODE_INTENT || mMode == MODE_INTENT_REVIEW) {
+ mIntentLayout.setVisibility(View.INVISIBLE);
+ }
mMode = MODE_CAPTURE;
}
@@ -262,7 +269,7 @@
* Perform a transition from the bottom bar capture layout to the
* bottom bar options layout.
*/
- private void transitionToOptions() {
+ public void transitionToOptions() {
mCaptureLayout.setVisibility(View.INVISIBLE);
mOptionsLayout.setVisibility(View.VISIBLE);
diff --git a/src/com/android/camera/ui/FocusOverlay.java b/src/com/android/camera/ui/FocusOverlay.java
index 9bf0ea9..1b5dcef 100644
--- a/src/com/android/camera/ui/FocusOverlay.java
+++ b/src/com/android/camera/ui/FocusOverlay.java
@@ -43,7 +43,7 @@
private int mPositionY;
private int mAngle;
// TODO: make this dp in dimens.xml when UI has a spec
- private int mFocusIndicatorSize = 200;
+ private final int mFocusIndicatorSize = 200;
private boolean mShowIndicator;
public FocusOverlay(Context context, AttributeSet attrs) {
@@ -87,14 +87,14 @@
}
@Override
- public void onFocusSucceeded(boolean timeOut) {
+ public void onFocusSucceeded() {
mFocusAnimation.cancel();
mShowIndicator = false;
invalidate();
}
@Override
- public void onFocusFailed(boolean timeOut) {
+ public void onFocusFailed() {
mFocusAnimation.cancel();
mShowIndicator = false;
invalidate();
@@ -110,6 +110,7 @@
// TODO: Add face detection support.
}
+ @Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
diff --git a/src/com/android/camera/ui/ModeListView.java b/src/com/android/camera/ui/ModeListView.java
index fd500c3..d7386b9 100644
--- a/src/com/android/camera/ui/ModeListView.java
+++ b/src/com/android/camera/ui/ModeListView.java
@@ -244,7 +244,7 @@
int index = getFocusItem(ev.getX(), ev.getY());
// Validate the selection
if (index != NO_ITEM_SELECTED) {
- int modeId = getModeIndex(index);
+ final int modeId = getModeIndex(index);
mModeSelectorItems[index].highlight();
mState = MODE_SELECTED;
PeepholeAnimationEffect effect = new PeepholeAnimationEffect();
@@ -260,7 +260,15 @@
effect.setAnimationStartingPosition((int) ev.getX(), (int) ev.getY());
mCurrentEffect = effect;
- onModeSelected(modeId);
+ // Post mode selection runnable to the end of the message queue
+ // so that current UI changes can finish before mode initialization
+ // clogs up UI thread.
+ post(new Runnable() {
+ @Override
+ public void run() {
+ onModeSelected(modeId);
+ }
+ });
}
return true;
}
diff --git a/src/com/android/camera/util/FileUtil.java b/src/com/android/camera/util/FileUtil.java
new file mode 100644
index 0000000..e1fac89
--- /dev/null
+++ b/src/com/android/camera/util/FileUtil.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.camera.util;
+
+import java.io.File;
+
+/**
+ * Common file operations.
+ */
+public class FileUtil {
+ /**
+ * Deletes the given directory and all it's contents, including
+ * sub-directories.
+ *
+ * @param directory The directory to delete.
+ * @return Whether The deletion was a success.
+ */
+ public static boolean deleteDirectoryRecursively(File directory) {
+ if (!directory.exists() || !directory.isDirectory()) {
+ return false;
+ }
+
+ for (File entry : directory.listFiles()) {
+ if (entry.isDirectory()) {
+ deleteDirectoryRecursively(entry);
+ }
+ if (!entry.delete()) {
+ return false;
+ }
+ }
+ return directory.delete();
+ }
+}
diff --git a/src/com/android/camera/widget/IndicatorIconController.java b/src/com/android/camera/widget/IndicatorIconController.java
index 3cd2d07..7d9284d 100644
--- a/src/com/android/camera/widget/IndicatorIconController.java
+++ b/src/com/android/camera/widget/IndicatorIconController.java
@@ -29,6 +29,7 @@
import com.android.camera.app.AppController;
import com.android.camera.module.ModulesInfo;
import com.android.camera.settings.SettingsManager;
+import com.android.camera.util.PhotoSphereHelper;
import com.android.camera2.R;
@@ -48,11 +49,14 @@
private ImageView mFlashIndicator;
private ImageView mHdrIndicator;
private ImageView mRefocusIndicator;
+ private ImageView mPanoramaIndicator;
private TypedArray mFlashIndicatorPhotoIcons;
private TypedArray mFlashIndicatorVideoIcons;
+ private TypedArray mHdrPlusIndicatorIcons;
private TypedArray mHdrIndicatorIcons;
private TypedArray mRefocusIndicatorIcons;
+ private TypedArray mPanoramaIndicatorIcons;
private AppController mController;
@@ -63,15 +67,22 @@
mFlashIndicator = (ImageView) root.findViewById(R.id.flash_indicator);
mHdrIndicator = (ImageView) root.findViewById(R.id.hdr_indicator);
mRefocusIndicator = (ImageView) root.findViewById(R.id.refocus_indicator);
+ mPanoramaIndicator = (ImageView) root.findViewById(R.id.panorama_indicator);
mFlashIndicatorPhotoIcons = context.getResources().obtainTypedArray(
R.array.camera_flashmode_indicator_icons);
mFlashIndicatorVideoIcons = context.getResources().obtainTypedArray(
R.array.video_flashmode_indicator_icons);
- mHdrIndicatorIcons = context.getResources().obtainTypedArray(
+ mHdrPlusIndicatorIcons = context.getResources().obtainTypedArray(
R.array.pref_camera_hdr_plus_indicator_icons);
+ mHdrIndicatorIcons = context.getResources().obtainTypedArray(
+ R.array.pref_camera_hdr_indicator_icons);
mRefocusIndicatorIcons = context.getResources().obtainTypedArray(
R.array.refocus_indicator_icons);
+ if (PhotoSphereHelper.getPanoramaIndicatorArrayId() > 0) {
+ mPanoramaIndicatorIcons = context.getResources().obtainTypedArray(
+ PhotoSphereHelper.getPanoramaIndicatorArrayId());
+ }
}
@Override
@@ -102,13 +113,25 @@
syncHdrIndicator();
break;
}
+ case ButtonManager.BUTTON_HDR: {
+ syncHdrIndicator();
+ break;
+ }
case ButtonManager.BUTTON_REFOCUS: {
syncRefocusIndicator();
break;
}
- default:
- // Do nothing. The indicator doesn't care
- // about button that don't correspond to indicators.
+ case ButtonManager.BUTTON_PANO_HORIZONTAL: {
+ syncPanoramaIndicator();
+ break;
+ }
+ case ButtonManager.BUTTON_PANO_VERTICAL: {
+ syncPanoramaIndicator();
+ break;
+ }
+ default:
+ // Do nothing. The indicator doesn't care
+ // about button that don't correspond to indicators.
}
}
@@ -120,6 +143,7 @@
syncFlashIndicator();
syncHdrIndicator();
syncRefocusIndicator();
+ syncPanoramaIndicator();
}
/**
@@ -137,11 +161,11 @@
.getInteger(R.integer.camera_mode_video)) {
setIndicatorState(mController.getSettingsManager(),
SettingsManager.SETTING_VIDEOCAMERA_FLASH_MODE,
- mFlashIndicator, mFlashIndicatorVideoIcons);
+ mFlashIndicator, mFlashIndicatorVideoIcons, false);
} else {
setIndicatorState(mController.getSettingsManager(),
SettingsManager.SETTING_FLASH_MODE,
- mFlashIndicator, mFlashIndicatorPhotoIcons);
+ mFlashIndicator, mFlashIndicatorPhotoIcons, false);
}
} else {
mFlashIndicator.setVisibility(View.GONE);
@@ -149,7 +173,7 @@
}
/**
- * Sync the icon and the visibility of the hdr indicator.
+ * Sync the icon and the visibility of the hdr/hdrplus indicator.
*/
private void syncHdrIndicator() {
ButtonManager buttonManager = mController.getButtonManager();
@@ -159,7 +183,12 @@
&& buttonManager.isVisible(ButtonManager.BUTTON_HDRPLUS)) {
setIndicatorState(mController.getSettingsManager(),
SettingsManager.SETTING_CAMERA_HDR,
- mHdrIndicator, mHdrIndicatorIcons);
+ mHdrIndicator, mHdrPlusIndicatorIcons, false);
+ } else if (buttonManager.isEnabled(ButtonManager.BUTTON_HDR)
+ && buttonManager.isVisible(ButtonManager.BUTTON_HDR)) {
+ setIndicatorState(mController.getSettingsManager(),
+ SettingsManager.SETTING_CAMERA_HDR,
+ mHdrIndicator, mHdrIndicatorIcons, false);
} else {
mHdrIndicator.setVisibility(View.GONE);
}
@@ -176,18 +205,38 @@
&& buttonManager.isVisible(ButtonManager.BUTTON_REFOCUS)) {
setIndicatorState(mController.getSettingsManager(),
SettingsManager.SETTING_CAMERA_REFOCUS,
- mRefocusIndicator, mRefocusIndicatorIcons);
+ mRefocusIndicator, mRefocusIndicatorIcons, false);
} else {
mRefocusIndicator.setVisibility(View.GONE);
}
}
/**
+ * Sync the icon and the visibility of the panorama indicator.
+ */
+ private void syncPanoramaIndicator() {
+ ButtonManager buttonManager = mController.getButtonManager();
+ // If refocus isn't an enabled and visible option,
+ // do not show the indicator.
+ boolean panoEnabled = (buttonManager.isEnabled(ButtonManager.BUTTON_PANO_HORIZONTAL)
+ && buttonManager.isEnabled(ButtonManager.BUTTON_PANO_VERTICAL));
+ boolean panoVisible = (buttonManager.isVisible(ButtonManager.BUTTON_PANO_HORIZONTAL)
+ && buttonManager.isVisible(ButtonManager.BUTTON_PANO_VERTICAL));
+ if (panoEnabled && panoVisible && mPanoramaIndicatorIcons != null) {
+ setIndicatorState(mController.getSettingsManager(),
+ SettingsManager.SETTING_CAMERA_PANO_ORIENTATION,
+ mPanoramaIndicator, mPanoramaIndicatorIcons, true);
+ } else {
+ mPanoramaIndicator.setVisibility(View.GONE);
+ }
+ }
+
+ /**
* Sets the image resource and visibility of the indicator
* based on the indicator's corresponding setting state.
*/
private void setIndicatorState(SettingsManager settingsManager, int id,
- ImageView imageView, TypedArray iconArray) {
+ ImageView imageView, TypedArray iconArray, boolean showDefault) {
// Set the correct image src.
String value = settingsManager.get(id);
@@ -207,7 +256,7 @@
imageView.setImageDrawable(drawable);
// Set the indicator visible if not in default state.
- if (settingsManager.isDefault(id)) {
+ if (!showDefault && settingsManager.isDefault(id)) {
imageView.setVisibility(View.GONE);
} else {
imageView.setVisibility(View.VISIBLE);
@@ -218,15 +267,23 @@
public void onSettingChanged(SettingsManager settingsManager, int id) {
switch (id) {
case SettingsManager.SETTING_FLASH_MODE: {
- setIndicatorState(settingsManager, id, mFlashIndicator, mFlashIndicatorPhotoIcons);
+ syncFlashIndicator();
break;
}
case SettingsManager.SETTING_VIDEOCAMERA_FLASH_MODE: {
- setIndicatorState(settingsManager, id, mFlashIndicator, mFlashIndicatorVideoIcons);
+ syncFlashIndicator();
break;
}
case SettingsManager.SETTING_CAMERA_HDR: {
- setIndicatorState(settingsManager, id, mHdrIndicator, mHdrIndicatorIcons);
+ syncHdrIndicator();
+ break;
+ }
+ case SettingsManager.SETTING_CAMERA_REFOCUS: {
+ syncRefocusIndicator();
+ break;
+ }
+ case SettingsManager.SETTING_CAMERA_PANO_ORIENTATION: {
+ syncPanoramaIndicator();
break;
}
default: {
diff --git a/src/com/android/camera/widget/IndicatorOverlay.java b/src/com/android/camera/widget/IndicatorOverlay.java
index 29f591e..703c8f3 100644
--- a/src/com/android/camera/widget/IndicatorOverlay.java
+++ b/src/com/android/camera/widget/IndicatorOverlay.java
@@ -21,6 +21,7 @@
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.Gravity;
+import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
@@ -47,6 +48,34 @@
private LinearLayout mIndicatorOverlayIcons;
+ /**
+ * A listener for setting a {@link android.view.ViewGroup} invisible
+ * once all of its children are gone.
+ *
+ * This is necessary if the group has a background with a minimum height
+ * and width greater than zero. Otherwise, the background would show
+ * despite an empty group.
+ */
+ private View.OnLayoutChangeListener mLayoutChangeListener =
+ new View.OnLayoutChangeListener() {
+ @Override
+ public void onLayoutChange(View v, int left, int top, int right, int bottom,
+ int oldLeft, int oldTop, int oldRight, int oldBottom) {
+ ViewGroup group = (ViewGroup) v;
+ if (group.getChildCount() > 0) {
+ int visibility = View.INVISIBLE;
+ for (int i = 0; i < group.getChildCount(); i++) {
+ View child = group.getChildAt(i);
+ if (child != null && child.getVisibility() != View.GONE) {
+ visibility = View.VISIBLE;
+ break;
+ }
+ }
+ v.setVisibility(visibility);
+ }
+ }
+ };
+
public IndicatorOverlay(Context context, AttributeSet attrs) {
super(context, attrs);
}
@@ -54,6 +83,7 @@
@Override
public void onFinishInflate() {
mIndicatorOverlayIcons = (LinearLayout) findViewById(R.id.indicator_overlay_icons);
+ mIndicatorOverlayIcons.addOnLayoutChangeListener(mLayoutChangeListener);
Configuration configuration = getContext().getResources().getConfiguration();
checkOrientation(configuration.orientation);
}
diff --git a/src_pd/com/android/camera/util/PhotoSphereHelper.java b/src_pd/com/android/camera/util/PhotoSphereHelper.java
index 3b22576..1e04eca 100644
--- a/src_pd/com/android/camera/util/PhotoSphereHelper.java
+++ b/src_pd/com/android/camera/util/PhotoSphereHelper.java
@@ -101,4 +101,25 @@
public static long getModifiedTimeFromURI(ContentResolver contentResolver, Uri contentUri) {
return 0;
}
+
+ /**
+ * Get the resource id of the panorama horizontal icon.
+ */
+ public static int getPanoramaHorizontalDrawableId() {
+ return 0;
+ }
+
+ /**
+ * Get the resource id of the panorama vertical icon.
+ */
+ public static int getPanoramaVerticalDrawableId() {
+ return 0;
+ }
+
+ /**
+ * Get the resource id of the panorama indicator icon array.
+ */
+ public static int getPanoramaIndicatorArrayId() {
+ return 0;
+ }
}