am 08e8f5a8: am ef21ad78: Merge "es_ES: Fix spanish translations"

* commit '08e8f5a8c82a180f80920580e0d295709f261a1f':
  es_ES: Fix spanish translations
diff --git a/Android.mk b/Android.mk
index 749e87e..b1442d4 100644
--- a/Android.mk
+++ b/Android.mk
@@ -1,5 +1,4 @@
 LOCAL_PATH := $(call my-dir)
 
-# Now the appCamera is built into Gallery2.
-
-include $(LOCAL_PATH)/jni/Android.mk
+# leaving the makefile emtpy to prevent the build
+# system from traversing the project
diff --git a/res/anim/count_down_exit.xml b/res/anim/count_down_exit.xml
new file mode 100644
index 0000000..0091c5b
--- /dev/null
+++ b/res/anim/count_down_exit.xml
@@ -0,0 +1,29 @@
+<?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.
+-->
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+        <alpha
+            android:fromAlpha="1.0"
+            android:toAlpha="0.0"
+            android:duration="1000" />
+        <scale
+            android:fromXScale="1.0"
+            android:fromYScale="1.0"
+            android:toXScale="3.0"
+            android:toYScale="3.0"
+            android:pivotX="50%"
+            android:pivotY="50%"
+            android:duration="800" />
+</set>
\ No newline at end of file
diff --git a/res/layout-land/photo_module.xml b/res/layout-land/photo_module_content.xml
similarity index 97%
rename from res/layout-land/photo_module.xml
rename to res/layout-land/photo_module_content.xml
index beeaba4..2afcf40 100644
--- a/res/layout-land/photo_module.xml
+++ b/res/layout-land/photo_module_content.xml
@@ -15,7 +15,7 @@
 -->
 <!-- This layout is shared by phone and tablet in landscape orientation. -->
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/camera_app_root"
+    android:id="@+id/camera_app"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
diff --git a/res/layout-port/photo_module.xml b/res/layout-port/photo_module_content.xml
similarity index 97%
rename from res/layout-port/photo_module.xml
rename to res/layout-port/photo_module_content.xml
index f8636d7..79438a5 100644
--- a/res/layout-port/photo_module.xml
+++ b/res/layout-port/photo_module_content.xml
@@ -15,7 +15,7 @@
 -->
 <!-- This layout is shared by phone and tablet in landscape orientation. -->
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/camera_app_root"
+    android:id="@+id/camera_app"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
diff --git a/res/layout/count_down_to_capture.xml b/res/layout/count_down_to_capture.xml
new file mode 100644
index 0000000..68276ad
--- /dev/null
+++ b/res/layout/count_down_to_capture.xml
@@ -0,0 +1,35 @@
+<?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.
+-->
+<com.android.camera.ui.CountDownView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/count_down_to_capture"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:visibility="invisible" >
+    <TextView android:id="@+id/remaining_seconds"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:textSize="160sp"
+        android:textColor="@android:color/white"
+        android:gravity="center" />
+    <TextView android:id="@+id/count_down_title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:paddingLeft="10dp"
+        android:paddingTop="20dp"
+        android:textSize="20sp"
+        android:textColor="@android:color/white"
+        android:text="@string/count_down_title_text" />
+</com.android.camera.ui.CountDownView>
\ No newline at end of file
diff --git a/res/layout/in_line_setting_switch.xml b/res/layout/in_line_setting_check_box.xml
similarity index 84%
rename from res/layout/in_line_setting_switch.xml
rename to res/layout/in_line_setting_check_box.xml
index 0957a9a..a4d9bba 100644
--- a/res/layout/in_line_setting_switch.xml
+++ b/res/layout/in_line_setting_check_box.xml
@@ -14,7 +14,7 @@
      limitations under the License.
 -->
 
-<com.android.camera.ui.InLineSettingSwitch xmlns:android="http://schemas.android.com/apk/res/android"
+<com.android.camera.ui.InLineSettingCheckBox xmlns:android="http://schemas.android.com/apk/res/android"
         style="@style/SettingRow">
     <TextView android:id="@+id/title"
             style="@style/SettingItemTitle" />
@@ -23,9 +23,9 @@
     <FrameLayout
             android:layout_width="@dimen/setting_item_text_width"
             android:layout_height="match_parent">
-        <com.android.camera.ui.Switch android:id="@+id/setting_switch"
+        <CheckBox android:id="@+id/setting_check_box"
                 android:layout_gravity="center"
                 android:layout_width="wrap_content"
                 android:layout_height="match_parent" />
     </FrameLayout>
-</com.android.camera.ui.InLineSettingSwitch>
+</com.android.camera.ui.InLineSettingCheckBox>
diff --git a/res/layout/photo_module.xml b/res/layout/photo_module.xml
new file mode 100644
index 0000000..b2ad702
--- /dev/null
+++ b/res/layout/photo_module.xml
@@ -0,0 +1,29 @@
+<?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 both landscape and portrait
+ orientation. The purpose of having this layout is to eventually not manually
+ recreate views when the orientation changes, by migrating the views that do not
+ need to be recreated in onConfigurationChanged from old photo_module to this
+ layout. -->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/camera_app_root"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+    <include layout="@layout/count_down_to_capture"/>
+    <include layout="@layout/photo_module_content"/>
+</FrameLayout>
\ No newline at end of file
diff --git a/res/layout/time_interval_popup.xml b/res/layout/time_interval_popup.xml
index 1fac11d..9cf224a 100644
--- a/res/layout/time_interval_popup.xml
+++ b/res/layout/time_interval_popup.xml
@@ -25,24 +25,21 @@
         <LinearLayout android:orientation="horizontal"
                 android:layout_height="wrap_content"
                 android:layout_width="match_parent">
-            <FrameLayout
+            <TextView android:id="@+id/title"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:minHeight="@dimen/popup_title_frame_min_height">
-                <TextView android:id="@+id/title"
-                        style="@style/PopupTitleText" />
-            </FrameLayout>
-
-            <LinearLayout
+                    android:gravity="center_vertical"
+                    android:ellipsize="end"
+                    android:layout_weight="1"
+                    android:minHeight="@dimen/popup_title_frame_min_height"
+                    style="@style/PopupTitleText" />
+            <Switch
+                    android:id="@+id/time_lapse_switch"
+                    android:layout_width="wrap_content"
                     android:layout_height="match_parent"
-                    android:layout_width="match_parent"
-                    android:orientation="horizontal">
-                <com.android.camera.ui.Switch
-                        android:id="@+id/time_lapse_switch"
-                        android:layout_width="match_parent"
-                        android:layout_height="wrap_content"
-                        android:layout_gravity="right|center_vertical" />
-             </LinearLayout>
+                    android:layout_weight="0"
+                    android:layout_marginRight="8dp"
+                    android:layout_gravity="right|center_vertical" />
         </LinearLayout>
 
         <View style="@style/PopupTitleSeparator" />
diff --git a/res/layout/timer_setting_popup.xml b/res/layout/timer_setting_popup.xml
new file mode 100644
index 0000000..d6e8000
--- /dev/null
+++ b/res/layout/timer_setting_popup.xml
@@ -0,0 +1,101 @@
+<?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.
+-->
+
+<com.android.camera.ui.TimerSettingPopup xmlns:android="http://schemas.android.com/apk/res/android"
+        style="@style/SettingPopupWindow">
+
+    <LinearLayout android:orientation="vertical"
+            android:background="@color/popup_background"
+            android:layout_height="wrap_content"
+            android:layout_width="@dimen/big_setting_popup_window_width">
+
+        <LinearLayout android:orientation="horizontal"
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent">
+            <TextView
+                    android:id="@+id/title"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:ellipsize="end"
+                    android:layout_weight="1"
+                    android:minHeight="@dimen/popup_title_frame_min_height"
+                    android:gravity="center_vertical"
+                    style="@style/PopupTitleText" />
+            <Switch
+                    android:id="@+id/timer_setting_switch"
+                    android:layout_width="wrap_content"
+                    android:layout_height="match_parent"
+                    android:layout_weight="0"
+                    android:layout_marginRight="8dp"
+                    android:layout_gravity="right|center_vertical" />
+        </LinearLayout>
+
+        <View style="@style/PopupTitleSeparator" />
+
+        <TextView
+                android:id="@+id/set_timer_help_text"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:paddingTop="16dip"
+                android:paddingLeft="16dip"
+                android:paddingRight="16dip"
+                android:paddingBottom="16dip"
+                android:textAppearance="?android:attr/textAppearanceMedium"
+                android:text="@string/set_timer_help"/>
+
+        <LinearLayout
+                android:id="@+id/time_duration_picker"
+                android:orientation="vertical"
+                android:layout_gravity="center_horizontal"
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent">
+            <TextView
+                    android:id="@+id/set_time_interval_title"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:paddingTop="5dip"
+                    android:gravity="center"
+                    android:textAppearance="?android:attr/textAppearanceMedium"
+                    android:text="@string/set_duration"/>
+            <!-- A number picker to set timer -->
+            <NumberPicker
+                    android:id="@+id/duration"
+                    android:layout_width="160dp"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="16dip"
+                    android:layout_marginRight="16dip"
+                    android:layout_gravity="center_horizontal"
+                    android:focusable="false" />
+        </LinearLayout>
+
+        <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="vertical"
+                android:divider="?android:attr/dividerHorizontal"
+                android:showDividers="beginning"
+                android:dividerPadding="0dip">
+            <Button android:id="@+id/timer_set_button"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="center_horizontal"
+                    android:textAppearance="?android:attr/textAppearanceMedium"
+                    style="?android:attr/buttonBarButtonStyle"
+                    android:text="@string/time_lapse_interval_set" />
+        </LinearLayout>
+    </LinearLayout>
+
+</com.android.camera.ui.TimerSettingPopup>
diff --git a/res/raw/beep_once.ogg b/res/raw/beep_once.ogg
new file mode 100644
index 0000000..6d64917
--- /dev/null
+++ b/res/raw/beep_once.ogg
Binary files differ
diff --git a/res/raw/beep_twice.ogg b/res/raw/beep_twice.ogg
new file mode 100644
index 0000000..95c5b7e
--- /dev/null
+++ b/res/raw/beep_twice.ogg
Binary files differ
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 98f6bd1..5d7cf1d 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Terug"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Voorkant"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Stoor ligging"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Aftel-tydhouer"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 sekonde"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d sekondes"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Biep tydens aftelling"</string>
     <string name="setting_off" msgid="4480039384202951946">"Af"</string>
     <string name="setting_on" msgid="8602246224465348901">"Aan"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Videogehalte"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Jou video"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Sit jou toestel neer."\n"Stap vir \'n oomblik buite sig."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Raak om foto tydens opname te neem."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Video-opname het begin."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Video-opname het gestop."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Video-momentopname is gedeaktiveer wanneer spesiale effekte aan is."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Vee effekte uit"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"LAWWE GESIGTE"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Zoembeheer"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Verminder %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Vermeerder %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"%1$s skakelaar"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"%1$s merkblokkie"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Skakel oor na foto"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Skakel oor na video"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Skakel oor na panorama"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Klaar"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Stel tydinterval"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Tydsverloop-kenmerk is af. Skakel dit aan om tydstussenpose te stel."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Aftel-tydhouer is af. Skakel dit aan om af te tel voor jy \'n foto neem."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Stel tydsduur in sekondes"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Tel af om \'n foto te neem"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Moet foto-liggings onthou word?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Merk jou foto\'s en video\'s met die liggings waar hulle geneem is."\n\n"Ander programme kan toegang kry tot hierdie inligting saam met jou gestoorde prente."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Nee dankie"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index cd3eb3a..870108e 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"ተመለስ"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"የፊት"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"ሥፍራ"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"ሰዓት ቆጣሪ"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 ሰከንድ"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d ሰከንዶች"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"ጊዜ በሚቆጠርበት ጊዜ ድምጽ"</string>
     <string name="setting_off" msgid="4480039384202951946">"ጠፍቷል"</string>
     <string name="setting_on" msgid="8602246224465348901">"በርቷል"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"ቪዲዮ ጥራት"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"ቪዲዮህ"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"መሳሪያህን ወደታች አኑር።"\n"  ለትንሽ ቆይታ ከዕይታ ውጪ ሁን።"</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"እየቀዳህ ፎቶ ለማንሳት ንካ።"</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"የቪዲዮ ቀረጻ ተጀምሯል።"</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"የቪዲዮ ቀረጻ ቆሟል።"</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"ቪዲዮ ማንሻ ልዩ ማሳመሪያዎች ሲበሩ ይቦዝናል::"</string>
     <string name="clear_effects" msgid="5485339175014139481">"ማሳመሪያዎች አጽዳ"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"ሞኛሞኝ ፊቶች"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"ኣጕላ  መቆጣጠሪያ"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"ቀንስ %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"ጨምር %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"%1s ማብሪያና ማጥፊያ"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"%1$s ምልክት ማድረጊያ ሳጥን"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"ወደ ፎቶ ቀይር"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"ወደ ቪዲዮ ቀይር"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"ወደ ፓኖራማ ቀይር"</string>
@@ -154,25 +164,28 @@
     <string name="pref_video_time_lapse_frame_interval_720000" msgid="8969801372893266408">"12 ደቂቃዎች"</string>
     <string name="pref_video_time_lapse_frame_interval_900000" msgid="5803172407245902896">"15 ደቂቃዎች"</string>
     <string name="pref_video_time_lapse_frame_interval_1440000" msgid="6286246349698492186">"24 ደቂቃዎች"</string>
-    <string name="pref_video_time_lapse_frame_interval_1800000" msgid="5042628461448570758">"0.5 ሰዓታት"</string>
+    <string name="pref_video_time_lapse_frame_interval_1800000" msgid="5042628461448570758">"0.5 ሰዓቶች"</string>
     <string name="pref_video_time_lapse_frame_interval_3600000" msgid="6366071632666482636">"1 ሰዓት"</string>
     <string name="pref_video_time_lapse_frame_interval_5400000" msgid="536117788694519019">"1.5 ሰዓት"</string>
-    <string name="pref_video_time_lapse_frame_interval_7200000" msgid="6846617415182608533">"2 ሰዓታት"</string>
-    <string name="pref_video_time_lapse_frame_interval_9000000" msgid="4242839574025261419">"2.5 ሰዓታት"</string>
-    <string name="pref_video_time_lapse_frame_interval_10800000" msgid="2766886102170605302">"3 ሰዓታት"</string>
-    <string name="pref_video_time_lapse_frame_interval_14400000" msgid="7497934659667867582">"4 ሰዓታት"</string>
-    <string name="pref_video_time_lapse_frame_interval_18000000" msgid="8783643014853837140">"5 ሰዓታት"</string>
-    <string name="pref_video_time_lapse_frame_interval_21600000" msgid="5005078879234015432">"6 ሰዓታት"</string>
-    <string name="pref_video_time_lapse_frame_interval_36000000" msgid="69942198321578519">"10 ሰዓታት"</string>
-    <string name="pref_video_time_lapse_frame_interval_43200000" msgid="285992046818504906">"12 ሰዓታት"</string>
-    <string name="pref_video_time_lapse_frame_interval_54000000" msgid="5740227373848829515">"15 ሰዓታት"</string>
-    <string name="pref_video_time_lapse_frame_interval_86400000" msgid="9040201678470052298">"24 ሰዓታት"</string>
+    <string name="pref_video_time_lapse_frame_interval_7200000" msgid="6846617415182608533">"2 ሰዓቶች"</string>
+    <string name="pref_video_time_lapse_frame_interval_9000000" msgid="4242839574025261419">"2.5 ሰዓቶች"</string>
+    <string name="pref_video_time_lapse_frame_interval_10800000" msgid="2766886102170605302">"3 ሰዓቶች"</string>
+    <string name="pref_video_time_lapse_frame_interval_14400000" msgid="7497934659667867582">"4 ሰዓቶች"</string>
+    <string name="pref_video_time_lapse_frame_interval_18000000" msgid="8783643014853837140">"5 ሰዓቶች"</string>
+    <string name="pref_video_time_lapse_frame_interval_21600000" msgid="5005078879234015432">"6 ሰዓቶች"</string>
+    <string name="pref_video_time_lapse_frame_interval_36000000" msgid="69942198321578519">"10 ሰዓቶች"</string>
+    <string name="pref_video_time_lapse_frame_interval_43200000" msgid="285992046818504906">"12 ሰዓቶች"</string>
+    <string name="pref_video_time_lapse_frame_interval_54000000" msgid="5740227373848829515">"15 ሰዓቶች"</string>
+    <string name="pref_video_time_lapse_frame_interval_86400000" msgid="9040201678470052298">"24 ሰዓቶች"</string>
     <string name="time_lapse_seconds" msgid="2105521458391118041">"ሰኮንዶች"</string>
     <string name="time_lapse_minutes" msgid="7738520349259013762">"ደቂቃዎች"</string>
-    <string name="time_lapse_hours" msgid="1776453661704997476">"ሰዓታት"</string>
+    <string name="time_lapse_hours" msgid="1776453661704997476">"ሰዓቶች"</string>
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"ተከናውኗል"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"የጊዜ ክፍተት ያዘጋጁ"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"የአላፊ ጊዜ ባህሪ ጠፍቷል። የጊዜ ክፍተቱን ለማዘጋጀት ያብሩት።"</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"የሰዓት ቆጣሪ ጠፍቷል። ስዕል ከማንሳትዎ በፊት ለመቁጠር ያብሩት።"</string>
+    <string name="set_duration" msgid="5578035312407161304">"ቆይታን በሰከንዶች ያዘጋጁ"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"ፎቶ ለመውሰድ ጊዜ በመቁጠር ላይ"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"የፎቶ አካባቢዎች ይታወሱ?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"ፎቶዎችዎን እና ቪዲዮዎችዎን በተነሱበት አካባቢዎች መለያ ይስጧቸው።"\n\n"ሌሎች መተግበሪያዎች ይህንን መረጃ ከተቀመጡ ምስሎችዎ ጋር ሊደርሱበት ይችላሉ።"</string>
     <string name="remember_location_no" msgid="7541394381714894896">"አይ፣ አመሰግናለሁ"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 8cd9b05..253e367 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"رجوع"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"الأمام"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"تخزين الموقع"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"مؤقت العد التنازلي"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"ثانية واحدة"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d ثانية"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"صفير أثناء العد التنازلي"</string>
     <string name="setting_off" msgid="4480039384202951946">"إيقاف"</string>
     <string name="setting_on" msgid="8602246224465348901">"تشغيل"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"جودة الفيديو"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"مقطع فيديو"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"ضع جهازك أسفل"\n"اخرج من العرض للحظة."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"المس لالتقاط صورة أثناء التسجيل."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"بدأ تسجيل الفيديو."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"تم إيقاف تسجيل الفيديو."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"يتم تعطيل لقطة الفيديو عند تشغيل التأثيرات الخاصة."</string>
     <string name="clear_effects" msgid="5485339175014139481">"محو التأثيرات"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"وجوه مضحكة"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"التحكم في التكبير/التصغير"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"خفض %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"زيادة %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"مفتاح تبديل %1$s"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"مربع اختيار %1$s"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"تبديل إلى وضع الصور"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"تبديل إلى الفيديو"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"تبديل إلى بانوراما"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"تم"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"تعيين المهلة الزمنية"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"ميزة اللقطات المتتابعة مغلقة. يمكنك تشغيلها لتعيين المهلة الزمنية."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"مؤقت العد التنازلي متوقف. يُمكنك تشغيله لإجراء العد التنازلي قبل التقاط صورة."</string>
+    <string name="set_duration" msgid="5578035312407161304">"تعيين المدة بالثواني"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"العد التنازلي لالتقاط صورة"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"هل تتذكر مواقع الصور؟"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"ضع علامة على الصور ومقاطع الفيديو التابعة لك تشير إلى المواقع التي تم التقاطها منها."\n\n"يمكن لتطبيقات أخرى الدخول إلى هذه المعلومات إلى جانب صورك المحفوظة."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"لا، شكرًا"</string>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 39de216..1d1d2d8 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Назад"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Перад"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Месцазнаходжанне крамы"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Таймер зваротнага адлiку"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 секунда"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d секунд"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Гукавы сігнал падчас зваротнага адлiку"</string>
     <string name="setting_off" msgid="4480039384202951946">"Адключана"</string>
     <string name="setting_on" msgid="8602246224465348901">"Уключана"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Якасць відэа"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Вашы відэа"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Наладзьце прыладу."\n"На хвіліну выйдзіце з поля зроку."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Націсніце, каб зрабiць здымак падчас запісу."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Відэазапіс пачаўся."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Вiдэазапiс спыніўся."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Капiяванне кадра з відэа адключаецца, калі ўключаны спецэфекты."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Выдалiць эфекты"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"ПАЦЕШНЫЯ СМАЙЛIКI"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Кiраванне маштабаваннем..."</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Памяншэнне на %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Павелічэнне %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"Пераключэнне %1$s"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"Поле %1$s"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Пераключыцца на фота"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Пераключыцца ў рэжым відэа"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Пераключыцца ў рэжым панарамы"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Гатова"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Задаць iнтэрвал часу"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Функцыя \"Часавы інтэрвал\" выключана. Уключыце яе."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Таймер выключаны. Уключыце на iм зваротны адлік перад здымкай."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Усталяваць час у секундах"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Зваротны адлiк, каб зрабіць здымак"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Запамiнаць месца, дзе зроблена фота?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Адзначце на вашых фатаграфіях і відэа месцы, у якіх яны былі створаныя."\n\n"Іншыя праграмы могуць атрымаць доступ да гэтай інфармацыі разам з захаванымі выявамі."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Не, дзякуй"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index b9513a2..758b6e7 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Задна"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Предна"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Място за съхранение"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Таймер за обратното отброяване"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 секунда"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d секунди"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Писукане при обратното отбр."</string>
     <string name="setting_off" msgid="4480039384202951946">"Изключено"</string>
     <string name="setting_on" msgid="8602246224465348901">"Включено"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Качество на видеоклип"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Видеоклипът ви"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Оставете устройството си."\n"Отдръпнете се от зрителното му поле за момент."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Докоснете, за да направите снимка, докато записвате."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Видеозаписът започна."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Видеозаписът спря."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Моментните снимки в клиповете са деакт. при вкл. спец. ефекти."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Изчистване на ефектите"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"СМЕШНИ ЛИЦА"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Контрола за промяна на мащаба"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Намаляване на %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Увеличаване на %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"Превключване на %1$s"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"Квадратче за отметка за %1$s"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Превключване към фотоапарат"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Превключване към видео"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Превключване към панорама"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Готово"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Задаване на интервал от време"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Функцията за цайтрафер е изключена. Включете я, за да зададете интервал от време."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Таймерът за обратното отброяване е изключен. Включете го, за да отброява, преди да направите снимка."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Задаване на продължителността в секунди"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Обратно отброяване до правенето на снимка"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Да се запомнят ли местоположенията на снимките?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Поставете в снимките и видеоклиповете си маркери с местоположенията, на които са направени."\n\n"Другите приложения могат да осъществяват достъп до тази информация, както и до запазените ви изображения."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Не, благодаря"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index a7c8749..a052e46 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Enrere"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Frontal"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Emmagatzema la ubicació"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Temporitzador de compte enrere"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 segon"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d segons"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Sona en compte enr."</string>
     <string name="setting_off" msgid="4480039384202951946">"Desactivat"</string>
     <string name="setting_on" msgid="8602246224465348901">"Activat"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Qualitat de vídeo"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"El teu vídeo"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Deixa el dispositiu."\n"Surt un moment de la visualització."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Toca per fer una foto mentre enregistres."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"L\'enregistrament de vídeo ha començat."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"L\'enregistrament de vídeo s\'ha aturat."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Les instantànies del vídeo es desactiven quan hi ha els efectes especials activats."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Esborra efectes"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"GANYOTES"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Control de zoom"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Redueix %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Augmenta %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"Commutador %1$s"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"Casella de selecció %1$s"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Canvia a foto"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Canvia a vídeo"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Canvia a panorama"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Fet"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Definició d\'interval de temps"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"La funció de lapse de temps està desactivada. Activa-la per definir l\'interval de temps."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"El temporitzador del compte enrere està desactivat. Activa el compte enrere abans de fer una foto."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Configuració de la durada en segons"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Compte enrere per fer una foto"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Vols que es recordin les ubicacions de les fotos?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Etiqueta les teves fotos i els teus vídeos amb les ubicacions des de les quals es fan."\n\n"Altres aplicacions podran accedir a aquesta informació juntament amb les imatges desades."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"No, gràcies"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 4437964..75d7327 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Zadní"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Přední"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Úložiště"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Časovač odpočítávání"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 s"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d s"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Zvuk při odpočtu"</string>
     <string name="setting_off" msgid="4480039384202951946">"Vypnuto"</string>
     <string name="setting_on" msgid="8602246224465348901">"Zapnuto"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Kvalita videa"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Vaše video"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Položte zařízení."\n"Vystupte na chvíli ze zorného pole."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Dotykem v průběhu nahrávání pořídíte snímek."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Záznam videa byl zahájen."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Záznam videa byl zastaven."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Jsou-li zapnuty zvláštní efekty, jsou snímky videa zakázány."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Vymazat efekty"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"BLÁZNIVÉ TVÁŘE"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Ovládání přiblížení/oddálení"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Snížit %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Zvýšit %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"Přepínač %1$s"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"%1$s zaškrtávací políčko"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Přepnout na fotoaparát"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Přepnout na video"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Přepnout do panoramatického režimu"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Hotovo"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Nastavit časový interval"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Funkce časosběr je vypnutá. Zapněte ji a nastavte časový interval."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Časovač odpočítávání je vypnutý. Chcete-li odpočítávat do aktivace spouště fotoaparátu, zapněte jej."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Nastavit dobu v sekundách"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Odpočítávání spouště fotoaparátu"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Pamatovat, kde byly fotky pořízeny?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Přidejte do fotek a videí označení míst, kde jste je pořídili."\n\n"Ostatní aplikace budou mít k těmto informacím přístup společně s přístupem k uloženým obrázkům."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Ne, děkuji"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index a49397d..27d48d9 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -35,6 +35,12 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Bagest"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Forrest"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Gem placering"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Nedtællingsur"</string>
+    <!-- String.format failed for translation -->
+    <!-- no translation found for pref_camera_timer_entry:other (6455381617076792481) -->
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Beep under nedtællingen"</string>
     <string name="setting_off" msgid="4480039384202951946">"Fra"</string>
     <string name="setting_on" msgid="8602246224465348901">"Til"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Videokvalitet"</string>
@@ -103,6 +109,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Din video"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Læg din enhed ned."\n"Træd ud af syne et øjeblik."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Tryk for at tage et foto, mens du optager."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Videooptagelsen er startet."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Videooptagelsen er stoppet."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Videoøjebliksbilleder deaktiveres, når specialeffekter er tændt."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Ryd effekter"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"FJOLLEDE ANSIGTER"</string>
@@ -117,7 +125,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Zoomkontrol"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Formindsk %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Forøg %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"%1$s-knappen"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"Afkrydsningsfeltet for %1$s"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Skift til foto"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Skift til video"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Skift til panorama"</string>
@@ -173,6 +181,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Udført"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Angiv tidsinterval"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Funktionen Tidsforløb er deaktiveret. Aktivér den for at indstille tidsintervallet."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Nedtællingsur er slukket. Slå den til at tælle ned, før du tager et billede."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Indstil varigheden i sekunder"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Tælle ned for at tage et foto"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Skal fotosteder huskes?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Tag dine fotos og videoer med de placeringer, hvor de blev taget."\n\n"Andre apps kan få adgang til disse oplysninger sammen med dine gemte billeder."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Nej tak"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 12a1398..f28d092 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Rückseite"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Vorderseite"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Ort speichern"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Countdown-Timer"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 Sekunde"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d Sekunden"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Piepton während Countdown"</string>
     <string name="setting_off" msgid="4480039384202951946">"Aus"</string>
     <string name="setting_on" msgid="8602246224465348901">"An"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Videoqualität"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Mein Video"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Legen Sie Ihr Gerät ab."\n"Treten Sie für einen kurzen Moment aus dem Aufnahmebereich."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Zum Erstellen eines Fotos während der Aufnahme tippen"</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Videoaufzeichnung wurde gestartet."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Videoaufzeichnung wurde beendet."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Video-Schnappschuss ist bei Spezialeffekten deaktiviert."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Effekte löschen"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"Lustige Gesichter"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Zoom-Steuerung"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Verkleinern %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Vergrößern %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"Schalter %1$s"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"Kontrollkästchen \"%1$s\""</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"In Kamera-Modus wechseln"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"In Video-Modus wechseln"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"In Panorama-Modus wechseln"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Fertig"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Zeitintervall festlegen"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Die Zeitraffer-Funktion ist ausgeschaltet. Schalten Sie sie ein, um das Zeitintervall festzulegen."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Der Countdown-Timer ist deaktiviert. Aktivieren Sie ihn, damit vor der Aufnahme eines Bildes ein Countdown erfolgt."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Dauer in Sekunden festlegen"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Countdown für Fotoaufnahme"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Aufnahmeorte für Fotos speichern?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Taggen Sie Ihre Fotos und Videos mit den Standorten, an denen sie aufgenommen wurden."\n\n"Andere Apps können auf diese Informationen und Ihre gespeicherten Bilder zugreifen."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Nein"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 8820459..d41658a 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Πίσω"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Μπροστά"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Αποθήκευση τοποθεσίας"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Χρονόμετρο αντίστροφης μέτρησης"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 δευτερόλεπτο"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d δευτερόλεπτα"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Ήχος κατά τη διάρκεια της αντίστροφης μέτρησης"</string>
     <string name="setting_off" msgid="4480039384202951946">"Απενεργοποιημ."</string>
     <string name="setting_on" msgid="8602246224465348901">"Ενεργοποιημ."</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Ποιότητα βίντεο"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Το βίντεό σας"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Αφήστε τη συσκευή σας κάτω"\n"Απομακρυνθείτε για λίγο από την εμβέλειά της."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Αγγίξτε για λήψη φωτογραφίας κατά την εγγραφή."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Έχει ξεκινήσει η εγγραφή βίντεο."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Έχει διακοπεί η εγγραφή βίντεο."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Το στιγμιότυπο οθόνης βίντεο απενεργοποιείται με ενεργά τα εφέ."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Διαγραφή εφέ"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"ΑΣΤΕΙΑ ΠΡΟΣΩΠΑ"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Έλεγχος εστίασης"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Μείωση %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Αύξηση %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"Διακόπτης %1$s"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"%1$s πλαίσιο επιλογής"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Μετάβαση σε φωτογραφία"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Μετάβαση σε λειτουργία βίντεο"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Μετάβαση σε πανόραμα"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Τέλος"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Ορισμός χρονικού διαστήματος"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Η λειτουργία παρέλευσης χρόνου έχει απενεργοποιηθεί. Ενεργοποιήστε την για να ορίσετε το χρονικό διάστημα."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Το χρονόμετρο αντίστροφης μέτρησης είναι απενεργοποιημένο. Ενεργοποιήστε το για να ξεκινήσει η αντίστροφη μέτρηση πριν τη λήψη φωτογραφίας."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Ορισμός διάρκειας σε δευτερόλεπτα"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Αντίστροφη μέτρηση για λήψη φωτογραφίας"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Απομνημόνευση τοποθεσίας φωτογραφιών;"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Προσθέστε ετικέτες στις φωτογραφίες και τα βίντεό σας με την τοποθεσία στην οποία έχουν τραβηχτεί."\n\n"Οι άλλες εφαρμογές μπορούν να αποκτήσουν πρόσβαση σε αυτές τις πληροφορίες μαζί με τις αποθηκευμένες σας εικόνες."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Όχι ευχαριστώ"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index c6e986b..c14e67c 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Back"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Front"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Store location"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Countdown timer"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 second"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d seconds"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Beep during countdown"</string>
     <string name="setting_off" msgid="4480039384202951946">"Off"</string>
     <string name="setting_on" msgid="8602246224465348901">"On"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Video quality"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Your video"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Set your device down."\n"Move out of view for a moment."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Touch to take photo while recording."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Video recording has started."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Video recording has stopped."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Video snapshot is disabled when special effects are on."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Clear effects"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"SILLY FACES"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Zoom control"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Decrease %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Increase %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"%1$s switch"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"%1$s tick box"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Switch to photo"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Switch to video"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Switch to panorama"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Done"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Set Time Interval"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Time lapse feature is off. Turn it on to set time interval."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Countdown timer is off. Turn it on to count down before taking a picture."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Set duration in seconds"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Counting down to take a photo"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Remember photo locations?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Tag your photos and videos with the locations where they are taken."\n\n"Other apps can access this information along with your saved images."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"No thanks"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index f3f4397..6b58ed9 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Parte trasera"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Parte delantera"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Almacenar ubicación"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Temp. de cuenta regresiva"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 segundo"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d segundos"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Pitido en cuenta"</string>
     <string name="setting_off" msgid="4480039384202951946">"Desactivada"</string>
     <string name="setting_on" msgid="8602246224465348901">"Activada"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Calidad del video"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Tu video"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Desactiva el dispositivo."\n"Deja de usarlo durante unos minutos."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Toca para tomar una foto mientras grabas un video."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Comenzó la grabación de video."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Se detuvo la grabación de video."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Las instantáneas de video se inhabilitan al activar los efectos."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Eliminar efectos"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"CARAS GRACIOSAS"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Control de zoom"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Disminución de %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Aumentar %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"Interruptor %1$s"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"Casilla de verificación %1$s"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Cambiar al modo Cámara"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Cambiar al modo Video"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Cambiar al modo Panorama"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Listo"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Establecer intervalo de tiempo"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"La función de intervalo de tiempo está desactivada. Actívala para definir el intervalo de tiempo."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"El temporizador de cuenta regresiva está desactivado. Actívalo en la cuenta regresiva antes de tomar una foto."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Configurar la duración en segundos"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Cuenta regresiva para tomar una foto"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"¿Recordar ubicaciones de las fotos?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Etiqueta tus fotos y videos con la ubicación donde fueron tomados."\n\n"Otras aplicaciones pueden acceder a esta información junto con tus imágenes guardadas."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"No, gracias"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 451aa98..c09d55e 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Trasera"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Delantera"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Añadir ubicación"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Temporizador de cuenta atrás"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 segundo"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d segundos"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Utilizar pitido"</string>
     <string name="setting_off" msgid="4480039384202951946">"Desactivado"</string>
     <string name="setting_on" msgid="8602246224465348901">"Activado"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Calidad de vídeo"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Tu vídeo"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Desactiva el dispositivo."\n"Deja de usarlo durante unos minutos."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Toca para hacer una foto mientras grabas un vídeo."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Se ha iniciado la grabación de vídeo."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"La grabación de vídeo se ha detenido."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"La instantánea de vídeo se inhabilita al activar efectos especiales."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Borrar efectos"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"CARAS GRACIOSAS"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Control de zoom"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Reducir %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Aumentar %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"Interruptor %1$s"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"Casilla de verificación %1$s"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Cambiar a la cámara"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Cambiar a vídeo"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Cambiar a modo panorámico"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Listo"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Establecer intervalo de tiempo"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"El intervalo de tiempo está desactivado. Activa esta función para establecer un intervalo."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"El temporizador de cuenta atrás está desactivado. Activa esta opción para ver la cuenta atrás antes de hacer una foto."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Definir duración en segundos"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Cuenta atrás para hacer una foto"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"¿Recordar ubicaciones de las fotos?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Etiqueta tus fotos y vídeos con las ubicaciones donde se han realizado."\n\n"Otras aplicaciones pueden acceder a esta información, así como a las imágenes guardadas."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"No, gracias"</string>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 0581211..14806db 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Tagasi"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Eestvaade"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Talletuse asukoht"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Iseavaja taimer"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 sekund"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d sekundit"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Iseavaja heli"</string>
     <string name="setting_off" msgid="4480039384202951946">"Väljas"</string>
     <string name="setting_on" msgid="8602246224465348901">"Sees"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Video kvaliteet"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Teie video"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Pange seade käest ära."\n"Astuge korraks vaateväljast eemale."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Puudutage salvestamise ajal foto jäädvustamiseks."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Video salvestamine algas."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Video salvestamine lõppes."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Kui eriefektid on sisse lülitatud, on video hetktõmmis keelatud."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Nulli efektid"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"NALJAKAD NÄOD"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Suumi juhtimine"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Vähenda %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Suurenda %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"Lüliti %1$s"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"%1$s märkeruut"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Aktiveeri fotorežiim"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Aktiveeri videorežiim"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Aktiveeri panoraamrežiim"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Valmis"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Ajavahemiku määramine"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Aeglustamisfunktsioon on välja lülitatud. Ajavahemiku määramiseks lülitage funktsioon sisse."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Iseavaja taimer on väljas. Lülitage see sisse, et loendada pildi tegemiseni jäänud aega."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Määrake kestus sekundites"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Aega foto tegemiseni"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Kas jätta meelde fotode jäädvustamise asukohad?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Märkige oma fotodele ja videotele jäädvustamise asukoht."\n\n"Muud rakendused pääsevad lisaks salvestatud piltidele juurde ka sellele teabele."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Ei, tänan"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 6db84b4..d33652f 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"برگشت"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"جلو"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"ذخیره موقعیت مکانی"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"تایمر شمارش معکوس"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"۱ ثانیه"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d ثانیه"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"بیپ هنگام شمارش معکوس"</string>
     <string name="setting_off" msgid="4480039384202951946">"غیرفعال"</string>
     <string name="setting_on" msgid="8602246224465348901">"فعال"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"کیفیت ویدئو"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"ویدئوی شما"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"دستگاه خود را کنار بگذارید."\n"برای یک لحظه از دید خارج شوید."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"برای گرفتن عکس در هنگام ضبط لمس کنید."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"ضبط ویدیو شروع شد."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"ضبط ویدیو متوقف شد."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"هنگام فعال بودن جلوه‌های ویژه، عکس فوری از ویدئو غیرفعال است."</string>
     <string name="clear_effects" msgid="5485339175014139481">"پاک کردن جلوه‌ها"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"چهره‌های احمقانه"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"کنترل بزرگنمایی"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"کاهش %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"افزایش %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"کلید %1$s"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"کادر انتخاب %1$s"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"رفتن به عکس"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"رفتن به ویدئو"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"رفتن به پانوراما"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"انجام شد"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"تنظیم فاصله زمانی"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"ویژگی زمان سپری شده خاموش است. برای تنظیم فاصله زمانی آن را روشن کنید."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"تایمر شمارش معکوس خاموش است. قبل از گرفتن تصویر آن را برای شمارش معکوس روشن کنید."</string>
+    <string name="set_duration" msgid="5578035312407161304">"تنظیم مدت زمان به ثانیه"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"شمارش معکوس برای گرفتن یک عکس"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"موقعیت مکانی عکس به‌خاطر سپرده شود؟"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"محل گرفتن عکس‌ها و ویدیوها را به آنها برچسب کنید."\n\n" سایر برنامه‌ها می‌توانند به این اطلاعات در کنار تصاویر ذخیره شده شما دسترسی پیدا کنند."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"نه متشکرم"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index b8628c7..75091cc 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Takaisin"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Etupuoli"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Tallennussijainti"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Ajastin"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 sekunti"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d sekuntia"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Ajastimen ääni"</string>
     <string name="setting_off" msgid="4480039384202951946">"Pois käytöstä"</string>
     <string name="setting_on" msgid="8602246224465348901">"Käytössä"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Videon laatu"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Oma videosi"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Aseta laite alustalle."\n"Astu hetkeksi pois kuvasta."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Ota kuva tallennuksen aikana koskettamalla ruutua."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Videon tallennus on alkanut."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Videon tallennus on pysäytetty."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Videon kuvakaappausta ei voi käyttää erikoistehosteiden kanssa."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Tyhjennä tehosteet"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"HAUSKAT KASVOT"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Zoomauksen hallinta"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Vähennä %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Kasvata %1$s-arvoa"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"%1$s-kytkin"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"%1$s -valintaruutu"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Vaihda kuvatilaan"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Vaihda videotilaan"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Vaihda panoraamatilaan"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Valmis"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Aseta aikaväli"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Intervallikuvaus ei ole käytössä. Ota ominaisuus käyttöön, jos haluat määrittää aikavälin."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Ajastin ei ole käytössä. Ota se käyttöön, jos haluat ottaa kuvan ajastimella."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Aseta kesto sekunteina"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Kuva otetaan, kun ajastin saavuttaa nollan"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Muistetaanko valokuvien sijainnit?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Merkitse valokuviin ja videoihin niiden kuvauspaikat."\n\n"Muut sovellukset voivat käyttää näitä tietoja tallennettujen kuviesi yhteydessä."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Ei kiitos"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 7a31f38..58229a5 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Arrière"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Avant"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Enregist. position"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Compte à rebours"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 seconde"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d secondes"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Compte à rebours sonore"</string>
     <string name="setting_off" msgid="4480039384202951946">"Désactivé"</string>
     <string name="setting_on" msgid="8602246224465348901">"Activé"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Qualité vidéo"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Votre vidéo"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Posez votre appareil."\n"Sortez du cadre quelques instants."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Appuyez pour prendre une photo pendant l\'enregistrement"</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"L\'enregistrement vidéo a commencé."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"L\'enregistrement vidéo s\'est arrêté."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Instantané vidéo désactivé en cas d\'activation des effets spéciaux."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Effacer les effets"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"DRÔLES DE TÊTES"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Contrôle du zoom"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Diminuer %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Augmenter %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"Interrupteur %1$s"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"Case à cocher %1$s"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Mode Appareil photo"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Mode vidéo"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Mode panoramique"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"OK"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Définir l\'intervalle de temps"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"La fonctionnalité Time Lapse est désactivée. Veuillez l\'activer pour définir un intervalle."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"La fonctionnalité de compte à rebours est désactivée. Activez-la pour effectuer un compte à rebours avant de prendre une photo."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Définir la durée en secondes"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Compte à rebours avant la photo"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Se souvenir du lieu des photos ?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Ajoutez des tags à vos photos et à vos vidéos pour identifier l\'endroit de la prise de vue."\n\n"D\'autres applications peuvent accéder à ces informations, ainsi qu\'aux images enregistrées."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Non, merci"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 0ae6057..10c6e9b 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"वापस जाएं"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"सामने"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"संग्रह स्थान"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"काउंटडाउन टाइमर"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 सेकंड"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d सेकंड"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"उल्टी गिनती के समय बीप"</string>
     <string name="setting_off" msgid="4480039384202951946">"बंद"</string>
     <string name="setting_on" msgid="8602246224465348901">"चालू"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"वीडियो गुणवत्ता"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"आपका वीडियो"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"अपने उपकरण को सेट करें."\n"कुछ समय के लिए दृश्य से बाहर निकलें."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"रिकॉर्डिंग के दौरान फ़ोटो लेने के लिए स्‍पर्श करें."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"वीडियो रिकॉर्डिंग प्रारंभ हो गई है."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"वीडियो रिकॉर्डिंग रुक गई है."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"विशेष प्रभावों के चालू होने पर वीडियो स्‍नेपशॉट अक्षम हो जाता है."</string>
     <string name="clear_effects" msgid="5485339175014139481">"प्रभाव साफ़ करें"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"मज़ाकिया चेहरे"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"ज़ूम नियंत्रण"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"%1$s घटाएं"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"%1$s बढ़ाएं"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"%1$s स्‍विच"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"%1$s चेक बॉक्स"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"फ़ोटो पर स्‍विच करें"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"वीडियो पर स्विच करें"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"पैनोरामा पर स्विच करें"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"पूर्ण"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"समय अंतराल सेट करें"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"समय अंतराल सुविधा बंद है. समय अंतराल सेट करने के लिए इसे चालू करें."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"काउंटडाउन टाइमर बंद है. चित्र लेने से पहले उल्‍टी गिनती करने के लिए इसे चालू करें."</string>
+    <string name="set_duration" msgid="5578035312407161304">"अवधि को सेकंड में सेट करें"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"फ़ोटो लेने के लिए उल्टी गिनती कर रहा है"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"फ़ोटो के स्थान याद हैं?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"अपने फ़ोटो और वीडियो को उन स्थानों के साथ टैग करें जहां वे लिए गए हैं."\n\n"अन्य एप्लिकेशन आपके सहेजे गए चित्रों सहित इस जानकारी का उपयोग कर सकते हैं."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"नहीं, धन्‍यवाद"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index a6c4357..fa245b4 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Natrag"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Naprijed"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Lokacija pohranjivanja"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Timer za odbrojavanje"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 sekunda"</item>
+    <item quantity="other" msgid="6455381617076792481">"Za ovoliko sekundi: %d"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Zvuk pri odbrojavanju"</string>
     <string name="setting_off" msgid="4480039384202951946">"Isključeno"</string>
     <string name="setting_on" msgid="8602246224465348901">"Uključeno"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Videokvaliteta"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Vaš videozapis"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"U nastavku postavite ​​uređaj."\n"Odmaknite se na trenutak."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Dodirnite za fotografiranje tijekom snimanja."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Pokrenuto je snimanje videozapisa."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Zaustavljeno je snimanje videozapisa."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Fotografiranje је onemogućeno kada su posebni efekti uključeni."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Obriši efekte"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"ŠAŠAVA LICA"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Upravljanje povećavanjem/smanjivanjem"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Smanjenje %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Povećanje %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"Prekidač %1$s"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"Potvrdni okvir %1$s"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Prebaci na fotografiju"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Prebaci na videozapis"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Prebaci na panoramski način"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Gotovo"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Postavljanje vrem. intervala"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Značajka protoka vremena isključena je. Uključite ju da biste postavili vremenski interval."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Odbrojavanje je isključeno. Uključite odbrojavanje prije snimanja fotografije."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Postavite trajanje u sekundama"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Odbrojavanje do snimanja fotografije"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Zapamtiti lokacije fotografija?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Dodajte svojim fotografijama i videozapisima oznake lokacija na kojima su snimljeni."\n\n"Ostale aplikacije mogu pristupiti tim podacima s vašim spremljenim slikama."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Ne, hvala"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 7a715ef..9c14a4b 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Vissza"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Előre néző"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Hely tárolása"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Visszaszámlálás-időzítő"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 másodperc"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d másodperc"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Hangjelzéssel"</string>
     <string name="setting_off" msgid="4480039384202951946">"Ki"</string>
     <string name="setting_on" msgid="8602246224465348901">"Be"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Videó minősége"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Saját videó"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Tegye le a készüléket."\n"Lépjen ki a képből egy pillanatra."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Érintse meg fotó készítéséhez felvétel közben."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"A videorögzítés elindult."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"A videorögzítés leállt."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"A video-pillanatfelvétel letiltva speciális effektek esetén."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Effektek törlése"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"BOLONDOS ARCOK"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Nagyítás/kicsinyítés vezérlése"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Csökkentés: %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Növelés: %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"%1$s kapcsoló"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"%1$s jelölőnégyzet"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Fényképező mód"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Videó mód"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Panoráma mód"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Kész"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Időintervallum beállítása"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"A Gyorsított felvétel funkció ki van kapcsolva. Kapcsolja be az időintervallum beállításához."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"A visszaszámlálás-időzítő ki van kapcsolva. A fénykép készítése előtti visszaszámláláshoz kapcsolja be."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Időtartam megadása másodpercben"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Visszaszámlálás a fényképezésig"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Szeretné eltárolni a felvételek helyszínét?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Címkézze fel a fotókat és videókat a hellyel, ahol készítette őket."\n\n"Más alkalmazások hozzáférnek ehhez az információhoz és a mentett képekhez."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Nem, köszönöm."</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 282b94b..4029e24 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Belakang"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Depan"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Lokasi penyimpanan"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Penghitung mundur"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 detik"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d detik"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Bip penghitungan"</string>
     <string name="setting_off" msgid="4480039384202951946">"Nonaktif"</string>
     <string name="setting_on" msgid="8602246224465348901">"Aktif"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Kualitas video"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Video Anda"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Letakkan perangkat Anda."\n"Menyingkirlah sejenak dari bidang bidik."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Sentuh untuk mengambil foto saat sedang merekam."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Perekaman video telah dimulai."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Perekaman video telah berhenti."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Cuplikan video dinonaktifkan bila efek khusus aktif."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Hapus efek"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"WAJAH KONYOL"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Kontrol perbesar/perkecil"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Kurangi %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Tingkatkan %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"Saklar %1$s"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"%1$s kotak centang"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Alihkan ke foto"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Alihkan ke video"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Alihkan ke panorama"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Selesai"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Setel Interval Waktu"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Fitur selang waktu tidak aktif. Aktifkan untuk menyetel interval waktu."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Penghitung mundur tidak aktif. Aktifkan untuk menghitung mundur sebelum mengambil foto."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Setel durasi dalam detik"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Menghitung mundur untuk mengambil foto"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Ingat lokasi foto?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Beri tag foto dan video Anda dengan lokasi tempat pengambilannya."\n\n"Aplikasi lain dapat mengakses informasi ini beserta gambar Anda yang tersimpan."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Tidak, terima kasih"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index c1c1387..3b7667e 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Posteriore"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Frontale"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Registra località"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Timer conto alla rovescia"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 secondo"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d secondi"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Bip conto alla rov."</string>
     <string name="setting_off" msgid="4480039384202951946">"Disattivata"</string>
     <string name="setting_on" msgid="8602246224465348901">"Attiva"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Qualità video"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Il tuo video"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Posa il tuo dispositivo."\n"Esci dalla visualizzazione per un attimo."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Tocca per scattare foto durante la registrazione."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"La registrazione video è stata avviata."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"La registrazione video è stata interrotta."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Istantanea video disabilitata se gli effetti speciali sono attivi."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Cancella effetti"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"FACCINE"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Controllo zoom"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Riduci %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Aumenta %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"Interruttore %1$s"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"Casella di controllo %1$s"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Passa a foto"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Passa a video"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Passa a panorama"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Fine"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Imposta l\'intervallo di tempo"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"La funzione Rallentatore non è attiva. Attivala per impostare l\'intervallo di tempo."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Timer del conto alla rovescia non attivo. Attivalo per il conto alla rovescia prima di scattare una foto."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Imposta la durata in secondi"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Conto alla rovescia per scattare una foto"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Memorizzare i luoghi delle foto?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Aggiungi alle foto e ai video tag relativi alle località in cui sono stati ripresi."\n\n"Altre applicazioni possono accedere a queste informazioni e alle tue immagini salvate."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"No, grazie"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 7ff6360..e35d60d 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"הקודם"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"חזיתית"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"מיקום אחסון"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"טיימר לספירה לאחור"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"שנייה אחת"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d שניות"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"צפצף בעת ספירה לאחור"</string>
     <string name="setting_off" msgid="4480039384202951946">"כבוי"</string>
     <string name="setting_on" msgid="8602246224465348901">"מופעל"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"איכות סרטון"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"הסרטון שלך"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"הנח את המכשיר."\n"צא לרגע מהתמונה."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"גע כדי לצלם תמונה במהלך ההקלטה."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"הקלטת וידאו החלה."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"הקלטת וידאו הופסקה."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"האפשרות לצילום תמונה מסרטון וידאו מושבתת כאשר אפקטים מיוחדים מופעלים."</string>
     <string name="clear_effects" msgid="5485339175014139481">"נקה אפקטים"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"פרצופים מצחיקים"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"פקד \'הגדל/הקטן\'"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"הקטן %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"הגדל %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"מתג %1$s"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"תיבת סימון %1$s"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"עבור לצילום תמונות"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"עבור לווידאו"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"עבור לפנורמה"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"בוצע"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"הגדר מרווח זמן"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"תכונת ההילוך המהיר כבויה. הפעל אותה כדי להגדיר מרווח זמן."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"טיימר הספירה לאחור כבוי. הפעל אותו כדי לספור לאחור לפני צילום תמונה."</string>
+    <string name="set_duration" msgid="5578035312407161304">"הגדר משך זמן בשניות"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"סופר לאחור עד לצילום תמונה"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"האם לזכור מיקומי תמונות?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"מתייג את התמונות והסרטונים שלך לציון המקומות שבהם צולמו."\n\n"יישומים אחרים יכולים לגשת למידע זה, כולל תמונות שנשמרו."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"לא, תודה"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 859c723..b31d0f1 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"背面"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"前面"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"位置情報を記録する"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"カウントダウンタイマー"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1秒"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d秒"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"カウントダウン時にビープ音"</string>
     <string name="setting_off" msgid="4480039384202951946">"OFF"</string>
     <string name="setting_on" msgid="8602246224465348901">"ON"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"動画の画質"</string>
@@ -43,7 +51,7 @@
     <string name="pref_video_time_lapse_frame_interval_title" msgid="6245716906744079302">"低速度撮影"</string>
     <string name="pref_camera_settings_category" msgid="2576236450859613120">"カメラ設定"</string>
     <string name="pref_camcorder_settings_category" msgid="460313486231965141">"ビデオ録画設定"</string>
-    <string name="pref_camera_picturesize_title" msgid="4333724936665883006">"表示サイズ"</string>
+    <string name="pref_camera_picturesize_title" msgid="4333724936665883006">"画像サイズ"</string>
     <string name="pref_camera_picturesize_entry_8mp" msgid="259953780932849079">"8Mピクセル"</string>
     <string name="pref_camera_picturesize_entry_5mp" msgid="2882928212030661159">"5メガピクセル"</string>
     <string name="pref_camera_picturesize_entry_3mp" msgid="741415860337400696">"3メガピクセル"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"あなたの動画"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"端末をセッティングします。"\n"少しの間フレームの外に出ます。"</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"録画中にタップして静止画を撮影できます。"</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"録画を開始しました。"</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"録画を停止しました。"</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"動画スナップショットは特殊効果がONのときは無効です。"</string>
     <string name="clear_effects" msgid="5485339175014139481">"効果設定をクリア"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"変な顔"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"ズームコントロール"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"-%1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"+%1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"%1$sの切り替え"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"%1$sチェックボックス"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"カメラに切り替え"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"動画に切り替え"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"パノラマに切り替え"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"完了"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"間隔を設定"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"低速度撮影機能がOFFになっています。間隔を設定するにはONにしてください。"</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"カウントダウンタイマーがオフです。画像を撮影するまでカウントダウンするには、このタイマーをオンにしてください。"</string>
+    <string name="set_duration" msgid="5578035312407161304">"設定時間(秒数)"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"画像を撮影するまでカウントダウンします"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"撮影場所を記録しますか?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"画像や動画に撮影場所のタグを付けることができます。"\n\n"他のアプリから、保存された画像とともに撮影場所の情報にもアクセスできるようになります。"</string>
     <string name="remember_location_no" msgid="7541394381714894896">"いいえ"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 733cceb..a9b4880 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"후방"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"전방"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"위치 저장"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"카운트다운 타이머"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1초"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d초"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"카운트다운하는 동안 신호음 울리기"</string>
     <string name="setting_off" msgid="4480039384202951946">"사용 안함"</string>
     <string name="setting_on" msgid="8602246224465348901">"사용"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"동영상 화질"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"내 동영상"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"기기를 내려놓습니다."\n"잠시 동안 시야를 벗어납니다."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"녹화 중에 사진을 찍으려면 터치하세요."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"동영상 녹화가 시작되었습니다."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"동영상 녹화가 중지되었습니다."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"특수 효과가 설정되어 있으면 동영상 스냅샷이 사용 중지됩니다."</string>
     <string name="clear_effects" msgid="5485339175014139481">"효과 제거"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"웃긴 얼굴"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"확대/축소 컨트롤"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"%1$s 축소"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"%1$s 확대"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"%1$s 전환"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"%1$s 확인란"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"사진으로 전환"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"동영상으로 전환"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"파노라마로 전환"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"완료"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"시간 간격 설정"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"시간 경과 기능을 사용하지 않고 있습니다. 시간 간격을 설정하려면 \'사용\'으로 변경해 주세요."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"카운트다운 타이머가 꺼져 있습니다. 사진을 찍기 전에 카운트다운을 켜세요."</string>
+    <string name="set_duration" msgid="5578035312407161304">"시간 설정(초)"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"사진을 찍으려면 카운트다운하세요."</string>
     <string name="remember_location_title" msgid="9060472929006917810">"사진 위치를 기록하시겠습니까?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"촬영한 위치로 사진과 동영상에 태그를 지정하세요."\n\n"다른 앱이 저장된 이미지와 더불어 이 정보에 액세스할 수 있습니다."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"아니요"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 3a0608c..1e3a8da 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Atgal"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Šriftas"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Išsaugoti vietą"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Atvirkštinis laikmatis"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 sek."</item>
+    <item quantity="other" msgid="6455381617076792481">"%d sek."</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Laikmačio pyps."</string>
     <string name="setting_off" msgid="4480039384202951946">"Išjungta"</string>
     <string name="setting_on" msgid="8602246224465348901">"Įjungta"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Vaizdo įrašo kokybė"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Vaizdo įr."</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Išjunkite įrenginį."\n"Trumpam išeikite iš rodinio."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Palieskite, kad įrašydami nufotografuotumėte."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Prasidėjo vaizdo įrašo įrašymas."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Vaizdo įrašo įrašymas sustabdytas."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Moment. vaizdo įrašo vaizdas neleidž., kai įjungti spec. efektai."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Išvalyti efektus"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"JUOKINGI VEIDAI"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Mastelio keitimo valdymas"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Sumažinti %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Padidinti %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"%1$s jungiklis"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"%1$s žymimasis laukelis"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Perjungti į fotografavimo režimą"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Perjungti į vaizdo įrašo režimą"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Perjungti į panoramos režimą"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Atlikta"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Nustatyti laiko intervalą"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Laiko intervalo funkcija išjungta. Įjunkite ją, kad nustatytumėte laiko intervalą."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Atvirkštinis laikmatis išjungtas. Įjunkite jį prieš fotografuodami."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Nustatyti trukmę sekundėmis"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Skaičiuojamas laikas iki fotografavimo"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Atsiminti nuotraukų vietas?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Žymėkite nuotraukas ir vaizdo įrašus nurodydami vietas, kur jie buvo sukurti."\n\n"Kitos programos gali pasiekti šią informaciją kartu su išsaugotais vaizdais."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Ne, ačiū"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 820c985..c0922e5 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Atpakaļ"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Priekšpuse"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Saglabāt atrašanās vietu"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Laika atskaites taimeris"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 sekunde"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d sekundes"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Atskaņot signālu"</string>
     <string name="setting_off" msgid="4480039384202951946">"Izslēgts"</string>
     <string name="setting_on" msgid="8602246224465348901">"Ieslēgts"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Video kvalitāte"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Videoklips"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Novietojiet ierīci uz leju."\n"Uz brīdi izejiet no kameras skata."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Pieskarieties, lai uzņemtu fotoattēlu ieraksta laikā."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Video ierakstīšana ir sākta."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Video ierakstīšana ir pārtraukta."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Video momentuzņēmums ir atspējots, ja ir ieslēgti specefekti."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Noņemt efektus"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"SMIEKL. SEJAS IZTEIKSMES"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Tālummaiņas vadība"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Samazināt %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Palielināt %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"%1$s slēdzis"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"%1$s izvēles rūtiņa"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Pārslēgt uz fotoattēlu režīmu"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Pārslēgt uz video režīmu"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Pārslēgt uz panorāmas režīmu"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Gatavs"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Laika intervāla iestatīšana"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Palēninātās filmēšanas funkcija ir izslēgta. Ieslēdziet to, lai iestatītu laika intervālu."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Laika atskaites taimeris ir izslēgts. Ieslēdziet to, lai skaitītu laiku pirms attēla uzņemšanas."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Iestatīt ilgumu sekundēs"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Notiek laika skaitīšana līdz fotoattēla uzņemšanai"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Vai atcerēties fotoattēlu uzņemšanas vietas?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Atzīmē jūsu fotoattēlos un videoklipos atrašanās vietas, kurās tie tika uzņemti."\n\n"Citas lietotnes var piekļūt šai informācijai līdz ar saglabātajiem attēliem."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Nē, paldies!"</string>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 888cffa..5dee15c 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Belakang"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Depan"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Lokasi stor"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Pemasa hitung detik"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 saat"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d saat"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Bip utk htg dtk"</string>
     <string name="setting_off" msgid="4480039384202951946">"Matikan"</string>
     <string name="setting_on" msgid="8602246224465348901">"Hidupkan"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Kualiti video"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Video anda"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Tetapkan peranti anda ke bawah."\n"Keluar dari pandangan seketika."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Sentuh untuk mengambil gambar semasa merakam."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Rakaman video telah bermula."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Rakaman video telah berhenti."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Petikan video dilumpuhkan apabila kesan khas dihidupkan."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Padamkan kesan"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"MUKA BODOH"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Kawalan zum"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Pengurangan %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Tingkatkan %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"Suis %1$s"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"%1$s kotak semak"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Tukar ke foto"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Tukar kepada video"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Tukar kepada panorama"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Selesai"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Tetapkan Selang Masa"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Ciri selang masa dimatikan. Hidupkannya untuk menetapkan selang masa."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Pemasa hitung detik dimatikan. Hidupkannya untuk menghitung detik sebelum mengambil gambar."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Tetapkan tempoh dalam saat"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Menghitung detik untuk mengambil gambar"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Ingat lokasi foto?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Teg foto dan video anda dengan lokasi tempat diambil."\n\n"Apl lain boleh mengakses maklumat ini bersama dengan imej disimpan anda."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Tidak, terima kasih"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 69104d7..75f0c99 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -35,6 +35,12 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Bakside"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Forside"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Lagre sted i bilder"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Nedtellingstidtaker"</string>
+    <!-- String.format failed for translation -->
+    <!-- no translation found for pref_camera_timer_entry:other (6455381617076792481) -->
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Lydsignaler under nedtellingen"</string>
     <string name="setting_off" msgid="4480039384202951946">"Av"</string>
     <string name="setting_on" msgid="8602246224465348901">"På"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Videokvalitet"</string>
@@ -103,6 +109,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Din video"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Sett enheten ned."\n"Gå ut av syne et øyeblikk."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Trykk for å ta et bilde mens du filmer."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Videoopptaket har startet."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Videoopptaket har stoppet."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Øyeblikksbilder er deaktivert når spesialeffekter er aktivert."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Fjern effekter"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"MORSOMME ANSIKTER"</string>
@@ -117,7 +125,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Zoomkontroll"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Reduser %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Øk %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"%1$s-bryteren"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"%1$s-avmerkingsboks"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Bytt til foto"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Bytt til video"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Bytt til panorama"</string>
@@ -173,6 +181,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Ferdig"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Fast tidsintervall"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Funksjonen for intervallmodus er avslått. Slå den på for å angi et tidsintervall."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Nedtellingstidtaker er slått av. Slå den på for å telle ned før du tar et bilde."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Still varighet i sekunder"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Teller ned før bildet tas"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Vil du huske bildestedene?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Merk bildene og videoene med hvor de ble tatt."\n\n"Andre apper kan bruke denne informasjonen med de lagrede bildene dine."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Nei takk"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 0b0dc9a..fd0d886 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Achterzijde"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Voorzijde"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Locatie opslaan"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Afteltimer"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 seconde"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d seconden"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Pieptoon bij aftellen"</string>
     <string name="setting_off" msgid="4480039384202951946">"Uit"</string>
     <string name="setting_on" msgid="8602246224465348901">"Aan"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Videokwaliteit"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Uw video"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Zet uw apparaat neer."\n"Stap even uit beeld."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Raak aan om een foto te maken tijdens een opname."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Video-opname is gestart."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Video-opname is gestopt."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Videosnapshot staat uit als speciale effecten zijn ingeschakeld."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Effecten wissen"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"GEKKE GEZICHTEN"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Zoomregeling"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"%1$s verlagen"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"%1$s verhogen"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"%1$s-schakelaar"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"%1$s selectievakje"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Overschakelen naar foto"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Overschakelen naar video"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Overschakelen naar panorama"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Gereed"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Tijdsinterval instellen"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Time-lapse-functie is uitgeschakeld. Schakel deze in om het tijdsinterval in te stellen."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Afteltimer is uitgeschakeld. Schakel de timer in om af te tellen vóór het nemen van een foto."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Duur in seconden instellen"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Aftellen om een foto te nemen"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Fotolocaties onthouden?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Label uw foto\'s en video\'s met de locaties waar ze zijn genomen."\n\n"Andere apps hebben toegang tot deze informatie en uw opgeslagen afbeeldingen."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Nee, bedankt"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index caf5d01..6fb56c6 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Tył"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Przód"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Zapis lokalizacji"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Samowyzwalacz"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 sekunda"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d s"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Sygnał odliczania"</string>
     <string name="setting_off" msgid="4480039384202951946">"Wyłączono"</string>
     <string name="setting_on" msgid="8602246224465348901">"Włączono"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Jakość wideo"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Twój film"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Skieruj urządzenie w dół."\n"Opuść na chwilę kadr."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Dotknij, by zrobić zdjęcie podczas nagrywania."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Rozpoczęto nagrywanie filmu."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Zatrzymano nagrywanie filmu."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Stopklatka nie działa, gdy są aktywne efekty specjalne."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Usuń efekty"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"ZABAWNE TWARZE"</string>
@@ -117,15 +127,13 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Sterowanie powiększeniem"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Zmniejsz: %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Zwiększ: %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"Przełącznik: %1$s"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"Pole wyboru %1$s"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Przełącz na zdjęcia"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Przełącz na wideo"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Przełącz na panoramę"</string>
     <string name="accessibility_switch_to_new_panorama" msgid="8116783308051524188">"Przełącz na nową panoramę"</string>
-    <!-- no translation found for accessibility_review_cancel (9070531914908644686) -->
-    <skip />
-    <!-- no translation found for accessibility_review_ok (7793302834271343168) -->
-    <skip />
+    <string name="accessibility_review_cancel" msgid="9070531914908644686">"Przegląd: anulowanie"</string>
+    <string name="accessibility_review_ok" msgid="7793302834271343168">"Przegląd: gotowe"</string>
     <string name="accessibility_review_retake" msgid="659300290054705484">"Przegląd – zrób zdjęcie/nagraj film ponownie"</string>
     <string name="capital_on" msgid="5491353494964003567">"WŁĄCZONY"</string>
     <string name="capital_off" msgid="7231052688467970897">"WYŁĄCZONY"</string>
@@ -175,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Gotowe"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Ustaw interwał czasu"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Funkcja filmu poklatkowego jest wyłączona. Włącz ją, by ustawić interwał czasu."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Samowyzwalacz jest wyłączony. Włącz go, by odliczał czas pozostały do wykonania zdjęcia."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Ustaw czas w sekundach"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Odliczanie czasu pozostałego do zrobienia zdjęcia"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Zapamiętywać lokalizacje zdjęć?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Oznacz zdjęcia i filmy informacją, gdzie zostały zrobione."\n\n"Inne aplikacje mają dostęp do tych informacji wraz z zapisanymi zdjęciami."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Nie, dziękuję"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 64e032c..32c53cf 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Traseira"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Frontal"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Armazenar localização"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Temporizador de contagem decr."</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 segundo"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d segundos"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Apitar durante a contagem descrescente"</string>
     <string name="setting_off" msgid="4480039384202951946">"Desativado"</string>
     <string name="setting_on" msgid="8602246224465348901">"Ativado"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Qualidade de vídeo"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"O seu vídeo"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Vire o seu aparelho para baixo."\n"Saia da vista por alguns momentos."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Toque para tirar uma fotografia durante a gravação."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"A gravação de vídeo foi iniciada."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"A gravação de vídeo foi parada."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Instantâneo vídeo desat. quando efeitos especiais estão ativos."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Limpar efeitos"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"CARETAS"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Controlo de zoom"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Diminuir %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Aumentar %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"Interruptor %1$s"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"Caixa de verificação %1$s"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Mudar para fotografia"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Mudar para vídeo"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Mudar para panorama"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Concluído"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Definir Intervalo de Tempo"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"A funcionalidade de intervalo de tempo está desativada. Ative-a para definir o intervalo de tempo."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"O temporizador de contagem decrescente está desativado. Volte a ativá-lo para efetuar a contagem antes de tirar uma fotografia."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Definir a duração em segundos"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Contagem decrescente para tirar uma fotografia"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Memorizar localizações das fotografias?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Insira etiquetas nas suas fotografias e vídeos com as localizações onde foram capturados."\n\n"Outras aplicações podem aceder a estas informações juntamente com as suas imagens guardadas."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Não, obrigado"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index ec2935a..3cff0dd 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Traseira"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Visão frontal"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Local de armazenamento"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Contagem regressiva"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"Um segundo"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d segundos"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Aviso sonoro"</string>
     <string name="setting_off" msgid="4480039384202951946">"Desativado"</string>
     <string name="setting_on" msgid="8602246224465348901">"Ativado"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Qualidade do vídeo"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Seu vídeo"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Abaixe seu dispositivo."\n"Saia de vista por um momento."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Toque para tirar uma foto durante a gravação."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"A gravação de vídeo foi iniciada."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"A gravação de vídeo foi interrompida."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"O instant. de vídeo é desat. quando os efeitos esp. estão ativad."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Clarear efeitos"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"CARETAS"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Controle de zoom"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Diminuir %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Aumentar %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"Botão %1$s"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"caixa de seleção %1$s"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Alternar para foto"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Alternar para vídeo"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Alterar para panorama"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Concluído"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Definir intervalo de tempo"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"O recurso de passagem de tempo está desativado. Ative-o para definir o intervalo de tempo."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"A contagem regressiva está desativada. Ative-a para fazer uma contagem regressiva antes de tirar uma foto."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Definir duração em segundos"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Contagem regressiva para tirar foto"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Memorizar locais de fotos?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Marque seus vídeos e fotos com os locais onde foram gerados."\n\n"Outros aplicativos podem acessar essas informações juntamente com suas imagens salvas."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Não, obrigado"</string>
diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml
index d2068d5..3167e7c 100644
--- a/res/values-rm/strings.xml
+++ b/res/values-rm/strings.xml
@@ -45,6 +45,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Enavos"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Frunt"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Memorisar la posiziun"</string>
+    <!-- no translation found for pref_camera_timer_title (3105232208281893389) -->
+    <skip />
+    <!-- no translation found for pref_camera_timer_entry:one (1654523400981245448) -->
+    <!-- no translation found for pref_camera_timer_entry:other (6455381617076792481) -->
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <!-- no translation found for pref_camera_timer_sound_title (2469008631966169105) -->
+    <skip />
     <!-- no translation found for setting_off (4480039384202951946) -->
     <skip />
     <!-- no translation found for setting_on (8602246224465348901) -->
@@ -154,6 +162,10 @@
     <skip />
     <!-- no translation found for video_snapshot_hint (18833576851372483) -->
     <skip />
+    <!-- no translation found for video_recording_started (4132915454417193503) -->
+    <skip />
+    <!-- no translation found for video_recording_stopped (5086919511555808580) -->
+    <skip />
     <!-- no translation found for disable_video_snapshot_hint (4957723267826476079) -->
     <skip />
     <!-- no translation found for clear_effects (5485339175014139481) -->
@@ -182,7 +194,7 @@
     <skip />
     <!-- no translation found for accessibility_increment (8447850530444401135) -->
     <skip />
-    <!-- no translation found for accessibility_switch (6995966685498958895) -->
+    <!-- no translation found for accessibility_check_box (7317447218256584181) -->
     <skip />
     <!-- no translation found for accessibility_switch_to_camera (5951340774212969461) -->
     <skip />
@@ -294,6 +306,12 @@
     <skip />
     <!-- no translation found for set_time_interval_help (6665849510484821483) -->
     <skip />
+    <!-- no translation found for set_timer_help (5007708849404589472) -->
+    <skip />
+    <!-- no translation found for set_duration (5578035312407161304) -->
+    <skip />
+    <!-- no translation found for count_down_title_text (4976386810910453266) -->
+    <skip />
     <!-- no translation found for remember_location_title (9060472929006917810) -->
     <skip />
     <!-- no translation found for remember_location_prompt (724592331305808098) -->
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 4dbf352..b4e7799 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Înapoi"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Frontal"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Stocaţi locaţia"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Cronometru numărătoare inversă"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"O secundă"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d (de) secunde"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Beep numărătoare"</string>
     <string name="setting_off" msgid="4480039384202951946">"Dezactivată"</string>
     <string name="setting_on" msgid="8602246224465348901">"Activată"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Calitate video"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Videoclip"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Aşezaţi dispozitivul jos."\n"Ieşiţi din cadru un moment."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Atingeţi pentru a fotografia în timpul înregistrării."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"A început înregistrarea videoclipului."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Înregistrarea videoclipului s-a oprit."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Instant. video este dezact. când efectele speciale sunt pornite."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Ştergeţi efectul"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"FEŢE PROSTUŢE"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Comandă mărire/micşorare"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Reduceţi %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Măriţi %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"Comutator %1$s"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"Caseta de selectare %1$s"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Comutaţi la camera foto"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Comutaţi la camera video"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Comutaţi la panoramă"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Terminat"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Setaţi intervalul de timp"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Funcţia Filmare lentă este dezactivată. Activaţi-o pentru a seta intervalul de timp."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Cronometrul numărătorii inverse a fost dezactivat. Activați-l înainte de a fotografia."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Setați durata în secunde"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Numărătoare inversă până la fotografiere"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Doriţi să vă amintiţi locaţiile fotografiilor?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Etichetaţi-vă fotografiile şi videoclipurile cu locaţiile în care acestea au fost create."\n\n"Alte aplicaţii pot accesa aceste informaţii, împreună cu imaginile salvate."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Nu, mulţumesc"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index c3d260e..7202393 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Задняя"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Передняя"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Геотеги"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Таймер обратного отсчета"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 сек."</item>
+    <item quantity="other" msgid="6455381617076792481">"%d сек."</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Сигнал"</string>
     <string name="setting_off" msgid="4480039384202951946">"Выкл."</string>
     <string name="setting_on" msgid="8602246224465348901">"Вкл."</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Качество видео"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Мои видео"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Установите устройство на твердой поверхности."\n"Затем отойдите, чтобы вас было видно в камеру."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Нажмите, чтобы сделать фотографию во время записи."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Запись начата"</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Запись остановлена"</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Невозможно сделать снимок при включенных спецэффектах."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Убрать эффекты"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"СМЕШНЫЕ РОЖИЦЫ"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Зум"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Уменьшить %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Увеличить %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"Переключить %1$s"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"Флажок \"%1$s\""</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Режим \"Фото\""</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Режим \"Видео\""</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Режим \"Панорама\""</string>
@@ -125,9 +135,9 @@
     <string name="accessibility_review_cancel" msgid="9070531914908644686">"Отмена"</string>
     <string name="accessibility_review_ok" msgid="7793302834271343168">"Готово"</string>
     <string name="accessibility_review_retake" msgid="659300290054705484">"Ещё раз"</string>
-    <string name="capital_on" msgid="5491353494964003567">"ВКЛ"</string>
-    <string name="capital_off" msgid="7231052688467970897">"ВЫКЛ"</string>
-    <string name="pref_video_time_lapse_frame_interval_off" msgid="3490489191038309496">"ВЫКЛ"</string>
+    <string name="capital_on" msgid="5491353494964003567">"Вкл"</string>
+    <string name="capital_off" msgid="7231052688467970897">"Выкл"</string>
+    <string name="pref_video_time_lapse_frame_interval_off" msgid="3490489191038309496">"Выкл."</string>
     <string name="pref_video_time_lapse_frame_interval_500" msgid="2949719376111679816">"0,5 сек."</string>
     <string name="pref_video_time_lapse_frame_interval_1000" msgid="1672458758823855874">"1 сек."</string>
     <string name="pref_video_time_lapse_frame_interval_1500" msgid="3415071702490624802">"1,5 сек."</string>
@@ -173,8 +183,11 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Готово"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Задайте интервал"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Сначала включите режим замедленной съемки."</string>
-    <string name="remember_location_title" msgid="9060472929006917810">"Сохранять места съемок?"</string>
-    <string name="remember_location_prompt" msgid="724592331305808098">"Укажите, где было сделано фото или видеозапись."\n\n"Эта информация, а также сохраненные изображения будут доступны другим приложениям."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Таймер обратного отсчета отключен. Включите его, чтобы сделать снимок с задержкой."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Время"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Обратный отсчет перед съемкой"</string>
+    <string name="remember_location_title" msgid="9060472929006917810">"Сохранять место съемки?"</string>
+    <string name="remember_location_prompt" msgid="724592331305808098">"Информация о месте съемки будет автоматически добавляться в описание ваших фотографий и видеозаписей."\n\n"Доступ к этим данным, а также к самим фотографиям и видео смогут получить и другие приложения."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Нет, спасибо"</string>
     <string name="remember_location_yes" msgid="862884269285964180">"Да"</string>
 </resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 7aaff1d..397715e 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Zozadu"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Spredu"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Úložné miesto"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Časovač odpočítavania"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 s"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d s"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Zvuk pri odpočítavaní"</string>
     <string name="setting_off" msgid="4480039384202951946">"Vypnuté"</string>
     <string name="setting_on" msgid="8602246224465348901">"Zapnuté"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Kvalita videa"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Vaše video"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Položte svoje zariadenie."\n"Vyjdite na chvíľu zo zorného poľa."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Dotykom môžete počas záznamu fotiť."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Záznam videa bol spustený."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Záznam videa bol zastavený."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Pri zapnutých špeciálnych efektoch je vytváranie snímok zakázané."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Vymazať efekty"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"BLÁZNIVÉ TVÁRE"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Ovládanie priblíženia/oddialenia"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Znížiť %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Zvýšiť %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"Prepínač %1$s"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"Začiarkavacie políčko %1$s"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Prepnúť na fotoaparát"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Prepnúť do režimu videa"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Prepnúť na panorámu"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Hotovo"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Nastaviť časový interval"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Funkcia časozberného videa je vypnutá. Zapnite ju a a nastavte časový interval."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Časovač odpočítavania je vypnutý. Ak chcete odpočítavať pred aktivovaním spúšte fotoaparátu, zapnite ho."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Nastavte dobu trvania v sekundách"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Odpočítavanie spúšte fotoaparátu"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Zapamätať si, kde boli fotografie vytvorené?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Označte pre fotografie a videá polohy, kde boli zaznamenané."\n\n"Ostatné aplikácie môžu pristupovať k týmto informáciám aj k vašim uloženým snímkam."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Nie, ďakujem"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 8c79550..524b138 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Nazaj"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Pred"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Shrani lokacijo"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Odštevalnik"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 s"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d s"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Zvok med odštevanjem"</string>
     <string name="setting_off" msgid="4480039384202951946">"Izklopljeno"</string>
     <string name="setting_on" msgid="8602246224465348901">"Vklopljeno"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Kakovost videoposnetka"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Vaš video"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Odložite napravo."\n"Za trenutek stopite iz vidnega polja."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Dotaknite se, če želite fotografirati med snemanjem."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Snemanje se je začelo."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Snemanje se je ustavilo."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Videoposnetek je onemogočen, ko so vklopljeni posebni učinki."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Počisti učinke"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"NORČAVI OBRAZI"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Nadzor povečave/pomanjšave"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Pomanjšaj %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Povečaj %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"Stikalo %1$s"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"Potrditveno polje %1$s"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Preklopi na fotoaparat"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Preklop na videoposnetek"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Preklop na panoramo"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Končano"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Nastavite časovni Interval"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Funkcija pospešene reprodukcije je izklopljena. Vklopite jo, da nastavite časovni interval."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Odštevalnik je izklopljen. Vklopite ga, če želite odštevanje pred fotografiranjem."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Nastavite trajanje v sekundah"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Odštevanje pred fotografiranjem"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Beleženje lokacije fotografije?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Fotografije in videoposnetke označite z lokacijami, na katerih so posneti."\n\n"Druge aplikacije lahko dostopajo do teh podatkov skupaj s shranjenimi slikami."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Ne, hvala"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 1c46ad8..fce4c88 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Назад"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Напред"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Чување локац."</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Тајмер за одбројавање"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 секунда"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d сек"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Звучно одбројавање"</string>
     <string name="setting_off" msgid="4480039384202951946">"Искључено"</string>
     <string name="setting_on" msgid="8602246224465348901">"Укључено"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Квалитет видео снимка"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Ваш видео"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Спустите уређај."\n"Изађите из кадра на тренутак."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Додирните да бисте направили фотографију током снимања."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Снимање видео садржаја је започето."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Снимање видео садржаја је заустављено."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Видео снимак је онемогућен када су специјални ефекти укључени."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Обриши ефекте"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"СМЕШНА ЛИЦА"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Контрола зума"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Смањи %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Повећај %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"Промена %1$s"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"Поље за потврду %1$s"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Пребаци на фотографију"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Пребаци на видео"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Пребаци на панораму"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Готово"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Подеси временски интервал"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Функција снимања у дужем интервалу је искључена. Укључите је да бисте подесили временски интервал."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Тајмер за одбројавање је искључен. Укључите га за одбројавање пре снимања слике."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Подеси трајање у секундама"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Одбројавање за снимање слике"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Желите ли да запамтите локације слика?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Додајте сликама и видео снимцима ознаке са местима где су снимљени."\n\n"Друге апликације могу да приступе овим информацијама заједно са сачуваним сликама."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Не, хвала"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 4a5c9aa..40985ec 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Bakre"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Främre"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Spara plats"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Nedräkningstimer"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 sekund"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d sekunder"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Ljudsignal"</string>
     <string name="setting_off" msgid="4480039384202951946">"Inaktiverad"</string>
     <string name="setting_on" msgid="8602246224465348901">"Aktiverad"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Videokvalitet"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Din video"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Lägg ned enheten"\n"Ställ dig utom synhåll för ett ögonblick."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Tryck om du vill ta ett foto medan du spelar in."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Videoinspelningen har börjat."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Videoinspelningen har stoppats."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Ögonblicksbilden av en video inaktiveras när specialeffekter är aktiverade."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Ta bort effekter"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"ROLIGA GRIMASER"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Zoomkontroll"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Minska %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Öka %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"%1$s-växlare"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"Markeringsrutan %1$s"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Byt till kameraläge"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Byt till video"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Byt till panorama"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Klar"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Ange tidssintervall"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Intervallinspelningsfunktionen är avstängd. Aktivera den om du vill ange tidsintervall."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Nedräkningstimern är inaktiverad. Aktivera den om du vill att kameran ska räkna ned innan en bild tas."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Ange längden i sekunder"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Nedräkning innan fotot tas"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Vill du spara platser för foton?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Tagga dina foton och videor med de platser där de tas eller spelas in."\n\n"Andra appar kan få åtkomst till den här informationen tillsammans med dina sparade bilder."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Nej tack"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 5e42742..9fab97e 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Nyuma"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Mbele"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Mahali pa hifadhi"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Kipima muda cha kuhesabu"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"Sekunde 1"</item>
+    <item quantity="other" msgid="6455381617076792481">"Sekunde %d"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Toa mlio wakati wa kuhesabu"</string>
     <string name="setting_off" msgid="4480039384202951946">"Imezimwa"</string>
     <string name="setting_on" msgid="8602246224465348901">"Imewashwa"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Ubora wa video"</string>
@@ -53,7 +61,7 @@
     <string name="pref_camera_picturesize_entry_vga" msgid="806934254162981919">"VGA"</string>
     <string name="pref_camera_picturesize_entry_qvga" msgid="8576186463069770133">"QVGA"</string>
     <string name="pref_camera_focusmode_title" msgid="2877248921829329127">"Hali ya kulenga"</string>
-    <string name="pref_camera_focusmode_entry_auto" msgid="7374820710300362457">"Atomatiki"</string>
+    <string name="pref_camera_focusmode_entry_auto" msgid="7374820710300362457">"Otomatiki"</string>
     <string name="pref_camera_focusmode_entry_infinity" msgid="3413922419264967552">"Pasipo mwisho"</string>
     <string name="pref_camera_focusmode_entry_macro" msgid="4424489110551866161">"Makro"</string>
     <string name="pref_camera_flashmode_title" msgid="2287362477238791017">"Hali ya mweka"</string>
@@ -74,7 +82,7 @@
     <string name="pref_camera_scenemode_entry_sunset" msgid="181661154611507212">"Machweo"</string>
     <string name="pref_camera_scenemode_entry_party" msgid="907053529286788253">"Karamu"</string>
     <string name="not_selectable_in_scene_mode" msgid="2970291701448555126">"Haiwezi kuchaguliwa ikiwa katika hali ya mandhari."</string>
-    <string name="pref_exposure_title" msgid="1229093066434614811">"Mfichuo"</string>
+    <string name="pref_exposure_title" msgid="1229093066434614811">"Kiasi cha mwangaza"</string>
     <!-- no translation found for pref_camera_hdr_default (1336869406134365882) -->
     <skip />
     <string name="dialog_ok" msgid="6263301364153382152">"SAWA"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Video yako"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Weka kifaa chako chini."\n"Toka nje ya muonekano kwa muda."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Gusa ili upige picha wakati unarekodi."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Kurekodi kwa video kumeanza."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Kurekodi kwa video kumekomeshwa."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Picha ya video imelemazwa wakati athari maalum imewashwa."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Athari Wazi"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"SURA PUMBAVU"</string>
@@ -117,7 +127,9 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Dhibiti kukuza"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Punguza %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Ongeza %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"Swichi %1$s"</string>
+    <!-- String.format failed for translation -->
+    <!-- no translation found for accessibility_check_box (7317447218256584181) -->
+    <skip />
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Badilisha hadi kwa picha"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Badilisha hadi kwa video"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Badilisha hadi kwa panorama"</string>
@@ -173,6 +185,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Imekamilika"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Weka Nafasi ya Muda"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Kipengele cha muda kupita kimezimika. Kiwashe ili kuweka nafasi ya muda."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Kipima muda cha kuhesabu kimezimwa. Kiwashe ili kihesabu kabla ya kupiga picha."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Weka muda katika sekunde"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Inahesabu ili kupiga picha"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Kumbuka maeneo ya picha?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Tambulisha picha na video zako kwa maeneo ambapo zinachukuliwa."\n\n"Programu nyingine zinaweza kufikia maelezo haya kando na picha zako zilizohifadhiwa."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"La, asante"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 513dcf0..7fec438 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"ย้อนกลับ"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"ด้านหน้า"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"ตำแหน่งจัดเก็บ"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"ตัวจับเวลาถอยหลัง"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 วินาที"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d วินาที"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"บี๊ปตอนนับถอยหลัง"</string>
     <string name="setting_off" msgid="4480039384202951946">"ปิด"</string>
     <string name="setting_on" msgid="8602246224465348901">"เปิด"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"คุณภาพวิดีโอ"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"วิดีโอของคุณ"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"พักอุปกรณ์ของคุณ"\n"ออกจากการแสดงผลเป็นเวลาสักครู่หนึ่ง"</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"แตะเพื่อถ่ายภาพในขณะบันทึก"</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"เริ่มบันทึกวิดีโอแล้ว"</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"หยุดบันทึกวิดีโอแล้ว"</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"การจับภาพวิดีโอจะถูกปิดใช้งานเมื่อเปิดใช้เอฟเฟ็กต์พิเศษ"</string>
     <string name="clear_effects" msgid="5485339175014139481">"ล้างเอฟเฟ็กต์"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"หน้าตลก"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"การควบคุมการย่อ/ขยาย"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"ลดลง %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"เพิ่มขึ้น %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"สลับ %1$s"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"ช่องทำเครื่องหมาย %1$s"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"เปลี่ยนเป็นภาพถ่าย"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"เปลี่ยนเป็นวิดีโอ"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"เปลี่ยนเป็นภาพพาโนรามา"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"เสร็จสิ้น"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"ตั้งค่าช่วงเวลา"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"คุณลักษณะช่วงเวลาปิดอยู่ เปิดคุณลักษณะนี้เพื่อตั้งค่าช่วงเวลา"</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"ตัวจับเวลาถอยหลังปิดอยู่ เปิดตัวจับเวลาเพื่อนับถอยหลังก่อนถ่ายภาพ"</string>
+    <string name="set_duration" msgid="5578035312407161304">"ตั้งระยะเวลาเป็นวินาที"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"นับถอยหลังเพื่อถ่ายภาพ"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"จดจำตำแหน่งภาพหรือไม่"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"แท็กรูปภาพและวิดีโอด้วยตำแหน่งที่ถ่ายภาพ"\n\n"แอปพลิเคชันอื่นๆ สามารถเข้าถึงข้อมูลนี้ตลอดจนภาพที่บันทึกไว้ของคุณได้"</string>
     <string name="remember_location_no" msgid="7541394381714894896">"ไม่ ขอบคุณ"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 84abeb9..78cf87f 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Bumalik"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Harap"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Iimbak ang lokasyon"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Timer ng countdown"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 segundo"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d (na) segundo"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Beep sa pag-countdown"</string>
     <string name="setting_off" msgid="4480039384202951946">"Naka-off"</string>
     <string name="setting_on" msgid="8602246224465348901">"Naka-on"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Kalidad ng video"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Iyong video"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Huwag munang gamitin ang iyong device."\n"Umalis muna nang ilang sandali."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Pindutin upang kumuha ng larawan habang nagre-record."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Nagsimula na ang pag-record ng video."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Tumigil ang pag-record ng video."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Hindi pinapagana ang snapshot sa video kapag naka-on ang mga espesyal na effect."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Mga clear na effect"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"MGA KATAWA-TAWANG MUKHA"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Kontrol ng pag-zoom"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Bawasan ang %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Dagdagan ang %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"%1$s na switch"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"check box ng %1$s"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Lumipat sa larawan"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Lumipat sa video"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Lumipat sa panorama"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Tapos na"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Itakda ang Palugit ng Oras"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Naka-off ang tampok sa lumipas na oras. I-on ito upang itakda ang palugit ng oras."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Naka-off ang timer ng countdown. I-on ito upang magbilang bago kumuha ng larawan."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Itakda ang tagal sa loob ng ilang segundo"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Nagbibilang upang kumuha ng larawan"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Tandaan ang mga lokasyon ng larawan?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"I-tag ang iyong mga larawan at video sa mga lokasyon kung saan kinunan ang mga iyon."\n\n"Maaaring i-access ng mga ibang app ang impormasyong ito kasama ng iyong mga na-save na larawan."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Hindi na, salamat"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 620f216..c3c11d4 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Arka"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Ön"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Depo konumu"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Zamanlayıcı"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 saniye"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d saniye"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Geri sayım sırasında bip sesi"</string>
     <string name="setting_off" msgid="4480039384202951946">"Kapalı"</string>
     <string name="setting_on" msgid="8602246224465348901">"Açık"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Video kalitesi"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Videonuz"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Cihazınızı yerleştirin."\n"Kısa bir süre için görüntüden çıkın."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Kayıt sırasında fotoğraf çekmek için dokunun."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Video kaydı başladı."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Video kaydı durdu."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Özel efektler açıkken video anlık görüntü yakalama devre dışıdır."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Efektleri temizle"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"KOMİK SURATLAR"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Zum denetimi"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"%1$s azalt"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"%1$s artır"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"%1$s anahtarı"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"%1$s onay kutusu"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Fotoğrafa geçiş yap"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Videoya geç"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Panorama moduna geç"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Bitti"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Zaman Aralığını Ayarla"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Zaman atlama özelliği kapalı. Zaman aralığını ayarlamak için etkinleştirin."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Zamanlayıcı kapalı. Fotoğraf çekmeden önce geri saymak için açın."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Süreyi saniye cinsinden ayarlayın"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Fotoğraf çekmek için geri sayılıyor"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Fotoğrafların çekildiği yerler hatırlansın mı?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Fotoğraflarınızı ve videolarınızı çekildikleri konumlarla etiketleyin."\n\n"Diğer uygulamalar, kaydedilen görüntülerle birlikte bu bilgilere erişebilir."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Hayır, teşekkürler"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 0be3479..dd68009 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Задня камера"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Передня камера"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Геотеги"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Таймер зворотного відліку"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 с"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d с"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Сигнал під час відліку"</string>
     <string name="setting_off" msgid="4480039384202951946">"Вимкнено"</string>
     <string name="setting_on" msgid="8602246224465348901">"Увімкнено"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Якість відео"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Ваше відео"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Покладіть свій пристрій."\n"На декілька секунд вийдіть із поля зору."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Торкніться, щоб сфотографувати під час запису."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Запис відео розпочався."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Запис відео припинився."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Функцію миттєвого знімка відео вимкнено, коли ввімк. спецефекти."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Очистити ефекти"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"КУМЕДНІ ОБЛИЧЧЯ"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Керувати масштабом"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Зменшити %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Збільшити %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"Перемикач %1$s"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"Прапорець %1$s"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Перейти в режим фото"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Перейти в режим відео"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Перейти в режим панорами"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Готово"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Установити інтервал часу"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Функцію уповільненої зйомки вимкнено. Щоб установити інтервал часу, увімкніть її."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Таймер зворотного відліку вимкнено. Увімкніть його, щоб розпочати відлік перед зйомкою."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Установити тривалість у секундах"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Відлік перед зйомкою"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Зберігати місця з фотографій?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Додавайте до своїх фотографій і відео теги про місця, де їх було зроблено."\n\n"Інші програми можуть отримувати доступ до цієї інформації, а також ваших збережених зображень."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Ні, дякую"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 3587b31..900b756 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Quay lại"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Trước"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Vị trí lưu trữ"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Đồng hồ đếm ngược"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 giây"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d giây"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Kêu bíp khi đếm ngược"</string>
     <string name="setting_off" msgid="4480039384202951946">"Tắt"</string>
     <string name="setting_on" msgid="8602246224465348901">"Bật"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Chất lượng video"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Video của bạn"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Dừng thiết bị của bạn."\n"Thoát khỏi chế độ xem trong giây lát."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Chạm để chụp ảnh trong khi quay."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Đã bắt đầu quay video."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Đã dừng quay video."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Chụp nhanh video bị vô hiệu khi các hiệu ứng đặc biệt được bật."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Xóa hiệu ứng"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"MẶT XẤU"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Điều khiển thu phóng"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Giảm %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Tăng %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"Chuyển đổi %1$s"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"Hộp kiểm %1$s"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Chuyển sang ảnh"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Chuyển sang video"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Chuyển sang chế độ toàn cảnh"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Xong"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Đặt khoảng thời gian"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Tính năng thời gian trôi bị tắt. Bật tính năng này để đặt khoảng thời gian."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Đồng hồ đếm ngược bị tắt. Bật đồng hồ để đếm ngược trước khi chụp ảnh."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Đặt thời gian trong vài giây"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Đếm ngược để chụp ảnh"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Nhớ vị trí chụp ảnh?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Gắn thẻ cho ảnh và video của bạn với những địa điểm mà ảnh đó được chụp và video đó được quay."\n\n"Các ứng dụng khác có thể truy cập vào thông tin này cùng với các hình ảnh đã lưu của bạn."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Không, cảm ơn"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index a2ef515..a416bc5 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"背面相机"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"正面相机"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"保存所在位置"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"倒计时器"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1秒"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d秒"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"倒计时过程中发出提示音"</string>
     <string name="setting_off" msgid="4480039384202951946">"关闭"</string>
     <string name="setting_on" msgid="8602246224465348901">"打开"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"视频画质"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"您的视频"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"把设备放好。"\n"离开镜头前片刻。"</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"在录制视频过程中,轻触一下即可拍一张照片。"</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"已开始录制视频。"</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"已停止录制视频。"</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"启用特殊效果时停用视频快照。"</string>
     <string name="clear_effects" msgid="5485339175014139481">"清除效果"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"趣味表情"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"缩放控件"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"减少%1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"增加%1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"%1$s开关"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"“%1$s”复选框"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"切换到拍照模式"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"切换到视频模式"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"切换到全景模式"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"完成"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"设置时间间隔"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"延时拍摄功能已关闭,要设置时间间隔,请先开启该功能。"</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"倒计时器功能目前已关闭。要在拍照前倒计时,请先开启该功能。"</string>
+    <string name="set_duration" msgid="5578035312407161304">"设置倒数时间(秒)"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"拍照倒计时中"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"是否记住照片拍摄地点?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"为您的照片和视频标明拍摄地点。"\n\n"其他应用在查看您保存的图片时将可以访问这些信息。"</string>
     <string name="remember_location_no" msgid="7541394381714894896">"不用了"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index f16c021..60c17b4 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"後置鏡頭"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"前置鏡頭"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"儲存位置"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"倒數計時器"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 秒"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d 秒"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"倒數時發出提示音"</string>
     <string name="setting_off" msgid="4480039384202951946">"關閉"</string>
     <string name="setting_on" msgid="8602246224465348901">"開啟"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"影片品質"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"您的影片"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"放下您的裝置"\n"暫時離開畫面。"</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"輕觸即可在錄製期間拍照。"</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"錄影程序已啟動。"</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"錄影程序已暫停。"</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"特殊效果啟用時無法使用影片快照。"</string>
     <string name="clear_effects" msgid="5485339175014139481">"清除效果"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"耍笨臉"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"縮放控制"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"縮小 %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"放大 %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"%1$s 開關"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"%1$s 核取方塊"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"切換至相片模式"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"切換至影片模式"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"切換至全景模式"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"完成"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"設定時間間隔"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"延時攝影功能已關閉,請開啟以設定時間間格。"</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"倒數計時器目前為關閉狀態,開啓即可在拍照前倒數計時。"</string>
+    <string name="set_duration" msgid="5578035312407161304">"設定倒數時間 (以秒為單位)"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"拍照倒數計時中"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"記錄拍攝地點?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"為您的相片和影片標記拍攝地點。"\n\n"其他應用程式可存取這項資訊及您所儲存的相片。"</string>
     <string name="remember_location_no" msgid="7541394381714894896">"不用了,謝謝"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index f759a06..00f336e 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -35,6 +35,14 @@
     <string name="pref_camera_id_entry_back" msgid="5142699735103692485">"Emuva"</string>
     <string name="pref_camera_id_entry_front" msgid="5668958706828733669">"Phambili"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Gcina indawo"</string>
+    <string name="pref_camera_timer_title" msgid="3105232208281893389">"Isikali sesikhathi esibala ngokwehla"</string>
+  <plurals name="pref_camera_timer_entry">
+    <item quantity="one" msgid="1654523400981245448">"1 isekhondi"</item>
+    <item quantity="other" msgid="6455381617076792481">"%d amasekhondi"</item>
+  </plurals>
+    <!-- no translation found for pref_camera_timer_sound_default (7066624532144402253) -->
+    <skip />
+    <string name="pref_camera_timer_sound_title" msgid="2469008631966169105">"Bhipha ngesikhathi sokubala ngokwehla"</string>
     <string name="setting_off" msgid="4480039384202951946">"Kucishile"</string>
     <string name="setting_on" msgid="8602246224465348901">"Kuyakhanya"</string>
     <string name="pref_video_quality_title" msgid="8245379279801096922">"Ikhwalithi yevidiyo"</string>
@@ -103,6 +111,8 @@
     <string name="effect_backdropper_gallery" msgid="959158844620991906">"Ividiyo yakho"</string>
     <string name="bg_replacement_message" msgid="9184270738916564608">"Setha idivayisi yakho phansi."\n"Isethe ingabonakali okwesikhashana."</string>
     <string name="video_snapshot_hint" msgid="18833576851372483">"Thinta ukuze uthwebule isithombe ngenkathi uqopha."</string>
+    <string name="video_recording_started" msgid="4132915454417193503">"Ukuqoshwa kwevidiyo sekuqalile."</string>
+    <string name="video_recording_stopped" msgid="5086919511555808580">"Ukuqoshwa kwevidiyo sekumisiwe."</string>
     <string name="disable_video_snapshot_hint" msgid="4957723267826476079">"Umfanekiso wevidyo awusebenzi uma izinandisi ezikhethekile zivuliwe."</string>
     <string name="clear_effects" msgid="5485339175014139481">"Izinandisi ezicacile"</string>
     <string name="effect_silly_faces" msgid="8107732405347155777">"UBUSO OBUNGASILE"</string>
@@ -117,7 +127,7 @@
     <string name="accessibility_zoom_control" msgid="1339909363226825709">"Ulawulo lokulwiza"</string>
     <string name="accessibility_decrement" msgid="1411194318538035666">"Nciphisa %1$s"</string>
     <string name="accessibility_increment" msgid="8447850530444401135">"Yandisa %1$s"</string>
-    <string name="accessibility_switch" msgid="6995966685498958895">"inkinobho ye-%1$s"</string>
+    <string name="accessibility_check_box" msgid="7317447218256584181">"%1$s ibhokisi lokuhlola"</string>
     <string name="accessibility_switch_to_camera" msgid="5951340774212969461">"Shintshela esithombeni"</string>
     <string name="accessibility_switch_to_video" msgid="4991396355234561505">"Shintshela kwividiyo"</string>
     <string name="accessibility_switch_to_panorama" msgid="604756878371875836">"Shintshela kwi-panorama"</string>
@@ -173,6 +183,9 @@
     <string name="time_lapse_interval_set" msgid="2486386210951700943">"Kwenziwe"</string>
     <string name="set_time_interval" msgid="2970567717633813771">"Setha umkhawulo wesikhathi"</string>
     <string name="set_time_interval_help" msgid="6665849510484821483">"Isici sesikhathi esidlulile sicimile. Sikhanyise ukuze usethe umkhawulo wesikhathi."</string>
+    <string name="set_timer_help" msgid="5007708849404589472">"Isikali sesikhathi esibala ngokwehla sivaliwe. Sivule ukuze ubale ngokwehla ngaphambi kokuthatha isithombe."</string>
+    <string name="set_duration" msgid="5578035312407161304">"Setha ubude besikhathi bube amasekhondi"</string>
+    <string name="count_down_title_text" msgid="4976386810910453266">"Kubalwa ngokwehla kuze kufike ekuthatheni isithombe"</string>
     <string name="remember_location_title" msgid="9060472929006917810">"Khumbula izindawo zezithombe?"</string>
     <string name="remember_location_prompt" msgid="724592331305808098">"Maka izithombe zakho namavidiyo ngezindawo lapha zithathwe khona."\n\n"Ezinye izinhlelo zokusebenza zingafinyelela lolu lwazi nezithombe zakho ezilondoloziwe."</string>
     <string name="remember_location_no" msgid="7541394381714894896">"Cha ngiyabonga"</string>
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index c6a823b..fb32003 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -375,6 +375,16 @@
         <item>@string/setting_on_value</item>
     </string-array>
 
+    <string-array name="pref_camera_timer_sound_entries" translatable="false">
+        <item>@string/setting_off</item>
+        <item>@string/setting_on</item>
+    </string-array>
+
+    <string-array name="pref_camera_timer_sound_entryvalues" translatable="false">
+        <item>@string/setting_off_value</item>
+        <item>@string/setting_on_value</item>
+    </string-array>
+
     <!-- Default focus mode setting.-->
     <string-array name="pref_camera_focusmode_default_array" translatable="false">
         <item>continuous-picture</item>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 4ecc900..51b3a1b 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -19,6 +19,7 @@
     <color name="on_viewfinder_label_background_color">#77333333</color>
     <color name="review_control_pressed_color">#FF33B5E5</color>
     <color name="review_control_pressed_fan_color">#3F33B5E5</color>
+    <color name="review_background">#FF000000</color>
     <color name="icon_disabled_color">#DD777777</color>
     <color name="time_lapse_arc">#FFC5C5C5</color>
     <color name="indicator_background">#40000000</color>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 23ba8f8..aee03a0 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -73,6 +73,19 @@
 
     <string name="pref_camera_recordlocation_default" translatable="false">none</string>
 
+    <!-- Title for countdown timer on camera settings screen [CHAR LIMIT=30]-->
+    <string name="pref_camera_timer_title">Countdown timer</string>
+
+    <string name="pref_camera_timer_default" translatable="false">0</string>
+    <!-- Entry for countdown timer setting. e.g. 1 second, 10 seconds, etc. [CHAR LIMIT=30]-->
+    <plurals name="pref_camera_timer_entry">
+        <item quantity="one">1 second</item>
+        <item quantity="other">%d seconds</item>
+    </plurals>
+    <string name="pref_camera_timer_sound_default">@string/setting_on_value</string>
+    <!-- Text followed by a checkbox to turn on/off sound effects during the countdown. [CHAR LIMIT = 16]-->
+    <string name="pref_camera_timer_sound_title">Beep during countdown</string>
+
     <!-- Entry of a on/off setting. The setting is turned off. [CHAR LIMIT=15] -->
     <string name="setting_off">Off</string>
     <!-- Entry of a on/off setting. The setting is turned on. [CHAR LIMIT=15] -->
@@ -277,6 +290,11 @@
     <!-- Toast telling users tapping on the viewfinder will take a picture [CHAR LIMIT=54] -->
     <string name="video_snapshot_hint">Touch to take photo while recording.</string>
 
+    <!-- Announcement telling users video recording has just started [CHAR LIMIT=NONE] -->
+    <string name="video_recording_started">Video recording has started.</string>
+    <!-- Announcement telling users video recording has just stopped [CHAR LIMIT=NONE] -->
+    <string name="video_recording_stopped">Video recording has stopped.</string>
+
     <!-- Toast telling users video snapshot is disabled when the effects are on and a user tries to tap on the viewfinder [CHAR LIMIT=65] -->
     <string name="disable_video_snapshot_hint">Video snapshot is disabled when special effects are on.</string>
 
@@ -309,8 +327,8 @@
     <string name="accessibility_decrement">Decrease %1$s</string>
     <!-- The increment button in camera preference such as exposure, picture size. [CHAR LIMIT = NONE] -->
     <string name="accessibility_increment">Increase %1$s</string>
-    <!-- The on/off switch in camera settings, such as store location. [CHAR LIMIT = NONE] -->
-    <string name="accessibility_switch">%1$s switch</string>
+    <!-- The check box in camera settings, such as store location. [CHAR LIMIT = NONE] -->
+    <string name="accessibility_check_box">%1$s check box</string>
     <!-- The button to switch to Camera mode. [CHAR LIMIT = NONE] -->
     <string name="accessibility_switch_to_camera">Switch to photo</string>
     <!-- The button to switch to Video mode. [CHAR LIMIT = NONE] -->
@@ -427,7 +445,13 @@
     <!-- Title in time interval picker for setting time interval. [CHAR LIMIT = 30]-->
     <string name="set_time_interval">Set Time Interval</string>
     <!-- Help text that is shown when the time lapse feature is turned off. [CHAR LIMIT = 180]-->
-    <string name="set_time_interval_help">Time lapse feature is off. Turn it on to set time interval."</string>
+    <string name="set_time_interval_help">Time lapse feature is off. Turn it on to set time interval.</string>
+    <!-- Help text that is shown when the countdown timer is turned off. [CHAR LIMIT = 180]-->
+    <string name="set_timer_help">Countdown timer is off. Turn it on to count down before taking a picture.</string>
+    <!-- Title in timer setting for setting the duration for the countdown timer. [CHAR LIMIT = 50]-->
+    <string name="set_duration">Set duration in seconds</string>
+    <!-- On-screen hint during timer countdown for taking a photo. [CHAR LIMIT = 60]-->
+    <string name="count_down_title_text">Counting down to take a photo</string>
 
     <!-- Title for first run dialog asking if the user wants to remember photo locations [CHAR LIMIT = 50] -->
     <string name="remember_location_title">Remember photo locations?</string>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index fa3dfe8..a356589 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -14,9 +14,6 @@
      limitations under the License.
 -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android">
-    <style name="Theme.CameraSecure" parent="Theme.Camera">
-        <item name="android:windowBackground">@android:color/transparent</item>
-    </style>
     <style name="Theme.Camera" parent="Theme.CameraBase">
         <item name="android:windowBackground">@android:color/black</item>
         <item name="android:colorBackground">@android:color/black</item>
diff --git a/res/xml/camera_preferences.xml b/res/xml/camera_preferences.xml
index 729ade3..741fb1f 100644
--- a/res/xml/camera_preferences.xml
+++ b/res/xml/camera_preferences.xml
@@ -77,4 +77,14 @@
             camera:title="@string/pref_camera_scenemode_entry_hdr"
             camera:entries="@array/pref_camera_hdr_entries"
             camera:entryValues="@array/pref_camera_hdr_entryvalues" />
+    <CountDownTimerPreference
+            camera:key="pref_camera_timer_key"
+            camera:defaultValue="@string/pref_camera_timer_default"
+            camera:title="@string/pref_camera_timer_title" />
+    <ListPreference
+            camera:key="pref_camera_timer_sound_key"
+            camera:defaultValue="@string/pref_camera_timer_sound_default"
+            camera:title="@string/pref_camera_timer_sound_title"
+            camera:entries="@array/pref_camera_timer_sound_entries"
+            camera:entryValues="@array/pref_camera_timer_sound_entryvalues" />
 </PreferenceGroup>
diff --git a/src/com/android/camera/ActivityBase.java b/src/com/android/camera/ActivityBase.java
index 0fe8877..4e4143e 100644
--- a/src/com/android/camera/ActivityBase.java
+++ b/src/com/android/camera/ActivityBase.java
@@ -40,6 +40,7 @@
 import com.android.camera.ui.PopupManager;
 import com.android.gallery3d.app.AbstractGalleryActivity;
 import com.android.gallery3d.app.AppBridge;
+import com.android.gallery3d.app.FilmstripPage;
 import com.android.gallery3d.app.GalleryActionBar;
 import com.android.gallery3d.app.PhotoPage;
 import com.android.gallery3d.common.ApiHelper;
@@ -381,10 +382,10 @@
         mAppBridge = new MyAppBridge();
         data.putParcelable(PhotoPage.KEY_APP_BRIDGE, mAppBridge);
         if (getStateManager().getStateCount() == 0) {
-            getStateManager().startState(PhotoPage.class, data);
+            getStateManager().startState(FilmstripPage.class, data);
         } else {
             getStateManager().switchState(getStateManager().getTopState(),
-                    PhotoPage.class, data);
+                    FilmstripPage.class, data);
         }
         mCameraScreenNail = mAppBridge.getCameraScreenNail();
         return mCameraScreenNail;
@@ -414,7 +415,7 @@
         }
         data.putParcelable(PhotoPage.KEY_APP_BRIDGE, mAppBridge);
         if (getStateManager().getStateCount() == 0) {
-            getStateManager().startState(PhotoPage.class, data);
+            getStateManager().startState(FilmstripPage.class, data);
         }
         mCameraScreenNail = mAppBridge.getCameraScreenNail();
         return mCameraScreenNail;
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java
index 1d4eb16..d79832b 100644
--- a/src/com/android/camera/CameraActivity.java
+++ b/src/com/android/camera/CameraActivity.java
@@ -16,9 +16,6 @@
 
 package com.android.camera;
 
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ObjectAnimator;
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Configuration;
@@ -35,6 +32,7 @@
 
 import com.android.camera.ui.CameraSwitcher;
 import com.android.gallery3d.app.PhotoPage;
+import com.android.gallery3d.common.ApiHelper;
 import com.android.gallery3d.util.LightCycleHelper;
 
 public class CameraActivity extends ActivityBase
@@ -71,7 +69,7 @@
     public void onCreate(Bundle state) {
         super.onCreate(state);
         setContentView(R.layout.camera_main);
-        mFrame =(FrameLayout) findViewById(R.id.main_content);
+        mFrame = (FrameLayout) findViewById(R.id.main_content);
         mDrawables = new Drawable[DRAW_IDS.length];
         for (int i = 0; i < DRAW_IDS.length; i++) {
             mDrawables[i] = getResources().getDrawable(DRAW_IDS[i]);
@@ -95,17 +93,24 @@
         mShutterSwitcher = findViewById(R.id.camera_shutter_switcher);
         mShutter = (ShutterButton) findViewById(R.id.shutter_button);
         mSwitcher = (CameraSwitcher) findViewById(R.id.camera_switcher);
-        mSwitcher.setDrawIds(DRAW_IDS);
-        int[] drawids = new int[LightCycleHelper.hasLightCycleCapture(this)
-                                ? DRAW_IDS.length : DRAW_IDS.length - 1];
+        int totaldrawid = (LightCycleHelper.hasLightCycleCapture(this)
+                                ? DRAW_IDS.length : DRAW_IDS.length - 1);
+        if (!ApiHelper.HAS_OLD_PANORAMA) totaldrawid--;
+
+        int[] drawids = new int[totaldrawid];
+        int[] moduleids = new int[totaldrawid];
         int ix = 0;
         for (int i = 0; i < mDrawables.length; i++) {
+            if (i == PANORAMA_MODULE_INDEX && !ApiHelper.HAS_OLD_PANORAMA) {
+                continue; // not enabled, so don't add to UI
+            }
             if (i == LIGHTCYCLE_MODULE_INDEX && !LightCycleHelper.hasLightCycleCapture(this)) {
                 continue; // not enabled, so don't add to UI
             }
+            moduleids[ix] = i;
             drawids[ix++] = DRAW_IDS[i];
         }
-        mSwitcher.setDrawIds(drawids);
+        mSwitcher.setIds(moduleids, drawids);
         mSwitcher.setSwitchListener(this);
         mSwitcher.setCurrentIndex(mCurrentModuleIndex);
     }
@@ -127,79 +132,34 @@
         }
     }
 
-    private ObjectAnimator mCameraSwitchAnimator;
-
     @Override
-    public void onCameraSelected(final int i) {
+    public void onCameraSelected(int i) {
         if (mPaused) return;
         if (i != mCurrentModuleIndex) {
             mPaused = true;
-            CameraScreenNail screenNail = getCameraScreenNail();
-            if (screenNail != null) {
-                if (mCameraSwitchAnimator != null && mCameraSwitchAnimator.isRunning()) {
-                    mCameraSwitchAnimator.cancel();
-                }
-                mCameraSwitchAnimator = ObjectAnimator.ofFloat(
-                        screenNail, "alpha", screenNail.getAlpha(), 0f);
-                mCameraSwitchAnimator.addListener(new AnimatorListenerAdapter() {
-                    @Override
-                    public void onAnimationEnd(Animator animation) {
-                        super.onAnimationEnd(animation);
-                        doChangeCamera(i);
-                    }
-                });
-                mCameraSwitchAnimator.start();
-            } else {
-                doChangeCamera(i);
+            boolean canReuse = canReuseScreenNail();
+            CameraHolder.instance().keep();
+            closeModule(mCurrentModule);
+            mCurrentModuleIndex = i;
+            switch (i) {
+                case VIDEO_MODULE_INDEX:
+                    mCurrentModule = new VideoModule();
+                    break;
+                case PHOTO_MODULE_INDEX:
+                    mCurrentModule = new PhotoModule();
+                    break;
+                case PANORAMA_MODULE_INDEX:
+                    mCurrentModule = new PanoramaModule();
+                    break;
+                case LIGHTCYCLE_MODULE_INDEX:
+                    mCurrentModule = LightCycleHelper.createPanoramaModule();
+                    break;
             }
-
+            openModule(mCurrentModule, canReuse);
+            mCurrentModule.onOrientationChanged(mLastRawOrientation);
         }
     }
 
-    private void doChangeCamera(int i) {
-        boolean canReuse = canReuseScreenNail();
-        CameraHolder.instance().keep();
-        closeModule(mCurrentModule);
-        mCurrentModuleIndex = i;
-        switch (i) {
-            case VIDEO_MODULE_INDEX:
-                mCurrentModule = new VideoModule();
-                break;
-            case PHOTO_MODULE_INDEX:
-                mCurrentModule = new PhotoModule();
-                break;
-            case PANORAMA_MODULE_INDEX:
-                mCurrentModule = new PanoramaModule();
-                break;
-            case LIGHTCYCLE_MODULE_INDEX:
-                mCurrentModule = LightCycleHelper.createPanoramaModule();
-                break;
-        }
-        openModule(mCurrentModule, canReuse);
-        mCurrentModule.onOrientationChanged(mLastRawOrientation);
-        getCameraScreenNail().setAlpha(0f);
-        getCameraScreenNail().setOnFrameDrawnOneShot(mOnFrameDrawn);
-    }
-
-    private Runnable mOnFrameDrawn = new Runnable() {
-
-        @Override
-        public void run() {
-            runOnUiThread(mFadeInCameraScreenNail);
-        }
-    };
-
-    private Runnable mFadeInCameraScreenNail = new Runnable() {
-
-        @Override
-        public void run() {
-            mCameraSwitchAnimator = ObjectAnimator.ofFloat(
-                    getCameraScreenNail(), "alpha", 0f, 1f);
-            mCameraSwitchAnimator.setStartDelay(50);
-            mCameraSwitchAnimator.start();
-        }
-    };
-
     @Override
     public void onShowSwitcherPopup() {
         mCurrentModule.onShowSwitcherPopup();
@@ -426,7 +386,8 @@
 
     private boolean canReuseScreenNail() {
         return mCurrentModuleIndex == PHOTO_MODULE_INDEX
-                || mCurrentModuleIndex == VIDEO_MODULE_INDEX;
+                || mCurrentModuleIndex == VIDEO_MODULE_INDEX
+                || mCurrentModuleIndex == LIGHTCYCLE_MODULE_INDEX;
     }
 
     @Override
@@ -437,32 +398,32 @@
     // Accessor methods for getting latency times used in performance testing
     public long getAutoFocusTime() {
         return (mCurrentModule instanceof PhotoModule) ?
-                ((PhotoModule)mCurrentModule).mAutoFocusTime : -1;
+                ((PhotoModule) mCurrentModule).mAutoFocusTime : -1;
     }
 
     public long getShutterLag() {
         return (mCurrentModule instanceof PhotoModule) ?
-                ((PhotoModule)mCurrentModule).mShutterLag : -1;
+                ((PhotoModule) mCurrentModule).mShutterLag : -1;
     }
 
     public long getShutterToPictureDisplayedTime() {
         return (mCurrentModule instanceof PhotoModule) ?
-                ((PhotoModule)mCurrentModule).mShutterToPictureDisplayedTime : -1;
+                ((PhotoModule) mCurrentModule).mShutterToPictureDisplayedTime : -1;
     }
 
     public long getPictureDisplayedToJpegCallbackTime() {
         return (mCurrentModule instanceof PhotoModule) ?
-                ((PhotoModule)mCurrentModule).mPictureDisplayedToJpegCallbackTime : -1;
+                ((PhotoModule) mCurrentModule).mPictureDisplayedToJpegCallbackTime : -1;
     }
 
     public long getJpegCallbackFinishTime() {
         return (mCurrentModule instanceof PhotoModule) ?
-                ((PhotoModule)mCurrentModule).mJpegCallbackFinishTime : -1;
+                ((PhotoModule) mCurrentModule).mJpegCallbackFinishTime : -1;
     }
 
     public long getCaptureStartTime() {
         return (mCurrentModule instanceof PhotoModule) ?
-                ((PhotoModule)mCurrentModule).mCaptureStartTime : -1;
+                ((PhotoModule) mCurrentModule).mCaptureStartTime : -1;
     }
 
     public boolean isRecording() {
diff --git a/src/com/android/camera/CameraBackupAgent.java b/src/com/android/camera/CameraBackupAgent.java
new file mode 100644
index 0000000..30ba212
--- /dev/null
+++ b/src/com/android/camera/CameraBackupAgent.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2012 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;
+
+import android.app.backup.BackupAgentHelper;
+import android.app.backup.SharedPreferencesBackupHelper;
+import android.content.Context;
+
+public class CameraBackupAgent extends BackupAgentHelper {
+    private static final String CAMERA_BACKUP_KEY = "camera_prefs";
+
+    public void onCreate () {
+        Context context = getApplicationContext();
+        String prefNames[] = ComboPreferences.getSharedPreferencesNames(context);
+
+        addHelper(CAMERA_BACKUP_KEY, new SharedPreferencesBackupHelper(context, prefNames));
+    }
+}
diff --git a/src/com/android/camera/CameraScreenNail.java b/src/com/android/camera/CameraScreenNail.java
index e2b77ff..5d3c5c0 100644
--- a/src/com/android/camera/CameraScreenNail.java
+++ b/src/com/android/camera/CameraScreenNail.java
@@ -22,8 +22,8 @@
 import android.util.Log;
 
 import com.android.gallery3d.common.ApiHelper;
-import com.android.gallery3d.ui.GLCanvas;
-import com.android.gallery3d.ui.RawTexture;
+import com.android.gallery3d.glrenderer.GLCanvas;
+import com.android.gallery3d.glrenderer.RawTexture;
 import com.android.gallery3d.ui.SurfaceTextureScreenNail;
 
 /*
@@ -77,8 +77,19 @@
     private float mScaleX = 1f, mScaleY = 1f;
     private boolean mFullScreen;
     private boolean mEnableAspectRatioClamping = false;
-    private float mAlpha = 1f;
-    private Runnable mOnFrameDrawnListener;
+    private boolean mAcquireTexture = false;
+    private final DrawClient mDefaultDraw = new DrawClient() {
+        @Override
+        public void onDraw(GLCanvas canvas, int x, int y, int width, int height) {
+            CameraScreenNail.super.draw(canvas, x, y, width, height);
+        }
+
+        @Override
+        public boolean requiresSurfaceTexture() {
+            return true;
+        }
+    };
+    private DrawClient mDraw = mDefaultDraw;
 
     public interface Listener {
         void requestRender();
@@ -92,6 +103,12 @@
         void onFrameDrawn(CameraScreenNail c);
     }
 
+    public interface DrawClient {
+        void onDraw(GLCanvas canvas, int x, int y, int width, int height);
+
+        boolean requiresSurfaceTexture();
+    }
+
     public CameraScreenNail(Listener listener) {
         mListener = listener;
     }
@@ -198,20 +215,27 @@
         Log.i(TAG, "aspect ratio clamping enabled, surfaceTexture scale: " + mScaleX + ", " + mScaleY);
     }
 
-    @Override
     public void acquireSurfaceTexture() {
         synchronized (mLock) {
             mFirstFrameArrived = false;
-            super.acquireSurfaceTexture();
             mAnimTexture = new RawTexture(getTextureWidth(), getTextureHeight(), true);
+            mAcquireTexture = true;
         }
+        mListener.requestRender();
     }
 
     @Override
     public void releaseSurfaceTexture() {
         synchronized (mLock) {
-            super.releaseSurfaceTexture();
-            mAnimState = ANIM_NONE; // stop the animation
+            if (mAcquireTexture) {
+                mAcquireTexture = false;
+                mLock.notifyAll();
+            } else {
+                if (super.getSurfaceTexture() != null) {
+                    super.releaseSurfaceTexture();
+                }
+                mAnimState = ANIM_NONE; // stop the animation
+            }
         }
     }
 
@@ -242,6 +266,10 @@
         }
     }
 
+    public RawTexture getAnimationTexture() {
+        return mAnimTexture;
+    }
+
     public void animateFlash(int displayRotation) {
         synchronized (mLock) {
             mCaptureAnimManager.setOrientation(displayRotation);
@@ -283,25 +311,37 @@
     }
 
     public void directDraw(GLCanvas canvas, int x, int y, int width, int height) {
-        super.draw(canvas, x, y, width, height);
+        DrawClient draw;
+        synchronized (mLock) {
+            draw = mDraw;
+        }
+        draw.onDraw(canvas, x, y, width, height);
+    }
+
+    public void setDraw(DrawClient draw) {
+        synchronized (mLock) {
+            if (draw == null) {
+                mDraw = mDefaultDraw;
+            } else {
+                mDraw = draw;
+            }
+        }
+        mListener.requestRender();
     }
 
     @Override
     public void draw(GLCanvas canvas, int x, int y, int width, int height) {
         synchronized (mLock) {
+            allocateTextureIfRequested(canvas);
             if (!mVisible) mVisible = true;
             SurfaceTexture surfaceTexture = getSurfaceTexture();
-            if (surfaceTexture == null || !mFirstFrameArrived) return;
-            if (mOnFrameDrawnListener != null) {
-                mOnFrameDrawnListener.run();
-                mOnFrameDrawnListener = null;
+            if (mDraw.requiresSurfaceTexture() && (surfaceTexture == null || !mFirstFrameArrived)) {
+                return;
             }
-            float oldAlpha = canvas.getAlpha();
-            canvas.setAlpha(mAlpha);
 
             switch (mAnimState) {
                 case ANIM_NONE:
-                    super.draw(canvas, x, y, width, height);
+                    directDraw(canvas, x, y, width, height);
                     break;
                 case ANIM_SWITCH_COPY_TEXTURE:
                     copyPreviewTexture(canvas);
@@ -350,26 +390,32 @@
                     // Continue to the normal draw procedure if the animation is
                     // not drawn.
                     mAnimState = ANIM_NONE;
-                    super.draw(canvas, x, y, width, height);
+                    directDraw(canvas, x, y, width, height);
                 }
             }
-            canvas.setAlpha(oldAlpha);
             callbackIfNeeded();
         } // mLock
     }
 
     private void copyPreviewTexture(GLCanvas canvas) {
+        if (!mDraw.requiresSurfaceTexture() && mAnimTexture == null) {
+            mAnimTexture = new RawTexture(getTextureWidth(), getTextureHeight(), true);
+            mAnimTexture.setIsFlippedVertically(true);
+        }
         int width = mAnimTexture.getWidth();
         int height = mAnimTexture.getHeight();
         canvas.beginRenderTarget(mAnimTexture);
-        // Flip preview texture vertically. OpenGL uses bottom left point
-        // as the origin (0, 0).
-        canvas.translate(0, height);
-        canvas.scale(1, -1, 1);
-        getSurfaceTexture().getTransformMatrix(mTextureTransformMatrix);
-        updateTransformMatrix(mTextureTransformMatrix);
-        canvas.drawTexture(mExtTexture,
-                mTextureTransformMatrix, 0, 0, width, height);
+        if (!mDraw.requiresSurfaceTexture()) {
+            mDraw.onDraw(canvas, 0, 0, width, height);
+        } else {
+            // Flip preview texture vertically. OpenGL uses bottom left point
+            // as the origin (0, 0).
+            canvas.translate(0, height);
+            canvas.scale(1, -1, 1);
+            getSurfaceTexture().getTransformMatrix(mTextureTransformMatrix);
+            updateTransformMatrix(mTextureTransformMatrix);
+            canvas.drawTexture(mExtTexture, mTextureTransformMatrix, 0, 0, width, height);
+        }
         canvas.endRenderTarget();
     }
 
@@ -423,22 +469,29 @@
         }
     }
 
-    public void setOnFrameDrawnOneShot(Runnable run) {
+    @Override
+    public SurfaceTexture getSurfaceTexture() {
         synchronized (mLock) {
-            mOnFrameDrawnListener = run;
+            SurfaceTexture surfaceTexture = super.getSurfaceTexture();
+            if (surfaceTexture == null && mAcquireTexture) {
+                try {
+                    mLock.wait();
+                    surfaceTexture = super.getSurfaceTexture();
+                } catch (InterruptedException e) {
+                    Log.w(TAG, "unexpected interruption");
+                }
+            }
+            return surfaceTexture;
         }
     }
 
-    public float getAlpha() {
+    private void allocateTextureIfRequested(GLCanvas canvas) {
         synchronized (mLock) {
-            return mAlpha;
-        }
-    }
-
-    public void setAlpha(float alpha) {
-        synchronized (mLock) {
-            mAlpha = alpha;
-            mListener.requestRender();
+            if (mAcquireTexture) {
+                super.acquireSurfaceTexture(canvas);
+                mAcquireTexture = false;
+                mLock.notifyAll();
+            }
         }
     }
 }
diff --git a/src/com/android/camera/CameraSettings.java b/src/com/android/camera/CameraSettings.java
index 9cf0545..3bc58a0 100644
--- a/src/com/android/camera/CameraSettings.java
+++ b/src/com/android/camera/CameraSettings.java
@@ -44,7 +44,7 @@
 
     public static final String KEY_VERSION = "pref_version_key";
     public static final String KEY_LOCAL_VERSION = "pref_local_version_key";
-    public static final String KEY_RECORD_LOCATION = RecordLocationPreference.KEY;
+    public static final String KEY_RECORD_LOCATION = "pref_camera_recordlocation_key";
     public static final String KEY_VIDEO_QUALITY = "pref_video_quality_key";
     public static final String KEY_VIDEO_TIME_LAPSE_FRAME_INTERVAL = "pref_video_time_lapse_frame_interval_key";
     public static final String KEY_PICTURE_SIZE = "pref_camera_picturesize_key";
@@ -55,6 +55,8 @@
     public static final String KEY_WHITE_BALANCE = "pref_camera_whitebalance_key";
     public static final String KEY_SCENE_MODE = "pref_camera_scenemode_key";
     public static final String KEY_EXPOSURE = "pref_camera_exposure_key";
+    public static final String KEY_TIMER = "pref_camera_timer_key";
+    public static final String KEY_TIMER_SOUND_EFFECTS = "pref_camera_timer_sound_key";
     public static final String KEY_VIDEO_EFFECT = "pref_video_effect_key";
     public static final String KEY_CAMERA_ID = "pref_camera_id_key";
     public static final String KEY_CAMERA_HDR = "pref_camera_hdr_key";
@@ -160,6 +162,9 @@
         ListPreference focusMode = group.findPreference(KEY_FOCUS_MODE);
         IconListPreference exposure =
                 (IconListPreference) group.findPreference(KEY_EXPOSURE);
+        CountDownTimerPreference timer =
+                (CountDownTimerPreference) group.findPreference(KEY_TIMER);
+        ListPreference countDownSoundEffects = group.findPreference(KEY_TIMER_SOUND_EFFECTS);
         IconListPreference cameraIdPref =
                 (IconListPreference) group.findPreference(KEY_CAMERA_ID);
         ListPreference videoFlashMode =
diff --git a/src/com/android/camera/CaptureAnimManager.java b/src/com/android/camera/CaptureAnimManager.java
index 65dcad3..64383af 100644
--- a/src/com/android/camera/CaptureAnimManager.java
+++ b/src/com/android/camera/CaptureAnimManager.java
@@ -21,8 +21,8 @@
 import android.view.animation.DecelerateInterpolator;
 import android.view.animation.Interpolator;
 
-import com.android.gallery3d.ui.GLCanvas;
-import com.android.gallery3d.ui.RawTexture;
+import com.android.gallery3d.glrenderer.GLCanvas;
+import com.android.gallery3d.glrenderer.RawTexture;
 
 /**
  * Class to handle the capture animation.
diff --git a/src/com/android/camera/ComboPreferences.java b/src/com/android/camera/ComboPreferences.java
index 95a2df6..af1476e 100644
--- a/src/com/android/camera/ComboPreferences.java
+++ b/src/com/android/camera/ComboPreferences.java
@@ -16,6 +16,7 @@
 
 package com.android.camera;
 
+import android.app.backup.BackupManager;
 import android.content.Context;
 import android.content.SharedPreferences;
 import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
@@ -26,20 +27,36 @@
 import java.util.WeakHashMap;
 import java.util.concurrent.CopyOnWriteArrayList;
 
-public class ComboPreferences implements SharedPreferences, OnSharedPreferenceChangeListener {
+public class ComboPreferences implements
+        SharedPreferences,
+        OnSharedPreferenceChangeListener {
     private SharedPreferences mPrefGlobal;  // global preferences
     private SharedPreferences mPrefLocal;  // per-camera preferences
+    private BackupManager mBackupManager;
     private CopyOnWriteArrayList<OnSharedPreferenceChangeListener> mListeners;
     private static WeakHashMap<Context, ComboPreferences> sMap =
             new WeakHashMap<Context, ComboPreferences>();
 
     public ComboPreferences(Context context) {
-        mPrefGlobal = PreferenceManager.getDefaultSharedPreferences(context);
+        mPrefGlobal = context.getSharedPreferences(
+                getGlobalSharedPreferencesName(context), Context.MODE_PRIVATE);
         mPrefGlobal.registerOnSharedPreferenceChangeListener(this);
+
         synchronized (sMap) {
             sMap.put(context, this);
         }
+        mBackupManager = new BackupManager(context);
         mListeners = new CopyOnWriteArrayList<OnSharedPreferenceChangeListener>();
+
+        // The global preferences was previously stored in the default
+        // shared preferences file. They should be stored in the camera-specific
+        // shared preferences file so we can backup them solely.
+        SharedPreferences oldprefs =
+                PreferenceManager.getDefaultSharedPreferences(context);
+        if (!mPrefGlobal.contains(CameraSettings.KEY_VERSION)
+                && oldprefs.contains(CameraSettings.KEY_VERSION)) {
+            moveGlobalPrefsFrom(oldprefs);
+        }
     }
 
     public static ComboPreferences get(Context context) {
@@ -48,10 +65,59 @@
         }
     }
 
+    private static String getLocalSharedPreferencesName(
+            Context context, int cameraId) {
+        return context.getPackageName() + "_preferences_" + cameraId;
+    }
+
+    private static String getGlobalSharedPreferencesName(Context context) {
+        return context.getPackageName() + "_preferences_camera";
+    }
+
+    private void movePrefFrom(
+            Map<String, ?> m, String key, SharedPreferences src) {
+        if (m.containsKey(key)) {
+            Object v = m.get(key);
+            if (v instanceof String) {
+                mPrefGlobal.edit().putString(key, (String) v).apply();
+            } else if (v instanceof Integer) {
+                mPrefGlobal.edit().putInt(key, (Integer) v).apply();
+            } else if (v instanceof Long) {
+                mPrefGlobal.edit().putLong(key, (Long) v).apply();
+            } else if (v instanceof Float) {
+                mPrefGlobal.edit().putFloat(key, (Float) v).apply();
+            } else if (v instanceof Boolean) {
+                mPrefGlobal.edit().putBoolean(key, (Boolean) v).apply();
+            }
+            src.edit().remove(key).apply();
+        }
+    }
+
+    private void moveGlobalPrefsFrom(SharedPreferences src) {
+        Map<String, ?> prefMap = src.getAll();
+        movePrefFrom(prefMap, CameraSettings.KEY_VERSION, src);
+        movePrefFrom(prefMap, CameraSettings.KEY_VIDEO_TIME_LAPSE_FRAME_INTERVAL, src);
+        movePrefFrom(prefMap, CameraSettings.KEY_CAMERA_ID, src);
+        movePrefFrom(prefMap, CameraSettings.KEY_RECORD_LOCATION, src);
+        movePrefFrom(prefMap, CameraSettings.KEY_CAMERA_FIRST_USE_HINT_SHOWN, src);
+        movePrefFrom(prefMap, CameraSettings.KEY_VIDEO_FIRST_USE_HINT_SHOWN, src);
+        movePrefFrom(prefMap, CameraSettings.KEY_VIDEO_EFFECT, src);
+    }
+
+    public static String[] getSharedPreferencesNames(Context context) {
+        int numOfCameras = CameraHolder.instance().getNumberOfCameras();
+        String prefNames[] = new String[numOfCameras + 1];
+        prefNames[0] = getGlobalSharedPreferencesName(context);
+        for (int i = 0; i < numOfCameras; i++) {
+            prefNames[i + 1] = getLocalSharedPreferencesName(context, i);
+        }
+        return prefNames;
+    }
+
     // Sets the camera id and reads its preferences. Each camera has its own
     // preferences.
     public void setLocalId(Context context, int cameraId) {
-        String prefName = context.getPackageName() + "_preferences_" + cameraId;
+        String prefName = getLocalSharedPreferencesName(context, cameraId);
         if (mPrefLocal != null) {
             mPrefLocal.unregisterOnSharedPreferenceChangeListener(this);
         }
@@ -79,7 +145,9 @@
                 || key.equals(CameraSettings.KEY_RECORD_LOCATION)
                 || key.equals(CameraSettings.KEY_CAMERA_FIRST_USE_HINT_SHOWN)
                 || key.equals(CameraSettings.KEY_VIDEO_FIRST_USE_HINT_SHOWN)
-                || key.equals(CameraSettings.KEY_VIDEO_EFFECT);
+                || key.equals(CameraSettings.KEY_VIDEO_EFFECT)
+                || key.equals(CameraSettings.KEY_TIMER)
+                || key.equals(CameraSettings.KEY_TIMER_SOUND_EFFECTS);
     }
 
     @Override
@@ -259,5 +327,6 @@
         for (OnSharedPreferenceChangeListener listener : mListeners) {
             listener.onSharedPreferenceChanged(this, key);
         }
+        mBackupManager.dataChanged();
     }
 }
diff --git a/src/com/android/camera/CountDownTimerPreference.java b/src/com/android/camera/CountDownTimerPreference.java
new file mode 100644
index 0000000..6c0f673
--- /dev/null
+++ b/src/com/android/camera/CountDownTimerPreference.java
@@ -0,0 +1,51 @@
+/*
+ * 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.
+ */
+
+package com.android.camera;
+
+import android.content.Context;
+import android.util.AttributeSet;
+
+import java.util.List;
+
+/* CountDownTimerPreference generates entries (i.e. what users see in the UI),
+ * and entry values (the actual value recorded in preference) in
+ * initCountDownTimeChoices(Context context), rather than reading the entries
+ * from a predefined list. When the entry values are a continuous list of numbers,
+ * (e.g. 0-60), it is more efficient to auto generate the list than to predefine it.*/
+public class CountDownTimerPreference extends ListPreference {
+    private final static int MAX_DURATION = 60;
+    public CountDownTimerPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        initCountDownDurationChoices(context);
+    }
+
+    private void initCountDownDurationChoices(Context context) {
+        CharSequence[] entryValues = new CharSequence[MAX_DURATION + 1];
+        CharSequence[] entries = new CharSequence[MAX_DURATION + 1];
+        for (int i = 0; i <= MAX_DURATION; i++) {
+            entryValues[i] = Integer.toString(i);
+            if (i == 0) {
+                entries[0] = context.getString(R.string.setting_off); // Off
+            } else {
+                entries[i] = context.getResources()
+                        .getQuantityString(R.plurals.pref_camera_timer_entry, i, i);
+            }
+        }
+        setEntries(entries);
+        setEntryValues(entryValues);
+    }
+}
diff --git a/src/com/android/camera/Exif.java b/src/com/android/camera/Exif.java
index ff2f952..6055565 100644
--- a/src/com/android/camera/Exif.java
+++ b/src/com/android/camera/Exif.java
@@ -18,120 +18,57 @@
 
 import android.util.Log;
 
+import com.android.gallery3d.exif.ExifInvalidFormatException;
+import com.android.gallery3d.exif.ExifParser;
+import com.android.gallery3d.exif.ExifTag;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
 public class Exif {
     private static final String TAG = "CameraExif";
 
     // Returns the degrees in clockwise. Values are 0, 90, 180, or 270.
     public static int getOrientation(byte[] jpeg) {
-        if (jpeg == null) {
+        if (jpeg == null) return 0;
+
+        InputStream is = new ByteArrayInputStream(jpeg);
+
+        try {
+            ExifParser parser = ExifParser.parse(is, ExifParser.OPTION_IFD_0);
+            int event = parser.next();
+            while(event != ExifParser.EVENT_END) {
+                if (event == ExifParser.EVENT_NEW_TAG) {
+                    ExifTag tag = parser.getTag();
+                    if (tag.getTagId() == ExifTag.TAG_ORIENTATION &&
+                            tag.hasValue()) {
+                        int orient = (int) tag.getValueAt(0);
+                        switch (orient) {
+                            case ExifTag.Orientation.TOP_LEFT:
+                                return 0;
+                            case ExifTag.Orientation.BOTTOM_LEFT:
+                                return 180;
+                            case ExifTag.Orientation.RIGHT_TOP:
+                                return 90;
+                            case ExifTag.Orientation.RIGHT_BOTTOM:
+                                return 270;
+                            default:
+                                Log.i(TAG, "Unsupported orientation");
+                                return 0;
+                        }
+                    }
+                }
+                event = parser.next();
+            }
+            Log.i(TAG, "Orientation not found");
+            return 0;
+        } catch (IOException e) {
+            Log.w(TAG, "Failed to read EXIF orientation", e);
+            return 0;
+        } catch (ExifInvalidFormatException e) {
+            Log.w(TAG, "Failed to read EXIF orientation", e);
             return 0;
         }
-
-        int offset = 0;
-        int length = 0;
-
-        // ISO/IEC 10918-1:1993(E)
-        while (offset + 3 < jpeg.length && (jpeg[offset++] & 0xFF) == 0xFF) {
-            int marker = jpeg[offset] & 0xFF;
-
-            // Check if the marker is a padding.
-            if (marker == 0xFF) {
-                continue;
-            }
-            offset++;
-
-            // Check if the marker is SOI or TEM.
-            if (marker == 0xD8 || marker == 0x01) {
-                continue;
-            }
-            // Check if the marker is EOI or SOS.
-            if (marker == 0xD9 || marker == 0xDA) {
-                break;
-            }
-
-            // Get the length and check if it is reasonable.
-            length = pack(jpeg, offset, 2, false);
-            if (length < 2 || offset + length > jpeg.length) {
-                Log.e(TAG, "Invalid length");
-                return 0;
-            }
-
-            // Break if the marker is EXIF in APP1.
-            if (marker == 0xE1 && length >= 8 &&
-                    pack(jpeg, offset + 2, 4, false) == 0x45786966 &&
-                    pack(jpeg, offset + 6, 2, false) == 0) {
-                offset += 8;
-                length -= 8;
-                break;
-            }
-
-            // Skip other markers.
-            offset += length;
-            length = 0;
-        }
-
-        // JEITA CP-3451 Exif Version 2.2
-        if (length > 8) {
-            // Identify the byte order.
-            int tag = pack(jpeg, offset, 4, false);
-            if (tag != 0x49492A00 && tag != 0x4D4D002A) {
-                Log.e(TAG, "Invalid byte order");
-                return 0;
-            }
-            boolean littleEndian = (tag == 0x49492A00);
-
-            // Get the offset and check if it is reasonable.
-            int count = pack(jpeg, offset + 4, 4, littleEndian) + 2;
-            if (count < 10 || count > length) {
-                Log.e(TAG, "Invalid offset");
-                return 0;
-            }
-            offset += count;
-            length -= count;
-
-            // Get the count and go through all the elements.
-            count = pack(jpeg, offset - 2, 2, littleEndian);
-            while (count-- > 0 && length >= 12) {
-                // Get the tag and check if it is orientation.
-                tag = pack(jpeg, offset, 2, littleEndian);
-                if (tag == 0x0112) {
-                    // We do not really care about type and count, do we?
-                    int orientation = pack(jpeg, offset + 8, 2, littleEndian);
-                    switch (orientation) {
-                        case 1:
-                            return 0;
-                        case 3:
-                            return 180;
-                        case 6:
-                            return 90;
-                        case 8:
-                            return 270;
-                    }
-                    Log.i(TAG, "Unsupported orientation");
-                    return 0;
-                }
-                offset += 12;
-                length -= 12;
-            }
-        }
-
-        Log.i(TAG, "Orientation not found");
-        return 0;
-    }
-
-    private static int pack(byte[] bytes, int offset, int length,
-            boolean littleEndian) {
-        int step = 1;
-        if (littleEndian) {
-            offset += length - 1;
-            step = -1;
-        }
-
-        int value = 0;
-        while (length-- > 0) {
-            value = (value << 8) | (bytes[offset] & 0xFF);
-            offset += step;
-        }
-        return value;
     }
 }
diff --git a/src/com/android/camera/MediaSaver.java b/src/com/android/camera/MediaSaver.java
new file mode 100644
index 0000000..a3d582e
--- /dev/null
+++ b/src/com/android/camera/MediaSaver.java
@@ -0,0 +1,149 @@
+/*
+ * 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.
+ */
+
+package com.android.camera;
+
+import android.content.ContentResolver;
+import android.location.Location;
+import android.net.Uri;
+import android.util.Log;
+
+import java.util.ArrayList;
+
+// We use a queue to store the SaveRequests that have not been completed
+// yet. The main thread puts the request into the queue. The saver thread
+// gets it from the queue, does the work, and removes it from the queue.
+//
+// The main thread needs to wait for the saver thread to finish all the work
+// in the queue, when the activity's onPause() is called, we need to finish
+// all the work, so other programs (like Gallery) can see all the images.
+//
+// If the queue becomes too long, adding a new request will block the main
+// thread until the queue length drops below the threshold (QUEUE_LIMIT).
+// If we don't do this, we may face several problems: (1) We may OOM
+// because we are holding all the jpeg data in memory. (2) We may ANR
+// when we need to wait for saver thread finishing all the work (in
+// onPause() or gotoGallery()) because the time to finishing a long queue
+// of work may be too long.
+class MediaSaver extends Thread {
+    private static final int SAVE_QUEUE_LIMIT = 3;
+    private static final String TAG = "MediaSaver";
+
+    private ArrayList<SaveRequest> mQueue;
+    private boolean mStop;
+    private ContentResolver mContentResolver;
+
+    public interface OnMediaSavedListener {
+        public void onMediaSaved(Uri uri);
+    }
+
+    public MediaSaver(ContentResolver resolver) {
+        mContentResolver = resolver;
+        mQueue = new ArrayList<SaveRequest>();
+        start();
+    }
+
+    // Runs in main thread
+    public synchronized boolean queueFull() {
+        return (mQueue.size() >= SAVE_QUEUE_LIMIT);
+    }
+
+    // Runs in main thread
+    public void addImage(final byte[] data, String title, long date, Location loc,
+                         int width, int height, int orientation, OnMediaSavedListener l) {
+        SaveRequest r = new SaveRequest();
+        r.data = data;
+        r.date = date;
+        r.title = title;
+        r.loc = (loc == null) ? null : new Location(loc);  // make a copy
+        r.width = width;
+        r.height = height;
+        r.orientation = orientation;
+        r.listener = l;
+        synchronized (this) {
+            while (mQueue.size() >= SAVE_QUEUE_LIMIT) {
+                try {
+                    wait();
+                } catch (InterruptedException ex) {
+                    // ignore.
+                }
+            }
+            mQueue.add(r);
+            notifyAll();  // Tell saver thread there is new work to do.
+        }
+    }
+
+    // Runs in saver thread
+    @Override
+    public void run() {
+        while (true) {
+            SaveRequest r;
+            synchronized (this) {
+                if (mQueue.isEmpty()) {
+                    notifyAll();  // notify main thread in waitDone
+
+                    // Note that we can only stop after we saved all images
+                    // in the queue.
+                    if (mStop) break;
+
+                    try {
+                        wait();
+                    } catch (InterruptedException ex) {
+                        // ignore.
+                    }
+                    continue;
+                }
+                if (mStop) break;
+                r = mQueue.remove(0);
+                notifyAll();  // the main thread may wait in addImage
+            }
+            Uri uri = storeImage(r.data, r.title, r.date, r.loc, r.width, r.height,
+                    r.orientation);
+            r.listener.onMediaSaved(uri);
+        }
+        if (!mQueue.isEmpty()) {
+            Log.e(TAG, "Media saver thread stopped with " + mQueue.size() + " images unsaved");
+            mQueue.clear();
+        }
+    }
+
+    // Runs in main thread
+    public void finish() {
+        synchronized (this) {
+            mStop = true;
+            notifyAll();
+        }
+    }
+
+    // Runs in saver thread
+    private Uri storeImage(final byte[] data, String title, long date,
+                           Location loc, int width, int height, int orientation) {
+        Uri uri = Storage.addImage(mContentResolver, title, date, loc,
+                                   orientation, data, width, height);
+        return uri;
+    }
+
+    // Each SaveRequest remembers the data needed to save an image.
+    private static class SaveRequest {
+        byte[] data;
+        String title;
+        long date;
+        Location loc;
+        int width, height;
+        int orientation;
+        OnMediaSavedListener listener;
+    }
+}
diff --git a/src/com/android/camera/PanoramaModule.java b/src/com/android/camera/PanoramaModule.java
index 0c3042a..1829087 100644
--- a/src/com/android/camera/PanoramaModule.java
+++ b/src/com/android/camera/PanoramaModule.java
@@ -35,7 +35,6 @@
 import android.graphics.drawable.Drawable;
 import android.hardware.Camera.Parameters;
 import android.hardware.Camera.Size;
-import android.media.ExifInterface;
 import android.net.Uri;
 import android.os.AsyncTask;
 import android.os.Handler;
@@ -59,15 +58,20 @@
 import com.android.camera.ui.LayoutNotifyView;
 import com.android.camera.ui.PopupManager;
 import com.android.camera.ui.Rotatable;
-import com.android.camera.ui.RotateLayout;
 import com.android.gallery3d.common.ApiHelper;
+import com.android.gallery3d.exif.ExifData;
+import com.android.gallery3d.exif.ExifInvalidFormatException;
+import com.android.gallery3d.exif.ExifOutputStream;
+import com.android.gallery3d.exif.ExifReader;
+import com.android.gallery3d.exif.ExifTag;
 import com.android.gallery3d.ui.GLRootView;
 
+import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
+import java.io.FileOutputStream;
 import java.io.IOException;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
+import java.io.InputStream;
 import java.util.List;
 import java.util.TimeZone;
 
@@ -86,8 +90,10 @@
 
     private static final int MSG_LOW_RES_FINAL_MOSAIC_READY = 1;
     private static final int MSG_GENERATE_FINAL_MOSAIC_ERROR = 2;
-    private static final int MSG_RESET_TO_PREVIEW = 3;
+    private static final int MSG_END_DIALOG_RESET_TO_PREVIEW = 3;
     private static final int MSG_CLEAR_SCREEN_DELAY = 4;
+    private static final int MSG_CONFIG_MOSAIC_PREVIEW = 5;
+    private static final int MSG_RESET_TO_PREVIEW = 6;
 
     private static final int SCREEN_DELAY = 2 * 60 * 1000;
 
@@ -96,11 +102,6 @@
     private static final int PREVIEW_ACTIVE = 1;
     private static final int CAPTURE_STATE_VIEWFINDER = 0;
     private static final int CAPTURE_STATE_MOSAIC = 1;
-
-    private static final String GPS_DATE_FORMAT_STR = "yyyy:MM:dd";
-    private static final String GPS_TIME_FORMAT_STR = "kk/1,mm/1,ss/1";
-    private static final String DATETIME_FORMAT_STR = "yyyy:MM:dd kk:mm:ss";
-
     // The unit of speed is degrees per frame.
     private static final float PANNING_SPEED_THRESHOLD = 2.5f;
 
@@ -120,14 +121,11 @@
     private View mLeftIndicator;
     private View mRightIndicator;
     private MosaicPreviewRenderer mMosaicPreviewRenderer;
+    private Object mRendererLock = new Object();
     private TextView mTooFastPrompt;
     private ShutterButton mShutterButton;
     private Object mWaitObject = new Object();
 
-    private DateFormat mGPSDateStampFormat;
-    private DateFormat mGPSTimeStampFormat;
-    private DateFormat mDateTimeStampFormat;
-
     private String mPreparePreviewString;
     private String mDialogTitle;
     private String mDialogOkString;
@@ -136,6 +134,7 @@
 
     private int mIndicatorColor;
     private int mIndicatorColorFast;
+    private int mReviewBackground;
 
     private boolean mUsingFrontCamera;
     private int mPreviewWidth;
@@ -176,6 +175,8 @@
     private View mRootView;
     private CameraProxy mCameraDevice;
     private boolean mPaused;
+    private boolean mIsCreatingRenderer;
+    private boolean mIsConfigPending;
 
     private class MosaicJpeg {
         public MosaicJpeg(byte[] data, int width, int height) {
@@ -224,7 +225,7 @@
     @Override
     public void init(CameraActivity activity, View parent, boolean reuseScreenNail) {
         mActivity = activity;
-        mRootView = (ViewGroup) parent;
+        mRootView = parent;
 
         createContentView();
 
@@ -243,27 +244,31 @@
                 // If we call onFrameAvailable after pausing, the GL thread will crash.
                 if (mPaused) return;
 
+                MosaicPreviewRenderer renderer = null;
+                synchronized (mRendererLock) {
+                    try {
+                        while (mMosaicPreviewRenderer == null) {
+                            mRendererLock.wait();
+                        }
+                        renderer = mMosaicPreviewRenderer;
+                    } catch (InterruptedException e) {
+                        Log.e(TAG, "Unexpected interruption", e);
+                    }
+                }
                 if (mGLRootView.getVisibility() != View.VISIBLE) {
-                    mMosaicPreviewRenderer.showPreviewFrameSync();
+                    renderer.showPreviewFrameSync();
                     mGLRootView.setVisibility(View.VISIBLE);
                 } else {
                     if (mCaptureState == CAPTURE_STATE_VIEWFINDER) {
-                        mMosaicPreviewRenderer.showPreviewFrame();
+                        renderer.showPreviewFrame();
                     } else {
-                        mMosaicPreviewRenderer.alignFrameSync();
+                        renderer.alignFrameSync();
                         mMosaicFrameProcessor.processFrame();
                     }
                 }
             }
         };
 
-        mGPSDateStampFormat = new SimpleDateFormat(GPS_DATE_FORMAT_STR);
-        mGPSTimeStampFormat = new SimpleDateFormat(GPS_TIME_FORMAT_STR);
-        mDateTimeStampFormat = new SimpleDateFormat(DATETIME_FORMAT_STR);
-        TimeZone tzUTC = TimeZone.getTimeZone("UTC");
-        mGPSDateStampFormat.setTimeZone(tzUTC);
-        mGPSTimeStampFormat.setTimeZone(tzUTC);
-
         PowerManager pm = (PowerManager) mActivity.getSystemService(Context.POWER_SERVICE);
         mPartialWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Panorama");
 
@@ -305,7 +310,7 @@
                         }
                         clearMosaicFrameProcessorIfNeeded();
                         break;
-                    case MSG_RESET_TO_PREVIEW:
+                    case MSG_END_DIALOG_RESET_TO_PREVIEW:
                         onBackgroundThreadFinished();
                         resetToPreview();
                         clearMosaicFrameProcessorIfNeeded();
@@ -314,6 +319,12 @@
                         mActivity.getWindow().clearFlags(WindowManager.LayoutParams.
                                 FLAG_KEEP_SCREEN_ON);
                         break;
+                    case MSG_CONFIG_MOSAIC_PREVIEW:
+                        configMosaicPreview(msg.arg1, msg.arg2);
+                        break;
+                    case MSG_RESET_TO_PREVIEW:
+                        resetToPreview();
+                        break;
                 }
             }
         };
@@ -423,27 +434,57 @@
         mCameraDevice.setParameters(parameters);
     }
 
-    private void configMosaicPreview(int w, int h) {
+    private void configMosaicPreview(final int w, final int h) {
+        synchronized (mRendererLock) {
+            if (mIsCreatingRenderer) {
+                mMainHandler.removeMessages(MSG_CONFIG_MOSAIC_PREVIEW);
+                mMainHandler.obtainMessage(MSG_CONFIG_MOSAIC_PREVIEW, w, h).sendToTarget();
+                mIsConfigPending = true;
+                return;
+            }
+            mIsCreatingRenderer = true;
+            mIsConfigPending = false;
+        }
         stopCameraPreview();
         CameraScreenNail screenNail = (CameraScreenNail) mActivity.mCameraScreenNail;
         screenNail.setSize(w, h);
-        if (screenNail.getSurfaceTexture() == null) {
-            screenNail.acquireSurfaceTexture();
-        } else {
+        synchronized (mRendererLock) {
+            if (mMosaicPreviewRenderer != null) {
+                mMosaicPreviewRenderer.release();
+            }
+            mMosaicPreviewRenderer = null;
             screenNail.releaseSurfaceTexture();
             screenNail.acquireSurfaceTexture();
-            mActivity.notifyScreenNailChanged();
         }
-        boolean isLandscape = (mActivity.getResources().getConfiguration().orientation
-                == Configuration.ORIENTATION_LANDSCAPE);
-        if (mMosaicPreviewRenderer != null) mMosaicPreviewRenderer.release();
-        mMosaicPreviewRenderer = new MosaicPreviewRenderer(
-                screenNail.getSurfaceTexture(), w, h, isLandscape);
+        mActivity.notifyScreenNailChanged();
+        final boolean isLandscape = (mActivity.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE);
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                CameraScreenNail screenNail = (CameraScreenNail) mActivity.mCameraScreenNail;
+                SurfaceTexture surfaceTexture = screenNail.getSurfaceTexture();
+                if (surfaceTexture == null) {
+                    synchronized (mRendererLock) {
+                        mIsConfigPending = true; // try config again later.
+                        mIsCreatingRenderer = false;
+                        mRendererLock.notifyAll();
+                        return;
+                    }
+                }
+                MosaicPreviewRenderer renderer = new MosaicPreviewRenderer(
+                        screenNail.getSurfaceTexture(), w, h, isLandscape);
+                synchronized (mRendererLock) {
+                    mMosaicPreviewRenderer = renderer;
+                    mCameraTexture = mMosaicPreviewRenderer.getInputSurfaceTexture();
 
-        mCameraTexture = mMosaicPreviewRenderer.getInputSurfaceTexture();
-        if (!mPaused && !mThreadRunning && mWaitProcessorTask == null) {
-            resetToPreview();
-        }
+                    if (!mPaused && !mThreadRunning && mWaitProcessorTask == null) {
+                        mMainHandler.sendEmptyMessage(MSG_RESET_TO_PREVIEW);
+                    }
+                    mIsCreatingRenderer = false;
+                    mRendererLock.notifyAll();
+                }
+            }
+        }).start();
     }
 
     // Receives the layout change event from the preview area. So we can set
@@ -564,7 +605,7 @@
                                 MSG_LOW_RES_FINAL_MOSAIC_READY, bitmap));
                     } else {
                         mMainHandler.sendMessage(mMainHandler.obtainMessage(
-                                MSG_RESET_TO_PREVIEW));
+                                MSG_END_DIALOG_RESET_TO_PREVIEW));
                     }
                 }
             });
@@ -650,6 +691,7 @@
 
         mReviewLayout = mRootView.findViewById(R.id.pano_review_layout);
         mReview = (ImageView) mRootView.findViewById(R.id.pano_reviewarea);
+        mReview.setBackgroundColor(mReviewBackground);
         View cancelButton = mRootView.findViewById(R.id.pano_review_cancel_button);
         cancelButton.setOnClickListener(new OnClickListener() {
             @Override
@@ -675,6 +717,7 @@
         Resources appRes = mActivity.getResources();
         mCaptureLayout = (LinearLayout) mRootView.findViewById(R.id.camera_app_root);
         mIndicatorColor = appRes.getColor(R.color.pano_progress_indication);
+        mReviewBackground = appRes.getColor(R.color.review_background);
         mIndicatorColorFast = appRes.getColor(R.color.pano_progress_indication_fast);
         mPanoLayout = (ViewGroup) mRootView.findViewById(R.id.pano_layout);
         mRotateDialog = new RotateDialogController(mActivity, R.layout.rotate_dialog);
@@ -765,7 +808,7 @@
                 }
 
                 if (jpeg == null) {  // Cancelled by user.
-                    mMainHandler.sendEmptyMessage(MSG_RESET_TO_PREVIEW);
+                    mMainHandler.sendEmptyMessage(MSG_END_DIALOG_RESET_TO_PREVIEW);
                 } else if (!jpeg.isValid) {  // Error when generating mosaic.
                     mMainHandler.sendEmptyMessage(MSG_GENERATE_FINAL_MOSAIC_ERROR);
                 } else {
@@ -776,7 +819,7 @@
                         Util.broadcastNewPicture(mActivity, uri);
                     }
                     mMainHandler.sendMessage(
-                            mMainHandler.obtainMessage(MSG_RESET_TO_PREVIEW));
+                            mMainHandler.obtainMessage(MSG_END_DIALOG_RESET_TO_PREVIEW));
                 }
             }
         });
@@ -813,6 +856,7 @@
         mShutterButton.setImageResource(R.drawable.btn_new_shutter);
         mReviewLayout.setVisibility(View.GONE);
         mPanoProgressBar.setVisibility(View.GONE);
+        mGLRootView.setVisibility(View.VISIBLE);
         // Orientation change will trigger onLayoutChange->configMosaicPreview->
         // resetToPreview. Do not show the capture UI in film strip.
         if (mActivity.mShowCameraAppView) {
@@ -857,7 +901,6 @@
             }
         }
 
-        mGLRootView.setVisibility(View.GONE);
         mCaptureLayout.setVisibility(View.GONE);
         mReviewLayout.setVisibility(View.VISIBLE);
     }
@@ -867,22 +910,32 @@
             String filename = PanoUtil.createName(
                     mActivity.getResources().getString(R.string.pano_file_name_format), mTimeTaken);
             String filepath = Storage.generateFilepath(filename);
-            Storage.writeFile(filepath, jpegData);
 
-            // Add Exif tags.
+            ExifOutputStream out = null;
+            InputStream is = null;
             try {
-                ExifInterface exif = new ExifInterface(filepath);
-                exif.setAttribute(ExifInterface.TAG_GPS_DATESTAMP,
-                        mGPSDateStampFormat.format(mTimeTaken));
-                exif.setAttribute(ExifInterface.TAG_GPS_TIMESTAMP,
-                        mGPSTimeStampFormat.format(mTimeTaken));
-                exif.setAttribute(ExifInterface.TAG_DATETIME,
-                        mDateTimeStampFormat.format(mTimeTaken));
-                exif.setAttribute(ExifInterface.TAG_ORIENTATION,
-                        getExifOrientation(orientation));
-                exif.saveAttributes();
+                is = new ByteArrayInputStream(jpegData);
+                ExifReader reader = new ExifReader();
+                ExifData data = reader.read(is);
+
+                // Add Exif tags.
+                data.addGpsDateTimeStampTag(mTimeTaken);
+                data.addDateTimeStampTag(ExifTag.TAG_DATE_TIME, mTimeTaken, TimeZone.getDefault());
+                data.addTag(ExifTag.TAG_ORIENTATION).
+                        setValue(getExifOrientation(orientation));
+
+                out = new ExifOutputStream(new FileOutputStream(filepath));
+                out.setExifData(data);
+                out.write(jpegData);
             } catch (IOException e) {
                 Log.e(TAG, "Cannot set EXIF for " + filepath, e);
+                Storage.writeFile(filepath, jpegData);
+            } catch (ExifInvalidFormatException e) {
+                Log.e(TAG, "Cannot set EXIF for " + filepath, e);
+                Storage.writeFile(filepath, jpegData);
+            } finally {
+                Util.closeSilently(out);
+                Util.closeSilently(is);
             }
 
             int jpegLength = (int) (new File(filepath).length());
@@ -892,16 +945,16 @@
         return null;
     }
 
-    private static String getExifOrientation(int orientation) {
+    private static int getExifOrientation(int orientation) {
         switch (orientation) {
             case 0:
-                return String.valueOf(ExifInterface.ORIENTATION_NORMAL);
+                return ExifTag.Orientation.TOP_LEFT;
             case 90:
-                return String.valueOf(ExifInterface.ORIENTATION_ROTATE_90);
+                return ExifTag.Orientation.RIGHT_TOP;
             case 180:
-                return String.valueOf(ExifInterface.ORIENTATION_ROTATE_180);
+                return ExifTag.Orientation.BOTTOM_LEFT;
             case 270:
-                return String.valueOf(ExifInterface.ORIENTATION_ROTATE_270);
+                return ExifTag.Orientation.RIGHT_BOTTOM;
             default:
                 throw new AssertionError("invalid: " + orientation);
         }
@@ -943,13 +996,15 @@
         }
 
         releaseCamera();
-        mCameraTexture = null;
+        synchronized (mRendererLock) {
+            mCameraTexture = null;
 
-        // The preview renderer might not have a chance to be initialized before
-        // onPause().
-        if (mMosaicPreviewRenderer != null) {
-            mMosaicPreviewRenderer.release();
-            mMosaicPreviewRenderer = null;
+            // The preview renderer might not have a chance to be initialized
+            // before onPause().
+            if (mMosaicPreviewRenderer != null) {
+                mMosaicPreviewRenderer.release();
+                mMosaicPreviewRenderer = null;
+            }
         }
 
         clearMosaicFrameProcessorIfNeeded();
@@ -963,9 +1018,7 @@
             mSoundPlayer = null;
         }
         CameraScreenNail screenNail = (CameraScreenNail) mActivity.mCameraScreenNail;
-        if (screenNail.getSurfaceTexture() != null) {
-            screenNail.releaseSurfaceTexture();
-        }
+        screenNail.releaseSurfaceTexture();
         System.gc();
     }
 
@@ -1032,7 +1085,7 @@
             mActivity.hideUI();
             mWaitProcessorTask = new WaitProcessorTask().execute();
         } else {
-            if (!mThreadRunning) mGLRootView.setVisibility(View.VISIBLE);
+            mGLRootView.setVisibility(View.VISIBLE);
             // Camera must be initialized before MosaicFrameProcessor is
             // initialized. The preview size has to be decided by camera device.
             initMosaicFrameProcessorIfNeeded();
@@ -1108,20 +1161,21 @@
         // in a row. mCameraTexture can be null after pressing home during
         // mosaic generation and coming back. Preview will be started later in
         // onLayoutChange->configMosaicPreview. This also reduces the latency.
-        if (mCameraTexture == null) return;
+        synchronized (mRendererLock) {
+            if (mCameraTexture == null) return;
 
-        // If we're previewing already, stop the preview first (this will blank
-        // the screen).
-        if (mCameraState != PREVIEW_STOPPED) stopCameraPreview();
+            // If we're previewing already, stop the preview first (this will
+            // blank the screen).
+            if (mCameraState != PREVIEW_STOPPED) stopCameraPreview();
 
-        // Set the display orientation to 0, so that the underlying mosaic library
-        // can always get undistorted mPreviewWidth x mPreviewHeight image data
-        // from SurfaceTexture.
-        mCameraDevice.setDisplayOrientation(0);
+            // Set the display orientation to 0, so that the underlying mosaic
+            // library can always get undistorted mPreviewWidth x mPreviewHeight
+            // image data from SurfaceTexture.
+            mCameraDevice.setDisplayOrientation(0);
 
-        if (mCameraTexture != null) mCameraTexture.setOnFrameAvailableListener(this);
-        mCameraDevice.setPreviewTextureAsync(mCameraTexture);
-
+            mCameraTexture.setOnFrameAvailableListener(this);
+            mCameraDevice.setPreviewTextureAsync(mCameraTexture);
+        }
         mCameraDevice.startPreviewAsync();
         mCameraState = PREVIEW_ACTIVE;
     }
diff --git a/src/com/android/camera/PhotoController.java b/src/com/android/camera/PhotoController.java
index 2872867..ad8659e 100644
--- a/src/com/android/camera/PhotoController.java
+++ b/src/com/android/camera/PhotoController.java
@@ -26,9 +26,11 @@
 import com.android.camera.ui.PieItem;
 import com.android.camera.ui.PieItem.OnClickListener;
 import com.android.camera.ui.PieRenderer;
+import com.android.camera.ui.TimerSettingPopup;
 
 public class PhotoController extends PieController
         implements MoreSettingPopup.Listener,
+        TimerSettingPopup.Listener,
         ListPrefSettingPopup.Listener {
     private static String TAG = "CAM_photocontrol";
     private static float FLOAT_PI_DIVIDED_BY_TWO = (float) Math.PI / 2;
@@ -99,7 +101,10 @@
                 CameraSettings.KEY_SCENE_MODE,
                 CameraSettings.KEY_RECORD_LOCATION,
                 CameraSettings.KEY_PICTURE_SIZE,
-                CameraSettings.KEY_FOCUS_MODE};
+                CameraSettings.KEY_FOCUS_MODE,
+                CameraSettings.KEY_TIMER,
+                CameraSettings.KEY_TIMER_SOUND_EFFECTS,
+                };
         PieItem item = makeItem(R.drawable.ic_settings_holo_light);
         item.setFixedSlice(FLOAT_PI_DIVIDED_BY_TWO * 3, sweep);
         item.setOnClickListener(new OnClickListener() {
@@ -200,12 +205,21 @@
 
         LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService(
                 Context.LAYOUT_INFLATER_SERVICE);
-        ListPrefSettingPopup basic = (ListPrefSettingPopup) inflater.inflate(
-                R.layout.list_pref_setting_popup, null, false);
-        basic.initialize(pref);
-        basic.setSettingChangedListener(this);
-        mModule.dismissPopup(true);
-        mSecondPopup = basic;
+        if (CameraSettings.KEY_TIMER.equals(pref.getKey())) {
+            TimerSettingPopup timerPopup = (TimerSettingPopup) inflater.inflate(
+                    R.layout.timer_setting_popup, null, false);
+            timerPopup.initialize(pref);
+            timerPopup.setSettingChangedListener(this);
+            mModule.dismissPopup(true);
+            mSecondPopup = timerPopup;
+        } else {
+            ListPrefSettingPopup basic = (ListPrefSettingPopup) inflater.inflate(
+                    R.layout.list_pref_setting_popup, null, false);
+            basic.initialize(pref);
+            basic.setSettingChangedListener(this);
+            mModule.dismissPopup(true);
+            mSecondPopup = basic;
+        }
         mModule.showPopup(mSecondPopup);
     }
 }
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java
index 0f66632..a283e59 100644
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -62,6 +62,7 @@
 
 import com.android.camera.CameraManager.CameraProxy;
 import com.android.camera.ui.AbstractSettingPopup;
+import com.android.camera.ui.CountDownView;
 import com.android.camera.ui.FaceView;
 import com.android.camera.ui.PieRenderer;
 import com.android.camera.ui.PopupManager;
@@ -71,8 +72,9 @@
 import com.android.camera.ui.RotateTextToast;
 import com.android.camera.ui.TwoStateImageView;
 import com.android.camera.ui.ZoomRenderer;
-import com.android.gallery3d.app.CropImage;
 import com.android.gallery3d.common.ApiHelper;
+import com.android.gallery3d.filtershow.CropExtras;
+import com.android.gallery3d.filtershow.FilterShowActivity;
 
 import java.io.File;
 import java.io.FileNotFoundException;
@@ -92,7 +94,8 @@
     PreviewFrameLayout.OnSizeChangedListener,
     ShutterButton.OnShutterButtonListener,
     SurfaceHolder.Callback,
-    PieRenderer.PieListener {
+    PieRenderer.PieListener,
+    CountDownView.OnCountDownFinishedListener {
 
     private static final String TAG = "CAM_PhotoModule";
 
@@ -111,6 +114,7 @@
     private static final int START_PREVIEW_DONE = 10;
     private static final int OPEN_CAMERA_FAIL = 11;
     private static final int CAMERA_DISABLED = 12;
+    private static final int UPDATE_SECURE_ALBUM_ITEM = 13;
 
     // The subset of parameters we need to update in setCameraParameters().
     private static final int UPDATE_PARAM_INITIALIZE = 1;
@@ -169,6 +173,7 @@
 
     private PreviewFrameLayout mPreviewFrameLayout;
     private Object mSurfaceTexture;
+    private CountDownView mCountDownView;
 
     // for API level 10
     private PreviewSurfaceView mPreviewSurfaceView;
@@ -195,12 +200,12 @@
     // A view group that contains all the small indicators.
     private View mOnScreenIndicators;
 
-    // We use a thread in ImageSaver to do the work of saving images. This
+    // We use a thread in MediaSaver to do the work of saving images. This
     // reduces the shot-to-shot time.
-    private ImageSaver mImageSaver;
+    private MediaSaver mMediaSaver;
     // Similarly, we use a thread to generate the name of the picture and insert
     // it into MediaStore while picture taking is still in progress.
-    private ImageNamer mImageNamer;
+    private NamedImages mNamedImages;
 
     private Runnable mDoSnapRunnable = new Runnable() {
         @Override
@@ -299,12 +304,28 @@
 
     private PreviewGestures mGestures;
 
+    private MediaSaver.OnMediaSavedListener mOnMediaSavedListener = new MediaSaver.OnMediaSavedListener() {
+        @Override
+
+        public void onMediaSaved(Uri uri) {
+            if (uri != null) {
+                mHandler.obtainMessage(UPDATE_SECURE_ALBUM_ITEM, uri).sendToTarget();
+                Util.broadcastNewPicture(mActivity, uri);
+            }
+        }
+    };
+
     // The purpose is not to block the main thread in onCreate and onResume.
     private class CameraStartUpThread extends Thread {
         private volatile boolean mCancelled;
 
         public void cancel() {
             mCancelled = true;
+            interrupt();
+        }
+
+        public boolean isCanceled() {
+            return mCancelled;
         }
 
         @Override
@@ -428,6 +449,11 @@
                             R.string.camera_disabled);
                     break;
                 }
+
+                case UPDATE_SECURE_ALBUM_ITEM: {
+                    mActivity.addSecureAlbumItemIfNeeded(false, (Uri) msg.obj);
+                    break;
+                }
             }
         }
     }
@@ -471,6 +497,8 @@
         initializeMiscControls();
         mLocationManager = new LocationManager(mActivity, this);
         initOnScreenIndicator();
+        mCountDownView = (CountDownView) (mRootView.findViewById(R.id.count_down_to_capture));
+        mCountDownView.setCountDownFinishedListener(this);
     }
 
     // Prompt the user to pick to record location for the very first run of
@@ -513,7 +541,7 @@
 
     private void setLocationPreference(String value) {
         mPreferences.edit()
-            .putString(RecordLocationPreference.KEY, value)
+            .putString(CameraSettings.KEY_RECORD_LOCATION, value)
             .apply();
         // TODO: Fix this to use the actual onSharedPreferencesChanged listener
         // instead of invoking manually
@@ -622,8 +650,8 @@
         mShutterButton.setOnShutterButtonListener(this);
         mShutterButton.setVisibility(View.VISIBLE);
 
-        mImageSaver = new ImageSaver();
-        mImageNamer = new ImageNamer();
+        mMediaSaver = new MediaSaver(mContentResolver);
+        mNamedImages = new NamedImages();
 
         mFirstTimeInitialized = true;
         addIdleHandler();
@@ -660,8 +688,8 @@
                 mPreferences, mContentResolver);
         mLocationManager.recordLocation(recordLocation);
 
-        mImageSaver = new ImageSaver();
-        mImageNamer = new ImageNamer();
+        mMediaSaver = new MediaSaver(mContentResolver);
+        mNamedImages = new NamedImages();
         initializeZoom();
         keepMediaProviderInstance();
         hidePostCaptureAlert();
@@ -854,6 +882,7 @@
     }
 
     private void updateOnScreenIndicators() {
+        if (mParameters == null) return;
         updateSceneOnScreenIndicator(mParameters.getSceneMode());
         updateExposureOnScreenIndicator(CameraSettings.readExposure(mPreferences));
         updateFlashOnScreenIndicator(mParameters.getFlashMode());
@@ -959,11 +988,15 @@
                     width = s.height;
                     height = s.width;
                 }
-                Uri uri = mImageNamer.getUri();
-                mActivity.addSecureAlbumItemIfNeeded(false, uri);
-                String title = mImageNamer.getTitle();
-                mImageSaver.addImage(jpegData, uri, title, mLocation,
-                        width, height, orientation);
+                String title = mNamedImages.getTitle();
+                long date = mNamedImages.getDate();
+                if (title == null) {
+                    Log.e(TAG, "Unbalanced name/data pair");
+                } else {
+                    if (date == -1) date = mCaptureStartTime;
+                    mMediaSaver.addImage(jpegData, title, date, mLocation, width, height,
+                            orientation, mOnMediaSavedListener);
+                }
             } else {
                 mJpegImageData = jpegData;
                 if (!mQuickCapture) {
@@ -1011,226 +1044,42 @@
         }
     }
 
-    // Each SaveRequest remembers the data needed to save an image.
-    private static class SaveRequest {
-        byte[] data;
-        Uri uri;
-        String title;
-        Location loc;
-        int width, height;
-        int orientation;
-    }
-
-    // We use a queue to store the SaveRequests that have not been completed
-    // yet. The main thread puts the request into the queue. The saver thread
-    // gets it from the queue, does the work, and removes it from the queue.
-    //
-    // The main thread needs to wait for the saver thread to finish all the work
-    // in the queue, when the activity's onPause() is called, we need to finish
-    // all the work, so other programs (like Gallery) can see all the images.
-    //
-    // If the queue becomes too long, adding a new request will block the main
-    // thread until the queue length drops below the threshold (QUEUE_LIMIT).
-    // If we don't do this, we may face several problems: (1) We may OOM
-    // because we are holding all the jpeg data in memory. (2) We may ANR
-    // when we need to wait for saver thread finishing all the work (in
-    // onPause() or gotoGallery()) because the time to finishing a long queue
-    // of work may be too long.
-    private class ImageSaver extends Thread {
-        private static final int QUEUE_LIMIT = 3;
-
-        private ArrayList<SaveRequest> mQueue;
+    private static class NamedImages {
+        private ArrayList<NamedEntity> mQueue;
         private boolean mStop;
+        private NamedEntity mNamedEntity;
 
-        // Runs in main thread
-        public ImageSaver() {
-            mQueue = new ArrayList<SaveRequest>();
-            start();
+        public NamedImages() {
+            mQueue = new ArrayList<NamedEntity>();
         }
 
-        // Runs in main thread
-        public void addImage(final byte[] data, Uri uri, String title,
-                Location loc, int width, int height, int orientation) {
-            SaveRequest r = new SaveRequest();
-            r.data = data;
-            r.uri = uri;
-            r.title = title;
-            r.loc = (loc == null) ? null : new Location(loc);  // make a copy
-            r.width = width;
-            r.height = height;
-            r.orientation = orientation;
-            synchronized (this) {
-                while (mQueue.size() >= QUEUE_LIMIT) {
-                    try {
-                        wait();
-                    } catch (InterruptedException ex) {
-                        // ignore.
-                    }
-                }
-                mQueue.add(r);
-                notifyAll();  // Tell saver thread there is new work to do.
+        public void nameNewImage(ContentResolver resolver, long date) {
+            NamedEntity r = new NamedEntity();
+            r.title = Util.createJpegName(date);
+            r.date = date;
+            mQueue.add(r);
+        }
+
+        public String getTitle() {
+            if (mQueue.isEmpty()) {
+                mNamedEntity = null;
+                return null;
             }
+            mNamedEntity = mQueue.get(0);
+            mQueue.remove(0);
+
+            return mNamedEntity.title;
         }
 
-        // Runs in saver thread
-        @Override
-        public void run() {
-            while (true) {
-                SaveRequest r;
-                synchronized (this) {
-                    if (mQueue.isEmpty()) {
-                        notifyAll();  // notify main thread in waitDone
-
-                        // Note that we can only stop after we saved all images
-                        // in the queue.
-                        if (mStop) break;
-
-                        try {
-                            wait();
-                        } catch (InterruptedException ex) {
-                            // ignore.
-                        }
-                        continue;
-                    }
-                    r = mQueue.get(0);
-                }
-                storeImage(r.data, r.uri, r.title, r.loc, r.width, r.height,
-                        r.orientation);
-                synchronized (this) {
-                    mQueue.remove(0);
-                    notifyAll();  // the main thread may wait in addImage
-                }
-            }
+        // Must be called after getTitle().
+        public long getDate() {
+            if (mNamedEntity == null) return -1;
+            return mNamedEntity.date;
         }
 
-        // Runs in main thread
-        public void waitDone() {
-            synchronized (this) {
-                while (!mQueue.isEmpty()) {
-                    try {
-                        wait();
-                    } catch (InterruptedException ex) {
-                        // ignore.
-                    }
-                }
-            }
-        }
-
-        // Runs in main thread
-        public void finish() {
-            waitDone();
-            synchronized (this) {
-                mStop = true;
-                notifyAll();
-            }
-            try {
-                join();
-            } catch (InterruptedException ex) {
-                // ignore.
-            }
-        }
-
-        // Runs in saver thread
-        private void storeImage(final byte[] data, Uri uri, String title,
-                Location loc, int width, int height, int orientation) {
-            boolean ok = Storage.updateImage(mContentResolver, uri, title, loc,
-                    orientation, data, width, height);
-            if (ok) {
-                Util.broadcastNewPicture(mActivity, uri);
-            }
-        }
-    }
-
-    private static class ImageNamer extends Thread {
-        private boolean mRequestPending;
-        private ContentResolver mResolver;
-        private long mDateTaken;
-        private int mWidth, mHeight;
-        private boolean mStop;
-        private Uri mUri;
-        private String mTitle;
-
-        // Runs in main thread
-        public ImageNamer() {
-            start();
-        }
-
-        // Runs in main thread
-        public synchronized void prepareUri(ContentResolver resolver,
-                long dateTaken, int width, int height, int rotation) {
-            if (rotation % 180 != 0) {
-                int tmp = width;
-                width = height;
-                height = tmp;
-            }
-            mRequestPending = true;
-            mResolver = resolver;
-            mDateTaken = dateTaken;
-            mWidth = width;
-            mHeight = height;
-            notifyAll();
-        }
-
-        // Runs in main thread
-        public synchronized Uri getUri() {
-            // wait until the request is done.
-            while (mRequestPending) {
-                try {
-                    wait();
-                } catch (InterruptedException ex) {
-                    // ignore.
-                }
-            }
-
-            // return the uri generated
-            Uri uri = mUri;
-            mUri = null;
-            return uri;
-        }
-
-        // Runs in main thread, should be called after getUri().
-        public synchronized String getTitle() {
-            return mTitle;
-        }
-
-        // Runs in namer thread
-        @Override
-        public synchronized void run() {
-            while (true) {
-                if (mStop) break;
-                if (!mRequestPending) {
-                    try {
-                        wait();
-                    } catch (InterruptedException ex) {
-                        // ignore.
-                    }
-                    continue;
-                }
-                cleanOldUri();
-                generateUri();
-                mRequestPending = false;
-                notifyAll();
-            }
-            cleanOldUri();
-        }
-
-        // Runs in main thread
-        public synchronized void finish() {
-            mStop = true;
-            notifyAll();
-        }
-
-        // Runs in namer thread
-        private void generateUri() {
-            mTitle = Util.createJpegName(mDateTaken);
-            mUri = Storage.newImage(mResolver, mTitle, mDateTaken, mWidth, mHeight);
-        }
-
-        // Runs in namer thread
-        private void cleanOldUri() {
-            if (mUri == null) return;
-            Storage.deleteImage(mResolver, mUri);
-            mUri = null;
+        private static class NamedEntity {
+            String title;
+            long date;
         }
     }
 
@@ -1265,9 +1114,10 @@
 
     @Override
     public boolean capture() {
-        // If we are already in the middle of taking a snapshot then ignore.
+        // If we are already in the middle of taking a snapshot or the image save request
+        // is full then ignore.
         if (mCameraDevice == null || mCameraState == SNAPSHOT_IN_PROGRESS
-                || mCameraState == SWITCHING_CAMERA) {
+                || mCameraState == SWITCHING_CAMERA || mMediaSaver.queueFull()) {
             return false;
         }
         mCaptureStartTime = System.currentTimeMillis();
@@ -1295,9 +1145,7 @@
             animateFlash();
         }
 
-        Size size = mParameters.getPictureSize();
-        mImageNamer.prepareUri(mContentResolver, mCaptureStartTime,
-                size.width, size.height, mJpegRotation);
+        mNamedImages.nameNewImage(mContentResolver, mCaptureStartTime);
 
         mFaceDetectionStarted = false;
         setCameraState(SNAPSHOT_IN_PROGRESS);
@@ -1351,6 +1199,7 @@
         if (mBlocker != null) {
             mBlocker.setVisibility(full ? View.VISIBLE : View.GONE);
         }
+        if (!full && mCountDownView != null) mCountDownView.cancelCountDown();
         if (ApiHelper.HAS_SURFACE_TEXTURE) {
             if (mActivity.mCameraScreenNail != null) {
                 ((CameraScreenNail) mActivity.mCameraScreenNail).setFullScreen(full);
@@ -1550,13 +1399,13 @@
             if (mSaveUri != null) {
                 newExtras.putParcelable(MediaStore.EXTRA_OUTPUT, mSaveUri);
             } else {
-                newExtras.putBoolean("return-data", true);
+                newExtras.putBoolean(CropExtras.KEY_RETURN_DATA, true);
             }
             if (mActivity.isSecureCamera()) {
-                newExtras.putBoolean(CropImage.KEY_SHOW_WHEN_LOCKED, true);
+                newExtras.putBoolean(CropExtras.KEY_SHOW_WHEN_LOCKED, true);
             }
 
-            Intent cropIntent = new Intent("com.android.camera.action.CROP");
+            Intent cropIntent = new Intent(FilterShowActivity.CROP_ACTION);
 
             cropIntent.setData(tempUri);
             cropIntent.putExtras(newExtras);
@@ -1615,8 +1464,25 @@
             return;
         }
 
-        mSnapshotOnIdle = false;
-        mFocusManager.doSnap();
+        String timer = mPreferences.getString(
+                CameraSettings.KEY_TIMER,
+                mActivity.getString(R.string.pref_camera_timer_default));
+        boolean playSound = mPreferences.getString(CameraSettings.KEY_TIMER_SOUND_EFFECTS,
+                mActivity.getString(R.string.pref_camera_timer_sound_default))
+                .equals(mActivity.getString(R.string.setting_on_value));
+
+        int seconds = Integer.parseInt(timer);
+        // When shutter button is pressed, check whether the previous countdown is
+        // finished. If not, cancel the previous countdown and start a new one.
+        if (mCountDownView.isCountingDown()) {
+            mCountDownView.cancelCountDown();
+            mCountDownView.startCountDown(seconds, playSound);
+        } else if (seconds > 0) {
+            mCountDownView.startCountDown(seconds, playSound);
+        } else {
+           mSnapshotOnIdle = false;
+           mFocusManager.doSnap();
+        }
     }
 
     @Override
@@ -1702,6 +1568,7 @@
             mCameraDevice.cancelAutoFocus();
         }
         stopPreview();
+        mCountDownView.cancelCountDown();
         // Close the camera now because other activities may need to use it.
         closeCamera();
         if (mSurfaceTexture != null) {
@@ -1715,11 +1582,10 @@
         if (mFaceView != null) mFaceView.clear();
 
         if (mFirstTimeInitialized) {
-            if (mImageSaver != null) {
-                mImageSaver.finish();
-                mImageSaver = null;
-                mImageNamer.finish();
-                mImageNamer = null;
+            if (mMediaSaver != null) {
+                mMediaSaver.finish();
+                mMediaSaver = null;
+                mNamedImages = null;
             }
         }
 
@@ -1751,6 +1617,9 @@
             @Override
             public void onClick(View v) {
                 if (mPieRenderer != null) {
+                    // If autofocus is not finished, cancel autofocus so that the
+                    // subsequent touch can be handled by PreviewGestures
+                    if (mCameraState == FOCUSING) cancelAutoFocus();
                     mPieRenderer.showInCenter();
                 }
             }
@@ -1841,9 +1710,12 @@
         Log.v(TAG, "onConfigurationChanged");
         setDisplayOrientation();
 
-        ((ViewGroup) mRootView).removeAllViews();
+        // Only the views in photo_module_content need to be removed and recreated
+        // i.e. CountDownView won't be recreated
+        ViewGroup viewGroup = (ViewGroup) mRootView.findViewById(R.id.camera_app);
+        viewGroup.removeAllViews();
         LayoutInflater inflater = mActivity.getLayoutInflater();
-        inflater.inflate(R.layout.photo_module, (ViewGroup) mRootView);
+        inflater.inflate(R.layout.photo_module_content, (ViewGroup) viewGroup);
 
         // from onCreate()
         initializeControlByIntent();
@@ -1958,33 +1830,38 @@
     @Override
     public boolean onKeyDown(int keyCode, KeyEvent event) {
         switch (keyCode) {
-            case KeyEvent.KEYCODE_FOCUS:
-                if (mFirstTimeInitialized && event.getRepeatCount() == 0) {
+        case KeyEvent.KEYCODE_VOLUME_UP:
+        case KeyEvent.KEYCODE_VOLUME_DOWN:
+        case KeyEvent.KEYCODE_FOCUS:
+            if (mActivity.isInCameraApp() && mFirstTimeInitialized) {
+                if (event.getRepeatCount() == 0) {
                     onShutterButtonFocus(true);
                 }
                 return true;
-            case KeyEvent.KEYCODE_CAMERA:
-                if (mFirstTimeInitialized && event.getRepeatCount() == 0) {
-                    onShutterButtonClick();
+            }
+            return false;
+        case KeyEvent.KEYCODE_CAMERA:
+            if (mFirstTimeInitialized && event.getRepeatCount() == 0) {
+                onShutterButtonClick();
+            }
+            return true;
+        case KeyEvent.KEYCODE_DPAD_CENTER:
+            // If we get a dpad center event without any focused view, move
+            // the focus to the shutter button and press it.
+            if (mFirstTimeInitialized && event.getRepeatCount() == 0) {
+                // Start auto-focus immediately to reduce shutter lag. After
+                // the shutter button gets the focus, onShutterButtonFocus()
+                // will be called again but it is fine.
+                if (removeTopLevelPopup()) return true;
+                onShutterButtonFocus(true);
+                if (mShutterButton.isInTouchMode()) {
+                    mShutterButton.requestFocusFromTouch();
+                } else {
+                    mShutterButton.requestFocus();
                 }
-                return true;
-            case KeyEvent.KEYCODE_DPAD_CENTER:
-                // If we get a dpad center event without any focused view, move
-                // the focus to the shutter button and press it.
-                if (mFirstTimeInitialized && event.getRepeatCount() == 0) {
-                    // Start auto-focus immediately to reduce shutter lag. After
-                    // the shutter button gets the focus, onShutterButtonFocus()
-                    // will be called again but it is fine.
-                    if (removeTopLevelPopup()) return true;
-                    onShutterButtonFocus(true);
-                    if (mShutterButton.isInTouchMode()) {
-                        mShutterButton.requestFocusFromTouch();
-                    } else {
-                        mShutterButton.requestFocus();
-                    }
-                    mShutterButton.setPressed(true);
-                }
-                return true;
+                mShutterButton.setPressed(true);
+            }
+            return true;
         }
         return false;
     }
@@ -1992,11 +1869,18 @@
     @Override
     public boolean onKeyUp(int keyCode, KeyEvent event) {
         switch (keyCode) {
-            case KeyEvent.KEYCODE_FOCUS:
-                if (mFirstTimeInitialized) {
-                    onShutterButtonFocus(false);
-                }
+        case KeyEvent.KEYCODE_VOLUME_UP:
+        case KeyEvent.KEYCODE_VOLUME_DOWN:
+            if (mActivity.isInCameraApp() && mFirstTimeInitialized) {
+                onShutterButtonClick();
                 return true;
+            }
+            return false;
+        case KeyEvent.KEYCODE_FOCUS:
+            if (mFirstTimeInitialized) {
+                onShutterButtonFocus(false);
+            }
+            return true;
         }
         return false;
     }
@@ -2073,10 +1957,16 @@
                 screenNail.enableAspectRatioClamping();
                 mActivity.notifyScreenNailChanged();
                 screenNail.acquireSurfaceTexture();
+                CameraStartUpThread t = mCameraStartUpThread;
+                if (t != null && t.isCanceled()) {
+                    return; // Exiting, so no need to get the surface texture.
+                }
                 mSurfaceTexture = screenNail.getSurfaceTexture();
             }
             mCameraDevice.setDisplayOrientation(mCameraDisplayOrientation);
-            mCameraDevice.setPreviewTextureAsync((SurfaceTexture) mSurfaceTexture);
+            if (mSurfaceTexture != null) {
+                mCameraDevice.setPreviewTextureAsync((SurfaceTexture) mSurfaceTexture);
+            }
         } else {
             mCameraDevice.setDisplayOrientation(mDisplayOrientation);
             mCameraDevice.setPreviewDisplayAsync(mCameraSurfaceHolder);
@@ -2333,6 +2223,7 @@
 
     private boolean isCameraIdle() {
         return (mCameraState == IDLE) ||
+                (mCameraState == PREVIEW_STOPPED) ||
                 ((mFocusManager != null) && mFocusManager.isFocusCompleted()
                         && (mCameraState != SWITCHING_CAMERA));
     }
@@ -2534,6 +2425,12 @@
         if (mFocusManager != null) mFocusManager.setPreviewSize(width, height);
     }
 
+    @Override
+    public void onCountDownFinished() {
+        mSnapshotOnIdle = false;
+        mFocusManager.doSnap();
+    }
+
     void setPreviewFrameLayoutAspectRatio() {
         // Set the preview frame aspect ratio according to the picture size.
         Size size = mParameters.getPictureSize();
diff --git a/src/com/android/camera/PreviewFrameLayout.java b/src/com/android/camera/PreviewFrameLayout.java
index b8654cc..451a35a 100644
--- a/src/com/android/camera/PreviewFrameLayout.java
+++ b/src/com/android/camera/PreviewFrameLayout.java
@@ -67,11 +67,6 @@
     public void setAspectRatio(double ratio) {
         if (ratio <= 0.0) throw new IllegalArgumentException();
 
-        if (getResources().getConfiguration().orientation
-                == Configuration.ORIENTATION_PORTRAIT) {
-            ratio = 1 / ratio;
-        }
-
         if (mAspectRatio != ratio) {
             mAspectRatio = ratio;
             requestLayout();
@@ -91,17 +86,35 @@
         int previewWidth = MeasureSpec.getSize(widthSpec);
         int previewHeight = MeasureSpec.getSize(heightSpec);
 
-        // Get the padding of the border background.
-        int hPadding = getPaddingLeft() + getPaddingRight();
-        int vPadding = getPaddingTop() + getPaddingBottom();
+        if (!ApiHelper.HAS_SURFACE_TEXTURE) {
+            // Get the padding of the border background.
+            int hPadding = getPaddingLeft() + getPaddingRight();
+            int vPadding = getPaddingTop() + getPaddingBottom();
 
-        // Resize the preview frame with correct aspect ratio.
-        previewWidth -= hPadding;
-        previewHeight -= vPadding;
+            // Resize the preview frame with correct aspect ratio.
+            previewWidth -= hPadding;
+            previewHeight -= vPadding;
 
-        // Add the padding of the border.
-        previewWidth += hPadding;
-        previewHeight += vPadding;
+            boolean widthLonger = previewWidth > previewHeight;
+            int longSide = (widthLonger ? previewWidth : previewHeight);
+            int shortSide = (widthLonger ? previewHeight : previewWidth);
+            if (longSide > shortSide * mAspectRatio) {
+                longSide = (int) ((double) shortSide * mAspectRatio);
+            } else {
+                shortSide = (int) ((double) longSide / mAspectRatio);
+            }
+            if (widthLonger) {
+                previewWidth = longSide;
+                previewHeight = shortSide;
+            } else {
+                previewWidth = shortSide;
+                previewHeight = longSide;
+            }
+
+            // Add the padding of the border.
+            previewWidth += hPadding;
+            previewHeight += vPadding;
+        }
 
         // Ask children to follow the new preview dimension.
         super.onMeasure(MeasureSpec.makeMeasureSpec(previewWidth, MeasureSpec.EXACTLY),
diff --git a/src/com/android/camera/RecordLocationPreference.java b/src/com/android/camera/RecordLocationPreference.java
index 55944b0..9992afa 100644
--- a/src/com/android/camera/RecordLocationPreference.java
+++ b/src/com/android/camera/RecordLocationPreference.java
@@ -27,8 +27,6 @@
  */
 public class RecordLocationPreference extends IconListPreference {
 
-    public static final String KEY = "pref_camera_recordlocation_key";
-
     public static final String VALUE_NONE = "none";
     public static final String VALUE_ON = "on";
     public static final String VALUE_OFF = "off";
@@ -47,12 +45,14 @@
 
     public static boolean get(
             SharedPreferences pref, ContentResolver resolver) {
-        String value = pref.getString(KEY, VALUE_NONE);
+        String value = pref.getString(
+                CameraSettings.KEY_RECORD_LOCATION, VALUE_NONE);
         return VALUE_ON.equals(value);
     }
 
     public static boolean isSet(SharedPreferences pref) {
-        String value = pref.getString(KEY, VALUE_NONE);
+        String value = pref.getString(
+                CameraSettings.KEY_RECORD_LOCATION, VALUE_NONE);
         return !VALUE_NONE.equals(value);
     }
 }
diff --git a/src/com/android/camera/ShutterButton.java b/src/com/android/camera/ShutterButton.java
index 2eb89c5..a1bbb1a 100755
--- a/src/com/android/camera/ShutterButton.java
+++ b/src/com/android/camera/ShutterButton.java
@@ -19,6 +19,7 @@
 import android.content.Context;
 import android.util.AttributeSet;
 import android.view.MotionEvent;
+import android.view.View;
 import android.widget.ImageView;
 
 /**
@@ -121,7 +122,7 @@
     @Override
     public boolean performClick() {
         boolean result = super.performClick();
-        if (mListener != null) {
+        if (mListener != null && getVisibility() == View.VISIBLE) {
             mListener.onShutterButtonClick();
         }
         return result;
diff --git a/src/com/android/camera/Storage.java b/src/com/android/camera/Storage.java
index afada23..648fa7d 100644
--- a/src/com/android/camera/Storage.java
+++ b/src/com/android/camera/Storage.java
@@ -122,92 +122,6 @@
         return uri;
     }
 
-    // newImage() and updateImage() together do the same work as
-    // addImage. newImage() is the first step, and it inserts the DATE_TAKEN and
-    // DATA fields into the database.
-    //
-    // We also insert hint values for the WIDTH and HEIGHT fields to give
-    // correct aspect ratio before the real values are updated in updateImage().
-    public static Uri newImage(ContentResolver resolver, String title,
-            long date, int width, int height) {
-        String path = generateFilepath(title);
-
-        // Insert into MediaStore.
-        ContentValues values = new ContentValues(4);
-        values.put(ImageColumns.DATE_TAKEN, date);
-        values.put(ImageColumns.DATA, path);
-
-        setImageSize(values, width, height);
-
-        Uri uri = null;
-        try {
-            uri = resolver.insert(Images.Media.EXTERNAL_CONTENT_URI, values);
-        } catch (Throwable th)  {
-            // This can happen when the external volume is already mounted, but
-            // MediaScanner has not notify MediaProvider to add that volume.
-            // The picture is still safe and MediaScanner will find it and
-            // insert it into MediaProvider. The only problem is that the user
-            // cannot click the thumbnail to review the picture.
-            Log.e(TAG, "Failed to new image" + th);
-        }
-        return uri;
-    }
-
-    // This is the second step. It completes the partial data added by
-    // newImage. All columns other than DATE_TAKEN and DATA are inserted
-    // here. This method also save the image data into the file.
-    //
-    // Returns true if the update is successful.
-    public static boolean updateImage(ContentResolver resolver, Uri uri,
-            String title, Location location, int orientation, byte[] jpeg,
-            int width, int height) {
-        // Save the image.
-        String path = generateFilepath(title);
-        String tmpPath = path + ".tmp";
-        FileOutputStream out = null;
-        try {
-            // Write to a temporary file and rename it to the final name. This
-            // avoids other apps reading incomplete data.
-            out = new FileOutputStream(tmpPath);
-            out.write(jpeg);
-            out.close();
-            new File(tmpPath).renameTo(new File(path));
-        } catch (Exception e) {
-            Log.e(TAG, "Failed to write image", e);
-            return false;
-        } finally {
-            try {
-                out.close();
-            } catch (Exception e) {
-            }
-        }
-
-        // Insert into MediaStore.
-        ContentValues values = new ContentValues(9);
-        values.put(ImageColumns.TITLE, title);
-        values.put(ImageColumns.DISPLAY_NAME, title + ".jpg");
-        values.put(ImageColumns.MIME_TYPE, "image/jpeg");
-        // Clockwise rotation in degrees. 0, 90, 180, or 270.
-        values.put(ImageColumns.ORIENTATION, orientation);
-        values.put(ImageColumns.SIZE, jpeg.length);
-
-        setImageSize(values, width, height);
-
-        if (location != null) {
-            values.put(ImageColumns.LATITUDE, location.getLatitude());
-            values.put(ImageColumns.LONGITUDE, location.getLongitude());
-        }
-
-        try {
-            resolver.update(uri, values, null, null);
-        } catch (Throwable th) {
-            Log.e(TAG, "Failed to update image" + th);
-            return false;
-        }
-
-        return true;
-    }
-
     public static void deleteImage(ContentResolver resolver, Uri uri) {
         try {
             resolver.delete(uri, null, null);
diff --git a/src/com/android/camera/SwitchAnimManager.java b/src/com/android/camera/SwitchAnimManager.java
index af29c13..6ec8822 100644
--- a/src/com/android/camera/SwitchAnimManager.java
+++ b/src/com/android/camera/SwitchAnimManager.java
@@ -19,8 +19,8 @@
 import android.os.SystemClock;
 import android.util.Log;
 
-import com.android.gallery3d.ui.GLCanvas;
-import com.android.gallery3d.ui.RawTexture;
+import com.android.gallery3d.glrenderer.GLCanvas;
+import com.android.gallery3d.glrenderer.RawTexture;
 
 /**
  * Class to handle the animation when switching between back and front cameras.
diff --git a/src/com/android/camera/VideoModule.java b/src/com/android/camera/VideoModule.java
index 7b22b41..d32234a 100644
--- a/src/com/android/camera/VideoModule.java
+++ b/src/com/android/camera/VideoModule.java
@@ -28,6 +28,7 @@
 import android.content.SharedPreferences.Editor;
 import android.content.res.Configuration;
 import android.graphics.Bitmap;
+import android.graphics.SurfaceTexture;
 import android.hardware.Camera.CameraInfo;
 import android.hardware.Camera.Parameters;
 import android.hardware.Camera.PictureCallback;
@@ -75,6 +76,7 @@
 import com.android.camera.ui.TwoStateImageView;
 import com.android.camera.ui.ZoomRenderer;
 import com.android.gallery3d.common.ApiHelper;
+import com.android.gallery3d.util.AccessibilityUtils;
 
 import java.io.File;
 import java.io.IOException;
@@ -461,14 +463,13 @@
             // ignore
         }
 
-        Thread startPreviewThread = new Thread(new Runnable() {
+        readVideoPreferences();
+        new Thread(new Runnable() {
             @Override
             public void run() {
-                readVideoPreferences();
                 startPreview();
             }
-        });
-        startPreviewThread.start();
+        }).start();
 
         initializeControlByIntent();
         initializeOverlay();
@@ -480,20 +481,6 @@
         setOrientationIndicator(0, false);
         setDisplayOrientation();
 
-        // Make sure preview is started.
-        try {
-            startPreviewThread.join();
-            if (mActivity.mOpenCameraFail) {
-                Util.showErrorAndFinish(mActivity, R.string.cannot_connect_camera);
-                return;
-            } else if (mActivity.mCameraDisabled) {
-                Util.showErrorAndFinish(mActivity, R.string.camera_disabled);
-                return;
-            }
-        } catch (InterruptedException ex) {
-            // ignore
-        }
-
         showTimeLapseUI(mCaptureTimeLapse);
         initializeVideoSnapshot();
         resizeForPreviewAspectRatio();
@@ -843,7 +830,12 @@
             }
             readVideoPreferences();
             resizeForPreviewAspectRatio();
-            startPreview();
+            new Thread(new Runnable() {
+                @Override
+                public void run() {
+                    startPreview();
+                }
+            }).start();
         }
 
         // Initializing it here after the preview is started.
@@ -891,6 +883,8 @@
             }
         }
 
+        mPreviewing = true;
+
         setDisplayOrientation();
         mActivity.mCameraDevice.setDisplayOrientation(mCameraDisplayOrientation);
         setCameraParameters();
@@ -898,8 +892,12 @@
         try {
             if (!effectsActive()) {
                 if (ApiHelper.HAS_SURFACE_TEXTURE) {
-                    mActivity.mCameraDevice.setPreviewTextureAsync(
-                            ((CameraScreenNail) mActivity.mCameraScreenNail).getSurfaceTexture());
+                    SurfaceTexture surfaceTexture = ((CameraScreenNail) mActivity.mCameraScreenNail)
+                            .getSurfaceTexture();
+                    if (surfaceTexture == null) {
+                        return; // The texture has been destroyed (pause, etc)
+                    }
+                    mActivity.mCameraDevice.setPreviewTextureAsync(surfaceTexture);
                 } else {
                     mActivity.mCameraDevice.setPreviewDisplayAsync(mPreviewSurfaceView.getHolder());
                 }
@@ -911,9 +909,18 @@
         } catch (Throwable ex) {
             closeCamera();
             throw new RuntimeException("startPreview failed", ex);
+        } finally {
+            mActivity.runOnUiThread(new Runnable() {
+                @Override
+                public void run() {
+                    if (mActivity.mOpenCameraFail) {
+                        Util.showErrorAndFinish(mActivity, R.string.cannot_connect_camera);
+                    } else if (mActivity.mCameraDisabled) {
+                        Util.showErrorAndFinish(mActivity, R.string.camera_disabled);
+                    }
+                }
+            });
         }
-
-        mPreviewing = true;
     }
 
     private void stopPreview() {
@@ -975,9 +982,7 @@
     private void releasePreviewResources() {
         if (ApiHelper.HAS_SURFACE_TEXTURE) {
             CameraScreenNail screenNail = (CameraScreenNail) mActivity.mCameraScreenNail;
-            if (screenNail.getSurfaceTexture() != null) {
-                screenNail.releaseSurfaceTexture();
-            }
+            screenNail.releaseSurfaceTexture();
             if (!ApiHelper.HAS_SURFACE_TEXTURE_RECORDING) {
                 mHandler.removeMessages(HIDE_SURFACE_VIEW);
                 mPreviewSurfaceView.setVisibility(View.GONE);
@@ -1587,6 +1592,11 @@
             }
         }
 
+        // Make sure the video recording has started before announcing
+        // this in accessibility.
+        AccessibilityUtils.makeAnnouncement(mShutterButton,
+                mActivity.getString(R.string.video_recording_started));
+
         // The parameters may have been changed by MediaRecorder upon starting
         // recording. We need to alter the parameters if we support camcorder
         // zoom. To reduce latency when setting the parameters during zoom, we
@@ -1708,6 +1718,8 @@
                 mCurrentVideoFilename = mVideoFilename;
                 Log.v(TAG, "stopVideoRecording: Setting current video filename: "
                         + mCurrentVideoFilename);
+                AccessibilityUtils.makeAnnouncement(mShutterButton,
+                        mActivity.getString(R.string.video_recording_stopped));
             } catch (RuntimeException e) {
                 Log.e(TAG, "stop fail",  e);
                 if (mVideoFilename != null) deleteVideoFile(mVideoFilename);
diff --git a/src/com/android/camera/ui/CameraSwitcher.java b/src/com/android/camera/ui/CameraSwitcher.java
index 31d206e..7b9fb64 100644
--- a/src/com/android/camera/ui/CameraSwitcher.java
+++ b/src/com/android/camera/ui/CameraSwitcher.java
@@ -48,6 +48,7 @@
 
     private CameraSwitchListener mListener;
     private int mCurrentIndex;
+    private int[] mModuleIds;
     private int[] mDrawIds;
     private int mItemSize;
     private View mPopup;
@@ -78,8 +79,9 @@
         mIndicator = context.getResources().getDrawable(R.drawable.ic_switcher_menu_indicator);
     }
 
-    public void setDrawIds(int[] drawids) {
+    public void setIds(int[] moduleids, int[] drawids) {
         mDrawIds = drawids;
+        mModuleIds = moduleids;
     }
 
     public void setCurrentIndex(int i) {
@@ -101,7 +103,7 @@
         hidePopup();
         if ((ix != mCurrentIndex) && (mListener != null)) {
             setCurrentIndex(ix);
-            mListener.onCameraSelected(ix);
+            mListener.onCameraSelected(mModuleIds[ix]);
         }
     }
 
@@ -213,7 +215,7 @@
     private void updateInitialTranslations() {
         if (getResources().getConfiguration().orientation
                 == Configuration.ORIENTATION_PORTRAIT) {
-            mTranslationX = -getWidth() / 2 ;
+            mTranslationX = -getWidth() / 2;
             mTranslationY = getHeight();
         } else {
             mTranslationX = getWidth();
diff --git a/src/com/android/camera/ui/CountDownView.java b/src/com/android/camera/ui/CountDownView.java
new file mode 100644
index 0000000..ade25c3
--- /dev/null
+++ b/src/com/android/camera/ui/CountDownView.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2012 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.ui;
+
+import java.util.Locale;
+
+import android.content.Context;
+import android.media.AudioManager;
+import android.media.SoundPool;
+import android.os.Handler;
+import android.os.Message;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.View;
+import android.view.animation.Animation;
+import android.view.animation.AnimationUtils;
+import android.widget.FrameLayout;
+import android.widget.TextView;
+
+import com.android.camera.R;
+
+public class CountDownView extends FrameLayout {
+
+    private static final String TAG = "CAM_CountDownView";
+    private static final int SET_TIMER_TEXT = 1;
+    private TextView mRemainingSecondsView;
+    private int mRemainingSecs = 0;
+    private OnCountDownFinishedListener mListener;
+    private Animation mCountDownAnim;
+    private SoundPool mSoundPool;
+    private int mBeepTwice;
+    private int mBeepOnce;
+    private boolean mPlaySound;
+    private final Handler mHandler = new MainHandler();
+
+    public CountDownView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        mCountDownAnim = AnimationUtils.loadAnimation(context, R.anim.count_down_exit);
+        // Load the beeps
+        mSoundPool = new SoundPool(1, AudioManager.STREAM_NOTIFICATION, 0);
+        mBeepOnce = mSoundPool.load(context, R.raw.beep_once, 1);
+        mBeepTwice = mSoundPool.load(context, R.raw.beep_twice, 1);
+    }
+
+    public boolean isCountingDown() {
+        return mRemainingSecs > 0;
+    };
+
+    public interface OnCountDownFinishedListener {
+        public void onCountDownFinished();
+    }
+
+    private void remainingSecondsChanged(int newVal) {
+        mRemainingSecs = newVal;
+        if (newVal == 0) {
+            // Countdown has finished
+            setVisibility(View.INVISIBLE);
+            mListener.onCountDownFinished();
+        } else {
+            Locale locale = getResources().getConfiguration().locale;
+            String localizedValue = String.format(locale, "%d", newVal);
+            mRemainingSecondsView.setText(localizedValue);
+            // Fade-out animation
+            mCountDownAnim.reset();
+            mRemainingSecondsView.clearAnimation();
+            mRemainingSecondsView.startAnimation(mCountDownAnim);
+
+            // Play sound effect for the last 3 seconds of the countdown
+            if (mPlaySound) {
+                if (newVal == 1) {
+                    mSoundPool.play(mBeepTwice, 1.0f, 1.0f, 0, 0, 1.0f);
+                } else if (newVal <= 3) {
+                    mSoundPool.play(mBeepOnce, 1.0f, 1.0f, 0, 0, 1.0f);
+                }
+            }
+            // Schedule the next remainingSecondsChanged() call in 1 second
+            mHandler.sendEmptyMessageDelayed(SET_TIMER_TEXT, 1000);
+        }
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+        mRemainingSecondsView = (TextView) findViewById(R.id.remaining_seconds);
+    }
+
+    public void setCountDownFinishedListener(OnCountDownFinishedListener listener) {
+        mListener = listener;
+    }
+
+    public void startCountDown(int sec, boolean playSound) {
+        if (sec <= 0) {
+            Log.w(TAG, "Invalid input for countdown timer: " + sec + " seconds");
+            return;
+        }
+        setVisibility(View.VISIBLE);
+        mPlaySound = playSound;
+        remainingSecondsChanged(sec);
+    }
+
+    public void cancelCountDown() {
+        if (mRemainingSecs > 0) {
+            mRemainingSecs = 0;
+            mHandler.removeMessages(SET_TIMER_TEXT);
+            setVisibility(View.INVISIBLE);
+        }
+    }
+
+    private class MainHandler extends Handler {
+        @Override
+        public void handleMessage(Message message) {
+            if (message.what == SET_TIMER_TEXT) {
+                remainingSecondsChanged(mRemainingSecs -1);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/camera/ui/InLineSettingSwitch.java b/src/com/android/camera/ui/InLineSettingCheckBox.java
similarity index 70%
rename from src/com/android/camera/ui/InLineSettingSwitch.java
rename to src/com/android/camera/ui/InLineSettingCheckBox.java
index fcfbe28..5d9cc38 100644
--- a/src/com/android/camera/ui/InLineSettingSwitch.java
+++ b/src/com/android/camera/ui/InLineSettingCheckBox.java
@@ -19,6 +19,7 @@
 import android.content.Context;
 import android.util.AttributeSet;
 import android.view.accessibility.AccessibilityEvent;
+import android.widget.CheckBox;
 import android.widget.CompoundButton;
 import android.widget.CompoundButton.OnCheckedChangeListener;
 
@@ -26,9 +27,9 @@
 import com.android.camera.ListPreference;
 import com.android.camera.R;
 
-/* A switch setting control which turns on/off the setting. */
-public class InLineSettingSwitch extends InLineSettingItem {
-    private Switch mSwitch;
+/* A check box setting control which turns on/off the setting. */
+public class InLineSettingCheckBox extends InLineSettingItem {
+    private CheckBox mCheckBox;
 
     OnCheckedChangeListener mCheckedChangeListener = new OnCheckedChangeListener() {
         @Override
@@ -37,35 +38,35 @@
         }
     };
 
-    public InLineSettingSwitch(Context context, AttributeSet attrs) {
+    public InLineSettingCheckBox(Context context, AttributeSet attrs) {
         super(context, attrs);
     }
 
     @Override
     protected void onFinishInflate() {
         super.onFinishInflate();
-        mSwitch = (Switch) findViewById(R.id.setting_switch);
-        mSwitch.setOnCheckedChangeListener(mCheckedChangeListener);
+        mCheckBox = (CheckBox) findViewById(R.id.setting_check_box);
+        mCheckBox.setOnCheckedChangeListener(mCheckedChangeListener);
     }
 
     @Override
     public void initialize(ListPreference preference) {
         super.initialize(preference);
         // Add content descriptions for the increment and decrement buttons.
-        mSwitch.setContentDescription(getContext().getResources().getString(
-                R.string.accessibility_switch, mPreference.getTitle()));
+        mCheckBox.setContentDescription(getContext().getResources().getString(
+                R.string.accessibility_check_box, mPreference.getTitle()));
     }
 
     @Override
     protected void updateView() {
-        mSwitch.setOnCheckedChangeListener(null);
+        mCheckBox.setOnCheckedChangeListener(null);
         if (mOverrideValue == null) {
-            mSwitch.setChecked(mIndex == 1);
+            mCheckBox.setChecked(mIndex == 1);
         } else {
             int index = mPreference.findIndexOfValue(mOverrideValue);
-            mSwitch.setChecked(index == 1);
+            mCheckBox.setChecked(index == 1);
         }
-        mSwitch.setOnCheckedChangeListener(mCheckedChangeListener);
+        mCheckBox.setOnCheckedChangeListener(mCheckedChangeListener);
     }
 
     @Override
@@ -77,6 +78,6 @@
     @Override
     public void setEnabled(boolean enable) {
         if (mTitle != null) mTitle.setEnabled(enable);
-        if (mSwitch != null) mSwitch.setEnabled(enable);
+        if (mCheckBox != null) mCheckBox.setEnabled(enable);
     }
 }
diff --git a/src/com/android/camera/ui/MoreSettingPopup.java b/src/com/android/camera/ui/MoreSettingPopup.java
index 0fbe79b..ab1baba 100644
--- a/src/com/android/camera/ui/MoreSettingPopup.java
+++ b/src/com/android/camera/ui/MoreSettingPopup.java
@@ -66,7 +66,7 @@
         private int getSettingLayoutId(ListPreference pref) {
 
             if (isOnOffPreference(pref)) {
-                return R.layout.in_line_setting_switch;
+                return R.layout.in_line_setting_check_box;
             }
             return R.layout.in_line_setting_menu;
         }
diff --git a/src/com/android/camera/ui/RenderOverlay.java b/src/com/android/camera/ui/RenderOverlay.java
index 1e747f4..ba25915 100644
--- a/src/com/android/camera/ui/RenderOverlay.java
+++ b/src/com/android/camera/ui/RenderOverlay.java
@@ -63,11 +63,13 @@
         if (renderer.handlesTouch()) {
             mTouchClients.add(0, renderer);
         }
+        renderer.layout(getLeft(), getTop(), getRight(), getBottom());
     }
 
     public void addRenderer(int pos, Renderer renderer) {
         mClients.add(pos, renderer);
         renderer.setOverlay(this);
+        renderer.layout(getLeft(), getTop(), getRight(), getBottom());
     }
 
     public void remove(Renderer renderer) {
@@ -136,9 +138,9 @@
         }
 
         @Override
-        public void layout(int left, int top, int right, int bottom) {
+        public void onLayout(boolean changed, int left, int top, int right, int bottom) {
             adjustPosition();
-            super.layout(left,  top, right, bottom);
+            super.onLayout(changed, left,  top, right, bottom);
             if (mClients == null) return;
             for (Renderer renderer : mClients) {
                 renderer.layout(left, top, right, bottom);
diff --git a/src/com/android/camera/ui/TimeIntervalPopup.java b/src/com/android/camera/ui/TimeIntervalPopup.java
index 8763284..b79663b 100644
--- a/src/com/android/camera/ui/TimeIntervalPopup.java
+++ b/src/com/android/camera/ui/TimeIntervalPopup.java
@@ -23,6 +23,7 @@
 import android.widget.Button;
 import android.widget.CompoundButton;
 import android.widget.NumberPicker;
+import android.widget.Switch;
 import android.widget.TextView;
 
 import com.android.camera.IconListPreference;
diff --git a/src/com/android/camera/ui/TimerSettingPopup.java b/src/com/android/camera/ui/TimerSettingPopup.java
new file mode 100644
index 0000000..06d7e4e
--- /dev/null
+++ b/src/com/android/camera/ui/TimerSettingPopup.java
@@ -0,0 +1,153 @@
+/*
+ * Copyright (C) 2012 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.ui;
+
+import java.util.Locale;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+import android.widget.CompoundButton;
+import android.widget.NumberPicker;
+import android.widget.Switch;
+import android.widget.TextView;
+
+import com.android.camera.ListPreference;
+import com.android.camera.R;
+
+/**
+ * This is a popup window that allows users to turn on/off time lapse feature,
+ * and to select a time interval for taking a time lapse video.
+ */
+
+public class TimerSettingPopup extends AbstractSettingPopup {
+    private static final String TAG = "TimerSettingPopup";
+    private NumberPicker mNumberSpinner;
+    private Switch mTimerSwitch;
+    private String[] mDurations;
+    private ListPreference mPreference;
+    private Listener mListener;
+    private Button mConfirmButton;
+    private TextView mHelpText;
+    private View mTimePicker;
+
+    static public interface Listener {
+        public void onListPrefChanged(ListPreference pref);
+    }
+
+    public void setSettingChangedListener(Listener listener) {
+        mListener = listener;
+    }
+
+    public TimerSettingPopup(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public void initialize(ListPreference preference) {
+        mPreference = preference;
+
+        // Set title.
+        mTitle.setText(mPreference.getTitle());
+
+        // Duration
+        CharSequence[] entries = mPreference.getEntryValues();
+        mDurations = new String[entries.length - 1];
+        Locale locale = getResources().getConfiguration().locale;
+        for (int i = 1; i < entries.length; i++)
+            mDurations[i-1] = String.format(locale, "%d",
+                    Integer.parseInt(entries[i].toString()));
+        int durationCount = mDurations.length;
+        mNumberSpinner = (NumberPicker) findViewById(R.id.duration);
+        mNumberSpinner.setMinValue(0);
+        mNumberSpinner.setMaxValue(durationCount - 1);
+        mNumberSpinner.setDisplayedValues(mDurations);
+        mNumberSpinner.setWrapSelectorWheel(false);
+
+        mTimerSwitch = (Switch) findViewById(R.id.timer_setting_switch);
+        mHelpText = (TextView) findViewById(R.id.set_timer_help_text);
+        mConfirmButton = (Button) findViewById(R.id.timer_set_button);
+        mTimePicker = findViewById(R.id.time_duration_picker);
+
+        // Disable focus on the spinners to prevent keyboard from coming up
+        mNumberSpinner.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);
+
+        mTimerSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+                setTimeSelectionEnabled(isChecked);
+            }
+        });
+        mConfirmButton.setOnClickListener(new View.OnClickListener() {
+            public void onClick(View v) {
+                updateInputState();
+            }
+        });
+    }
+
+    private void restoreSetting() {
+        int index = mPreference.findIndexOfValue(mPreference.getValue());
+        if (index == -1) {
+            Log.e(TAG, "Invalid preference value.");
+            mPreference.print();
+            throw new IllegalArgumentException();
+        } else if (index == 0) {
+            // default choice: time lapse off
+            mTimerSwitch.setChecked(false);
+            setTimeSelectionEnabled(false);
+        } else {
+            mTimerSwitch.setChecked(true);
+            setTimeSelectionEnabled(true);
+            mNumberSpinner.setValue(index - 1);
+        }
+    }
+
+    @Override
+    public void setVisibility(int visibility) {
+        if (visibility == View.VISIBLE) {
+            if (getVisibility() != View.VISIBLE) {
+                // Set the number pickers and on/off switch to be consistent
+                // with the preference
+                restoreSetting();
+            }
+        }
+        super.setVisibility(visibility);
+    }
+
+    protected void setTimeSelectionEnabled(boolean enabled) {
+        mHelpText.setVisibility(enabled ? GONE : VISIBLE);
+        mTimePicker.setVisibility(enabled ? VISIBLE : GONE);
+    }
+
+    @Override
+    public void reloadPreference() {
+    }
+
+    private void updateInputState() {
+        if (mTimerSwitch.isChecked()) {
+            int newId = mNumberSpinner.getValue() + 1;
+            mPreference.setValueIndex(newId);
+        } else {
+            mPreference.setValueIndex(0);
+        }
+
+        if (mListener != null) {
+            mListener.onListPrefChanged(mPreference);
+        }
+    }
+}