auto import from //branches/cupcake/...@130745
diff --git a/res/drawable/btn_camera_arrow_left.xml b/res/drawable/btn_camera_arrow_left.xml
index 9d7dcdd..494899b 100644
--- a/res/drawable/btn_camera_arrow_left.xml
+++ b/res/drawable/btn_camera_arrow_left.xml
@@ -16,12 +16,12 @@
 
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
 
-    <item android:state_window_focused="false"
-        android:drawable="@drawable/btn_camera_arrow_left_default" />
-
     <item android:state_pressed="true"
         android:drawable="@drawable/btn_camera_arrow_left_press" />
 
+    <item android:state_window_focused="true" android:state_focused="true"
+        android:drawable="@drawable/btn_camera_arrow_left_selected" />
+        
     <item 
         android:drawable="@drawable/btn_camera_arrow_left_default" />
 
diff --git a/res/drawable/btn_camera_arrow_left_selected.png b/res/drawable/btn_camera_arrow_left_selected.png
new file mode 100644
index 0000000..839704f
--- /dev/null
+++ b/res/drawable/btn_camera_arrow_left_selected.png
Binary files differ
diff --git a/res/drawable/btn_camera_arrow_right.xml b/res/drawable/btn_camera_arrow_right.xml
index cc6ee2d..1d0cc0c 100644
--- a/res/drawable/btn_camera_arrow_right.xml
+++ b/res/drawable/btn_camera_arrow_right.xml
@@ -16,12 +16,13 @@
 
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
 
-    <item android:state_window_focused="false"
-        android:drawable="@drawable/btn_camera_arrow_right_default" />
 
     <item android:state_pressed="true"
         android:drawable="@drawable/btn_camera_arrow_right_press" />
 
+    <item android:state_window_focused="true" android:state_focused="true"
+        android:drawable="@drawable/btn_camera_arrow_right_selected" />
+
     <item 
         android:drawable="@drawable/btn_camera_arrow_right_default" />
 
diff --git a/res/drawable/btn_camera_arrow_right_selected.png b/res/drawable/btn_camera_arrow_right_selected.png
new file mode 100644
index 0000000..630a606
--- /dev/null
+++ b/res/drawable/btn_camera_arrow_right_selected.png
Binary files differ
diff --git a/res/drawable/frame_thumbnail_default.png b/res/drawable/frame_thumbnail_default.png
index 50f2ecf..3db932e 100644
--- a/res/drawable/frame_thumbnail_default.png
+++ b/res/drawable/frame_thumbnail_default.png
Binary files differ
diff --git a/res/drawable/frame_thumbnail_pressed.png b/res/drawable/frame_thumbnail_pressed.png
index f46ad06..b15aea7 100644
--- a/res/drawable/frame_thumbnail_pressed.png
+++ b/res/drawable/frame_thumbnail_pressed.png
Binary files differ
diff --git a/res/drawable/frame_thumbnail_selected.png b/res/drawable/frame_thumbnail_selected.png
index 2d32aa2..408b14a 100644
--- a/res/drawable/frame_thumbnail_selected.png
+++ b/res/drawable/frame_thumbnail_selected.png
Binary files differ
diff --git a/res/drawable/ic_btn_camera_default_background.png b/res/drawable/ic_btn_camera_default_background.png
index 68bdefd..c37a86e 100644
--- a/res/drawable/ic_btn_camera_default_background.png
+++ b/res/drawable/ic_btn_camera_default_background.png
Binary files differ
diff --git a/res/drawable/ic_btn_camera_pressed_background.png b/res/drawable/ic_btn_camera_pressed_background.png
index e5543e1..8707b8a 100644
--- a/res/drawable/ic_btn_camera_pressed_background.png
+++ b/res/drawable/ic_btn_camera_pressed_background.png
Binary files differ
diff --git a/res/drawable/ic_btn_camera_selected_background.png b/res/drawable/ic_btn_camera_selected_background.png
index 0d4ff1a..a6bbdb1 100644
--- a/res/drawable/ic_btn_camera_selected_background.png
+++ b/res/drawable/ic_btn_camera_selected_background.png
Binary files differ
diff --git a/res/drawable/ic_camera_bar_indicator_record_combo.xml b/res/drawable/ic_camera_bar_indicator_record_combo.xml
deleted file mode 100644
index 0b01f2e..0000000
--- a/res/drawable/ic_camera_bar_indicator_record_combo.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-  
-          http://www.apache.org/licenses/LICENSE-2.0
-  
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_pressed="true"
-        android:drawable="@drawable/ic_camera_bar_indicator_record_pressed" />
-    <item android:state_window_focused="true" android:state_focused="true"
-        android:drawable="@drawable/ic_camera_bar_indicator_record_selected" />
-    <item android:drawable="@drawable/ic_camera_bar_indicator_record" />
-
-</selector>
diff --git a/res/drawable/ic_camera_bar_indicator_record_pressed.png b/res/drawable/ic_camera_bar_indicator_record_pressed.png
deleted file mode 100644
index 517a973..0000000
--- a/res/drawable/ic_camera_bar_indicator_record_pressed.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/ic_camera_bar_indicator_record_selected.png b/res/drawable/ic_camera_bar_indicator_record_selected.png
deleted file mode 100644
index 4965401..0000000
--- a/res/drawable/ic_camera_bar_indicator_record_selected.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/popup_camera_toast.9.png b/res/drawable/popup_camera_toast.9.png
deleted file mode 100644
index c1f0c1f..0000000
--- a/res/drawable/popup_camera_toast.9.png
+++ /dev/null
Binary files differ
diff --git a/res/layout/camera.xml b/res/layout/camera.xml
index 46eba7f..340a08c 100644
--- a/res/layout/camera.xml
+++ b/res/layout/camera.xml
@@ -32,7 +32,7 @@
 		android:visibility="invisible" />
 
     <com.android.camera.ShutterButton
-        android:id="@+id/mode_indicator"
+        android:id="@+id/shutter_button"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:src="@drawable/ic_camera_indicator_photo"
@@ -42,7 +42,7 @@
         android:layout_alignParentRight="true"
         android:layout_alignParentTop="true"
         android:layout_marginRight="50dip"
-        android:layout_marginTop="10dip"
+        android:layout_marginTop="12dip"
         android:scaleType="center" />
 
     <ImageView
@@ -50,33 +50,46 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:src="@drawable/ic_camera_indicator_auto_focus_green"
-        android:layout_alignLeft="@id/mode_indicator"
-        android:layout_alignTop="@id/mode_indicator"
+        android:layout_alignLeft="@id/shutter_button"
+        android:layout_alignTop="@id/shutter_button"
         android:layout_marginLeft="39dip"
         android:layout_marginTop="16dip"
         android:scaleType="center"
         android:visibility="gone" />
+        
+	<LinearLayout
+		android:visibility="gone"
+		android:id="@+id/post_picture_panel"
+		android:layout_alignBottom="@id/shutter_button"
+		android:layout_toLeftOf="@id/shutter_button"
+        android:layout_marginRight="27dip"
+		android:layout_width="wrap_content" 
+		android:layout_height="wrap_content"
+		android:orientation="horizontal">
+
+		<com.android.camera.ActionMenuButton
+			android:id="@+id/attach"
+			android:drawableTop="@drawable/ic_menu_attach"
+			android:text="@string/camera_attach"
+			style="@style/OnscreenActionIcon"
+		/>
+		<com.android.camera.ActionMenuButton
+			android:id="@+id/cancel"
+			android:drawableTop="@drawable/ic_menu_cancel"
+			android:text="@string/camera_cancel"
+			style="@style/OnscreenActionIcon"
+		/>
+	</LinearLayout>
     
     <ImageView
+		android:visibility="gone"
 	    android:id="@+id/last_picture_button"
-		android:layout_width="75dip"
-		android:layout_height="75dip"
+		android:layout_width="72dip"
+		android:layout_height="72dip"
 		android:clickable="true"
 		android:focusable="true"
-        android:layout_alignParentLeft="true"
-        android:layout_alignParentBottom="true"
-        android:layout_marginLeft="10dip"
-        android:layout_marginBottom="10dip" />
-    
-    <TextView
-		android:id="@+id/hint_toast"
-		android:layout_alignParentRight="true"
-		android:layout_alignParentTop="true"
-		android:background="@drawable/popup_camera_toast"
-		android:layout_width="200dip"
-		android:layout_height="wrap_content"
-		android:gravity="center"
-		android:text="@string/camera_button_hint"
-		android:textSize="18sp" />
+		android:layout_alignTop="@id/shutter_button"
+		android:layout_toLeftOf="@id/shutter_button"
+        android:layout_marginRight="20dip" />
 </RelativeLayout>
 
diff --git a/res/layout/video_camera.xml b/res/layout/video_camera.xml
index 0ffaf5a..e853e02 100644
--- a/res/layout/video_camera.xml
+++ b/res/layout/video_camera.xml
@@ -40,8 +40,8 @@
     		android:visibility="invisible" 
     />
 
-    <ImageView
-        android:id="@+id/mode_indicator"
+    <com.android.camera.ShutterButton
+        android:id="@+id/shutter_button"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:src="@drawable/ic_camera_indicator_video"
@@ -50,7 +50,7 @@
 		android:focusable="true"
         android:layout_alignParentRight="true"
         android:layout_alignParentTop="true"
-        android:layout_marginRight="50dip"
+        android:layout_marginRight="55dip"
         android:layout_marginTop="10dip"
         android:scaleType="center"/>
 
@@ -61,8 +61,8 @@
         android:id="@+id/recording_time"
         android:layout_width="90dip"
         android:layout_height="wrap_content"
-        android:layout_toLeftOf="@id/mode_indicator"
-        android:layout_alignTop="@id/mode_indicator"
+        android:layout_toLeftOf="@id/shutter_button"
+        android:layout_alignTop="@id/shutter_button"
         android:layout_marginTop="20dip"
         android:layout_marginRight="6dip"
         android:paddingRight="2dip"
@@ -75,25 +75,13 @@
         android:textSize="20dip"
         android:textStyle="bold"
         android:visibility="gone"/>
-        
-    <TextView
-    		android:id="@+id/hint_toast"
-    		android:layout_alignParentRight="true"
-    	    android:layout_alignParentTop="true"
-	    	android:background="@drawable/popup_camera_toast"
-            android:layout_width="200dip"
-            android:layout_height="wrap_content"
-            android:gravity="center"
-            android:text="@string/video_camera_button_hint"
-            android:textSize="18sp"/>
 
 	<LinearLayout
 			android:visibility="gone"
 			android:id="@+id/post_picture_panel"
-			android:layout_alignTop="@id/mode_indicator"
-			android:layout_toLeftOf="@id/mode_indicator"
-			android:paddingLeft="7dip"
-			android:paddingRight="15dip"
+			android:layout_alignTop="@id/shutter_button"
+			android:layout_toLeftOf="@id/shutter_button"
+            android:layout_marginRight="27dip"
 			android:layout_width="wrap_content" 
 			android:layout_height="wrap_content"
 			android:orientation="horizontal">
@@ -101,40 +89,30 @@
 		<com.android.camera.ActionMenuButton
 			android:id="@+id/play"
 			android:drawableTop="@drawable/ic_menu_camera_play"
-			android:layout_width="wrap_content"
-			android:layout_height="wrap_content"
 			android:text="@string/camera_play"
 			style="@style/OnscreenActionIcon"
 		/>
 		<com.android.camera.ActionMenuButton
 			android:id="@+id/share"
 			android:drawableTop="@drawable/ic_menu_share"
-			android:layout_width="wrap_content"
-			android:layout_height="wrap_content"
 			android:text="@string/camera_share"
 			style="@style/OnscreenActionIcon"
 		/>
 		<com.android.camera.ActionMenuButton
 			android:id="@+id/discard"
 			android:drawableTop="@drawable/ic_menu_delete"
-			android:layout_width="fill_parent"
-			android:layout_height="fill_parent"
 			android:text="@string/camera_toss"
 			style="@style/OnscreenActionIcon"
 		/>
 		<com.android.camera.ActionMenuButton
 			android:id="@+id/attach"
 			android:drawableTop="@drawable/ic_menu_attach"
-			android:layout_width="wrap_content"
-			android:layout_height="wrap_content"
 			android:text="@string/camera_attach"
 			style="@style/OnscreenActionIcon"
 		/>
 		<com.android.camera.ActionMenuButton
 			android:id="@+id/cancel"
 			android:drawableTop="@drawable/ic_menu_cancel"
-			android:layout_width="wrap_content"
-			android:layout_height="wrap_content"
 			android:text="@string/camera_cancel"
 			style="@style/OnscreenActionIcon"
 		/>
diff --git a/res/layout/viewimage.xml b/res/layout/viewimage.xml
index 6ba66d1..8d52ea1 100644
--- a/res/layout/viewimage.xml
+++ b/res/layout/viewimage.xml
@@ -76,15 +76,27 @@
 		</view>
 	</AbsoluteLayout>
 	
+	<ImageView
+        android:visibility="gone"
+		android:id="@+id/shutter_button"
+		android:layout_width="wrap_content"
+		android:layout_height="wrap_content"
+		android:src="@drawable/ic_camera_indicator_photo"
+		android:background="@drawable/ic_btn_camera_background"
+		android:clickable="true"
+		android:focusable="true"
+        android:layout_alignParentRight="true"
+        android:layout_alignParentTop="true"
+        android:layout_marginRight="50dip"
+        android:layout_marginTop="12dip"
+		android:scaleType="center"/>
+	
     <LinearLayout
             android:visibility="gone"
             android:id="@+id/action_icon_panel"
-            android:layout_alignParentTop="true"
-            android:layout_alignParentRight="true"
-            android:paddingLeft="7dip"
-            android:paddingRight="18dip"
-            android:paddingTop="6dip"
-            android:paddingBottom="6dip"
+			android:layout_alignBottom="@id/shutter_button"
+			android:layout_toLeftOf="@id/shutter_button"
+            android:layout_marginRight="27dip"
             android:layout_width="wrap_content" 
             android:layout_height="wrap_content"
             android:orientation="horizontal">
@@ -92,66 +104,40 @@
         <com.android.camera.ActionMenuButton
             android:id="@+id/gallery"
             android:drawableTop="@drawable/ic_menu_gallery"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
             android:text="@string/camera_gallery"
             style="@style/OnscreenActionIcon"
         />
         <com.android.camera.ActionMenuButton
             android:id="@+id/setas"
             android:drawableTop="@drawable/ic_menu_set_as"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
             android:text="@string/camera_set"
             style="@style/OnscreenActionIcon"
         />
         <com.android.camera.ActionMenuButton
             android:id="@+id/share"
             android:drawableTop="@drawable/ic_menu_share"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
             android:text="@string/camera_share"
             style="@style/OnscreenActionIcon"
         />
         <com.android.camera.ActionMenuButton
             android:id="@+id/discard"
             android:drawableTop="@drawable/ic_menu_delete"
-            android:layout_width="fill_parent"
-            android:layout_height="fill_parent"
             android:text="@string/camera_toss"
             style="@style/OnscreenActionIcon"
         />
         <com.android.camera.ActionMenuButton
             android:id="@+id/attach"
             android:drawableTop="@drawable/ic_menu_attach"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
             android:text="@string/camera_attach"
             style="@style/OnscreenActionIcon"
         />
         <com.android.camera.ActionMenuButton
             android:id="@+id/cancel"
             android:drawableTop="@drawable/ic_menu_cancel"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
             android:text="@string/camera_cancel"
             style="@style/OnscreenActionIcon"
         />
-        <ImageView
-			android:id="@+id/mode_indicator"
-			android:layout_width="wrap_content"
-			android:layout_height="wrap_content"
-			android:src="@drawable/ic_camera_indicator_photo"
-			android:background="@drawable/ic_btn_camera_background"
-			android:clickable="true"
-			android:focusable="true"
-			android:layout_alignParentRight="true"
-			android:layout_alignParentTop="true"
-			android:layout_marginRight="5dip"
-			android:layout_marginTop="15dip"
-			android:scaleType="center"/>
     </LinearLayout>
-	
 	<ImageView android:id="@+id/prev_image"
 		android:layout_width="wrap_content" android:layout_height="wrap_content"
 		android:layout_alignParentLeft="true"
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 705dbf2..8062838 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -29,6 +29,8 @@
     <string name="wait">"Čekejte prosím..."</string>
     <string name="no_storage">"Než začnete používat fotoaparát, vložte kartu SD."</string>
     <string name="not_enough_space">"Vaše karta SD je plná."</string>
+    <!-- no translation found for preparing_sd (2914969119574812666) -->
+    <skip />
     <string name="wallpaper">"Nastavování tapety, čekejte prosím..."</string>
     <string name="savingImage">"Ukládání fotografie..."</string>
     <string name="runningFaceDetection">"Čekejte prosím..."</string>
@@ -64,21 +66,22 @@
     <string name="camera_gallery_photos_text">"Galerie"</string>
     <string name="camera_pick_wallpaper">"Fotografie"</string>
     <string name="camera_setas_wallpaper">"Tapeta"</string>
-    <string name="camera_setas_wallpaper_drm">"Zakoupené fotografie"</string>
-    <string name="camera_selectphoto">"Vybrat tuto fotografii"</string>
-    <string name="camera_takenewphoto">"Pořídit novou fotografii"</string>
     <string name="pref_gallery_category">"Obecné nastavení"</string>
     <string name="pref_slideshow_category">"Nastavení prezentace"</string>
     <string name="pref_camera_general_settings_category">"Obecné nastavení"</string>
-    <string name="pref_gallery_size_title">"Velikost fotografie"</string>
-    <string name="pref_gallery_size_summary">"Vyberte velikost zobrazených fotografií"</string>
+    <!-- no translation found for pref_gallery_size_title (1363406603879434418) -->
+    <skip />
+    <!-- no translation found for pref_gallery_size_summary (8179967445295243638) -->
+    <skip />
     <string name="pref_gallery_size_dialogtitle">"Velikost fotografie"</string>
   <string-array name="pref_gallery_size_choices">
     <item>"Velké"</item>
     <item>"Malé"</item>
   </string-array>
-    <string name="pref_gallery_sort_title">"Řazení fotografií"</string>
-    <string name="pref_gallery_sort_summary">"Vyberte pořadí fotografií"</string>
+    <!-- no translation found for pref_gallery_sort_title (7447949250045443386) -->
+    <skip />
+    <!-- no translation found for pref_gallery_sort_summary (6644398051645595214) -->
+    <skip />
     <string name="pref_gallery_sort_dialogtitle">"Řazení fotografií"</string>
   <string-array name="pref_gallery_sort_choices">
     <item>"Od nejnovějších"</item>
@@ -107,8 +110,6 @@
     <string name="pref_gallery_slideshow_shuffle_summary">"Zobrazit fotografie v náhodném pořadí"</string>
     <string name="pref_camera_recordlocation_title">"K fotografiím ukládat místo pořízení"</string>
     <string name="pref_camera_recordlocation_summary">"V datech fotografie zaznamenat místo pořízení"</string>
-    <string name="pref_camera_postpicturemenu_title">"Po pořízení obrázku zobrazit výzvu"</string>
-    <string name="pref_camera_postpicturemenu_summary">"Po pořízení fotografie zobrazit nabídku činností (uložit, smazat, ...)"</string>
     <string name="pref_camera_videoquality_category">"Kvalita videa"</string>
     <!-- no translation found for pref_camera_videoquality_title (3836197291744160920) -->
     <skip />
@@ -119,7 +120,8 @@
     <!-- no translation found for image_gallery_NoImageView_text (409595259802877447) -->
     <skip />
     <string name="pref_gallery_confirm_delete_title">"Potvrdit smazání"</string>
-    <string name="pref_gallery_confirm_delete_summary">"Před smazáním fotografií zobrazit potvrzení"</string>
+    <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) -->
+    <skip />
     <string name="details_panel_title">"Podrobnosti"</string>
     <string name="details_file_size">"Velikost souboru:"</string>
     <string name="details_image_resolution">"Rozlišení:"</string>
@@ -151,8 +153,6 @@
     <string name="context_menu_header">"Možnosti fotografií"</string>
     <string name="video_context_menu_header">"Možnosti videa"</string>
     <string name="multiface_crop_help">"Začněte klepnutím na obličej."</string>
-    <string name="camera_button_hint">"Chcete-li pořídit fotografii, stiskněte tlačítko pro fotografování."</string>
-    <string name="video_camera_button_hint">"Chcete-li zaznamenat video, stiskněte spoušť."</string>
     <string name="photos_gallery_title">"Galerie"</string>
     <string name="pick_photos_gallery_title">"Vyberte fotografii"</string>
     <string name="videos_gallery_title">"Galerie"</string>
@@ -163,10 +163,6 @@
     <string name="sendVideo">"Sdílet video pomocí"</string>
     <string name="movieviewlabel">"Filmy"</string>
     <string name="loading_video">"Načítání videa..."</string>
-    <string name="picture_saved">"Fotografie byla uložena na kartu SD."</string>
-    <string name="picture_deleted">"Fotografie byla odstraněna."</string>
-    <string name="video_saved">"Video bylo uloženo na kartu SD."</string>
-    <string name="video_deleted">"Video bylo smazáno."</string>
     <string name="spaceIsLow_title">"Dochází volné místo"</string>
     <string name="spaceIsLow_content">"Na vaší kartě SD je málo místa. Změňte nastavení kvality nebo smažte položky z Galerie."</string>
     <!-- no translation found for resume_playing_title (8996677350649355013) -->
@@ -177,4 +173,6 @@
     <skip />
     <!-- no translation found for resume_playing_restart (5471008499835769292) -->
     <skip />
+    <!-- no translation found for gadget_title (259405922673466798) -->
+    <skip />
 </resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 06a2588..12a4f88 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -29,6 +29,8 @@
     <string name="wait">"Bitte warten..."</string>
     <string name="no_storage">"Legen Sie vor Verwendung der Kamera eine SD-Karte ein."</string>
     <string name="not_enough_space">"Ihre SD-Karte ist voll."</string>
+    <!-- no translation found for preparing_sd (2914969119574812666) -->
+    <skip />
     <string name="wallpaper">"Hintergrund wird eingestellt, bitte warten..."</string>
     <string name="savingImage">"Bild wird gespeichert..."</string>
     <string name="runningFaceDetection">"Bitte warten..."</string>
@@ -64,21 +66,22 @@
     <string name="camera_gallery_photos_text">"Galerie"</string>
     <string name="camera_pick_wallpaper">"Bilder"</string>
     <string name="camera_setas_wallpaper">"Hintergrund"</string>
-    <string name="camera_setas_wallpaper_drm">"Gekaufte Bilder"</string>
-    <string name="camera_selectphoto">"Dieses Bild auswählen"</string>
-    <string name="camera_takenewphoto">"Neues Bild aufnehmen"</string>
     <string name="pref_gallery_category">"Allgemeine Einstellungen"</string>
     <string name="pref_slideshow_category">"Einstellungen für Diashow"</string>
     <string name="pref_camera_general_settings_category">"Allgemeine Einstellungen"</string>
-    <string name="pref_gallery_size_title">"Bildgröße"</string>
-    <string name="pref_gallery_size_summary">"Anzeigegröße für Bilder auswählen"</string>
+    <!-- no translation found for pref_gallery_size_title (1363406603879434418) -->
+    <skip />
+    <!-- no translation found for pref_gallery_size_summary (8179967445295243638) -->
+    <skip />
     <string name="pref_gallery_size_dialogtitle">"Bildgröße"</string>
   <string-array name="pref_gallery_size_choices">
     <item>"Groß"</item>
     <item>"Klein"</item>
   </string-array>
-    <string name="pref_gallery_sort_title">"Sortierreihenfolge für Bilder"</string>
-    <string name="pref_gallery_sort_summary">"Sortierreihenfolge für Bilder auswählen"</string>
+    <!-- no translation found for pref_gallery_sort_title (7447949250045443386) -->
+    <skip />
+    <!-- no translation found for pref_gallery_sort_summary (6644398051645595214) -->
+    <skip />
     <string name="pref_gallery_sort_dialogtitle">"Sortierreihenfolge für Bilder"</string>
   <string-array name="pref_gallery_sort_choices">
     <item>"Neue zuerst"</item>
@@ -107,8 +110,6 @@
     <string name="pref_gallery_slideshow_shuffle_summary">"Bilder in zufälliger Reihenfolge anzeigen"</string>
     <string name="pref_camera_recordlocation_title">"Aufnahmeort in Bildern speichern"</string>
     <string name="pref_camera_recordlocation_summary">"Aufnahmeort in Bilddaten speichern"</string>
-    <string name="pref_camera_postpicturemenu_title">"Eingabeaufforderung nach Aufnahme"</string>
-    <string name="pref_camera_postpicturemenu_summary">"Aktionsmenü (Speichern, Löschen...) nach Aufnahme anzeigen"</string>
     <string name="pref_camera_videoquality_category">"Videoqualität"</string>
     <!-- no translation found for pref_camera_videoquality_title (3836197291744160920) -->
     <skip />
@@ -119,7 +120,8 @@
     <!-- no translation found for image_gallery_NoImageView_text (409595259802877447) -->
     <skip />
     <string name="pref_gallery_confirm_delete_title">"Löschvorgang bestätigen"</string>
-    <string name="pref_gallery_confirm_delete_summary">"Bestätigung vor dem Löschen von Bildern anzeigen"</string>
+    <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) -->
+    <skip />
     <string name="details_panel_title">"Details"</string>
     <string name="details_file_size">"Dateigröße:"</string>
     <string name="details_image_resolution">"Auflösung:"</string>
@@ -151,8 +153,6 @@
     <string name="context_menu_header">"Bildoptionen"</string>
     <string name="video_context_menu_header">"Videooptionen"</string>
     <string name="multiface_crop_help">"Tippen Sie zum Beginnen auf ein Gesicht."</string>
-    <string name="camera_button_hint">"Drücken Sie zum Fotografieren auf die Aufnahmetaste."</string>
-    <string name="video_camera_button_hint">"Drücken Sie die Schaltfläche für die Aufnahme, um ein Video aufzuzeichnen."</string>
     <string name="photos_gallery_title">"Galerie"</string>
     <string name="pick_photos_gallery_title">"Bild auswählen"</string>
     <string name="videos_gallery_title">"Galerie"</string>
@@ -163,10 +163,6 @@
     <string name="sendVideo">"Video weiterleiten via"</string>
     <string name="movieviewlabel">"Filme"</string>
     <string name="loading_video">"Video wird geladen..."</string>
-    <string name="picture_saved">"Bild auf SD-Karte gespeichert."</string>
-    <string name="picture_deleted">"Bild gelöscht."</string>
-    <string name="video_saved">"Video auf SD-Karte gespeichert."</string>
-    <string name="video_deleted">"Video gelöscht."</string>
     <string name="spaceIsLow_title">"Geringer Speicherplatz"</string>
     <string name="spaceIsLow_content">"Auf Ihrer SD-Karte ist nicht mehr genügend Speicherplatz vorhanden. Ändern Sie die Qualitätseinstellung oder löschen Sie Elemente aus der Galerie."</string>
     <!-- no translation found for resume_playing_title (8996677350649355013) -->
@@ -177,4 +173,6 @@
     <skip />
     <!-- no translation found for resume_playing_restart (5471008499835769292) -->
     <skip />
+    <!-- no translation found for gadget_title (259405922673466798) -->
+    <skip />
 </resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
deleted file mode 100644
index 9a382bc..0000000
--- a/res/values-es-rUS/strings.xml
+++ /dev/null
@@ -1,140 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- no translation found for all_images (7177582020160054334) -->
-    <skip />
-    <string name="camera_label">"Cámara"</string>
-    <string name="gallery_picker_label">"Álbumes"</string>
-    <!-- no translation found for gallery_camera_bucket_name (8410686962557494439) -->
-    <skip />
-    <!-- no translation found for switch_to_video_lable (1350915759804484157) -->
-    <skip />
-    <!-- no translation found for switch_to_camera_lable (1823306882227066007) -->
-    <skip />
-    <string name="crop_label">"Recortar imagen"</string>
-    <string name="view_label">"Ver imagen"</string>
-    <string name="preferences_label">"Configuración de la cámara"</string>
-    <string name="wait">"Por favor, espere…"</string>
-    <string name="no_storage">"Inserte una tarjeta SD antes de usar la cámara"</string>
-    <string name="not_enough_space">"Su tarjeta de almacenamiento está llena"</string>
-    <string name="wallpaper">"Estableciendo papel tapiz. Por favor, espere…"</string>
-    <string name="savingImage">"Guardando imagen"</string>
-    <string name="runningFaceDetection">"Por favor, espere…"</string>
-    <!-- no translation found for flip_orientation (2488284515852888409) -->
-    <skip />
-    <string name="settings">"Configuración"</string>
-    <!-- no translation found for view (4639715088471766970) -->
-    <skip />
-    <string name="details">"Detalles"</string>
-    <string name="rotate">"Girar"</string>
-    <string name="rotate_left">"Girar a la izquierda"</string>
-    <string name="rotate_right">"Girar a la derecha"</string>
-    <string name="slide_show">"Presentación de diapositivas"</string>
-    <string name="crop_save_text">"Guardar"</string>
-    <string name="crop_discard_text">"Descartar"</string>
-    <!-- no translation found for camera_keep (4046418310305917657) -->
-    <skip />
-    <!-- no translation found for confirm_delete_title (8942471980646707642) -->
-    <skip />
-    <!-- no translation found for confirm_delete_message (6944545476499253074) -->
-    <skip />
-    <string name="camera_toss">"Eliminar"</string>
-    <string name="camera_share">"Compartir"</string>
-    <string name="camera_set">"Establecer como…"</string>
-    <!-- no translation found for camera_play (6388821030721929966) -->
-    <skip />
-    <string name="camera_crop">"Recorte automático"</string>
-    <string name="camera_tossing">"Eliminando…"</string>
-    <string name="no_way_to_share_image">"Esta imagen no se puede guardar"</string>
-    <string name="no_way_to_share_video">"Este vídeo no se puede compartir"</string>
-    <string name="camera_gallery_photos_text">"Imágenes"</string>
-    <!-- no translation found for camera_pick_wallpaper (2052155470431167023) -->
-    <skip />
-    <string name="camera_setas_wallpaper">"Papel tapiz"</string>
-    <!-- no translation found for camera_setas_wallpaper_drm (787462863614664620) -->
-    <skip />
-    <string name="camera_selectphoto">"Seleccionar esta imagen"</string>
-    <string name="camera_takenewphoto">"Capturar nueva imagen"</string>
-    <string name="pref_gallery_category">"Vista de álbum de imágenes"</string>
-    <string name="pref_slideshow_category">"Presentación de diapositivas"</string>
-    <!-- no translation found for pref_camera_general_settings_category (1720434593482716214) -->
-    <skip />
-    <string name="pref_gallery_size_title">"Tamaño de imagen"</string>
-    <string name="pref_gallery_size_summary">"Seleccione el tamaño de visualización de las imágenes en los álbumes"</string>
-    <string name="pref_gallery_size_dialogtitle">"Tamaño de imagen"</string>
-    <!-- no translation found for pref_gallery_size_choices:0 (3341375119334343613) -->
-    <!-- no translation found for pref_gallery_size_choices:1 (979877976111629768) -->
-    <string name="pref_gallery_sort_title">"Orden de las imágenes"</string>
-    <string name="pref_gallery_sort_summary">"Seleccionar el orden de las imágenes en los álbumes"</string>
-    <string name="pref_gallery_sort_dialogtitle">"Orden de las imágenes"</string>
-    <!-- no translation found for pref_gallery_sort_choices:0 (2009184885742004467) -->
-    <!-- no translation found for pref_gallery_sort_choices:1 (7253524441061782381) -->
-    <string name="pref_gallery_slideshow_interval_title">"Intervalo en presentación de diapositivas"</string>
-    <string name="pref_gallery_slideshow_interval_summary">"Seleccione el intervalo entre diapositiva y diapositiva en la presentación"</string>
-    <string name="pref_gallery_slideshow_interval_dialogtitle">"Intervalo en presentación de diapositivas"</string>
-    <!-- no translation found for pref_gallery_slideshow_interval_choices:0 (3293392256331071955) -->
-    <!-- no translation found for pref_gallery_slideshow_interval_choices:1 (6762163459545768561) -->
-    <!-- no translation found for pref_gallery_slideshow_interval_choices:2 (3999753648109312132) -->
-    <string name="pref_gallery_slideshow_transition_title">"Transición de diapositivas"</string>
-    <string name="pref_gallery_slideshow_transition_summary">"Seleccione el efecto que desea usar al pasar de una diapositiva a otra"</string>
-    <string name="pref_gallery_slideshow_transition_dialogtitle">"Transición de diapositivas"</string>
-    <!-- no translation found for pref_gallery_slideshow_transition_choices:0 (1917959322875321005) -->
-    <!-- no translation found for pref_gallery_slideshow_transition_choices:1 (6508707204357284687) -->
-    <!-- no translation found for pref_gallery_slideshow_transition_choices:2 (5628742586795545287) -->
-    <!-- no translation found for pref_gallery_slideshow_transition_choices:3 (3350644769941682805) -->
-    <string name="pref_gallery_slideshow_repeat_title">"Repetir presentación de diapositivas"</string>
-    <string name="pref_gallery_slideshow_repeat_summary">"Seleccione esta opción para reproducir la presentación de diapositivas más de una vez"</string>
-    <string name="pref_gallery_slideshow_shuffle_title">"Mostrar diapositivas aleatoriamente"</string>
-    <string name="pref_gallery_slideshow_shuffle_summary">"Seleccione esta opción para mostrar las imágenes en orden aleatorio"</string>
-    <string name="pref_camera_recordlocation_title">"Registrar ubicación en imágenes"</string>
-    <string name="pref_camera_recordlocation_summary">"Seleccione esta opción para registrar automáticamente la ubicación en las imágenes"</string>
-    <!-- no translation found for pref_camera_postpicturemenu_title (6273327212867896720) -->
-    <skip />
-    <!-- no translation found for pref_camera_postpicturemenu_summary (7911699118676137405) -->
-    <skip />
-    <!-- no translation found for pref_camera_videoquality_category (7460987936373873411) -->
-    <skip />
-    <!-- no translation found for pref_camera_videoquality_title (2766490880685686012) -->
-    <skip />
-    <!-- no translation found for pref_camera_videoquality_summary (6370975165195010636) -->
-    <skip />
-    <!-- no translation found for pref_camera_videoquality_entry_0 (8088669040921661814) -->
-    <skip />
-    <!-- no translation found for pref_camera_videoquality_entry_1 (3505027746158170269) -->
-    <skip />
-    <!-- no translation found for pref_camera_videoquality_dialogtitle (1836746975783096625) -->
-    <skip />
-    <!-- no translation found for pref_camera_videocodec_category (907203894431470628) -->
-    <skip />
-    <!-- no translation found for pref_camera_videocodec_title (3330800694130697647) -->
-    <skip />
-    <!-- no translation found for pref_camera_videocodec_summary (8269173339100296159) -->
-    <skip />
-    <!-- no translation found for pref_camera_videocodec_dialogtitle (5759217298675791948) -->
-    <skip />
-    <!-- no translation found for pref_camera_videocodec_entry_0 (6259385536148037705) -->
-    <skip />
-    <!-- no translation found for pref_camera_videocodec_entry_1 (3178021263058501227) -->
-    <skip />
-    <string name="camerasettings">"Configuración"</string>
-    <string name="image_gallery_NoImageView_text">"Ninguna imagen"</string>
-    <!-- no translation found for pref_gallery_confirm_delete_title (201485251343856203) -->
-    <skip />
-    <!-- no translation found for pref_gallery_confirm_delete_summary (7235236977784533739) -->
-    <skip />
-    <string name="details_panel_title">"Detalles"</string>
-    <string name="details_file_size">"Tamaño de archivo:"</string>
-    <string name="details_image_resolution">"Resolución:"</string>
-    <string name="details_date_taken">"Fecha de captura:"</string>
-    <string name="context_menu_header">"Opciones de imagen"</string>
-    <string name="multiface_crop_help">"Seleccionar cara para empezar"</string>
-    <string name="camera_button_hint">"Pulse el botón Capturar para sacar una foto"</string>
-    <string name="photos_gallery_title">"Imágenes"</string>
-    <string name="pick_photos_gallery_title">"Seleccionar imagen"</string>
-    <!-- no translation found for loading_progress_format_string (4252016560676330797) -->
-    <skip />
-    <string name="sendImage">"Compartir esta imagen por"</string>
-    <!-- no translation found for setImage (6676791915351726249) -->
-    <skip />
-    <string name="sendVideo">"Compartir este vídeo por"</string>
-</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 0ef0a73..b826de9 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -29,6 +29,8 @@
     <string name="wait">"Por favor, espera..."</string>
     <string name="no_storage">"Antes de utilizar la cámara, debes insertar una tarjeta SD."</string>
     <string name="not_enough_space">"La tarjeta SD está llena."</string>
+    <!-- no translation found for preparing_sd (2914969119574812666) -->
+    <skip />
     <string name="wallpaper">"Estableciendo papel tapiz; por favor, espera..."</string>
     <string name="savingImage">"Guardando imagen..."</string>
     <string name="runningFaceDetection">"Por favor, espera..."</string>
@@ -64,21 +66,22 @@
     <string name="camera_gallery_photos_text">"Galería"</string>
     <string name="camera_pick_wallpaper">"Imágenes"</string>
     <string name="camera_setas_wallpaper">"Papel tapiz"</string>
-    <string name="camera_setas_wallpaper_drm">"Imágenes compradas"</string>
-    <string name="camera_selectphoto">"Seleccionar esta imagen"</string>
-    <string name="camera_takenewphoto">"Hacer otra fotografía"</string>
     <string name="pref_gallery_category">"Configuración general"</string>
     <string name="pref_slideshow_category">"Configuración de presentación"</string>
     <string name="pref_camera_general_settings_category">"Configuración general"</string>
-    <string name="pref_gallery_size_title">"Tamaño de imagen"</string>
-    <string name="pref_gallery_size_summary">"Seleccionar el tamaño de visualización de las imágenes"</string>
+    <!-- no translation found for pref_gallery_size_title (1363406603879434418) -->
+    <skip />
+    <!-- no translation found for pref_gallery_size_summary (8179967445295243638) -->
+    <skip />
     <string name="pref_gallery_size_dialogtitle">"Tamaño de imagen"</string>
   <string-array name="pref_gallery_size_choices">
     <item>"Grande"</item>
     <item>"Pequeña"</item>
   </string-array>
-    <string name="pref_gallery_sort_title">"Orden de imágenes"</string>
-    <string name="pref_gallery_sort_summary">"Seleccionar el orden de las imágenes"</string>
+    <!-- no translation found for pref_gallery_sort_title (7447949250045443386) -->
+    <skip />
+    <!-- no translation found for pref_gallery_sort_summary (6644398051645595214) -->
+    <skip />
     <string name="pref_gallery_sort_dialogtitle">"Ordenación de imágenes"</string>
   <string-array name="pref_gallery_sort_choices">
     <item>"Más recientes primero"</item>
@@ -107,8 +110,6 @@
     <string name="pref_gallery_slideshow_shuffle_summary">"Mostrar imágenes en orden aleatorio"</string>
     <string name="pref_camera_recordlocation_title">"Almacenar ubicación en imágenes"</string>
     <string name="pref_camera_recordlocation_summary">"Registrar ubicación en datos de imagen"</string>
-    <string name="pref_camera_postpicturemenu_title">"Mensaje tras la fotografía"</string>
-    <string name="pref_camera_postpicturemenu_summary">"Mostrar el menú de acción (guardar, eliminar...) tras realizar la fotografía"</string>
     <string name="pref_camera_videoquality_category">"Calidad de vídeo"</string>
     <!-- no translation found for pref_camera_videoquality_title (3836197291744160920) -->
     <skip />
@@ -119,7 +120,8 @@
     <!-- no translation found for image_gallery_NoImageView_text (409595259802877447) -->
     <skip />
     <string name="pref_gallery_confirm_delete_title">"Confirmar eliminaciones"</string>
-    <string name="pref_gallery_confirm_delete_summary">"Mostrar confirmación antes de eliminar imágenes"</string>
+    <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) -->
+    <skip />
     <string name="details_panel_title">"Detalles"</string>
     <string name="details_file_size">"Tamaño de archivo:"</string>
     <string name="details_image_resolution">"Resolución:"</string>
@@ -151,8 +153,6 @@
     <string name="context_menu_header">"Opciones de imagen"</string>
     <string name="video_context_menu_header">"Opciones de vídeo"</string>
     <string name="multiface_crop_help">"Selecciona una cara para empezar."</string>
-    <string name="camera_button_hint">"Pulsa el botón de captura para realizar la fotografía."</string>
-    <string name="video_camera_button_hint">"Pulsa el botón de captura para grabar un vídeo."</string>
     <string name="photos_gallery_title">"Galería"</string>
     <string name="pick_photos_gallery_title">"Seleccionar imagen"</string>
     <string name="videos_gallery_title">"Galería"</string>
@@ -163,10 +163,6 @@
     <string name="sendVideo">"Compartir vídeo a través de"</string>
     <string name="movieviewlabel">"Películas"</string>
     <string name="loading_video">"Cargando vídeo…"</string>
-    <string name="picture_saved">"La imagen se ha guardado en la tarjeta SD."</string>
-    <string name="picture_deleted">"La imagen se ha eliminado."</string>
-    <string name="video_saved">"El vídeo se ha guardado en la tarjeta SD."</string>
-    <string name="video_deleted">"El vídeo se ha eliminado"</string>
     <string name="spaceIsLow_title">"Poco espacio"</string>
     <string name="spaceIsLow_content">"No queda espacio en la tarjeta SD. Cambia la configuración de calidad o elimina elementos de la galería."</string>
     <!-- no translation found for resume_playing_title (8996677350649355013) -->
@@ -177,4 +173,6 @@
     <skip />
     <!-- no translation found for resume_playing_restart (5471008499835769292) -->
     <skip />
+    <!-- no translation found for gadget_title (259405922673466798) -->
+    <skip />
 </resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index f60340c..d2c6e3d 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -29,6 +29,8 @@
     <string name="wait">"Veuillez patienter..."</string>
     <string name="no_storage">"Veuillez insérer une carte SD avant d\'utiliser la caméra."</string>
     <string name="not_enough_space">"Votre carte SD est pleine."</string>
+    <!-- no translation found for preparing_sd (2914969119574812666) -->
+    <skip />
     <string name="wallpaper">"Configuration de l\'arrière-plan en cours. Veuillez patienter..."</string>
     <string name="savingImage">"Enregistrement de l\'image"</string>
     <string name="runningFaceDetection">"Veuillez patienter..."</string>
@@ -64,21 +66,22 @@
     <string name="camera_gallery_photos_text">"Galerie"</string>
     <string name="camera_pick_wallpaper">"Images"</string>
     <string name="camera_setas_wallpaper">"Arrière-plan"</string>
-    <string name="camera_setas_wallpaper_drm">"Images achetées"</string>
-    <string name="camera_selectphoto">"Sélectionner cette image"</string>
-    <string name="camera_takenewphoto">"Prendre une nouvelle photo"</string>
     <string name="pref_gallery_category">"Paramètres généraux"</string>
     <string name="pref_slideshow_category">"Paramètres du diaporama"</string>
     <string name="pref_camera_general_settings_category">"Paramètres généraux"</string>
-    <string name="pref_gallery_size_title">"Taille de l\'image"</string>
-    <string name="pref_gallery_size_summary">"Sélectionner la taille d\'affichage des images"</string>
+    <!-- no translation found for pref_gallery_size_title (1363406603879434418) -->
+    <skip />
+    <!-- no translation found for pref_gallery_size_summary (8179967445295243638) -->
+    <skip />
     <string name="pref_gallery_size_dialogtitle">"Taille de l\'image"</string>
   <string-array name="pref_gallery_size_choices">
     <item>"Grande"</item>
     <item>"Petite"</item>
   </string-array>
-    <string name="pref_gallery_sort_title">"Trier les images"</string>
-    <string name="pref_gallery_sort_summary">"Sélectionner l\'ordre de tri des images"</string>
+    <!-- no translation found for pref_gallery_sort_title (7447949250045443386) -->
+    <skip />
+    <!-- no translation found for pref_gallery_sort_summary (6644398051645595214) -->
+    <skip />
     <string name="pref_gallery_sort_dialogtitle">"Trier les images"</string>
   <string-array name="pref_gallery_sort_choices">
     <item>"Les plus récentes d\'abord"</item>
@@ -107,8 +110,6 @@
     <string name="pref_gallery_slideshow_shuffle_summary">"Afficher les images"</string>
     <string name="pref_camera_recordlocation_title">"Enregistrer un emplacement dans les images"</string>
     <string name="pref_camera_recordlocation_summary">"Enregistrer un emplacement dans les données d\'image"</string>
-    <string name="pref_camera_postpicturemenu_title">"Demander après la capture"</string>
-    <string name="pref_camera_postpicturemenu_summary">"Afficher l\'option de menu (enregistrer, supprimer, ...) après la capture"</string>
     <string name="pref_camera_videoquality_category">"Qualité vidéo"</string>
     <!-- no translation found for pref_camera_videoquality_title (3836197291744160920) -->
     <skip />
@@ -119,7 +120,8 @@
     <!-- no translation found for image_gallery_NoImageView_text (409595259802877447) -->
     <skip />
     <string name="pref_gallery_confirm_delete_title">"Confirmer les suppressions"</string>
-    <string name="pref_gallery_confirm_delete_summary">"Afficher la confirmation avant de supprimer les images"</string>
+    <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) -->
+    <skip />
     <string name="details_panel_title">"Détails"</string>
     <string name="details_file_size">"Taille du fichier :"</string>
     <string name="details_image_resolution">"Résolution :"</string>
@@ -151,8 +153,6 @@
     <string name="context_menu_header">"Options de l\'image"</string>
     <string name="video_context_menu_header">"Options vidéo"</string>
     <string name="multiface_crop_help">"Cliquez sur un visage pour commencer."</string>
-    <string name="camera_button_hint">"Appuyez sur Capture pour prendre la photo."</string>
-    <string name="video_camera_button_hint">"Appuyez sur le bouton Déclencher pour enregistrer une vidéo."</string>
     <string name="photos_gallery_title">"Galerie"</string>
     <string name="pick_photos_gallery_title">"Sélectionner l\'image"</string>
     <string name="videos_gallery_title">"Galerie"</string>
@@ -163,10 +163,6 @@
     <string name="sendVideo">"Partager la vidéo via"</string>
     <string name="movieviewlabel">"Films"</string>
     <string name="loading_video">"Chargement de la vidéo..."</string>
-    <string name="picture_saved">"Photo sauvegardée sur la carte SD."</string>
-    <string name="picture_deleted">"Photo supprimée."</string>
-    <string name="video_saved">"Vidéo enregistrée sur la carte SD."</string>
-    <string name="video_deleted">"Vidéo supprimée."</string>
     <string name="spaceIsLow_title">"L\'espace restant est faible"</string>
     <string name="spaceIsLow_content">"Votre carte SD est pleine. Modifiez le paramètre de qualité ou supprimez des éléments de la galerie."</string>
     <!-- no translation found for resume_playing_title (8996677350649355013) -->
@@ -177,4 +173,6 @@
     <skip />
     <!-- no translation found for resume_playing_restart (5471008499835769292) -->
     <skip />
+    <!-- no translation found for gadget_title (259405922673466798) -->
+    <skip />
 </resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 41ba4a3..15f6136 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -29,6 +29,8 @@
     <string name="wait">"Attendere..."</string>
     <string name="no_storage">"Per usare la fotocamera devi inserire una scheda SD."</string>
     <string name="not_enough_space">"La scheda SD è piena."</string>
+    <!-- no translation found for preparing_sd (2914969119574812666) -->
+    <skip />
     <string name="wallpaper">"Impostazione sfondo, attendi..."</string>
     <string name="savingImage">"Salvataggio foto..."</string>
     <string name="runningFaceDetection">"Attendere..."</string>
@@ -64,21 +66,22 @@
     <string name="camera_gallery_photos_text">"Galleria"</string>
     <string name="camera_pick_wallpaper">"Foto"</string>
     <string name="camera_setas_wallpaper">"Sfondo"</string>
-    <string name="camera_setas_wallpaper_drm">"Foto acquistate"</string>
-    <string name="camera_selectphoto">"Seleziona questa foto"</string>
-    <string name="camera_takenewphoto">"Scatta nuova foto"</string>
     <string name="pref_gallery_category">"Impostazioni generali"</string>
     <string name="pref_slideshow_category">"Impostazioni presentazione"</string>
     <string name="pref_camera_general_settings_category">"Impostazioni generali"</string>
-    <string name="pref_gallery_size_title">"Dimensioni foto"</string>
-    <string name="pref_gallery_size_summary">"Seleziona dimensioni di visualizz. delle foto"</string>
+    <!-- no translation found for pref_gallery_size_title (1363406603879434418) -->
+    <skip />
+    <!-- no translation found for pref_gallery_size_summary (8179967445295243638) -->
+    <skip />
     <string name="pref_gallery_size_dialogtitle">"Dimensioni foto"</string>
   <string-array name="pref_gallery_size_choices">
     <item>"Grandi"</item>
     <item>"Piccole"</item>
   </string-array>
-    <string name="pref_gallery_sort_title">"Ordine foto"</string>
-    <string name="pref_gallery_sort_summary">"Seleziona l\'ordine delle foto"</string>
+    <!-- no translation found for pref_gallery_sort_title (7447949250045443386) -->
+    <skip />
+    <!-- no translation found for pref_gallery_sort_summary (6644398051645595214) -->
+    <skip />
     <string name="pref_gallery_sort_dialogtitle">"Ordine foto"</string>
   <string-array name="pref_gallery_sort_choices">
     <item>"Da più recente"</item>
@@ -107,8 +110,6 @@
     <string name="pref_gallery_slideshow_shuffle_summary">"Mostra le foto in ordine casuale"</string>
     <string name="pref_camera_recordlocation_title">"Salva località nelle foto"</string>
     <string name="pref_camera_recordlocation_summary">"Registra località nei dati della foto"</string>
-    <string name="pref_camera_postpicturemenu_title">"Chiedi dopo scatto"</string>
-    <string name="pref_camera_postpicturemenu_summary">"Visualizza menu di azioni (salva, elimina etc.) dopo lo scatto"</string>
     <string name="pref_camera_videoquality_category">"Qualità video"</string>
     <!-- no translation found for pref_camera_videoquality_title (3836197291744160920) -->
     <skip />
@@ -119,7 +120,8 @@
     <!-- no translation found for image_gallery_NoImageView_text (409595259802877447) -->
     <skip />
     <string name="pref_gallery_confirm_delete_title">"Conferma eliminazioni"</string>
-    <string name="pref_gallery_confirm_delete_summary">"Mostra conferma prima di eliminare le foto"</string>
+    <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) -->
+    <skip />
     <string name="details_panel_title">"Dettagli"</string>
     <string name="details_file_size">"Dim. file:"</string>
     <string name="details_image_resolution">"Risoluzione:"</string>
@@ -151,8 +153,6 @@
     <string name="context_menu_header">"Opzioni foto"</string>
     <string name="video_context_menu_header">"Opzioni video"</string>
     <string name="multiface_crop_help">"Tocca un viso per iniziare."</string>
-    <string name="camera_button_hint">"Premi Scatta per scattare la foto."</string>
-    <string name="video_camera_button_hint">"Premi Registra per registrare il video."</string>
     <string name="photos_gallery_title">"Galleria"</string>
     <string name="pick_photos_gallery_title">"Seleziona foto"</string>
     <string name="videos_gallery_title">"Galleria"</string>
@@ -163,10 +163,6 @@
     <string name="sendVideo">"Condividi video via"</string>
     <string name="movieviewlabel">"Film"</string>
     <string name="loading_video">"Caricamento video..."</string>
-    <string name="picture_saved">"Foto salvata su scheda SD."</string>
-    <string name="picture_deleted">"Foto eliminata."</string>
-    <string name="video_saved">"Video salvato su scheda SD."</string>
-    <string name="video_deleted">"Video eliminato."</string>
     <string name="spaceIsLow_title">"Spazio in esaurimento"</string>
     <string name="spaceIsLow_content">"Lo spazio della scheda SD si sta esaurendo. Cambia l\'impostazione di qualità o elimina elementi nella galleria."</string>
     <!-- no translation found for resume_playing_title (8996677350649355013) -->
@@ -177,4 +173,6 @@
     <skip />
     <!-- no translation found for resume_playing_restart (5471008499835769292) -->
     <skip />
+    <!-- no translation found for gadget_title (259405922673466798) -->
+    <skip />
 </resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 0cc6f37..329e51b 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -29,6 +29,8 @@
     <string name="wait">"お待ちください..."</string>
     <string name="no_storage">"カメラを使用する前にSDカードを挿入してください。"</string>
     <string name="not_enough_space">"SDカードがいっぱいです。"</string>
+    <!-- no translation found for preparing_sd (2914969119574812666) -->
+    <skip />
     <string name="wallpaper">"壁紙を設定しています。しばらくお待ちください..."</string>
     <string name="savingImage">"写真を保存中..."</string>
     <string name="runningFaceDetection">"お待ちください..."</string>
@@ -64,21 +66,22 @@
     <string name="camera_gallery_photos_text">"ギャラリー"</string>
     <string name="camera_pick_wallpaper">"写真"</string>
     <string name="camera_setas_wallpaper">"壁紙"</string>
-    <string name="camera_setas_wallpaper_drm">"購入した写真"</string>
-    <string name="camera_selectphoto">"この写真を選択"</string>
-    <string name="camera_takenewphoto">"新しい写真を撮る"</string>
     <string name="pref_gallery_category">"全般設定"</string>
     <string name="pref_slideshow_category">"スライドショー設定"</string>
     <string name="pref_camera_general_settings_category">"全般設定"</string>
-    <string name="pref_gallery_size_title">"写真サイズ"</string>
-    <string name="pref_gallery_size_summary">"写真の表示サイズを選択"</string>
+    <!-- no translation found for pref_gallery_size_title (1363406603879434418) -->
+    <skip />
+    <!-- no translation found for pref_gallery_size_summary (8179967445295243638) -->
+    <skip />
     <string name="pref_gallery_size_dialogtitle">"写真サイズ"</string>
   <string-array name="pref_gallery_size_choices">
     <item>"大"</item>
     <item>"小"</item>
   </string-array>
-    <string name="pref_gallery_sort_title">"写真の並べ替え"</string>
-    <string name="pref_gallery_sort_summary">"写真の表示順を選択"</string>
+    <!-- no translation found for pref_gallery_sort_title (7447949250045443386) -->
+    <skip />
+    <!-- no translation found for pref_gallery_sort_summary (6644398051645595214) -->
+    <skip />
     <string name="pref_gallery_sort_dialogtitle">"写真の並べ替え"</string>
   <string-array name="pref_gallery_sort_choices">
     <item>"日付の新しい順"</item>
@@ -107,8 +110,6 @@
     <string name="pref_gallery_slideshow_shuffle_summary">"写真をランダムに表示"</string>
     <string name="pref_camera_recordlocation_title">"位置を写真に保存"</string>
     <string name="pref_camera_recordlocation_summary">"写真データに位置情報を記録します"</string>
-    <string name="pref_camera_postpicturemenu_title">"撮影後に確認"</string>
-    <string name="pref_camera_postpicturemenu_summary">"撮影後に操作メニュー (保存や削除など) を表示"</string>
     <string name="pref_camera_videoquality_category">"動画のクオリティ"</string>
     <!-- no translation found for pref_camera_videoquality_title (3836197291744160920) -->
     <skip />
@@ -119,7 +120,8 @@
     <!-- no translation found for image_gallery_NoImageView_text (409595259802877447) -->
     <skip />
     <string name="pref_gallery_confirm_delete_title">"削除を確認"</string>
-    <string name="pref_gallery_confirm_delete_summary">"写真を削除する前に確認メッセージを表示"</string>
+    <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) -->
+    <skip />
     <string name="details_panel_title">"詳細"</string>
     <string name="details_file_size">"ファイルサイズ:"</string>
     <string name="details_image_resolution">"解像度:"</string>
@@ -151,8 +153,6 @@
     <string name="context_menu_header">"写真オプション"</string>
     <string name="video_context_menu_header">"動画オプション"</string>
     <string name="multiface_crop_help">"顔を選択して開始します。"</string>
-    <string name="camera_button_hint">"写真を撮るには[撮影]ボタンを押してください。"</string>
-    <string name="video_camera_button_hint">"動画を録画するには[録画]ボタンを押してください。"</string>
     <string name="photos_gallery_title">"ギャラリー"</string>
     <string name="pick_photos_gallery_title">"写真を選択"</string>
     <string name="videos_gallery_title">"ギャラリー"</string>
@@ -163,10 +163,6 @@
     <string name="sendVideo">"動画を共有"</string>
     <string name="movieviewlabel">"映画"</string>
     <string name="loading_video">"動画を読み込み中..."</string>
-    <string name="picture_saved">"写真をSDカードに保存しました。"</string>
-    <string name="picture_deleted">"写真を削除しました。"</string>
-    <string name="video_saved">"動画をSDカードに保存しました。"</string>
-    <string name="video_deleted">"動画を削除しました。"</string>
     <string name="spaceIsLow_title">"空き容量が残り少なくなっています"</string>
     <string name="spaceIsLow_content">"SDカードの容量が足りません。クオリティ設定を変更するか、ギャラリーからアイテムを削除してください。"</string>
     <!-- no translation found for resume_playing_title (8996677350649355013) -->
@@ -177,4 +173,6 @@
     <skip />
     <!-- no translation found for resume_playing_restart (5471008499835769292) -->
     <skip />
+    <!-- no translation found for gadget_title (259405922673466798) -->
+    <skip />
 </resources>
diff --git a/res/values-ko/arrays.xml b/res/values-ko/arrays.xml
new file mode 100644
index 0000000..dfbf090
--- /dev/null
+++ b/res/values-ko/arrays.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for pref_camera_videoquality_entries:0 (4155278146225809483) -->
+    <!-- no translation found for pref_camera_videoquality_entries:1 (2439895494739176281) -->
+  <string-array name="pref_camera_videoquality_entryvalues">
+    <item>"0"</item>
+    <item>"1"</item>
+  </string-array>
+</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
new file mode 100644
index 0000000..72e8d2e
--- /dev/null
+++ b/res/values-ko/strings.xml
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="all_images">"모든 사진"</string>
+    <string name="all_videos">"모든 동영상"</string>
+    <string name="camera_label">"카메라"</string>
+    <string name="gallery_picker_label">"갤러리"</string>
+    <string name="gallery_camera_bucket_name">"카메라 사진"</string>
+    <string name="gallery_camera_videos_bucket_name">"카메라 동영상"</string>
+    <string name="switch_to_video_lable">"동영상으로 전환"</string>
+    <string name="switch_to_camera_lable">"카메라로 전환"</string>
+    <string name="crop_label">"사진 자르기"</string>
+    <string name="view_label">"사진 보기"</string>
+    <string name="preferences_label">"카메라 설정"</string>
+    <string name="wait">"잠시 기다려 주세요..."</string>
+    <string name="no_storage">"카메라를 사용하기 전에 먼저 SD 카드를 넣으세요."</string>
+    <string name="not_enough_space">"SD 카드가 꽉 찼습니다."</string>
+    <!-- no translation found for preparing_sd (2914969119574812666) -->
+    <skip />
+    <string name="wallpaper">"배경화면 설정 중. 잠시 기다려 주세요..."</string>
+    <string name="savingImage">"사진 저장 중..."</string>
+    <string name="runningFaceDetection">"잠시 기다려 주세요..."</string>
+    <string name="flip_orientation">"방향 바꾸기"</string>
+    <string name="settings">"설정"</string>
+    <string name="view">"보기"</string>
+    <string name="details">"상세정보"</string>
+    <string name="rotate">"회전"</string>
+    <string name="rotate_left">"왼쪽으로 회전"</string>
+    <string name="rotate_right">"오른쪽으로 회전"</string>
+    <string name="slide_show">"슬라이드쇼"</string>
+    <string name="capture_picture">"사진촬영"</string>
+    <string name="capture_video">"동영상 캡처"</string>
+    <string name="crop_save_text">"저장"</string>
+    <string name="crop_discard_text">"무시"</string>
+    <string name="confirm_delete_title">"삭제"</string>
+    <string name="confirm_delete_message">"사진이 삭제됩니다."</string>
+    <string name="confirm_delete_video_message">"동영상이 삭제됩니다."</string>
+    <string name="camera_toss">"삭제"</string>
+    <!-- no translation found for camera_gallery (815753042966032398) -->
+    <skip />
+    <string name="camera_share">"공유"</string>
+    <string name="camera_set">"사진 설정"</string>
+    <string name="camera_play">"재생"</string>
+    <!-- no translation found for camera_attach (4048659554893435232) -->
+    <skip />
+    <!-- no translation found for camera_cancel (8203341746672085747) -->
+    <skip />
+    <string name="camera_crop">"자르기"</string>
+    <string name="camera_tossing">"삭제 중..."</string>
+    <string name="no_way_to_share_image">"공유할 수 없는 사진입니다."</string>
+    <string name="no_way_to_share_video">"공유할 수 없는 동영상입니다."</string>
+    <string name="camera_gallery_photos_text">"갤러리"</string>
+    <string name="camera_pick_wallpaper">"사진"</string>
+    <string name="camera_setas_wallpaper">"배경화면"</string>
+    <string name="pref_gallery_category">"일반 설정"</string>
+    <string name="pref_slideshow_category">"슬라이드쇼 설정"</string>
+    <string name="pref_camera_general_settings_category">"일반 설정"</string>
+    <!-- no translation found for pref_gallery_size_title (1363406603879434418) -->
+    <skip />
+    <!-- no translation found for pref_gallery_size_summary (8179967445295243638) -->
+    <skip />
+    <string name="pref_gallery_size_dialogtitle">"사진 크기"</string>
+  <string-array name="pref_gallery_size_choices">
+    <item>"크게"</item>
+    <item>"작게"</item>
+  </string-array>
+    <!-- no translation found for pref_gallery_sort_title (7447949250045443386) -->
+    <skip />
+    <!-- no translation found for pref_gallery_sort_summary (6644398051645595214) -->
+    <skip />
+    <string name="pref_gallery_sort_dialogtitle">"사진 정렬"</string>
+  <string-array name="pref_gallery_sort_choices">
+    <item>"가장 최근 사진 먼저"</item>
+    <item>"가장 최근 사진 마지막에"</item>
+  </string-array>
+    <string name="pref_gallery_slideshow_interval_title">"슬라이드쇼 간격"</string>
+    <string name="pref_gallery_slideshow_interval_summary">"쇼에서 각 슬라이드를 표시할 시간 선택"</string>
+    <string name="pref_gallery_slideshow_interval_dialogtitle">"슬라이드쇼 간격"</string>
+  <string-array name="pref_gallery_slideshow_interval_choices">
+    <item>"2초"</item>
+    <item>"3초"</item>
+    <item>"4초"</item>
+  </string-array>
+    <string name="pref_gallery_slideshow_transition_title">"슬라이드쇼 화면전환"</string>
+    <string name="pref_gallery_slideshow_transition_summary">"슬라이드 간에 이동할 때 사용할 효과 선택"</string>
+    <string name="pref_gallery_slideshow_transition_dialogtitle">"슬라이드쇼 화면전환"</string>
+  <string-array name="pref_gallery_slideshow_transition_choices">
+    <item>"페이드 인/아웃"</item>
+    <item>"왼쪽에서 오른쪽으로/오른쪽에서 왼쪽으로"</item>
+    <item>"위에서 아래로/아래에서 위로"</item>
+    <item>"무작위 선택"</item>
+  </string-array>
+    <string name="pref_gallery_slideshow_repeat_title">"슬라이드쇼 반복"</string>
+    <string name="pref_gallery_slideshow_repeat_summary">"슬라이드쇼를 한 번 이상 재생"</string>
+    <string name="pref_gallery_slideshow_shuffle_title">"슬라이드 섞기"</string>
+    <string name="pref_gallery_slideshow_shuffle_summary">"사진을 무작위 순서로 표시"</string>
+    <string name="pref_camera_recordlocation_title">"사진에 위치 저장"</string>
+    <string name="pref_camera_recordlocation_summary">"사진 데이터에 위치 기록"</string>
+    <string name="pref_camera_videoquality_category">"동영상 화질"</string>
+    <!-- no translation found for pref_camera_videoquality_title (3836197291744160920) -->
+    <skip />
+    <string name="pref_camera_videoquality_entry_0">"낮음(MMS 메시지용)"</string>
+    <string name="pref_camera_videoquality_entry_1">"높음(SD 카드용)"</string>
+    <string name="pref_camera_videoquality_dialogtitle">"동영상 화질"</string>
+    <string name="camerasettings">"설정"</string>
+    <!-- no translation found for image_gallery_NoImageView_text (409595259802877447) -->
+    <skip />
+    <string name="pref_gallery_confirm_delete_title">"삭제 확인"</string>
+    <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) -->
+    <skip />
+    <string name="details_panel_title">"상세정보"</string>
+    <string name="details_file_size">"파일 크기:"</string>
+    <string name="details_image_resolution">"해상도:"</string>
+    <!-- no translation found for details_duration (1028116471387901402) -->
+    <skip />
+    <string name="details_date_taken">"찍은 날짜:"</string>
+    <!-- no translation found for details_frame_rate (122397836963498191) -->
+    <skip />
+    <!-- no translation found for details_bit_rate (5632311789455402186) -->
+    <skip />
+    <!-- no translation found for details_codec (5580300450432398126) -->
+    <skip />
+    <!-- no translation found for details_format (3700860266600796363) -->
+    <skip />
+    <!-- no translation found for details_dimension_x (4479200210424701240) -->
+    <skip />
+    <!-- no translation found for details_ms (940634969189855292) -->
+    <skip />
+    <!-- no translation found for details_hms (3215779248094151255) -->
+    <skip />
+    <!-- no translation found for details_fps (2707670327505979317) -->
+    <skip />
+    <!-- no translation found for details_kbps (59196416864960850) -->
+    <skip />
+    <!-- no translation found for details_mbps (3978720645766601106) -->
+    <skip />
+    <!-- no translation found for details_ok (6848594369924424312) -->
+    <skip />
+    <string name="context_menu_header">"사진 옵션"</string>
+    <string name="video_context_menu_header">"동영상 옵션"</string>
+    <string name="multiface_crop_help">"시작하려면 얼굴을 탭하세요."</string>
+    <string name="photos_gallery_title">"갤러리"</string>
+    <string name="pick_photos_gallery_title">"사진 선택"</string>
+    <string name="videos_gallery_title">"갤러리"</string>
+    <string name="pick_videos_gallery_title">"동영상 선택"</string>
+    <string name="loading_progress_format_string">"<xliff:g id="COUNTER">%d</xliff:g>개 남음"</string>
+    <string name="sendImage">"사진 공유 응용프로그램"</string>
+    <string name="setImage">"사진 설정"</string>
+    <string name="sendVideo">"동영상 공유 응용프로그램"</string>
+    <string name="movieviewlabel">"영화"</string>
+    <string name="loading_video">"동영상 로드 중..."</string>
+    <string name="spaceIsLow_title">"공간부족"</string>
+    <string name="spaceIsLow_content">"SD 카드의 공간이 부족합니다. 화질 설정을 변경하거나 갤러리에서 항목을 삭제하세요."</string>
+    <!-- no translation found for resume_playing_title (8996677350649355013) -->
+    <skip />
+    <!-- no translation found for resume_playing_message (5184414518126703481) -->
+    <skip />
+    <!-- no translation found for resume_playing_resume (3847915469173852416) -->
+    <skip />
+    <!-- no translation found for resume_playing_restart (5471008499835769292) -->
+    <skip />
+    <!-- no translation found for gadget_title (259405922673466798) -->
+    <skip />
+</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
new file mode 100644
index 0000000..1ec9c8a
--- /dev/null
+++ b/res/values-nb/strings.xml
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="all_images">"Alle bilder"</string>
+    <string name="all_videos">"Alle videoer"</string>
+    <string name="camera_label">"Kamera"</string>
+    <string name="gallery_picker_label">"Galleri"</string>
+    <string name="gallery_camera_bucket_name">"Bilder fra kamera"</string>
+    <string name="gallery_camera_videos_bucket_name">"Videoer fra kamera"</string>
+    <string name="switch_to_video_lable">"Bytt til video"</string>
+    <string name="switch_to_camera_lable">"Bytt til kamera"</string>
+    <string name="crop_label">"Beskjær bilde"</string>
+    <string name="view_label">"Se på bilde"</string>
+    <string name="preferences_label">"Kamerainnstillinger"</string>
+    <string name="wait">"Vent litt…"</string>
+    <string name="no_storage">"Sett inn et minnekort før du bruker kameraet."</string>
+    <string name="not_enough_space">"Minnekortet er fullt."</string>
+    <!-- no translation found for preparing_sd (2914969119574812666) -->
+    <skip />
+    <string name="wallpaper">"Setter bakgrunnsbilde, vent litt…"</string>
+    <string name="savingImage">"Lagrer bilde…"</string>
+    <string name="runningFaceDetection">"Vent litt…"</string>
+    <string name="flip_orientation">"Roter skjerm"</string>
+    <string name="settings">"Innstillinger"</string>
+    <string name="view">"Vis"</string>
+    <string name="details">"Detaljer"</string>
+    <string name="rotate">"Roter"</string>
+    <string name="rotate_left">"Roter mot venstre"</string>
+    <string name="rotate_right">"Roter mot høyre"</string>
+    <string name="slide_show">"Lysbildevisning"</string>
+    <string name="capture_picture">"Ta bilde"</string>
+    <string name="capture_video">"Ta opp video"</string>
+    <string name="crop_save_text">"Lagre"</string>
+    <string name="crop_discard_text">"Forkast"</string>
+    <string name="confirm_delete_title">"Slett"</string>
+    <string name="confirm_delete_message">"Bildet vil bli slettet."</string>
+    <string name="confirm_delete_video_message">"Videoen vil bli slettet."</string>
+    <string name="camera_toss">"Slett"</string>
+    <!-- no translation found for camera_gallery (815753042966032398) -->
+    <skip />
+    <string name="camera_share">"Del"</string>
+    <string name="camera_set">"Bruk som"</string>
+    <string name="camera_play">"Spill"</string>
+    <!-- no translation found for camera_attach (4048659554893435232) -->
+    <skip />
+    <!-- no translation found for camera_cancel (8203341746672085747) -->
+    <skip />
+    <string name="camera_crop">"Beskjær"</string>
+    <string name="camera_tossing">"Sletter…"</string>
+    <string name="no_way_to_share_image">"Bildet kan ikke deles."</string>
+    <string name="no_way_to_share_video">"Videoen kan ikke deles."</string>
+    <string name="camera_gallery_photos_text">"Galleri"</string>
+    <string name="camera_pick_wallpaper">"Bilder"</string>
+    <string name="camera_setas_wallpaper">"Bakgrunnsbilder"</string>
+    <string name="pref_gallery_category">"Generelle innstillinger"</string>
+    <string name="pref_slideshow_category">"Innstillinger for lysbildevisning"</string>
+    <string name="pref_camera_general_settings_category">"Generelle innstillinger"</string>
+    <string name="pref_gallery_size_title">"Bildestørrelse"</string>
+    <string name="pref_gallery_size_summary">"Velg hvor stort bilder skal vises"</string>
+    <string name="pref_gallery_size_dialogtitle">"Bildestørrelse"</string>
+  <string-array name="pref_gallery_size_choices">
+    <item>"Stor"</item>
+    <item>"Liten"</item>
+  </string-array>
+    <string name="pref_gallery_sort_title">"Bildesortering"</string>
+    <string name="pref_gallery_sort_summary">"Velg i hvilken rekkefølge bildene skal sorteres"</string>
+    <string name="pref_gallery_sort_dialogtitle">"Bildesortering"</string>
+  <string-array name="pref_gallery_sort_choices">
+    <item>"Nyeste først"</item>
+    <item>"Nyeste sist"</item>
+  </string-array>
+    <string name="pref_gallery_slideshow_interval_title">"Pause i lysbildevisning"</string>
+    <string name="pref_gallery_slideshow_interval_summary">"Velg hvor lenge hvert lysbilde skal vises"</string>
+    <string name="pref_gallery_slideshow_interval_dialogtitle">"Pause i lysbildevisning"</string>
+  <string-array name="pref_gallery_slideshow_interval_choices">
+    <item>"2 sekunder"</item>
+    <item>"3 sekunder"</item>
+    <item>"4 sekunder"</item>
+  </string-array>
+    <string name="pref_gallery_slideshow_transition_title">"Lysbildeovergang"</string>
+    <string name="pref_gallery_slideshow_transition_summary">"Velg effekten som skal brukes mellom lysbilder"</string>
+    <string name="pref_gallery_slideshow_transition_dialogtitle">"Lysbildevergang"</string>
+  <string-array name="pref_gallery_slideshow_transition_choices">
+    <item>"Ton inn og ut"</item>
+    <item>"Skli venstre - høyre"</item>
+    <item>"Skli opp - ned"</item>
+    <item>"Tilfeldig"</item>
+  </string-array>
+    <string name="pref_gallery_slideshow_repeat_title">"Gjenta lysbildeserie"</string>
+    <string name="pref_gallery_slideshow_repeat_summary">"Vis lydbildeserie mer enn en gang"</string>
+    <string name="pref_gallery_slideshow_shuffle_title">"Stokk lysbilder"</string>
+    <string name="pref_gallery_slideshow_shuffle_summary">"Vis bilder i tilfeldig rekkefølge"</string>
+    <string name="pref_camera_recordlocation_title">"Lagre sted i bilder"</string>
+    <string name="pref_camera_recordlocation_summary">"Lagre sted i bildedata"</string>
+    <string name="pref_camera_videoquality_category">"Videokvalitet"</string>
+    <string name="pref_camera_videoquality_title">"Videokvalitet"</string>
+    <string name="pref_camera_videoquality_entry_0">"Lav (for MMS-meldinger)"</string>
+    <string name="pref_camera_videoquality_entry_1">"Høy (for minnekort)"</string>
+    <string name="pref_camera_videoquality_dialogtitle">"Videokvalitet"</string>
+    <string name="camerasettings">"Innstillinger"</string>
+    <string name="image_gallery_NoImageView_text">"Fant ingen bilder."</string>
+    <string name="pref_gallery_confirm_delete_title">"Bekreft sletting"</string>
+    <string name="pref_gallery_confirm_delete_summary">"Vis bekreftelse før bilder slettes"</string>
+    <string name="details_panel_title">"Detaljer"</string>
+    <string name="details_file_size">"Filstørrelse:"</string>
+    <string name="details_image_resolution">"Oppløsning:"</string>
+    <string name="details_duration">"Varighet:"</string>
+    <string name="details_date_taken">"Dato tatt:"</string>
+    <string name="details_frame_rate">"Bildefrekvens:"</string>
+    <string name="details_bit_rate">"Bitrate:"</string>
+    <string name="details_codec">"Kodek:"</string>
+    <string name="details_format">"Format:"</string>
+    <string name="details_dimension_x">"%1$d x %2$d"</string>
+    <string name="details_ms">"%1$02d:%2$02d"</string>
+    <string name="details_hms">"%1$d:%2$02d:%3$02d"</string>
+    <string name="details_fps">"%1$d fps"</string>
+    <string name="details_kbps">"%1$d kbps"</string>
+    <string name="details_mbps">"%1$g Mbps"</string>
+    <string name="details_ok">"OK"</string>
+    <string name="context_menu_header">"Bildeinnstillinger"</string>
+    <string name="video_context_menu_header">"Videoinnstillinger"</string>
+    <string name="multiface_crop_help">"Trykk på et ansikt for å begynne."</string>
+    <string name="photos_gallery_title">"Galleri"</string>
+    <string name="pick_photos_gallery_title">"Velg bilde"</string>
+    <string name="videos_gallery_title">"Galleri"</string>
+    <string name="pick_videos_gallery_title">"Velg video"</string>
+    <string name="loading_progress_format_string">"<xliff:g id="COUNTER">%d</xliff:g> gjenstår"</string>
+    <string name="sendImage">"Del bilde via"</string>
+    <string name="setImage">"Bruk bilde som"</string>
+    <string name="sendVideo">"Del video via"</string>
+    <string name="movieviewlabel">"Filmer"</string>
+    <string name="loading_video">"Laster video…"</string>
+    <string name="spaceIsLow_title">"Lite plass"</string>
+    <string name="spaceIsLow_content">"Minnekortet begynner å gå tom for plass. Endre kvalitetsinnstillingen eller slett bilder fra galleriet."</string>
+    <!-- no translation found for resume_playing_title (8996677350649355013) -->
+    <skip />
+    <!-- no translation found for resume_playing_message (5184414518126703481) -->
+    <skip />
+    <!-- no translation found for resume_playing_resume (3847915469173852416) -->
+    <skip />
+    <!-- no translation found for resume_playing_restart (5471008499835769292) -->
+    <skip />
+    <!-- no translation found for gadget_title (259405922673466798) -->
+    <skip />
+    <!-- no translation found for video_file_name_format (8555507706353616970) -->
+    <skip />
+</resources>
diff --git a/res/values-nl-rNL/strings.xml b/res/values-nl-rNL/strings.xml
deleted file mode 100644
index 7ac8784..0000000
--- a/res/values-nl-rNL/strings.xml
+++ /dev/null
@@ -1,140 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- no translation found for all_images (7177582020160054334) -->
-    <skip />
-    <string name="camera_label">"Camera"</string>
-    <string name="gallery_picker_label">"Albums"</string>
-    <!-- no translation found for gallery_camera_bucket_name (8410686962557494439) -->
-    <skip />
-    <!-- no translation found for switch_to_video_lable (1350915759804484157) -->
-    <skip />
-    <!-- no translation found for switch_to_camera_lable (1823306882227066007) -->
-    <skip />
-    <string name="crop_label">"Afbeelding inkorten"</string>
-    <string name="view_label">"Afbeelding weergeven"</string>
-    <string name="preferences_label">"Camera-instellingen"</string>
-    <string name="wait">"Een ogenblik geduld…"</string>
-    <string name="no_storage">"Plaats een sd-kaart voordat u de camera gebruikt"</string>
-    <string name="not_enough_space">"Deze geheugenkaart is vol"</string>
-    <string name="wallpaper">"Achtergrond wordt ingesteld, een ogenblik geduld…"</string>
-    <string name="savingImage">"Afbeelding opslaan"</string>
-    <string name="runningFaceDetection">"Een ogenblik geduld…"</string>
-    <!-- no translation found for flip_orientation (2488284515852888409) -->
-    <skip />
-    <string name="settings">"Instellingen"</string>
-    <!-- no translation found for view (4639715088471766970) -->
-    <skip />
-    <string name="details">"Details"</string>
-    <string name="rotate">"Draaien"</string>
-    <string name="rotate_left">"Links draaien"</string>
-    <string name="rotate_right">"Rechts draaien"</string>
-    <string name="slide_show">"Diavoorstelling"</string>
-    <string name="crop_save_text">"Opslaan"</string>
-    <string name="crop_discard_text">"Wissen"</string>
-    <!-- no translation found for camera_keep (4046418310305917657) -->
-    <skip />
-    <!-- no translation found for confirm_delete_title (8942471980646707642) -->
-    <skip />
-    <!-- no translation found for confirm_delete_message (6944545476499253074) -->
-    <skip />
-    <string name="camera_toss">"Verwijderen"</string>
-    <string name="camera_share">"Delen"</string>
-    <string name="camera_set">"Instellen als…"</string>
-    <!-- no translation found for camera_play (6388821030721929966) -->
-    <skip />
-    <string name="camera_crop">"Automatisch inkorten"</string>
-    <string name="camera_tossing">"Bezig met verwijderen…"</string>
-    <string name="no_way_to_share_image">"De afbeelding kan niet worden opgeslagen"</string>
-    <string name="no_way_to_share_video">"Deze video kan niet worden gedeeld"</string>
-    <string name="camera_gallery_photos_text">"Afbeeldingen"</string>
-    <!-- no translation found for camera_pick_wallpaper (2052155470431167023) -->
-    <skip />
-    <string name="camera_setas_wallpaper">"Achtergrond"</string>
-    <!-- no translation found for camera_setas_wallpaper_drm (787462863614664620) -->
-    <skip />
-    <string name="camera_selectphoto">"Dit beeld selecteren"</string>
-    <string name="camera_takenewphoto">"Nieuwe afbeelding maken"</string>
-    <string name="pref_gallery_category">"Fotoalbumweergave"</string>
-    <string name="pref_slideshow_category">"Diavoorstelling"</string>
-    <!-- no translation found for pref_camera_general_settings_category (1720434593482716214) -->
-    <skip />
-    <string name="pref_gallery_size_title">"Afbeeldinggrootte"</string>
-    <string name="pref_gallery_size_summary">"Selecteer de grootte van afbeeldingen in albums"</string>
-    <string name="pref_gallery_size_dialogtitle">"Afbeeldinggrootte"</string>
-    <!-- no translation found for pref_gallery_size_choices:0 (3341375119334343613) -->
-    <!-- no translation found for pref_gallery_size_choices:1 (979877976111629768) -->
-    <string name="pref_gallery_sort_title">"Afbeelding sorteren"</string>
-    <string name="pref_gallery_sort_summary">"Selecteer de volgorde van afbeeldingen in albums"</string>
-    <string name="pref_gallery_sort_dialogtitle">"Afbeelding sorteren"</string>
-    <!-- no translation found for pref_gallery_sort_choices:0 (2009184885742004467) -->
-    <!-- no translation found for pref_gallery_sort_choices:1 (7253524441061782381) -->
-    <string name="pref_gallery_slideshow_interval_title">"Diashowinterval"</string>
-    <string name="pref_gallery_slideshow_interval_summary">"Kies hoe lang elke dia wordt weergegeven"</string>
-    <string name="pref_gallery_slideshow_interval_dialogtitle">"Diashowinterval"</string>
-    <!-- no translation found for pref_gallery_slideshow_interval_choices:0 (3293392256331071955) -->
-    <!-- no translation found for pref_gallery_slideshow_interval_choices:1 (6762163459545768561) -->
-    <!-- no translation found for pref_gallery_slideshow_interval_choices:2 (3999753648109312132) -->
-    <string name="pref_gallery_slideshow_transition_title">"Diashowovergang"</string>
-    <string name="pref_gallery_slideshow_transition_summary">"Kies het effect als van de ene naar de andere dia wordt gewisseld"</string>
-    <string name="pref_gallery_slideshow_transition_dialogtitle">"Diashowovergang"</string>
-    <!-- no translation found for pref_gallery_slideshow_transition_choices:0 (1917959322875321005) -->
-    <!-- no translation found for pref_gallery_slideshow_transition_choices:1 (6508707204357284687) -->
-    <!-- no translation found for pref_gallery_slideshow_transition_choices:2 (5628742586795545287) -->
-    <!-- no translation found for pref_gallery_slideshow_transition_choices:3 (3350644769941682805) -->
-    <string name="pref_gallery_slideshow_repeat_title">"Diashow herhalen"</string>
-    <string name="pref_gallery_slideshow_repeat_summary">"Selecteren om de diashow meer dan eenmaal af te spelen"</string>
-    <string name="pref_gallery_slideshow_shuffle_title">"Willekeurige volgorde"</string>
-    <string name="pref_gallery_slideshow_shuffle_summary">"Selecteren om afbeeldingen in willekeurige volgorde af te spelen"</string>
-    <string name="pref_camera_recordlocation_title">"Locatie in afbeeldingen opnemen"</string>
-    <string name="pref_camera_recordlocation_summary">"Selecteren om de locatie automatisch op te nemen bij fotos"</string>
-    <!-- no translation found for pref_camera_postpicturemenu_title (6273327212867896720) -->
-    <skip />
-    <!-- no translation found for pref_camera_postpicturemenu_summary (7911699118676137405) -->
-    <skip />
-    <!-- no translation found for pref_camera_videoquality_category (7460987936373873411) -->
-    <skip />
-    <!-- no translation found for pref_camera_videoquality_title (2766490880685686012) -->
-    <skip />
-    <!-- no translation found for pref_camera_videoquality_summary (6370975165195010636) -->
-    <skip />
-    <!-- no translation found for pref_camera_videoquality_entry_0 (8088669040921661814) -->
-    <skip />
-    <!-- no translation found for pref_camera_videoquality_entry_1 (3505027746158170269) -->
-    <skip />
-    <!-- no translation found for pref_camera_videoquality_dialogtitle (1836746975783096625) -->
-    <skip />
-    <!-- no translation found for pref_camera_videocodec_category (907203894431470628) -->
-    <skip />
-    <!-- no translation found for pref_camera_videocodec_title (3330800694130697647) -->
-    <skip />
-    <!-- no translation found for pref_camera_videocodec_summary (8269173339100296159) -->
-    <skip />
-    <!-- no translation found for pref_camera_videocodec_dialogtitle (5759217298675791948) -->
-    <skip />
-    <!-- no translation found for pref_camera_videocodec_entry_0 (6259385536148037705) -->
-    <skip />
-    <!-- no translation found for pref_camera_videocodec_entry_1 (3178021263058501227) -->
-    <skip />
-    <string name="camerasettings">"Instellingen"</string>
-    <string name="image_gallery_NoImageView_text">"Geen afbeeldingen"</string>
-    <!-- no translation found for pref_gallery_confirm_delete_title (201485251343856203) -->
-    <skip />
-    <!-- no translation found for pref_gallery_confirm_delete_summary (7235236977784533739) -->
-    <skip />
-    <string name="details_panel_title">"Details"</string>
-    <string name="details_file_size">"Bestandsgrootte:"</string>
-    <string name="details_image_resolution">"Resolutie:"</string>
-    <string name="details_date_taken">"Genomen op:"</string>
-    <string name="context_menu_header">"Beeldopties"</string>
-    <string name="multiface_crop_help">"Gezicht kiezen om te starten"</string>
-    <string name="camera_button_hint">"Druk op de Vastlegtoets om een foto te maken"</string>
-    <string name="photos_gallery_title">"Afbeeldingen"</string>
-    <string name="pick_photos_gallery_title">"Afbeelding selecteren"</string>
-    <!-- no translation found for loading_progress_format_string (4252016560676330797) -->
-    <skip />
-    <string name="sendImage">"Deze afbeelding delen via"</string>
-    <!-- no translation found for setImage (6676791915351726249) -->
-    <skip />
-    <string name="sendVideo">"Deze video delen via"</string>
-</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index b580d7c..9f7aa3b 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -29,6 +29,8 @@
     <string name="wait">"Een ogenblik geduld..."</string>
     <string name="no_storage">"Plaats een SD-kaart voordat u de camera gebruikt."</string>
     <string name="not_enough_space">"De SD-kaart is vol."</string>
+    <!-- no translation found for preparing_sd (2914969119574812666) -->
+    <skip />
     <string name="wallpaper">"Achtergrond wordt ingesteld. Een ogenblik geduld..."</string>
     <string name="savingImage">"Foto opslaan..."</string>
     <string name="runningFaceDetection">"Een ogenblik geduld..."</string>
@@ -64,21 +66,22 @@
     <string name="camera_gallery_photos_text">"Galerij"</string>
     <string name="camera_pick_wallpaper">"Foto\'s"</string>
     <string name="camera_setas_wallpaper">"Achtergrond"</string>
-    <string name="camera_setas_wallpaper_drm">"Aangeschafte foto\'s"</string>
-    <string name="camera_selectphoto">"Deze foto selecteren"</string>
-    <string name="camera_takenewphoto">"Nieuwe foto vastleggen"</string>
     <string name="pref_gallery_category">"Algemene instellingen"</string>
     <string name="pref_slideshow_category">"Instellingen van diavoorstelling"</string>
     <string name="pref_camera_general_settings_category">"Algemene instellingen"</string>
-    <string name="pref_gallery_size_title">"Grootte van foto"</string>
-    <string name="pref_gallery_size_summary">"De weergavegrootte van foto\'s selecteren"</string>
+    <!-- no translation found for pref_gallery_size_title (1363406603879434418) -->
+    <skip />
+    <!-- no translation found for pref_gallery_size_summary (8179967445295243638) -->
+    <skip />
     <string name="pref_gallery_size_dialogtitle">"Grootte van foto"</string>
   <string-array name="pref_gallery_size_choices">
     <item>"Groot"</item>
     <item>"Klein"</item>
   </string-array>
-    <string name="pref_gallery_sort_title">"Foto\'s sorteren"</string>
-    <string name="pref_gallery_sort_summary">"De sorteervolgorde van foto\'s selecteren"</string>
+    <!-- no translation found for pref_gallery_sort_title (7447949250045443386) -->
+    <skip />
+    <!-- no translation found for pref_gallery_sort_summary (6644398051645595214) -->
+    <skip />
     <string name="pref_gallery_sort_dialogtitle">"Foto\'s sorteren"</string>
   <string-array name="pref_gallery_sort_choices">
     <item>"Nieuwste eerst"</item>
@@ -107,8 +110,6 @@
     <string name="pref_gallery_slideshow_shuffle_summary">"Foto\'s in willekeurige volgorde weergeven"</string>
     <string name="pref_camera_recordlocation_title">"Locatie opslaan in foto\'s"</string>
     <string name="pref_camera_recordlocation_summary">"Locatie vastleggen in de gegevens van de foto"</string>
-    <string name="pref_camera_postpicturemenu_title">"Vragen na vastleggen"</string>
-    <string name="pref_camera_postpicturemenu_summary">"Menu met acties (opslaan, verwijderen, enz.) weergeven na vastleggen"</string>
     <string name="pref_camera_videoquality_category">"Videokwaliteit"</string>
     <!-- no translation found for pref_camera_videoquality_title (3836197291744160920) -->
     <skip />
@@ -119,7 +120,8 @@
     <!-- no translation found for image_gallery_NoImageView_text (409595259802877447) -->
     <skip />
     <string name="pref_gallery_confirm_delete_title">"Verwijderen bevestigen"</string>
-    <string name="pref_gallery_confirm_delete_summary">"Vragen om bevestiging voordat foto\'s worden verwijderd"</string>
+    <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) -->
+    <skip />
     <string name="details_panel_title">"Details"</string>
     <string name="details_file_size">"Bestandsgrootte:"</string>
     <string name="details_image_resolution">"Resolutie:"</string>
@@ -151,8 +153,6 @@
     <string name="context_menu_header">"Opties voor foto\'s"</string>
     <string name="video_context_menu_header">"Video-opties"</string>
     <string name="multiface_crop_help">"Tik op een gezicht om te beginnen."</string>
-    <string name="camera_button_hint">"Druk op de knop Vastleggen om de foto te maken."</string>
-    <string name="video_camera_button_hint">"Druk op de knop \'Opnemen\' om videomateriaal op te nemen."</string>
     <string name="photos_gallery_title">"Galerij"</string>
     <string name="pick_photos_gallery_title">"Foto selecteren"</string>
     <string name="videos_gallery_title">"Galerij"</string>
@@ -163,10 +163,6 @@
     <string name="sendVideo">"Video delen via"</string>
     <string name="movieviewlabel">"Films"</string>
     <string name="loading_video">"Video laden..."</string>
-    <string name="picture_saved">"Foto opgeslagen op SD-kaart."</string>
-    <string name="picture_deleted">"Foto verwijderd."</string>
-    <string name="video_saved">"Video opgeslagen op SD-kaart."</string>
-    <string name="video_deleted">"Video verwijderd."</string>
     <string name="spaceIsLow_title">"Er is weinig ruimte"</string>
     <string name="spaceIsLow_content">"Er is weinig ruimte beschikbaar op uw SD-kaart. U kunt de kwaliteitsinstelling wijzigen of items uit de galerij verwijderen."</string>
     <!-- no translation found for resume_playing_title (8996677350649355013) -->
@@ -177,4 +173,6 @@
     <skip />
     <!-- no translation found for resume_playing_restart (5471008499835769292) -->
     <skip />
+    <!-- no translation found for gadget_title (259405922673466798) -->
+    <skip />
 </resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 973ea61..882ae3b 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -29,6 +29,8 @@
     <string name="wait">"Poczekaj…"</string>
     <string name="no_storage">"Zanim zaczniesz korzystać z aparatu fotograficznego, włóż kartę SD."</string>
     <string name="not_enough_space">"Karta SD jest pełna."</string>
+    <!-- no translation found for preparing_sd (2914969119574812666) -->
+    <skip />
     <string name="wallpaper">"Ustawianie tapety, poczekaj…"</string>
     <string name="savingImage">"Trwa zapisywanie zdjęcia…"</string>
     <string name="runningFaceDetection">"Poczekaj…"</string>
@@ -64,21 +66,22 @@
     <string name="camera_gallery_photos_text">"Galeria"</string>
     <string name="camera_pick_wallpaper">"Zdjęcia"</string>
     <string name="camera_setas_wallpaper">"Tapeta"</string>
-    <string name="camera_setas_wallpaper_drm">"Zakupione zdjęcia"</string>
-    <string name="camera_selectphoto">"Wybierz to zdjęcie"</string>
-    <string name="camera_takenewphoto">"Zrób nowe zdjęcie"</string>
     <string name="pref_gallery_category">"Ustawienia ogólne"</string>
     <string name="pref_slideshow_category">"Ustawienia pokazu slajdów"</string>
     <string name="pref_camera_general_settings_category">"Ustawienia ogólne"</string>
-    <string name="pref_gallery_size_title">"Rozmiar zdjęć"</string>
-    <string name="pref_gallery_size_summary">"Ustaw wyświetlany rozmiar zdjęć"</string>
+    <!-- no translation found for pref_gallery_size_title (1363406603879434418) -->
+    <skip />
+    <!-- no translation found for pref_gallery_size_summary (8179967445295243638) -->
+    <skip />
     <string name="pref_gallery_size_dialogtitle">"Rozmiar zdjęć"</string>
   <string-array name="pref_gallery_size_choices">
     <item>"Duży"</item>
     <item>"Mały"</item>
   </string-array>
-    <string name="pref_gallery_sort_title">"Sortowanie zdjęć"</string>
-    <string name="pref_gallery_sort_summary">"Wybierz kolejność sortowania zdjęć"</string>
+    <!-- no translation found for pref_gallery_sort_title (7447949250045443386) -->
+    <skip />
+    <!-- no translation found for pref_gallery_sort_summary (6644398051645595214) -->
+    <skip />
     <string name="pref_gallery_sort_dialogtitle">"Sortowanie zdjęć"</string>
   <string-array name="pref_gallery_sort_choices">
     <item>"Najpierw najnowsze"</item>
@@ -107,8 +110,6 @@
     <string name="pref_gallery_slideshow_shuffle_summary">"Wyświetlaj zdjęcia w kolejności losowej"</string>
     <string name="pref_camera_recordlocation_title">"Zapisuj lokalizację w zdjęciach"</string>
     <string name="pref_camera_recordlocation_summary">"Zapisz lokalizację w danych zdjęcia"</string>
-    <string name="pref_camera_postpicturemenu_title">"Monit po zrobieniu zdjęcia"</string>
-    <string name="pref_camera_postpicturemenu_summary">"Wyświetlaj menu działań (zapisz, usuń…) po zrobieniu zdjęcia"</string>
     <string name="pref_camera_videoquality_category">"Jakość wideo"</string>
     <!-- no translation found for pref_camera_videoquality_title (3836197291744160920) -->
     <skip />
@@ -119,7 +120,8 @@
     <!-- no translation found for image_gallery_NoImageView_text (409595259802877447) -->
     <skip />
     <string name="pref_gallery_confirm_delete_title">"Potwierdzanie usuwania"</string>
-    <string name="pref_gallery_confirm_delete_summary">"Prośba o potwierdzenie przy usuwaniu zdjęć"</string>
+    <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) -->
+    <skip />
     <string name="details_panel_title">"Szczegóły"</string>
     <string name="details_file_size">"Rozmiar pliku:"</string>
     <string name="details_image_resolution">"Rozdzielczość:"</string>
@@ -151,8 +153,6 @@
     <string name="context_menu_header">"Opcje zdjęć"</string>
     <string name="video_context_menu_header">"Opcje wideo"</string>
     <string name="multiface_crop_help">"Dotknij twarzy, aby rozpocząć"</string>
-    <string name="camera_button_hint">"Naciśnij przycisk „Zrób zdjęcie”, aby zrobić zdjęcie."</string>
-    <string name="video_camera_button_hint">"Naciśnij przycisk robienia zdjęć, aby nagrać film wideo."</string>
     <string name="photos_gallery_title">"Galeria"</string>
     <string name="pick_photos_gallery_title">"Wybierz zdjęcie"</string>
     <string name="videos_gallery_title">"Galeria"</string>
@@ -163,10 +163,6 @@
     <string name="sendVideo">"Prześlij film następującą drogą:"</string>
     <string name="movieviewlabel">"Filmy"</string>
     <string name="loading_video">"Ładowanie filmu wideo..."</string>
-    <string name="picture_saved">"Zapisano zdjęcie na karcie SD."</string>
-    <string name="picture_deleted">"Usunięto zdjęcie."</string>
-    <string name="video_saved">"Zapisano film wideo na karcie SD."</string>
-    <string name="video_deleted">"Usunięto film wideo."</string>
     <string name="spaceIsLow_title">"Miejsca jest mało"</string>
     <string name="spaceIsLow_content">"Na karcie SD brakuje miejsca. Zmień ustawienie jakości lub usuń elementy z Galerii."</string>
     <!-- no translation found for resume_playing_title (8996677350649355013) -->
@@ -177,4 +173,6 @@
     <skip />
     <!-- no translation found for resume_playing_restart (5471008499835769292) -->
     <skip />
+    <!-- no translation found for gadget_title (259405922673466798) -->
+    <skip />
 </resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 6a73575..ef3b196 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -29,6 +29,8 @@
     <string name="wait">"Подождите…"</string>
     <string name="no_storage">"Перед использованием камеры вставьте карту SD."</string>
     <string name="not_enough_space">"Карта SD заполнена."</string>
+    <!-- no translation found for preparing_sd (2914969119574812666) -->
+    <skip />
     <string name="wallpaper">"Установка фонового рисунка, подождите…"</string>
     <string name="savingImage">"Идет сохранение изображения…"</string>
     <string name="runningFaceDetection">"Подождите…"</string>
@@ -64,21 +66,22 @@
     <string name="camera_gallery_photos_text">"Галерея"</string>
     <string name="camera_pick_wallpaper">"Изображения"</string>
     <string name="camera_setas_wallpaper">"Фоновый рисунок"</string>
-    <string name="camera_setas_wallpaper_drm">"Приобретенные изображения"</string>
-    <string name="camera_selectphoto">"Выбрать это изображение"</string>
-    <string name="camera_takenewphoto">"Сделать новую фотографию"</string>
     <string name="pref_gallery_category">"Общие настройки"</string>
     <string name="pref_slideshow_category">"Настройки слайд-шоу"</string>
     <string name="pref_camera_general_settings_category">"Общие настройки"</string>
-    <string name="pref_gallery_size_title">"Размер изображения"</string>
-    <string name="pref_gallery_size_summary">"Выбор отображаемого размера изображений"</string>
+    <!-- no translation found for pref_gallery_size_title (1363406603879434418) -->
+    <skip />
+    <!-- no translation found for pref_gallery_size_summary (8179967445295243638) -->
+    <skip />
     <string name="pref_gallery_size_dialogtitle">"Размер изображения"</string>
   <string-array name="pref_gallery_size_choices">
     <item>"Крупный"</item>
     <item>"Мелкий"</item>
   </string-array>
-    <string name="pref_gallery_sort_title">"Сортировка изображений"</string>
-    <string name="pref_gallery_sort_summary">"Выберите порядок сортировки изображений"</string>
+    <!-- no translation found for pref_gallery_sort_title (7447949250045443386) -->
+    <skip />
+    <!-- no translation found for pref_gallery_sort_summary (6644398051645595214) -->
+    <skip />
     <string name="pref_gallery_sort_dialogtitle">"Сортировка изображений"</string>
   <string-array name="pref_gallery_sort_choices">
     <item>"Начиная с новых"</item>
@@ -107,8 +110,6 @@
     <string name="pref_gallery_slideshow_shuffle_summary">"Показывать изображения в случайном порядке"</string>
     <string name="pref_camera_recordlocation_title">"Сохранять адрес в изображениях"</string>
     <string name="pref_camera_recordlocation_summary">"Записывать адрес в данные изображения"</string>
-    <string name="pref_camera_postpicturemenu_title">"Спрашивать после съемки"</string>
-    <string name="pref_camera_postpicturemenu_summary">"Отображать меню действий (сохранение, удаление и т.д.) после съемки"</string>
     <string name="pref_camera_videoquality_category">"Качество видео"</string>
     <!-- no translation found for pref_camera_videoquality_title (3836197291744160920) -->
     <skip />
@@ -119,7 +120,8 @@
     <!-- no translation found for image_gallery_NoImageView_text (409595259802877447) -->
     <skip />
     <string name="pref_gallery_confirm_delete_title">"Подтверждение удаления"</string>
-    <string name="pref_gallery_confirm_delete_summary">"Просить подтверждения перед удалением изображений"</string>
+    <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) -->
+    <skip />
     <string name="details_panel_title">"Сведения"</string>
     <string name="details_file_size">"Размер файла:"</string>
     <string name="details_image_resolution">"Разрешение:"</string>
@@ -151,8 +153,6 @@
     <string name="context_menu_header">"Параметры изображения"</string>
     <string name="video_context_menu_header">"Параметры видео"</string>
     <string name="multiface_crop_help">"Чтобы начать, выберите лицо."</string>
-    <string name="camera_button_hint">"Чтобы сделать фотографию, нажмите кнопку Снять."</string>
-    <string name="video_camera_button_hint">"Нажмите кнопку Съемка для записи видео."</string>
     <string name="photos_gallery_title">"Галерея"</string>
     <string name="pick_photos_gallery_title">"Выбор изображения"</string>
     <string name="videos_gallery_title">"Галерея"</string>
@@ -163,10 +163,6 @@
     <string name="sendVideo">"Отправить видео при помощи"</string>
     <string name="movieviewlabel">"Фильмы"</string>
     <string name="loading_video">"Идет загрузка видео…"</string>
-    <string name="picture_saved">"Изображение сохранено на карту SD."</string>
-    <string name="picture_deleted">"Изображение удалено."</string>
-    <string name="video_saved">"Видео сохранено на карту SD."</string>
-    <string name="video_deleted">"Видео удалено."</string>
     <string name="spaceIsLow_title">"Осталось мало места"</string>
     <string name="spaceIsLow_content">"Место на карте SD заканчивается. Измените настройки качества или удалите элементы из галереи."</string>
     <!-- no translation found for resume_playing_title (8996677350649355013) -->
@@ -177,4 +173,6 @@
     <skip />
     <!-- no translation found for resume_playing_restart (5471008499835769292) -->
     <skip />
+    <!-- no translation found for gadget_title (259405922673466798) -->
+    <skip />
 </resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 4a030c4..324c9e6 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -29,6 +29,8 @@
     <string name="wait">"请稍候..."</string>
     <string name="no_storage">"请在使用相机之前插入 SD 卡。"</string>
     <string name="not_enough_space">"您的 SD 卡已满。"</string>
+    <!-- no translation found for preparing_sd (2914969119574812666) -->
+    <skip />
     <string name="wallpaper">"正在设置壁纸,请稍候..."</string>
     <string name="savingImage">"正在保存图片..."</string>
     <string name="runningFaceDetection">"请稍候..."</string>
@@ -64,21 +66,22 @@
     <string name="camera_gallery_photos_text">"图片库"</string>
     <string name="camera_pick_wallpaper">"图片"</string>
     <string name="camera_setas_wallpaper">"壁纸"</string>
-    <string name="camera_setas_wallpaper_drm">"购买的图片"</string>
-    <string name="camera_selectphoto">"选择该图片"</string>
-    <string name="camera_takenewphoto">"拍摄新照片"</string>
     <string name="pref_gallery_category">"常规设置"</string>
     <string name="pref_slideshow_category">"幻灯片演示设置"</string>
     <string name="pref_camera_general_settings_category">"常规设置"</string>
-    <string name="pref_gallery_size_title">"图片大小"</string>
-    <string name="pref_gallery_size_summary">"选择图片的显示大小"</string>
+    <!-- no translation found for pref_gallery_size_title (1363406603879434418) -->
+    <skip />
+    <!-- no translation found for pref_gallery_size_summary (8179967445295243638) -->
+    <skip />
     <string name="pref_gallery_size_dialogtitle">"图片大小"</string>
   <string-array name="pref_gallery_size_choices">
     <item>"大"</item>
     <item>"小"</item>
   </string-array>
-    <string name="pref_gallery_sort_title">"图片排序"</string>
-    <string name="pref_gallery_sort_summary">"选择图片的排序顺序"</string>
+    <!-- no translation found for pref_gallery_sort_title (7447949250045443386) -->
+    <skip />
+    <!-- no translation found for pref_gallery_sort_summary (6644398051645595214) -->
+    <skip />
     <string name="pref_gallery_sort_dialogtitle">"图片排序"</string>
   <string-array name="pref_gallery_sort_choices">
     <item>"最新的在最前面"</item>
@@ -107,8 +110,6 @@
     <string name="pref_gallery_slideshow_shuffle_summary">"以随机顺序显示图片"</string>
     <string name="pref_camera_recordlocation_title">"在图片中存储位置"</string>
     <string name="pref_camera_recordlocation_summary">"通过图片数据记录位置"</string>
-    <string name="pref_camera_postpicturemenu_title">"在拍摄后提示"</string>
-    <string name="pref_camera_postpicturemenu_summary">"在拍摄后显示操作菜单(保存、删除等等)"</string>
     <string name="pref_camera_videoquality_category">"视频质量"</string>
     <!-- no translation found for pref_camera_videoquality_title (3836197291744160920) -->
     <skip />
@@ -119,7 +120,8 @@
     <!-- no translation found for image_gallery_NoImageView_text (409595259802877447) -->
     <skip />
     <string name="pref_gallery_confirm_delete_title">"确认删除"</string>
-    <string name="pref_gallery_confirm_delete_summary">"在删除图片之前显示确认"</string>
+    <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) -->
+    <skip />
     <string name="details_panel_title">"详细信息"</string>
     <string name="details_file_size">"文件大小:"</string>
     <string name="details_image_resolution">"分辨率:"</string>
@@ -151,8 +153,6 @@
     <string name="context_menu_header">"图片选项"</string>
     <string name="video_context_menu_header">"视频选项"</string>
     <string name="multiface_crop_help">"轻击一张脸开始裁切。"</string>
-    <string name="camera_button_hint">"按“拍摄”按钮获得该图片。"</string>
-    <string name="video_camera_button_hint">"按“拍摄”按钮录制视频。"</string>
     <string name="photos_gallery_title">"图片库"</string>
     <string name="pick_photos_gallery_title">"选择图片"</string>
     <string name="videos_gallery_title">"图片库"</string>
@@ -163,10 +163,6 @@
     <string name="sendVideo">"共享视频的方式"</string>
     <string name="movieviewlabel">"电影"</string>
     <string name="loading_video">"正在载入视频..."</string>
-    <string name="picture_saved">"照片已保存到 SD 卡中。"</string>
-    <string name="picture_deleted">"照片已删除。"</string>
-    <string name="video_saved">"视频已保存到 SD 卡中。"</string>
-    <string name="video_deleted">"视频已删除。"</string>
     <string name="spaceIsLow_title">"空间不足"</string>
     <string name="spaceIsLow_content">"您的 SD 卡已满。请更改质量设置或删除图片库中的内容。"</string>
     <!-- no translation found for resume_playing_title (8996677350649355013) -->
@@ -177,4 +173,6 @@
     <skip />
     <!-- no translation found for resume_playing_restart (5471008499835769292) -->
     <skip />
+    <!-- no translation found for gadget_title (259405922673466798) -->
+    <skip />
 </resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 2fe3a5c..c3243ca 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -29,6 +29,8 @@
     <string name="wait">"請稍候…"</string>
     <string name="no_storage">"使用相機前請先插入 SD 卡。"</string>
     <string name="not_enough_space">"SD 卡已滿。"</string>
+    <!-- no translation found for preparing_sd (2914969119574812666) -->
+    <skip />
     <string name="wallpaper">"設定桌布中,請稍候…"</string>
     <string name="savingImage">"儲存相片中…"</string>
     <string name="runningFaceDetection">"請稍候…"</string>
@@ -64,21 +66,22 @@
     <string name="camera_gallery_photos_text">"圖庫"</string>
     <string name="camera_pick_wallpaper">"相片"</string>
     <string name="camera_setas_wallpaper">"桌布"</string>
-    <string name="camera_setas_wallpaper_drm">"已購買的相片"</string>
-    <string name="camera_selectphoto">"選取此相片"</string>
-    <string name="camera_takenewphoto">"拍攝新相片"</string>
     <string name="pref_gallery_category">"一般設定"</string>
     <string name="pref_slideshow_category">"投影片設定"</string>
     <string name="pref_camera_general_settings_category">"一般設定"</string>
-    <string name="pref_gallery_size_title">"相片大小"</string>
-    <string name="pref_gallery_size_summary">"選取相片顯示大小"</string>
+    <!-- no translation found for pref_gallery_size_title (1363406603879434418) -->
+    <skip />
+    <!-- no translation found for pref_gallery_size_summary (8179967445295243638) -->
+    <skip />
     <string name="pref_gallery_size_dialogtitle">"相片大小"</string>
   <string-array name="pref_gallery_size_choices">
     <item>"大"</item>
     <item>"小"</item>
   </string-array>
-    <string name="pref_gallery_sort_title">"圖片排序"</string>
-    <string name="pref_gallery_sort_summary">"選取相片排序順序"</string>
+    <!-- no translation found for pref_gallery_sort_title (7447949250045443386) -->
+    <skip />
+    <!-- no translation found for pref_gallery_sort_summary (6644398051645595214) -->
+    <skip />
     <string name="pref_gallery_sort_dialogtitle">"圖片排序"</string>
   <string-array name="pref_gallery_sort_choices">
     <item>"最新的優先"</item>
@@ -107,8 +110,6 @@
     <string name="pref_gallery_slideshow_shuffle_summary">"隨機顯示相片"</string>
     <string name="pref_camera_recordlocation_title">"在相片儲存位置資訊"</string>
     <string name="pref_camera_recordlocation_summary">"在相片中紀錄位置資訊"</string>
-    <string name="pref_camera_postpicturemenu_title">"拍攝後顯示提示"</string>
-    <string name="pref_camera_postpicturemenu_summary">"照相後顯示動作選單 (儲存、刪除,…)"</string>
     <string name="pref_camera_videoquality_category">"影片品質"</string>
     <!-- no translation found for pref_camera_videoquality_title (3836197291744160920) -->
     <skip />
@@ -119,7 +120,8 @@
     <!-- no translation found for image_gallery_NoImageView_text (409595259802877447) -->
     <skip />
     <string name="pref_gallery_confirm_delete_title">"刪除確認"</string>
-    <string name="pref_gallery_confirm_delete_summary">"刪除相片前顯示確認"</string>
+    <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) -->
+    <skip />
     <string name="details_panel_title">"詳細資料"</string>
     <string name="details_file_size">"檔案大小:"</string>
     <string name="details_image_resolution">"解析度:"</string>
@@ -151,8 +153,6 @@
     <string name="context_menu_header">"圖片選項"</string>
     <string name="video_context_menu_header">"影片選項"</string>
     <string name="multiface_crop_help">"選取版面開始裁切"</string>
-    <string name="camera_button_hint">"按下拍攝鍵進行拍攝。"</string>
-    <string name="video_camera_button_hint">"按下 [拍攝] 按鈕可錄製影片。"</string>
     <string name="photos_gallery_title">"圖庫"</string>
     <string name="pick_photos_gallery_title">"選取相片"</string>
     <string name="videos_gallery_title">"圖庫"</string>
@@ -163,10 +163,6 @@
     <string name="sendVideo">"透過…分享影片"</string>
     <string name="movieviewlabel">"電影"</string>
     <string name="loading_video">"正在載入影片…"</string>
-    <string name="picture_saved">"儲存至 SD 卡的圖片。"</string>
-    <string name="picture_deleted">"已刪除圖片。"</string>
-    <string name="video_saved">"已將影片儲存至 SD 卡。"</string>
-    <string name="video_deleted">"已刪除影片。"</string>
     <string name="spaceIsLow_title">"空間不足"</string>
     <string name="spaceIsLow_content">"您的 SD 卡空間已快用完。請變更品質設定或刪除圖庫中的項目。"</string>
     <!-- no translation found for resume_playing_title (8996677350649355013) -->
@@ -177,4 +173,6 @@
     <skip />
     <!-- no translation found for resume_playing_restart (5471008499835769292) -->
     <skip />
+    <!-- no translation found for gadget_title (259405922673466798) -->
+    <skip />
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 8482a60..161f960 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -62,6 +62,9 @@
     <!-- alert to the user to that the SD card is too full to complete the operation -->
     <string name="not_enough_space">Your SD card is full.</string>
 
+    <!-- alert to the user to that the SD card is being disk-checked -->
+    <string name="preparing_sd">Preparing SD card\u2026</string>
+
     <!-- Toast/alert after saving wallpaper -->
     <string name="wallpaper">Setting wallpaper, please wait\u2026</string>
 
@@ -158,18 +161,6 @@
     <string name="camera_pick_wallpaper">Pictures</string>
     <string name="camera_setas_wallpaper">Wallpaper</string>
 
-    <string name="camera_setas_wallpaper_drm">Purchased pictures</string>
-    
-    <string name="camera_selectphoto">Select this picture</string>
-
-    <!-- Button indicating to skip the picture just taken and take another one (this is used
-         when the camera is invoked for the purpose of returning a picture to another activity
-         such as a contacts photo). -->
-    <string name="camera_takenewphoto">Capture new picture</string>
-
-    <!-- Do not translate -->
-    <string name="camera_takenewvideo">Capture new video</string>
-
     <!-- Settings screen, section heading  -->
     <string name="pref_gallery_category">General settings</string>
 
@@ -178,10 +169,10 @@
     <string name="pref_camera_general_settings_category">General settings</string>
 
     <!-- Settings screen, setting summary text -->
-    <string name="pref_gallery_size_title">Picture size</string>
+    <string name="pref_gallery_size_title">Display size</string>
 
     <!-- Settings screen, title for preference for image size to be used in the im -->
-    <string name="pref_gallery_size_summary">Select the display size of pictures</string>
+    <string name="pref_gallery_size_summary">Select the display size of pictures and videos</string>
     <!-- Title of dialog that appears after selecting Picture size setting option -->
     <string name="pref_gallery_size_dialogtitle">Picture size</string>
     <!-- Options in dialog that appears after selecting Picture size setting option -->
@@ -201,9 +192,9 @@
     <!-- Do not translate. Default option value in dialog that appears after selecting Picture size setting option -->
     <string name="default_value_pref_gallery_size">1</string>
     <!-- Settings screen, setting option name -->
-    <string name="pref_gallery_sort_title">Picture sort</string>
+    <string name="pref_gallery_sort_title">Sort order</string>
     <!-- Settings screen, setting summary text -->
-    <string name="pref_gallery_sort_summary">Select the sort order of pictures</string>
+    <string name="pref_gallery_sort_summary">Select the sort order of pictures and videos</string>
     <!-- Title of dialog that appears after selecting Picture sort setting option -->
     <string name="pref_gallery_sort_dialogtitle">Picture sort</string>
     <!-- Options in dialog that appears after selecting Picture sort setting option -->
@@ -308,12 +299,6 @@
     <!-- Do not translate -->
     <string name="pref_camera_upload_albumname_dialogtitle">Picasa album name</string>
 
-    <!-- [No longer used.] Settings screen, setting title text -->
-    <string name="pref_camera_postpicturemenu_title">Prompt after capture</string>
-
-    <!-- [No longer used.] Settings screen, setting summary text -->
-    <string name="pref_camera_postpicturemenu_summary">Display action menu (save, delete, \u2026) after capture</string>
-
     <!-- Settings screen, Video quality category title -->
     <string name="pref_camera_videoquality_category">Video quality</string>
     
@@ -341,7 +326,7 @@
     <string name="pref_gallery_confirm_delete_title">Confirm deletions</string>
 
     <!-- Preference summary for whether the user should be prompted form confirmation when deleting images  -->
-    <string name="pref_gallery_confirm_delete_summary">Show confirmation before deleting pictures</string>
+    <string name="pref_gallery_confirm_delete_summary">Show confirmation before deleting a picture or video</string>
 
    <!-- Details stuff -->
     <!-- Do not translate -->
@@ -407,10 +392,6 @@
     <string name="video_context_menu_header">Video options</string>
     <!-- Hint that appears when cropping an image with more than one face -->
     <string name="multiface_crop_help">Tap a face to begin.</string>
-    <!-- Hint/toast that appears when user first opens capture screen on still picture camera -->
-    <string name="camera_button_hint">Press Capture button to take picture.</string>
-    <!-- Hint/toast that appears when user first opens capture screen on video camera -->
-    <string name="video_camera_button_hint">Press Capture button to record video.</string>
     
     <!-- Activity title when in the image gallery to see pictures -->   
     <string name="photos_gallery_title">Gallery</string>
@@ -444,16 +425,6 @@
     <!-- shown in the video player view while the video is being loaded, before it starts playing -->
     <string name="loading_video">Loading video\u2026</string>
  
-    <!-- Displayed as a toast when a picture is saved -->
-    <string name="picture_saved">Picture saved to SD card.</string>
-    <!-- Displayed as a toast when a picture is deleted -->
-    <string name="picture_deleted">Picture deleted.</string>
-        
-    <!-- Displayed as a toast when a video is saved -->
-    <string name="video_saved">Video saved to SD card.</string>
-    <!-- Displayed as a toast when a video is deleted -->
-    <string name="video_deleted">Video deleted.</string>
-
     <!-- Low-memory dialog title -->
     <string name="spaceIsLow_title">Space is low</string>
     <!-- Low-memory dialog message -->
@@ -471,4 +442,11 @@
     <!-- Movie View Start Playing button "Beginning" -->
     <string name="resume_playing_restart">Start over</string>
     
+    <!-- Title for picture frame gadget to show in list of all available gadgets -->
+    <string name="gadget_title">Picture frame</string>
+    
+    <!-- Video Camera format string for new video files. Passed to java.text.SimpleDateFormat.
+         Do not localize -->
+    <string name="video_file_name_format">"'video'-yyyy-MM-dd-HH-mm-ss"</string>
+    
 </resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 726a952..2000bf9 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -28,13 +28,9 @@
         <item name="android:shadowRadius">2.0</item>
         <item name="android:textColor">#FFF</item>
         <item name="android:gravity">center_horizontal</item>
-        <item name="android:layout_width">fill_parent</item>
-        <item name="android:layout_height">fill_parent</item>
-        <item name="android:paddingLeft">5dip</item>
-        <item name="android:paddingRight">5dip</item>
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_marginLeft">32dip</item>
         <item name="android:drawablePadding">3dip</item>
-        <item name="android:paddingTop">2dip</item>
-        <item name="android:layout_marginLeft">10dip</item>
-        <item name="android:layout_marginRight">10dip</item>
     </style>
 </resources>
diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java
index 11b1ccd..a6775ae 100644
--- a/src/com/android/camera/Camera.java
+++ b/src/com/android/camera/Camera.java
@@ -34,6 +34,7 @@
 import android.content.pm.ActivityInfo;
 import android.content.res.AssetFileDescriptor;
 import android.content.res.Resources;
+import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.Matrix;
@@ -41,6 +42,7 @@
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.LayerDrawable;
+import android.graphics.drawable.TransitionDrawable;
 import android.hardware.Camera.PictureCallback;
 import android.hardware.Camera.Size;
 import android.location.Location;
@@ -73,6 +75,7 @@
 import android.view.WindowManager;
 import android.view.MenuItem.OnMenuItemClickListener;
 import android.view.ViewGroup.LayoutParams;
+import android.view.animation.AlphaAnimation;
 import android.view.animation.Animation;
 import android.view.animation.AnimationUtils;
 import android.widget.ImageView;
@@ -86,6 +89,8 @@
     private static final String TAG = "camera";
 
     private static final boolean DEBUG = false;
+    private static final boolean DEBUG_TIME_OPERATIONS = DEBUG && false;
+    private static final boolean DEBUG_FAKE_GPS_LOCATION = DEBUG && false;
 
     private static final int CROP_MSG = 1;
     private static final int KEEP = 2;
@@ -124,6 +129,7 @@
     private static final String sTempCropFilename = "crop-temp";
 
     private android.hardware.Camera mCameraDevice;
+    private android.hardware.Camera.Parameters mParameters;
     private VideoPreview mSurfaceView;
     private SurfaceHolder mSurfaceHolder = null;
     private ImageView mBlackout = null;
@@ -152,6 +158,12 @@
     private boolean mMenuSelectionMade;
 
     private ImageView mLastPictureButton;
+    private LayerDrawable mVignette;
+    private Animation mShowLastPictureButtonAnimation = new AlphaAnimation(0F, 1F);
+    private boolean mShouldShowLastPictureButton;
+    private TransitionDrawable mThumbnailTransition;
+    private Drawable[] mThumbnails;
+    private boolean mShouldTransitionThumbnails;
     private Uri mLastPictureUri;
     private LocationManager mLocationManager = null;
 
@@ -170,6 +182,9 @@
 
     private boolean mKeepAndRestartPreview;
 
+    private View mPostCaptureAlert;
+
+
     private Handler mHandler = new MainHandler();
     private ProgressDialog mSavingProgress;
 
@@ -217,6 +232,7 @@
                         mHandler.sendEmptyMessageDelayed(RESTART_PREVIEW, 100);
                     } else if (mStatus == SNAPSHOT_COMPLETED){
                         mCaptureObject.dismissFreezeFrame(true);
+                        hidePostCaptureAlert();
                     }
                     break;
                 }
@@ -244,9 +260,11 @@
                 // TODO put up a "please wait" message
                 // TODO also listen for the media scanner finished message
                 showStorageToast();
-            } else if (action.equals(Intent.ACTION_MEDIA_UNMOUNTED)) {
+            } else if (action.equals(Intent.ACTION_MEDIA_UNMOUNTED) ||
+                    action.equals(Intent.ACTION_MEDIA_CHECKING)) {
                 // SD card unavailable
-                showStorageToast();
+                mPicturesRemaining = MenuHelper.NO_STORAGE_ERROR;
+                showStorageToast(mPicturesRemaining);
             } else if (action.equals(Intent.ACTION_MEDIA_SCANNER_STARTED)) {
                 Toast.makeText(Camera.this, getResources().getString(R.string.wait), 5000);
             } else if (action.equals(Intent.ACTION_MEDIA_SCANNER_FINISHED)) {
@@ -298,7 +316,7 @@
 
     private final class ShutterCallback implements android.hardware.Camera.ShutterCallback {
         public void onShutter() {
-            if (DEBUG) {
+            if (DEBUG_TIME_OPERATIONS) {
                 long now = System.currentTimeMillis();
                 Log.v(TAG, "********** Total shutter lag " + (now - mShutterPressTime) + " ms");
             }
@@ -314,7 +332,7 @@
             if (Config.LOGV)
                 Log.v(TAG, "got RawPictureCallback...");
             mRawPictureCallbackTime = System.currentTimeMillis();
-            mBlackout.setVisibility(View.INVISIBLE);
+            mBlackout.setVisibility(View.GONE);
         }
     };
 
@@ -428,7 +446,7 @@
 
         private void storeImage(byte[] data, Location loc) {
             try {
-                if (DEBUG) {
+                if (DEBUG_TIME_OPERATIONS) {
                     startTiming();
                 }
                 long dateTaken = System.currentTimeMillis();
@@ -455,7 +473,7 @@
                     mAddImageCancelable = null;
                 }
 
-                if (DEBUG) {
+                if (DEBUG_TIME_OPERATIONS) {
                     stopTiming();
                     Log.d(TAG, "Storing image took " + (mWallTimeEnd - mWallTimeStart) + " ms. " +
                             "Thread time was " + ((mThreadTimeEnd - mThreadTimeStart) / 1000000) +
@@ -472,19 +490,19 @@
             if (!captureOnly) {
                 storeImage(data, loc);
                 sendBroadcast(new Intent("com.android.camera.NEW_PICTURE", mLastContentUri));
-                setLastPictureThumb(data);
+                setLastPictureThumb(data, mCaptureObject.getLastCaptureUri());
                 dismissFreezeFrame(true);
             } else {
                 BitmapFactory.Options options = new BitmapFactory.Options();
                 options.inSampleSize = 4;
 
-                if (DEBUG) {
+                if (DEBUG_TIME_OPERATIONS) {
                     startTiming();
                 }
 
                 mCaptureOnlyBitmap = BitmapFactory.decodeByteArray(data, 0, data.length, options);
 
-                if (DEBUG) {
+                if (DEBUG_TIME_OPERATIONS) {
                     stopTiming();
                     Log.d(TAG, "Decoded mCaptureOnly bitmap (" + mCaptureOnlyBitmap.getWidth() +
                             "x" + mCaptureOnlyBitmap.getHeight() + " ) in " +
@@ -492,56 +510,16 @@
                             ((mThreadTimeEnd - mThreadTimeStart) / 1000000) + " ms.");
                 }
 
-                openOptionsMenu();
+                showPostCaptureAlert();
+                cancelAutomaticPreviewRestart();
             }
 
-
             mCapturing = false;
             if (mPausing) {
                 closeCamera();
             }
         }
 
-        private void setLastPictureThumb(byte[] data) {
-            BitmapFactory.Options options = new BitmapFactory.Options();
-            options.inSampleSize = 16;
-
-            if (DEBUG) {
-                startTiming();
-            }
-
-            Bitmap lastPictureThumb = BitmapFactory.decodeByteArray(data, 0, data.length, options);
-
-            if (DEBUG) {
-                stopTiming();
-                Log.d(TAG, "Decoded lastPictureThumb bitmap (" + lastPictureThumb.getWidth() +
-                        "x" + lastPictureThumb.getHeight() + " ) in " +
-                        (mWallTimeEnd - mWallTimeStart) + " ms. Thread time was " +
-                        ((mThreadTimeEnd - mThreadTimeStart) / 1000000) + " ms.");
-            }
-
-            final int PADDING_WIDTH = 2;
-            final int PADDING_HEIGHT = 2;
-            LayoutParams layoutParams = mLastPictureButton.getLayoutParams();
-            // Make the mini-thumbnail size smaller than the button size so that the image corners
-            // don't peek out from the rounded corners of the frame_thumbnail graphic:
-            final int miniThumbWidth = layoutParams.width - 2 * PADDING_WIDTH;
-            final int miniThumbHeight = layoutParams.height - 2 * PADDING_HEIGHT;
-
-            lastPictureThumb = ImageManager.extractMiniThumb(lastPictureThumb,
-                    miniThumbWidth, miniThumbHeight);
-
-            Drawable[] layers = new Drawable[2];
-            layers[0] = new BitmapDrawable(lastPictureThumb);
-            layers[1] = getResources().getDrawable(R.drawable.frame_thumbnail);
-            LayerDrawable layerDrawable = new LayerDrawable(layers);
-            layerDrawable.setLayerInset(0, PADDING_WIDTH, PADDING_HEIGHT,
-                    PADDING_WIDTH, PADDING_HEIGHT);
-            mLastPictureButton.setImageDrawable(layerDrawable);
-            mLastPictureButton.setVisibility(View.VISIBLE);
-            mLastPictureUri = mCaptureObject.getLastCaptureUri();
-        }
-
         /*
          * Tells the image capture thread to abort the capture of the
          * current image.
@@ -589,44 +567,63 @@
 
             Boolean recordLocation = mPreferences.getBoolean("pref_camera_recordlocation_key", false);
             Location loc = recordLocation ? getCurrentLocation() : null;
-            android.hardware.Camera.Parameters parameters = mCameraDevice.getParameters();
             // Quality 75 has visible artifacts, and quality 90 looks great but the files begin to
             // get large. 85 is a good compromise between the two.
-            parameters.set("jpeg-quality", 85);
-            parameters.set("rotation", latchedOrientation);
+            mParameters.set("jpeg-quality", 85);
+            mParameters.set("rotation", latchedOrientation);
 
-            parameters.remove("gps-latitude");
-            parameters.remove("gps-longitude");
-            parameters.remove("gps-altitude");
-            parameters.remove("gps-timestamp");
+            mParameters.remove("gps-latitude");
+            mParameters.remove("gps-longitude");
+            mParameters.remove("gps-altitude");
+            mParameters.remove("gps-timestamp");
 
-            if (loc != null) {
+            if (DEBUG_FAKE_GPS_LOCATION) {
+                // Google London office, having trouble encoding longitude
+
+                if (false) {
+                    // This fails:
+                    mParameters.set("gps-latitude", "51.49473309516907");
+                    mParameters.set("gps-longitude", "-0.14598190784454346");
+                    mParameters.set("gps-altitude", "71.0"); // meters
+                    mParameters.set("gps-timestamp", "1233744883");
+                } else {
+                    // This works OK:
+                    mParameters.set("gps-latitude", "51.49473309516907");
+                    mParameters.set("gps-longitude", "-1.0");
+                    mParameters.set("gps-altitude", "71.0"); // meters
+                    mParameters.set("gps-timestamp", "1233744883");
+                }
+            } else if (loc != null) {
                 double lat = loc.getLatitude();
                 double lon = loc.getLongitude();
+                boolean hasLatLon = (lat != 0.0d) || (lon != 0.0d);
 
-                if (lat != 0D && lon != 0d) {
-                    parameters.set("gps-latitude",  String.valueOf(lat));
-                    parameters.set("gps-longitude", String.valueOf(lon));
+                if (hasLatLon) {
+                    String latString = String.valueOf(lat);
+                    String lonString = String.valueOf(lon);
+                    mParameters.set("gps-latitude",  latString);
+                    mParameters.set("gps-longitude", lonString);
                     if (loc.hasAltitude())
-                        parameters.set("gps-altitude",  String.valueOf(loc.getAltitude()));
+                        mParameters.set("gps-altitude",  String.valueOf(loc.getAltitude()));
                     if (loc.getTime() != 0) {
                         // Location.getTime() is UTC in milliseconds.
                         // gps-timestamp is UTC in seconds.
                         long utcTimeSeconds = loc.getTime() / 1000;
-                        parameters.set("gps-timestamp", String.valueOf(utcTimeSeconds));
+                        mParameters.set("gps-timestamp", String.valueOf(utcTimeSeconds));
                     }
                 } else {
                     loc = null;
                 }
             }
 
-            Size pictureSize = parameters.getPictureSize();
+
+            Size pictureSize = mParameters.getPictureSize();
 
             // resize the SurfaceView to the aspect-ratio of the still image
             // and so that we can see the full image that was taken
             mSurfaceView.setAspectRatio(pictureSize.width, pictureSize.height);
 
-            mCameraDevice.setParameters(parameters);
+            mCameraDevice.setParameters(mParameters);
 
             mCameraDevice.takePicture(mShutterCallback, mRawPictureCallback, new JpegPictureCallback(loc));
 
@@ -653,9 +650,9 @@
 
             // Don't check the filesystem here, we can't afford the latency. Instead, check the
             // cached value which was calculated when the preview was restarted.
-            if (DEBUG) mShutterPressTime = System.currentTimeMillis();
+            if (DEBUG_TIME_OPERATIONS) mShutterPressTime = System.currentTimeMillis();
             if (mPicturesRemaining < 1) {
-                showStorageToast();
+                showStorageToast(mPicturesRemaining);
                 return;
             }
 
@@ -672,6 +669,52 @@
         }
     }
 
+    private void setLastPictureThumb(byte[] data, Uri uri) {
+        BitmapFactory.Options options = new BitmapFactory.Options();
+        options.inSampleSize = 16;
+
+        Bitmap lastPictureThumb = BitmapFactory.decodeByteArray(data, 0, data.length, options);
+
+        setLastPictureThumb(lastPictureThumb, uri);
+    }
+
+    private void setLastPictureThumb(Bitmap lastPictureThumb, Uri uri) {
+
+        final int PADDING_WIDTH = 2;
+        final int PADDING_HEIGHT = 2;
+        LayoutParams layoutParams = mLastPictureButton.getLayoutParams();
+        // Make the mini-thumbnail size smaller than the button size so that the image corners
+        // don't peek out from the rounded corners of the frame_thumbnail graphic:
+        final int miniThumbWidth = layoutParams.width - 2 * PADDING_WIDTH;
+        final int miniThumbHeight = layoutParams.height - 2 * PADDING_HEIGHT;
+
+        lastPictureThumb = ImageManager.extractMiniThumb(lastPictureThumb,
+                miniThumbWidth, miniThumbHeight);
+
+        Drawable[] vignetteLayers = new Drawable[2];
+        vignetteLayers[1] = getResources().getDrawable(R.drawable.frame_thumbnail);
+        if (mThumbnails == null) {
+            mThumbnails = new Drawable[2];
+            mThumbnails[1] = new BitmapDrawable(lastPictureThumb);
+            vignetteLayers[0] = mThumbnails[1];
+        } else {
+            mThumbnails[0] = mThumbnails[1];
+            mThumbnails[1] = new BitmapDrawable(lastPictureThumb);
+            mThumbnailTransition = new TransitionDrawable(mThumbnails);
+            mShouldTransitionThumbnails = true;
+            vignetteLayers[0] = mThumbnailTransition;
+        }
+
+        mVignette = new LayerDrawable(vignetteLayers);
+        mVignette.setLayerInset(0, PADDING_WIDTH, PADDING_HEIGHT,
+                PADDING_WIDTH, PADDING_HEIGHT);
+        mLastPictureButton.setImageDrawable(mVignette);
+
+        if (mLastPictureButton.getVisibility() != View.VISIBLE) {
+            mShouldShowLastPictureButton = true;
+        }
+        mLastPictureUri = uri;
+    }
 
     static private String createName(long dateTaken) {
         return DateFormat.format("yyyy-MM-dd kk.mm.ss", dateTaken).toString();
@@ -741,10 +784,27 @@
         mBlackout.setBackgroundDrawable(new ColorDrawable(0xFF000000));
 
         mLastPictureButton = (ImageView) findViewById(R.id.last_picture_button);
-        mLastPictureButton.setOnClickListener(this);
-        mLastPictureButton.setVisibility(View.INVISIBLE);
+        if (!isImageCaptureIntent())  {
+            ImageManager.IImageList images = ImageManager.instance().allImages(
+                    this,
+                    getContentResolver(),
+                    ImageManager.DataLocation.ALL,
+                    ImageManager.INCLUDE_IMAGES,
+                    ImageManager.SORT_DESCENDING,
+                    ImageManager.CAMERA_IMAGE_BUCKET_ID);
+            ImageManager.IImage lastPicture =
+                    images.isEmpty() ? null : images.getImageAt(0);
+            mLastPictureButton.setOnClickListener(this);
+            if (lastPicture == null) {
+                mLastPictureButton.setVisibility(View.GONE);
+            } else {
+                Bitmap miniThumb = lastPicture.miniThumbBitmap();
+                setLastPictureThumb(miniThumb, lastPicture.fullSizeImageUri());
+            }
+            images.deactivate();
+        }
 
-        mShutterButton = (ShutterButton) findViewById(R.id.mode_indicator);
+        mShutterButton = (ShutterButton) findViewById(R.id.shutter_button);
         mShutterButton.setOnShutterButtonListener(this);
 
         try {
@@ -773,42 +833,22 @@
         mFocusBlinkAnimation = AnimationUtils.loadAnimation(this, R.anim.auto_focus_blink);
         mFocusBlinkAnimation.setRepeatCount(Animation.INFINITE);
         mFocusBlinkAnimation.setRepeatMode(Animation.REVERSE);
+
+        mPostCaptureAlert = findViewById(R.id.post_picture_panel);
     }
 
     @Override
     public void onStart() {
         super.onStart();
 
-        final View hintView = findViewById(R.id.hint_toast);
-        if (hintView != null)
-            hintView.setVisibility(View.GONE);
-
         Thread t = new Thread(new Runnable() {
             public void run() {
                 final boolean storageOK = calculatePicturesRemaining() > 0;
-                if (hintView == null)
-                    return;
 
-                if (storageOK) {
+                if (!storageOK) {
                     mHandler.post(new Runnable() {
                         public void run() {
-                            hintView.setVisibility(View.VISIBLE);
-                        }
-                    });
-                    mHandler.postDelayed(new Runnable() {
-                        public void run() {
-                            Animation a = new android.view.animation.AlphaAnimation(1F, 0F);
-                            a.setDuration(500);
-                            a.startNow();
-                            hintView.setAnimation(a);
-                            hintView.setVisibility(View.GONE);
-                        }
-                    }, 3000);
-                } else {
-                    mHandler.post(new Runnable() {
-                        public void run() {
-                            hintView.setVisibility(View.GONE);
-                            showStorageToast();
+                            showStorageToast(mPicturesRemaining);
                         }
                     });
                 }
@@ -822,12 +862,124 @@
         case R.id.last_picture_button:
             viewLastImage();
             break;
+        case R.id.attach:
+            doAttach();
+            break;
+        case R.id.cancel:
+            doCancel();
         }
     }
 
+    private void doAttach() {
+        Bitmap bitmap = mImageCapture.getLastBitmap();
+        mCaptureObject.setDone(true);
+
+        String cropValue = null;
+        Uri saveUri = null;
+
+        Bundle myExtras = getIntent().getExtras();
+        if (myExtras != null) {
+            saveUri = (Uri) myExtras.getParcelable(MediaStore.EXTRA_OUTPUT);
+            cropValue = myExtras.getString("crop");
+        }
+
+
+        if (cropValue == null) {
+            /*
+             * First handle the no crop case -- just return the value.  If the caller
+             * specifies a "save uri" then write the data to it's stream.  Otherwise,
+             * pass back a scaled down version of the bitmap directly in the extras.
+             */
+            if (saveUri != null) {
+                OutputStream outputStream = null;
+                try {
+                    outputStream = mContentResolver.openOutputStream(saveUri);
+                    bitmap.compress(Bitmap.CompressFormat.JPEG, 75, outputStream);
+                    outputStream.close();
+
+                    setResult(RESULT_OK);
+                    finish();
+                } catch (IOException ex) {
+                    //
+                } finally {
+                    if (outputStream != null) {
+                        try {
+                            outputStream.close();
+                        } catch (IOException ex) {
+
+                        }
+                    }
+                }
+            } else {
+                float scale = .5F;
+                Matrix m = new Matrix();
+                m.setScale(scale, scale);
+
+                bitmap = Bitmap.createBitmap(bitmap, 0, 0,
+                        bitmap.getWidth(),
+                        bitmap.getHeight(),
+                        m, true);
+
+                setResult(RESULT_OK, new Intent("inline-data").putExtra("data", bitmap));
+                finish();
+            }
+        }
+        else {
+            /*
+             * Save the image to a temp file and invoke the cropper
+             */
+            Uri tempUri = null;
+            FileOutputStream tempStream = null;
+            try {
+                File path = getFileStreamPath(sTempCropFilename);
+                path.delete();
+                tempStream = openFileOutput(sTempCropFilename, 0);
+                bitmap.compress(Bitmap.CompressFormat.JPEG, 75, tempStream);
+                tempStream.close();
+                tempUri = Uri.fromFile(path);
+            } catch (FileNotFoundException ex) {
+                setResult(Activity.RESULT_CANCELED);
+                finish();
+                return;
+            } catch (IOException ex) {
+                setResult(Activity.RESULT_CANCELED);
+                finish();
+                return;
+            } finally {
+                if (tempStream != null) {
+                    try {
+                        tempStream.close();
+                    } catch (IOException ex) {
+
+                    }
+                }
+            }
+
+            Bundle newExtras = new Bundle();
+            if (cropValue.equals("circle"))
+                newExtras.putString("circleCrop", "true");
+            if (saveUri != null)
+                newExtras.putParcelable(MediaStore.EXTRA_OUTPUT, saveUri);
+            else
+                newExtras.putBoolean("return-data", true);
+
+            Intent cropIntent = new Intent();
+            cropIntent.setClass(Camera.this, CropImage.class);
+            cropIntent.setData(tempUri);
+            cropIntent.putExtras(newExtras);
+
+            startActivityForResult(cropIntent, CROP_MSG);
+        }
+    }
+
+    private void doCancel() {
+        setResult(RESULT_CANCELED, new Intent());
+        finish();
+    }
+
     public void onShutterButtonFocus(ShutterButton button, boolean pressed) {
         switch (button.getId()) {
-            case R.id.mode_indicator:
+            case R.id.shutter_button:
                 doFocus(pressed);
                 break;
         }
@@ -835,7 +987,7 @@
 
     public void onShutterButtonClick(ShutterButton button) {
         switch (button.getId()) {
-            case R.id.mode_indicator:
+            case R.id.shutter_button:
                 doSnap(false);
                 break;
         }
@@ -845,6 +997,10 @@
         MenuHelper.showStorageToast(this);
     }
 
+    private void showStorageToast(int remainingPictures) {
+        MenuHelper.showStorageToast(this, remainingPictures);
+    }
+
     @Override
     public void onResume() {
         super.onResume();
@@ -858,6 +1014,7 @@
         intentFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
         intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_STARTED);
         intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);
+        intentFilter.addAction(Intent.ACTION_MEDIA_CHECKING);
         intentFilter.addDataScheme("file");
         registerReceiver(mReceiver, intentFilter);
         mDidRegister = true;
@@ -878,14 +1035,14 @@
             mFocusToneGenerator = null;
         }
 
-        mBlackout.setVisibility(View.INVISIBLE);
+        mBlackout.setVisibility(View.GONE);
 
         if (mLastPictureUri != null) {
             IImageList list = ImageManager.makeImageList(mLastPictureUri, this,
                     ImageManager.SORT_ASCENDING);
             if (list.getImageForUri(mLastPictureUri) == null) {
                 mLastPictureUri = null;
-                mLastPictureButton.setVisibility(View.INVISIBLE);
+                mLastPictureButton.setVisibility(View.GONE);
             }
             list.deactivate();
         }
@@ -996,7 +1153,7 @@
 
         switch (keyCode) {
             case KeyEvent.KEYCODE_BACK:
-                if (mStatus == SNAPSHOT_IN_PROGRESS || mStatus == SNAPSHOT_COMPLETED) {
+                if (mStatus == SNAPSHOT_IN_PROGRESS) {
                     // ignore backs while we're taking a picture
                     return true;
                 }
@@ -1011,6 +1168,18 @@
                     doSnap(false);
                 }
                 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 (event.getRepeatCount() == 0) {
+                    if (mShutterButton.isInTouchMode()) {
+                        mShutterButton.requestFocusFromTouch();
+                    } else {
+                        mShutterButton.requestFocus();
+                    }
+                    mShutterButton.setPressed(true);
+                }
+                return true;
         }
 
         return super.onKeyDown(keyCode, event);
@@ -1053,6 +1222,7 @@
     private void doFocus(boolean pressed) {
         if (pressed) {
             mIsFocusButtonPressed = true;
+            mCaptureOnFocus = false;
             if (mPreviewing) {
                 autoFocus();
             } else if (mCaptureObject != null) {
@@ -1113,6 +1283,17 @@
         // TODO: The best longterm solution is to write a reserve file of maximum JPEG size, always
         // let the user take a picture, and delete that file if needed to save the new photo.
         calculatePicturesRemaining();
+
+        if (mShouldShowLastPictureButton) {
+            mShouldShowLastPictureButton = false;
+            mLastPictureButton.setVisibility(View.VISIBLE);
+            Animation a = mShowLastPictureButtonAnimation;
+            a.setDuration(500);
+            mLastPictureButton.setAnimation(a);
+        } else if (mShouldTransitionThumbnails) {
+            mShouldTransitionThumbnails = false;
+            mThumbnailTransition.reverseTransition(500);
+        }
     }
 
     private void setViewFinder(int w, int h, boolean startPreview) {
@@ -1169,10 +1350,10 @@
 
         // request the preview size, the hardware may not honor it,
         // if we depended on it we would have to query the size again
-        android.hardware.Camera.Parameters p = mCameraDevice.getParameters();
-        p.setPreviewSize(w, h);
+        mParameters = mCameraDevice.getParameters();
+        mParameters.setPreviewSize(w, h);
         try {
-            mCameraDevice.setParameters(p);
+            mCameraDevice.setParameters(mParameters);
         } catch (IllegalArgumentException e) {
             // Ignore this error, it happens in the simulator.
         }
@@ -1266,6 +1447,7 @@
                     ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
             intent.putExtra(MediaStore.EXTRA_FULL_SCREEN, true);
             intent.putExtra(MediaStore.EXTRA_SHOW_ACTION_ICONS, true);
+            intent.putExtra("com.android.camera.ReviewMode", true);
 
             try {
                 startActivity(intent);
@@ -1374,8 +1556,7 @@
     public boolean onMenuOpened(int featureId, Menu menu) {
         if (featureId == Window.FEATURE_OPTIONS_PANEL) {
             if (mStatus == SNAPSHOT_IN_PROGRESS) {
-                mKeepAndRestartPreview = false;
-                mHandler.removeMessages(RESTART_PREVIEW);
+                cancelAutomaticPreviewRestart();
                 mMenuSelectionMade = false;
             }
         }
@@ -1408,127 +1589,43 @@
         return true;
     }
 
+    private void cancelAutomaticPreviewRestart() {
+        mKeepAndRestartPreview = false;
+        mHandler.removeMessages(RESTART_PREVIEW);
+    }
+
     private boolean isImageCaptureIntent() {
         String action = getIntent().getAction();
         return (MediaStore.ACTION_IMAGE_CAPTURE.equals(action));
     }
 
+    private void showPostCaptureAlert() {
+        boolean isPick = isImageCaptureIntent();
+        int pickVisible = isPick ? View.VISIBLE : View.GONE;
+        mPostCaptureAlert.setVisibility(pickVisible);
+        if (isPick) {
+            int[] pickIds = {R.id.attach, R.id.cancel};
+            for(int id : pickIds) {
+                View view = mPostCaptureAlert.findViewById(id);
+                view.setOnClickListener(this);
+                Animation animation = new AlphaAnimation(0F, 1F);
+                animation.setDuration(500);
+                view.setAnimation(animation);
+            }
+        }
+    }
+
+    private void hidePostCaptureAlert() {
+        mPostCaptureAlert.setVisibility(View.GONE);
+    }
+
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
         super.onCreateOptionsMenu(menu);
 
         if (isImageCaptureIntent()) {
-            menu.add(MenuHelper.IMAGE_SAVING_ITEM, MENU_SAVE_SELECT_PHOTOS , 0, R.string.camera_selectphoto).setOnMenuItemClickListener(new OnMenuItemClickListener() {
-                public boolean onMenuItemClick(MenuItem item) {
-                    Bitmap bitmap = mImageCapture.getLastBitmap();
-                    mCaptureObject.setDone(true);
-
-                    String cropValue = null;
-                    Uri saveUri = null;
-
-                    Bundle myExtras = getIntent().getExtras();
-                    if (myExtras != null) {
-                        saveUri = (Uri) myExtras.getParcelable(MediaStore.EXTRA_OUTPUT);
-                        cropValue = myExtras.getString("crop");
-                    }
-
-
-                    if (cropValue == null) {
-                        /*
-                         * First handle the no crop case -- just return the value.  If the caller
-                         * specifies a "save uri" then write the data to it's stream.  Otherwise,
-                         * pass back a scaled down version of the bitmap directly in the extras.
-                         */
-                        if (saveUri != null) {
-                            OutputStream outputStream = null;
-                            try {
-                                outputStream = mContentResolver.openOutputStream(saveUri);
-                                bitmap.compress(Bitmap.CompressFormat.JPEG, 75, outputStream);
-                                outputStream.close();
-
-                                setResult(RESULT_OK);
-                                finish();
-                            } catch (IOException ex) {
-                                //
-                            } finally {
-                                if (outputStream != null) {
-                                    try {
-                                        outputStream.close();
-                                    } catch (IOException ex) {
-
-                                    }
-                                }
-                            }
-                        } else {
-                            float scale = .5F;
-                            Matrix m = new Matrix();
-                            m.setScale(scale, scale);
-
-                            bitmap = Bitmap.createBitmap(bitmap, 0, 0,
-                                    bitmap.getWidth(),
-                                    bitmap.getHeight(),
-                                    m, true);
-
-                            setResult(RESULT_OK, new Intent("inline-data").putExtra("data", bitmap));
-                            finish();
-                        }
-                    }
-                    else {
-                        /*
-                         * Save the image to a temp file and invoke the cropper
-                         */
-                        Uri tempUri = null;
-                        FileOutputStream tempStream = null;
-                        try {
-                            File path = getFileStreamPath(sTempCropFilename);
-                            path.delete();
-                            tempStream = openFileOutput(sTempCropFilename, 0);
-                            bitmap.compress(Bitmap.CompressFormat.JPEG, 75, tempStream);
-                            tempStream.close();
-                            tempUri = Uri.fromFile(path);
-                        } catch (FileNotFoundException ex) {
-                            setResult(Activity.RESULT_CANCELED);
-                            finish();
-                            return true;
-                        } catch (IOException ex) {
-                            setResult(Activity.RESULT_CANCELED);
-                            finish();
-                            return true;
-                        } finally {
-                            if (tempStream != null) {
-                                try {
-                                    tempStream.close();
-                                } catch (IOException ex) {
-
-                                }
-                            }
-                        }
-
-                        Bundle newExtras = new Bundle();
-                        if (cropValue.equals("circle"))
-                            newExtras.putString("circleCrop", "true");
-                        if (saveUri != null)
-                            newExtras.putParcelable(MediaStore.EXTRA_OUTPUT, saveUri);
-                        else
-                            newExtras.putBoolean("return-data", true);
-
-                        Intent cropIntent = new Intent();
-                        cropIntent.setClass(Camera.this, CropImage.class);
-                        cropIntent.setData(tempUri);
-                        cropIntent.putExtras(newExtras);
-
-                        startActivityForResult(cropIntent, CROP_MSG);
-                    }
-                    return true;
-                }
-            });
-
-            menu.add(MenuHelper.IMAGE_SAVING_ITEM, MENU_SAVE_NEW_PHOTO, 0, R.string.camera_takenewphoto).setOnMenuItemClickListener(new OnMenuItemClickListener() {
-                public boolean onMenuItemClick(MenuItem item) {
-                    keep();
-                    return true;
-                }
-            });
+            // No options menu for attach mode.
+            return false;
         } else {
             addBaseMenuItems(menu);
             MenuHelper.addImageMenuItems(
@@ -1627,10 +1724,5 @@
         });
         item.setIcon(android.R.drawable.ic_menu_preferences);
     }
-
-    private void cancelRestartPreviewTimeout() {
-        mHandler.removeMessages(RESTART_PREVIEW);
-    }
-
 }
 
diff --git a/src/com/android/camera/CropImage.java b/src/com/android/camera/CropImage.java
index 9542ce0..5250b56 100644
--- a/src/com/android/camera/CropImage.java
+++ b/src/com/android/camera/CropImage.java
@@ -434,6 +434,7 @@
 
         findViewById(R.id.discard).setOnClickListener(new android.view.View.OnClickListener() {
             public void onClick(View v) {
+                setResult(RESULT_CANCELED);
                 finish();
             }
         });
diff --git a/src/com/android/camera/GalleryPicker.java b/src/com/android/camera/GalleryPicker.java
index 44f8fc2..cf883dd 100644
--- a/src/com/android/camera/GalleryPicker.java
+++ b/src/com/android/camera/GalleryPicker.java
@@ -73,7 +73,6 @@
 
     Dialog mMediaScanningDialog;
 
-    MenuItem mFlipItem;
     SharedPreferences mPrefs;
 
     boolean mPausing = false;
@@ -96,8 +95,49 @@
                     true,
                     true);
         }
-        mAdapter.notifyDataSetChanged();
-        mAdapter.init(!unmounted && !scanning);
+        if (mAdapter != null) {
+            mAdapter.notifyDataSetChanged();
+            mAdapter.init(!unmounted && !scanning);
+        }
+
+        if (!unmounted) {
+            // Warn the user if space is getting low
+            Thread t = new Thread(new Runnable() {
+                public void run() {
+
+                    // Check available space only if we are writable
+                    if (ImageManager.hasStorage()) {
+                        String storageDirectory = Environment.getExternalStorageDirectory().toString();
+                        StatFs stat = new StatFs(storageDirectory);
+                        long remaining = (long)stat.getAvailableBlocks() * (long)stat.getBlockSize();
+                        if (remaining < LOW_STORAGE_THRESHOLD) {
+
+                            mHandler.post(new Runnable() {
+                                public void run() {
+                                    Toast.makeText(GalleryPicker.this.getApplicationContext(),
+                                        R.string.not_enough_space, 5000).show();
+                                }
+                            });
+                        }
+                    }
+                }
+            });
+            t.start();
+        }
+
+        // If we just have zero or one folder, open it. (We shouldn't have just one folder
+        // any more, but we can have zero folders.)
+        mNoImagesView.setVisibility(View.GONE);
+        if (!scanning) {
+            int numItems = mAdapter.mItems.size();
+            if (numItems == 0) {
+                mNoImagesView.setVisibility(View.VISIBLE);
+            } else if (numItems == 1) {
+                mAdapter.mItems.get(0).launch(this);
+                finish();
+                return;
+            }
+        }
     }
 
     @Override
@@ -201,6 +241,7 @@
 
     static class Item implements Comparable<Item>{
         // The type is also used as the sort order
+        public final static int TYPE_NONE = -1;
         public final static int TYPE_ALL_IMAGES = 0;
         public final static int TYPE_ALL_VIDEOS = 1;
         public final static int TYPE_CAMERA_IMAGES = 2;
@@ -329,14 +370,16 @@
             images.deactivate();
             notifyDataSetInvalidated();
 
-            // If just one
-            addBucketIfNotEmpty(Item.TYPE_ALL_IMAGES, null, R.string.all_images);
-            addBucketIfNotEmpty(Item.TYPE_ALL_VIDEOS, null, R.string.all_videos);
+            // Conditionally add all-images and all-videos folders.
+            addBucket(Item.TYPE_ALL_IMAGES, null,
+                    Item.TYPE_CAMERA_IMAGES, cameraBucketId, R.string.all_images);
+            addBucket(Item.TYPE_ALL_VIDEOS, null,
+                    Item.TYPE_CAMERA_VIDEOS, cameraBucketId, R.string.all_videos);
 
             if (cameraBucketId != null) {
-                addBucketIfNotEmpty(Item.TYPE_CAMERA_IMAGES, cameraBucketId,
+                addBucket(Item.TYPE_CAMERA_IMAGES, cameraBucketId,
                         R.string.gallery_camera_bucket_name);
-                addBucketIfNotEmpty(Item.TYPE_CAMERA_VIDEOS, cameraBucketId,
+                addBucket(Item.TYPE_CAMERA_VIDEOS, cameraBucketId,
                         R.string.gallery_camera_videos_bucket_name);
             }
 
@@ -401,7 +444,36 @@
             mWorkerThread.toBackground();
         }
 
-        private void addBucketIfNotEmpty(int itemType, String bucketId, int labelId) {
+        /**
+         * Add a bucket, but only if it's interesting.
+         * Interesting means non-empty and not duplicated by the
+         * corresponding camera bucket.
+         */
+        private void addBucket(int itemType, String bucketId,
+                int cameraItemType, String cameraBucketId,
+                int labelId) {
+            int itemCount = bucketItemCount(
+                    Item.convertItemTypeToIncludedMediaType(itemType), bucketId);
+            if (itemCount == 0) {
+                return; // Bucket is empty, so don't show it.
+            }
+            int cameraItemCount = 0;
+            if (cameraBucketId != null) {
+                cameraItemCount = bucketItemCount(
+                        Item.convertItemTypeToIncludedMediaType(cameraItemType), cameraBucketId);
+            }
+            if (cameraItemCount == itemCount) {
+                return; // Bucket is the same as the camera bucket, so don't show it.
+            }
+            mItems.add(new Item(itemType, bucketId, getResources().getString(labelId)));
+        }
+
+        /**
+         * Add a bucket, but only if it's interesting.
+         * Interesting means non-empty.
+         */
+        private void addBucket(int itemType, String bucketId,
+                int labelId) {
             if (!isEmptyBucket(Item.convertItemTypeToIncludedMediaType(itemType), bucketId)) {
                 mItems.add(new Item(itemType, bucketId, getResources().getString(labelId)));
             }
@@ -489,49 +561,10 @@
 
         registerReceiver(mReceiver, intentFilter);
         MenuHelper.requestOrientation(this, mPrefs);
-
-        // Warn the user if space is getting low
-        Thread t = new Thread(new Runnable() {
-            public void run() {
-
-                // Check available space only if we are writable
-                if (ImageManager.hasStorage()) {
-                    String storageDirectory = Environment.getExternalStorageDirectory().toString();
-                    StatFs stat = new StatFs(storageDirectory);
-                    long remaining = (long)stat.getAvailableBlocks() * (long)stat.getBlockSize();
-                    if (remaining < LOW_STORAGE_THRESHOLD) {
-
-                        mHandler.post(new Runnable() {
-                            public void run() {
-                                Toast.makeText(GalleryPicker.this.getApplicationContext(),
-                                    R.string.not_enough_space, 5000).show();
-                            }
-                        });
-                    }
-                }
-            }
-        });
-        t.start();
-
-        // If we just have zero or one folder, open it. (We shouldn't have just one folder
-        // any more, but we can have zero folders.)
-        mNoImagesView.setVisibility(View.GONE);
-        if (!scanning) {
-            int numItems = mAdapter.mItems.size();
-            if (numItems == 0) {
-                mNoImagesView.setVisibility(View.VISIBLE);
-            } else if (numItems == 1) {
-                // Not sure we can ever get here any more.
-                android.net.Uri uri = Images.Media.INTERNAL_CONTENT_URI;
-                Intent intent = new Intent(Intent.ACTION_VIEW, uri);
-                startActivity(intent);
-                finish();
-                return;
-            }
-        }
     }
 
 
+
     private void setBackgrounds(Resources r) {
         mFrameGalleryMask = r.getDrawable(R.drawable.frame_gallery_preview_album_mask);
 
@@ -644,7 +677,6 @@
         super.onCreateOptionsMenu(menu);
 
         MenuHelper.addCaptureMenuItems(menu, this);
-        mFlipItem = MenuHelper.addFlipOrientation(menu, this, mPrefs);
 
         menu.add(0, 0, 5, R.string.camerasettings)
         .setOnMenuItemClickListener(new OnMenuItemClickListener() {
@@ -661,12 +693,6 @@
         return true;
     }
 
-    @Override
-    public boolean onPrepareOptionsMenu(android.view.Menu menu) {
-        MenuHelper.setFlipOrientationEnabled(this, mFlipItem);
-        return true;
-    }
-
     private boolean isEmptyBucket(int mediaTypes, String bucketId) {
         // TODO: Find a more efficient way of calculating this
         ImageManager.IImageList list = createImageList(mediaTypes, bucketId);
@@ -678,6 +704,16 @@
         }
     }
 
+    private int bucketItemCount(int mediaTypes, String bucketId) {
+        // TODO: Find a more efficient way of calculating this
+        ImageManager.IImageList list = createImageList(mediaTypes, bucketId);
+        try {
+            return list.getCount();
+        }
+        finally {
+            list.deactivate();
+        }
+    }
     private ImageManager.IImageList createImageList(int mediaTypes, String bucketId) {
         return ImageManager.instance().allImages(
                 this,
diff --git a/src/com/android/camera/ImageGallery2.java b/src/com/android/camera/ImageGallery2.java
index 92e9c57..d58f04c 100644
--- a/src/com/android/camera/ImageGallery2.java
+++ b/src/com/android/camera/ImageGallery2.java
@@ -73,7 +73,6 @@
 
     private Dialog mMediaScanningDialog;
 
-    private MenuItem mFlipItem;
     private MenuItem mSlideShowItem;
     private SharedPreferences mPrefs;
 
@@ -187,7 +186,10 @@
     private Runnable mDeletePhotoRunnable = new Runnable() {
         public void run() {
             mGvs.clearCache();
-            mAllImages.removeImage(mSelectedImageGetter.getCurrentImage());
+            IImage currentImage = mSelectedImageGetter.getCurrentImage();
+            if (currentImage != null) {
+                mAllImages.removeImage(currentImage);
+            }
             mGvs.invalidate();
             mGvs.requestLayout();
             mGvs.start();
@@ -356,8 +358,10 @@
         switch (requestCode) {
             case CROP_MSG: {
                 if (Config.LOGV) Log.v(TAG, "onActivityResult " + data);
-                setResult(resultCode, data);
-                finish();
+                if (resultCode == RESULT_OK) {
+                    setResult(resultCode, data);
+                    finish();
+                }
                 break;
             }
             case VIEW_MSG: {
@@ -504,7 +508,6 @@
         mThumbnailCheckThread = new CameraThread(new Runnable() {
             public void run() {
                 android.content.res.Resources resources = getResources();
-                boolean loadingVideos = mInclusion == ImageManager.INCLUDE_VIDEOS;
                 final TextView progressTextView = (TextView) findViewById(R.id.loading_text);
                 final String progressTextFormatString = resources.getString(R.string.loading_progress_format_string);
 
@@ -547,7 +550,8 @@
                         return !mPausing;
                     }
                 };
-                allImages(true).checkThumbnails(r);
+                ImageManager.IImageList imageList = allImages(true);
+                imageList.checkThumbnails(r, imageList.getCount());
                 mWakeLock.release();
                 mThumbnailCheckThread = null;
                 mHandler.post(new Runnable() {
@@ -572,12 +576,13 @@
     @Override
     public boolean onCreateOptionsMenu(android.view.Menu menu) {
         MenuItem item;
-        MenuHelper.addCaptureMenuItems(menu, this);
-        if ((mInclusion & ImageManager.INCLUDE_IMAGES) != 0) {
-            mSlideShowItem = addSlideShowMenu(menu, 5);
+        if (! isPickIntent()) {
+            MenuHelper.addCaptureMenuItems(menu, this);
+            if ((mInclusion & ImageManager.INCLUDE_IMAGES) != 0) {
+                mSlideShowItem = addSlideShowMenu(menu, 5);
 
+            }
         }
-        mFlipItem = MenuHelper.addFlipOrientation(menu, this, mPrefs);
 
         item = menu.add(0, 0, 1000, R.string.camerasettings);
         item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@@ -599,9 +604,10 @@
         if ((mInclusion & ImageManager.INCLUDE_IMAGES) != 0) {
             boolean videoSelected = isVideoSelected();
             // TODO: Only enable slide show if there is at least one image in the folder.
-            mSlideShowItem.setEnabled(!videoSelected);
+            if (mSlideShowItem != null) {
+                mSlideShowItem.setEnabled(!videoSelected);
+            }
         }
-        MenuHelper.setFlipOrientationEnabled(this, mFlipItem);
 
         return true;
     }
@@ -745,7 +751,7 @@
             setVerticalScrollBarEnabled(true);
             initializeScrollbars(context.obtainStyledAttributes(android.R.styleable.View));
 
-            mGestureDetector = new GestureDetector(new SimpleOnGestureListener() {
+             mGestureDetector = new GestureDetector(context, new SimpleOnGestureListener() {
                 @Override
                 public boolean onDown(MotionEvent e) {
                     if (mScroller != null && !mScroller.isFinished()) {
@@ -1037,7 +1043,7 @@
                             loadNext();
 
                             synchronized (ImageBlockManager.this) {
-                                if (workCounter == mWorkCounter) {
+                                if ((workCounter == mWorkCounter) && (! mDone)) {
                                     try {
                                         ImageBlockManager.this.wait();
                                     } catch (InterruptedException ex) {
diff --git a/src/com/android/camera/ImageManager.java b/src/com/android/camera/ImageManager.java
index 4354e92..b21b243 100755
--- a/src/com/android/camera/ImageManager.java
+++ b/src/com/android/camera/ImageManager.java
@@ -63,7 +63,7 @@
  */
 public class ImageManager {
     public static final String CAMERA_IMAGE_BUCKET_NAME =
-        Environment.getExternalStorageDirectory().toString() + "/dcim/Camera";
+        Environment.getExternalStorageDirectory().toString() + "/DCIM/Camera";
     public static final String CAMERA_IMAGE_BUCKET_ID = getBucketId(CAMERA_IMAGE_BUCKET_NAME);
 
     /**
@@ -830,7 +830,7 @@
         }
 
         String randomAccessFilePath(int version) {
-            String directoryName = Environment.getExternalStorageDirectory().toString() + "/dcim/.thumbnails";
+            String directoryName = Environment.getExternalStorageDirectory().toString() + "/DCIM/.thumbnails";
             String path = directoryName + "/.thumbdata" + version + "-" + mUri.hashCode();
             return path;
         }
@@ -1035,25 +1035,6 @@
             return bitmap;
         }
 
-        private Bitmap createVideoThumbnail(String filePath) {
-            Bitmap bitmap = null;
-            MediaMetadataRetriever retriever = new MediaMetadataRetriever();
-            try {
-                retriever.setMode(MediaMetadataRetriever.MODE_CAPTURE_FRAME_ONLY);
-                retriever.setDataSource(filePath);
-                bitmap = retriever.captureFrame();
-            } catch (RuntimeException ex) {
-                // Assume this is a corrupt video file.
-            } finally {
-                try {
-                    retriever.release();
-                } catch (RuntimeException ex) {
-                    // Ignore failures while cleaning up.
-                }
-            }
-            return bitmap;
-        }
-
         // returns id
         public long checkThumbnail(BaseImage existingImage, Cursor c, int i) {
             long magic, fileMagic = 0, id;
@@ -1114,13 +1095,13 @@
                     }
                 }
                 if (filePath != null) {
-                    bitmap = createThumbnailFromEXIF(filePath, id);
-                    if (bitmap == null) {
-                        String mimeType = c.getString(indexMimeType());
-                        boolean isVideo = isVideoMimeType(mimeType);
-                        if (isVideo) {
-                            bitmap = createVideoThumbnail(filePath);
-                        } else {
+                    String mimeType = c.getString(indexMimeType());
+                    boolean isVideo = isVideoMimeType(mimeType);
+                    if (isVideo) {
+                        bitmap = createVideoThumbnail(filePath);
+                    } else {
+                        bitmap = createThumbnailFromEXIF(filePath, id);
+                        if (bitmap == null) {
                             bitmap = createThumbnailFromUri(c, id);
                         }
                     }
@@ -1166,13 +1147,13 @@
             }
         }
 
-        public void checkThumbnails(ThumbCheckCallback cb) {
+        public void checkThumbnails(ThumbCheckCallback cb, int totalThumbnails) {
             Cursor c = Images.Media.query(
                     mContentResolver,
                     mBaseUri,
                     new String[] { "_id", "mini_thumb_magic" },
-                    "mini_thumb_magic isnull and " + sWhereClause,
-                    sAcceptableImageTypes,
+                    thumbnailWhereClause(),
+                    thumbnailWhereClauseArgs(),
                     "_id ASC");
 
             int count = c.getCount();
@@ -1201,7 +1182,6 @@
             c = getCursor();
             try {
                 if (VERBOSE) Log.v(TAG, "checkThumbnails found " + c.getCount());
-                int max = c.getCount();
                 int current = 0;
                 for (int i = 0; i < c.getCount(); i++) {
                     try {
@@ -1211,7 +1191,7 @@
                         break;
                     }
                     if (cb != null) {
-                        if (!cb.checking(current, max)) {
+                        if (!cb.checking(current, totalThumbnails)) {
                             if (VERBOSE) Log.v(TAG, "got false from checking... break <<<<<<<<<<<<<<<<<<<<<<<<");
                             break;
                         }
@@ -1228,6 +1208,14 @@
             }
         }
 
+        protected String thumbnailWhereClause() {
+            return sMiniThumbIsNull + " and " + sWhereClause;
+        }
+
+        protected String[] thumbnailWhereClauseArgs() {
+            return sAcceptableImageTypes;
+        }
+
         public void commitChanges() {
             synchronized (mCursor) {
                 mCursor.commitUpdates();
@@ -1696,7 +1684,7 @@
             public boolean checking(int current, int count);
         }
 
-        public abstract void checkThumbnails(ThumbCheckCallback cb);
+        public abstract void checkThumbnails(ThumbCheckCallback cb, int totalCount);
 
         public abstract void commitChanges();
 
@@ -2085,6 +2073,7 @@
 
     final static private String sWhereClause = "(" + Images.Media.MIME_TYPE + "=? or " + Images.Media.MIME_TYPE + "=?" + ")";
     final static private String[] sAcceptableImageTypes = new String[] { "image/jpeg", "image/png" };
+    final static private String sMiniThumbIsNull = "mini_thumb_magic isnull";
 
     private static final String[] IMAGE_PROJECTION = new String[] {
             "_id",
@@ -2362,7 +2351,7 @@
         }
 
         @Override
-        public void checkThumbnails(ThumbCheckCallback cb) {
+        public void checkThumbnails(ThumbCheckCallback cb, int totalCount) {
             // do nothing
         }
 
@@ -2465,13 +2454,12 @@
             }
         }
 
-        public void checkThumbnails(ThumbCheckCallback cb) {
-            // TODO this isn't quite right because we need to get the
-            // total from each sub item and provide that in the callback
-            final IImageList sublist[] = mSubList;
-            final int length = sublist.length;
-            for (int i = 0; i < length; i++)
-                sublist[i].checkThumbnails(cb);
+        public void checkThumbnails(ThumbCheckCallback cb, int totalThumbnails) {
+            for (IImageList i : mSubList) {
+                int count = i.getCount();
+                i.checkThumbnails(cb, totalThumbnails);
+                totalThumbnails -= count;
+            }
         }
 
         public void commitChanges() {
@@ -3284,7 +3272,6 @@
         HashMap<String, String> hash = new HashMap<String, String>();
         if (c != null && c.moveToFirst()) {
             do {
-                Log.e(TAG, "id: " + c.getString(1) + " display_name: " + c.getString(0));
                 hash.put(c.getString(1), c.getString(0));
             } while (c.moveToNext());
         }
@@ -3303,6 +3290,16 @@
             return null;
         }
 
+        @Override
+        protected String thumbnailWhereClause() {
+            return sMiniThumbIsNull;
+        }
+
+        @Override
+        protected String[] thumbnailWhereClauseArgs() {
+            return null;
+        }
+
         protected Cursor createCursor() {
             Cursor c =
                 Images.Media.query(
@@ -3366,13 +3363,14 @@
             return thumbnail;
         }
 
-        private final Bitmap sDefaultThumbnail = Bitmap.createBitmap(32, 32, Bitmap.Config.RGB_565);
 
         private String sortOrder() {
-            return Video.Media.DATE_MODIFIED + (mSort == SORT_ASCENDING ? " ASC " : " DESC");
+            return Video.Media.DATE_TAKEN + (mSort == SORT_ASCENDING ? " ASC " : " DESC");
         }
     }
 
+    private final static Bitmap sDefaultThumbnail = Bitmap.createBitmap(32, 32, Bitmap.Config.RGB_565);
+
     /**
      * Represents a particular video and provides access
      * to the underlying data and two thumbnail bitmaps
@@ -3537,10 +3535,10 @@
              sb.append("" + mId);
              return sb.toString();
          }
-
-         private final Bitmap sNoImageBitmap = Bitmap.createBitmap(128, 128, Bitmap.Config.RGB_565);
     }
 
+    private final static Bitmap sNoImageBitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.RGB_565);
+
     /*
      * How much quality to use when storing the thumbnail.
      */
@@ -3900,7 +3898,8 @@
     public IImageList emptyImageList() {
         return
         new IImageList() {
-            public void checkThumbnails(com.android.camera.ImageManager.IImageList.ThumbCheckCallback cb) {
+            public void checkThumbnails(ImageManager.IImageList.ThumbCheckCallback cb,
+                    int totalThumbnails) {
             }
 
             public void commitChanges() {
@@ -3936,10 +3935,11 @@
             public void removeImageAt(int i) {
             }
 
-            public void removeOnChangeListener(com.android.camera.ImageManager.IImageList.OnChange changeCallback) {
+            public void removeOnChangeListener(ImageManager.IImageList.OnChange changeCallback) {
             }
 
-            public void setOnChangeListener(com.android.camera.ImageManager.IImageList.OnChange changeCallback, Handler h) {
+            public void setOnChangeListener(ImageManager.IImageList.OnChange changeCallback,
+                    Handler h) {
             }
 
         };
@@ -4027,7 +4027,7 @@
     // Create a temporary file to see whether a volume is really writeable. It's important not to
     // put it in the root directory which may have a limit on the number of files.
     static private boolean checkFsWritable() {
-        String directoryName = Environment.getExternalStorageDirectory().toString() + "/dcim";
+        String directoryName = Environment.getExternalStorageDirectory().toString() + "/DCIM";
         File directory = new File(directoryName);
         if (!directory.isDirectory()) {
             if (!directory.mkdirs()) {
@@ -4100,4 +4100,30 @@
             Log.v(TAG, ">>>>>>>>>>>>>>>>>>>>>>>>> isMediaScannerScanning returning " + result);
         return result;
     }
+
+    /**
+     * Create a video thumbnail for a video. May return null if the video is corrupt.
+     * @param filePath
+     * @return
+     */
+    public static Bitmap createVideoThumbnail(String filePath) {
+        Bitmap bitmap = null;
+        MediaMetadataRetriever retriever = new MediaMetadataRetriever();
+        try {
+            retriever.setMode(MediaMetadataRetriever.MODE_CAPTURE_FRAME_ONLY);
+            retriever.setDataSource(filePath);
+            bitmap = retriever.captureFrame();
+        } catch(IllegalArgumentException ex) {
+            // Assume this is a corrupt video file
+        } catch (RuntimeException ex) {
+            // Assume this is a corrupt video file.
+        } finally {
+            try {
+                retriever.release();
+            } catch (RuntimeException ex) {
+                // Ignore failures while cleaning up.
+            }
+        }
+        return bitmap;
+    }
 }
diff --git a/src/com/android/camera/MenuHelper.java b/src/com/android/camera/MenuHelper.java
index 1976444..d4358f6 100644
--- a/src/com/android/camera/MenuHelper.java
+++ b/src/com/android/camera/MenuHelper.java
@@ -16,13 +16,15 @@
 
 package com.android.camera;
 
+import java.util.ArrayList;
+
 import android.app.Activity;
 import android.app.AlertDialog;
-import android.app.Dialog;
 import android.content.ActivityNotFoundException;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.SharedPreferences;
+import android.content.res.Configuration;
 import android.media.MediaMetadataRetriever;
 import android.net.Uri;
 import android.os.Environment;
@@ -37,16 +39,10 @@
 import android.view.SubMenu;
 import android.view.View;
 import android.view.MenuItem.OnMenuItemClickListener;
-import android.widget.Button;
-import android.widget.CheckBox;
-import android.widget.EditText;
 import android.widget.ImageView;
-import android.widget.Spinner;
 import android.widget.TextView;
 import android.widget.Toast;
 
-import java.util.ArrayList;
-
 import com.android.camera.ImageManager.IImage;
 
 public class MenuHelper {
@@ -357,8 +353,14 @@
 
                                     String codec = retriever.extractMetadata(
                                                 MediaMetadataRetriever.METADATA_KEY_CODEC);
-                                    ((TextView)d.findViewById(R.id.details_codec_value))
-                                        .setText(codec);
+
+                                    if (codec == null) {
+                                        d.findViewById(R.id.details_codec_row).
+                                            setVisibility(View.GONE);
+                                    } else {
+                                        ((TextView)d.findViewById(R.id.details_codec_value))
+                                            .setText(codec);
+                                    }
                                 } catch(RuntimeException ex) {
                                     // Assume this is a corrupt video file.
                                 } finally {
@@ -531,9 +533,26 @@
     }
 
     static void gotoCameraImageGallery(Activity activity) {
+        gotoGallery(activity, R.string.gallery_camera_bucket_name, ImageManager.INCLUDE_IMAGES);
+    }
+
+    static void gotoCameraVideoGallery(Activity activity) {
+        gotoGallery(activity, R.string.gallery_camera_videos_bucket_name,
+                ImageManager.INCLUDE_VIDEOS);
+    }
+
+    static private void gotoGallery(Activity activity, int windowTitleId, int mediaTypes) {
         Uri target = Images.Media.INTERNAL_CONTENT_URI.buildUpon().appendQueryParameter("bucketId",
                 ImageManager.CAMERA_IMAGE_BUCKET_ID).build();
         Intent intent = new Intent(Intent.ACTION_VIEW, target);
+        intent.putExtra("windowTitle", activity.getString(windowTitleId));
+        intent.putExtra("mediaTypes", mediaTypes);
+        // Request unspecified so that we match the current camera orientation rather than
+        // matching the "flip orientation" preference.
+        // Disabled because people don't care for it. Also it's
+        // not as compelling now that we have implemented have quick orientation flipping.
+        // intent.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION,
+        //        android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
         try {
             activity.startActivity(intent);
         } catch (ActivityNotFoundException e) {
@@ -575,20 +594,22 @@
     }
     static MenuItem addFlipOrientation(Menu menu, final Activity activity, final SharedPreferences prefs) {
         // position 41 after rotate
+        // D
         return menu
                 .add(Menu.CATEGORY_SECONDARY, 304, 41, R.string.flip_orientation)
                 .setOnMenuItemClickListener(
                         new MenuItem.OnMenuItemClickListener() {
             public boolean onMenuItemClick(MenuItem item) {
-                int current = activity.getRequestedOrientation();
+                // Check what our actual orientation is
+                int current = activity.getResources().getConfiguration().orientation;
                 int newOrientation = android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
-                if (current == android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
+                if (current == Configuration.ORIENTATION_LANDSCAPE) {
                     newOrientation = android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
                 }
                 SharedPreferences.Editor editor = prefs.edit();
                 editor.putInt("nuorientation", newOrientation);
                 editor.commit();
-                requestOrientation(activity, prefs);
+                requestOrientation(activity, prefs, true);
                 return true;
             }
         })
@@ -596,15 +617,24 @@
     }
 
     static void requestOrientation(Activity activity, SharedPreferences prefs) {
+        requestOrientation(activity, prefs, false);
+    }
+
+    static private void requestOrientation(Activity activity, SharedPreferences prefs,
+            boolean ignoreIntentExtra) {
         int req = prefs.getInt("nuorientation",
                 android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
         // A little trick: use USER instead of UNSPECIFIED, so we ignore the
         // orientation set by the activity below.  It may have forced a landscape
         // orientation, which the user has now cleared here.
-        activity.setRequestedOrientation(
-                req == android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
-                        ? android.content.pm.ActivityInfo.SCREEN_ORIENTATION_USER
-                        : req);
+        if (req == android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) {
+            req = android.content.pm.ActivityInfo.SCREEN_ORIENTATION_USER;
+        }
+        if (! ignoreIntentExtra) {
+            Intent intent = activity.getIntent();
+            req = intent.getIntExtra(MediaStore.EXTRA_SCREEN_ORIENTATION, req);
+        }
+        activity.setRequestedOrientation(req);
     }
 
     static void setFlipOrientationEnabled(Activity activity, MenuItem flipItem) {
@@ -628,13 +658,20 @@
         return durationValue;
     }
 
-
     public static void showStorageToast(Activity activity) {
+      showStorageToast(activity, calculatePicturesRemaining());
+    }
+
+    public static void showStorageToast(Activity activity, int remaining) {
         String noStorageText = null;
-        int remaining = calculatePicturesRemaining();
 
         if (remaining == MenuHelper.NO_STORAGE_ERROR) {
-            noStorageText = activity.getString(R.string.no_storage);
+            String state = Environment.getExternalStorageState();
+            if (state == Environment.MEDIA_CHECKING) {
+                noStorageText = activity.getString(R.string.preparing_sd);
+            } else {
+                noStorageText = activity.getString(R.string.no_storage);
+            }
         } else if (remaining < 1) {
             noStorageText = activity.getString(R.string.not_enough_space);
         }
diff --git a/src/com/android/camera/MovieView.java b/src/com/android/camera/MovieView.java
index b93336c..091cc28 100644
--- a/src/com/android/camera/MovieView.java
+++ b/src/com/android/camera/MovieView.java
@@ -50,6 +50,11 @@
     private View        mProgressView;
     private boolean		mFinishOnCompletion;
     private Uri			mUri;
+
+    // State maintained for proper onPause/OnResume behaviour.
+    private int mPositionWhenPaused = -1;
+    private boolean mWasPlayingWhenPaused = false;
+
     public MovieView()
     {
     }
@@ -172,17 +177,42 @@
         if ("content".equalsIgnoreCase(scheme)) {
             ContentValues values = new ContentValues();
             values.put(Video.VideoColumns.BOOKMARK, Integer.toString(bookmark));
-            getContentResolver().update(mUri, values, null, null);
-        }
+            try {
+                getContentResolver().update(mUri, values, null, null);
+            } catch (SecurityException ex) {
+                // Ignore, can happen if we try to set the bookmark on a read-only resource
+                // such as a video attached to GMail.
+            } catch (SQLiteException e) {
+                // ignore. can happen if the content doesn't support a bookmark column.
+            }
+       }
     }
 
     @Override
     public void onPause() {
         mHandler.removeCallbacksAndMessages(null);
         setBookmark(mVideoView.getCurrentPosition());
+
+        mPositionWhenPaused = mVideoView.getCurrentPosition();
+        mWasPlayingWhenPaused = mVideoView.isPlaying();
+        mVideoView.stopPlayback();
+
         super.onPause();
     }
 
+    @Override
+    public void onResume() {
+        if (mPositionWhenPaused >= 0) {
+            mVideoView.setVideoURI(mUri);
+            mVideoView.seekTo(mPositionWhenPaused);
+            if (mWasPlayingWhenPaused) {
+                mVideoView.start();
+            }
+        }
+
+        super.onResume();
+    }
+
     Handler mHandler = new Handler() {
         @Override
         public void handleMessage(Message msg) {
diff --git a/src/com/android/camera/SlideShow.java b/src/com/android/camera/SlideShow.java
index 2be99ac..23c7d4a 100644
--- a/src/com/android/camera/SlideShow.java
+++ b/src/com/android/camera/SlideShow.java
@@ -284,7 +284,7 @@
             throw new UnsupportedOperationException();
         }
 
-        public void checkThumbnails(ThumbCheckCallback cb) {
+        public void checkThumbnails(ThumbCheckCallback cb, int totalThumbnails) {
             // TODO Auto-generated method stub
 
         }
diff --git a/src/com/android/camera/VideoCamera.java b/src/com/android/camera/VideoCamera.java
index 4828b71..3474da6 100644
--- a/src/com/android/camera/VideoCamera.java
+++ b/src/com/android/camera/VideoCamera.java
@@ -20,11 +20,12 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Date;
 
 import android.app.Activity;
 import android.app.AlertDialog;
-import android.content.ActivityNotFoundException;
 import android.content.BroadcastReceiver;
 import android.content.ContentResolver;
 import android.content.ContentValues;
@@ -58,12 +59,14 @@
 import android.view.Window;
 import android.view.WindowManager;
 import android.view.MenuItem.OnMenuItemClickListener;
+import android.view.animation.AlphaAnimation;
 import android.view.animation.Animation;
 import android.widget.ImageView;
 import android.widget.TextView;
 import android.widget.Toast;
 
-public class VideoCamera extends Activity implements View.OnClickListener, SurfaceHolder.Callback {
+public class VideoCamera extends Activity implements View.OnClickListener,
+    ShutterButton.OnShutterButtonListener, SurfaceHolder.Callback {
 
     private static final String TAG = "videocamera";
 
@@ -119,8 +122,9 @@
 
     int mCurrentZoomIndex = 0;
 
-    private ImageView mModeIndicatorView;
+    private ShutterButton mShutterButton;
     private TextView mRecordingTimeView;
+    private boolean mHasSdCard;
 
     ArrayList<MenuItem> mGalleryItems = new ArrayList<MenuItem>();
 
@@ -136,7 +140,7 @@
             switch (msg.what) {
 
                 case CLEAR_SCREEN_DELAY: {
-                    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+                    clearScreenOnFlag();
                     break;
                 }
 
@@ -185,9 +189,11 @@
                 // TODO put up a "please wait" message
                 // TODO also listen for the media scanner finished message
                 showStorageToast();
+                mHasSdCard = true;
             } else if (action.equals(Intent.ACTION_MEDIA_UNMOUNTED)) {
                 // SD card unavailable
                 showStorageToast();
+                mHasSdCard = false;
             } else if (action.equals(Intent.ACTION_MEDIA_SCANNER_STARTED)) {
                 Toast.makeText(VideoCamera.this, getResources().getString(R.string.wait), 5000);
             } else if (action.equals(Intent.ACTION_MEDIA_SCANNER_FINISHED)) {
@@ -215,9 +221,6 @@
 
         //setDefaultKeyMode(DEFAULT_KEYS_SHORTCUT);
         requestWindowFeature(Window.FEATURE_PROGRESS);
-
-        Window win = getWindow();
-        win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
         setContentView(R.layout.video_camera);
 
         mVideoPreview = (VideoPreview) findViewById(R.id.camera_preview);
@@ -236,12 +239,13 @@
         mPostPictureAlert = findViewById(R.id.post_picture_panel);
 
         int[] ids = new int[]{R.id.play, R.id.share, R.id.discard,
-                R.id.cancel, R.id.attach, R.id.mode_indicator};
+                R.id.cancel, R.id.attach};
         for (int id : ids) {
             findViewById(id).setOnClickListener(this);
         }
 
-        mModeIndicatorView = (ImageView) findViewById(R.id.mode_indicator);
+        mShutterButton = (ShutterButton) findViewById(R.id.shutter_button);
+        mShutterButton.setOnShutterButtonListener(this);
         mRecordingTimeView = (TextView) findViewById(R.id.recording_time);
         mVideoFrame = (ImageView) findViewById(R.id.video_frame);
     }
@@ -253,35 +257,13 @@
         }
         super.onStart();
 
-        final View hintView = findViewById(R.id.hint_toast);
-        if (hintView != null)
-            hintView.setVisibility(View.GONE);
-
         Thread t = new Thread(new Runnable() {
             public void run() {
                 final boolean storageOK = getAvailableStorage() >= LOW_STORAGE_THRESHOLD;
-                if (hintView == null)
-                    return;
 
-                if (storageOK) {
+                if (!storageOK) {
                     mHandler.post(new Runnable() {
                         public void run() {
-                            hintView.setVisibility(View.VISIBLE);
-                        }
-                    });
-                    mHandler.postDelayed(new Runnable() {
-                        public void run() {
-                            Animation a = new android.view.animation.AlphaAnimation(1F, 0F);
-                            a.setDuration(500);
-                            a.startNow();
-                            hintView.setAnimation(a);
-                            hintView.setVisibility(View.GONE);
-                        }
-                    }, 3000);
-                } else {
-                    mHandler.post(new Runnable() {
-                        public void run() {
-                            hintView.setVisibility(View.GONE);
                             showStorageToast();
                         }
                     });
@@ -325,19 +307,29 @@
                 doPlayCurrentVideo();
                 break;
             }
+        }
+    }
 
-            case R.id.mode_indicator:
-                if (mMediaRecorderRecording) {
-                    stopVideoRecordingAndDisplayDialog();
-                } else if (mVideoFrame.getVisibility() == View.VISIBLE) {
-                    doStartCaptureMode();
-                } else {
-                    startVideoRecording();
+    public void onShutterButtonFocus(ShutterButton button, boolean pressed) {
+        switch (button.getId()) {
+            case R.id.shutter_button:
+                if (pressed) {
+                    if (mMediaRecorderRecording) {
+                        stopVideoRecordingAndDisplayDialog();
+                    } else if (mVideoFrame.getVisibility() == View.VISIBLE) {
+                        doStartCaptureMode();
+                    } else {
+                        startVideoRecording();
+                    }
                 }
                 break;
         }
     }
 
+    public void onShutterButtonClick(ShutterButton button) {
+        // Do nothing (everything happens in onShutterButtonFocus).
+    }
+
     private void doStartCaptureMode() {
         if (isVideoCaptureIntent()) {
             discardCurrentVideoAndStartPreview();
@@ -379,7 +371,8 @@
             Log.v(TAG, "onResume " + this.hashCode());
         }
         super.onResume();
-        mHandler.sendEmptyMessageDelayed(CLEAR_SCREEN_DELAY, SCREEN_DELAY);
+
+        setScreenTimeoutLong();
 
         mPausing = false;
 
@@ -391,6 +384,7 @@
         intentFilter.addDataScheme("file");
         registerReceiver(mReceiver, intentFilter);
         mDidRegister = true;
+        mHasSdCard = ImageManager.hasStorage();
 
         mBlackout.setVisibility(View.INVISIBLE);
         if (mVideoFrameBitmap == null) {
@@ -406,7 +400,7 @@
             Log.v(TAG, "onStop " + this.hashCode());
         }
         stopVideoRecording();
-        mHandler.removeMessages(CLEAR_SCREEN_DELAY);
+        setScreenTimeoutSystemDefault();
         super.onStop();
     }
 
@@ -427,12 +421,12 @@
             mDidRegister = false;
         }
         mBlackout.setVisibility(View.VISIBLE);
+        setScreenTimeoutSystemDefault();
     }
 
     @Override
     public boolean onKeyDown(int keyCode, KeyEvent event) {
-        mHandler.sendEmptyMessageDelayed(CLEAR_SCREEN_DELAY, SCREEN_DELAY);
-        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+        setScreenTimeoutLong();
 
         switch (keyCode) {
             case KeyEvent.KEYCODE_BACK:
@@ -445,19 +439,31 @@
                     return true;
                 }
                 break;
-            case KeyEvent.KEYCODE_FOCUS:
-                return true;
             case KeyEvent.KEYCODE_CAMERA:
-            case KeyEvent.KEYCODE_DPAD_CENTER:
                 if (event.getRepeatCount() == 0) {
-                    if (!mMediaRecorderRecording) {
-                        startVideoRecording();
+                    // If we get a dpad center event without any focused view, move the
+                    // focus to the shutter button and press it.
+                    if (mShutterButton.isInTouchMode()) {
+                        mShutterButton.requestFocusFromTouch();
                     } else {
-                        stopVideoRecordingAndDisplayDialog();
+                        mShutterButton.requestFocus();
                     }
+                    mShutterButton.setPressed(true);
                     return true;
                 }
                 return true;
+            case KeyEvent.KEYCODE_DPAD_CENTER:
+                if (event.getRepeatCount() == 0) {
+                    // If we get a dpad center event without any focused view, move the
+                    // focus to the shutter button and press it.
+                    if (mShutterButton.isInTouchMode()) {
+                        mShutterButton.requestFocusFromTouch();
+                    } else {
+                        mShutterButton.requestFocus();
+                    }
+                    mShutterButton.setPressed(true);
+                }
+                break;
             case KeyEvent.KEYCODE_MENU:
                 if (mMediaRecorderRecording) {
                     stopVideoRecordingAndDisplayDialog();
@@ -469,6 +475,16 @@
         return super.onKeyDown(keyCode, event);
     }
 
+    @Override
+    public boolean onKeyUp(int keyCode, KeyEvent event) {
+        switch(keyCode) {
+        case KeyEvent.KEYCODE_CAMERA:
+            mShutterButton.setPressed(false);
+            return true;
+        }
+        return super.onKeyUp(keyCode, event);
+    }
+
     public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
         stopVideoRecording();
         initializeVideo();
@@ -483,13 +499,7 @@
     }
 
     void gotoGallery() {
-        Uri target = Video.Media.INTERNAL_CONTENT_URI;
-        Intent intent = new Intent(Intent.ACTION_VIEW, target);
-        try {
-            startActivity(intent);
-        } catch (ActivityNotFoundException e) {
-            Log.e(TAG, "Could not start gallery activity", e);
-        }
+        MenuHelper.gotoCameraVideoGallery(this);
     }
 
     @Override
@@ -509,36 +519,41 @@
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
         super.onCreateOptionsMenu(menu);
-        addBaseMenuItems(menu);
-        MenuHelper.addImageMenuItems(
-                menu,
-                MenuHelper.INCLUDE_ALL & ~MenuHelper.INCLUDE_ROTATE_MENU,
-                false,
-                VideoCamera.this,
-                mHandler,
 
-                // Handler for deletion
-                new Runnable() {
-                    public void run() {
-                        // What do we do here?
-                        // mContentResolver.delete(uri, null, null);
-                    }
-                },
-                new MenuHelper.MenuInvoker() {
-                    public void run(final MenuHelper.MenuCallback cb) {
-                    }
-                });
+        if (isVideoCaptureIntent()) {
+            // No options menu for attach mode.
+            return false;
+        } else {
+            addBaseMenuItems(menu);
+            MenuHelper.addImageMenuItems(
+                    menu,
+                    MenuHelper.INCLUDE_ALL & ~MenuHelper.INCLUDE_ROTATE_MENU,
+                    false,
+                    VideoCamera.this,
+                    mHandler,
 
-        MenuItem gallery = menu.add(MenuHelper.IMAGE_SAVING_ITEM, MENU_SAVE_GALLERY_PHOTO, 0,
-                R.string.camera_gallery_photos_text).setOnMenuItemClickListener(
-                        new MenuItem.OnMenuItemClickListener() {
-            public boolean onMenuItemClick(MenuItem item) {
-                gotoGallery();
-                return true;
-            }
-        });
-        gallery.setIcon(android.R.drawable.ic_menu_gallery);
+                    // Handler for deletion
+                    new Runnable() {
+                        public void run() {
+                            // What do we do here?
+                            // mContentResolver.delete(uri, null, null);
+                        }
+                    },
+                    new MenuHelper.MenuInvoker() {
+                        public void run(final MenuHelper.MenuCallback cb) {
+                        }
+                    });
 
+            MenuItem gallery = menu.add(MenuHelper.IMAGE_SAVING_ITEM, MENU_SAVE_GALLERY_PHOTO, 0,
+                    R.string.camera_gallery_photos_text).setOnMenuItemClickListener(
+                            new MenuItem.OnMenuItemClickListener() {
+                public boolean onMenuItemClick(MenuItem item) {
+                    gotoGallery();
+                    return true;
+                }
+            });
+            gallery.setIcon(android.R.drawable.ic_menu_gallery);
+        }
         return true;
     }
 
@@ -731,7 +746,11 @@
         String cameraDirPath = ImageManager.CAMERA_IMAGE_BUCKET_NAME;
         File cameraDir = new File(cameraDirPath);
         cameraDir.mkdirs();
-        String filename = cameraDirPath + "/" + Long.toString(dateTaken) + ".3gp";
+        SimpleDateFormat dateFormat = new SimpleDateFormat(
+                getString(R.string.video_file_name_format));
+        Date date = new Date(dateTaken);
+        String filepart = dateFormat.format(date);
+        String filename = cameraDirPath + "/" + filepart + ".3gp";
         ContentValues values = new ContentValues(7);
         values.put(Video.Media.TITLE, title);
         values.put(Video.Media.DISPLAY_NAME, displayName);
@@ -809,11 +828,17 @@
         Log.v(TAG, "startVideoRecording");
         if (!mMediaRecorderRecording) {
 
+            if (!mHasSdCard) {
+                Toast.makeText(this, getString(
+                        R.string.no_storage), Toast.LENGTH_LONG).show();
+                Log.v(TAG, "No SD card, ignore start recording");
+                return;
+            }
+
             // Check mMediaRecorder to see whether it is initialized or not.
             if (mMediaRecorder == null) {
                 initializeVideo();
             }
-            getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
             try {
                 mMediaRecorder.start();   // Recording is now started
             } catch (RuntimeException e) {
@@ -826,6 +851,7 @@
             mRecordingTimeView.setText("");
             mRecordingTimeView.setVisibility(View.VISIBLE);
             mHandler.sendEmptyMessage(UPDATE_RECORD_TIME);
+            setScreenTimeoutInfinite();
         }
     }
 
@@ -833,7 +859,7 @@
         int drawableId = showRecording ? R.drawable.ic_camera_bar_indicator_record
             : R.drawable.ic_camera_indicator_video;
         Drawable drawable = getResources().getDrawable(drawableId);
-        mModeIndicatorView.setImageDrawable(drawable);
+        mShutterButton.setImageDrawable(drawable);
     }
 
     private void stopVideoRecordingAndDisplayDialog() {
@@ -846,16 +872,33 @@
     }
 
     private void showPostRecordingAlert() {
-        boolean isPick = isVideoCaptureIntent();
-        int pickVisible = isPick ? View.VISIBLE : View.GONE;
-        int normalVisible = ! isPick ? View.VISIBLE : View.GONE;
-        mPostPictureAlert.findViewById(R.id.share).setVisibility(normalVisible);
-        mPostPictureAlert.findViewById(R.id.discard).setVisibility(normalVisible);
-        mPostPictureAlert.findViewById(R.id.attach).setVisibility(pickVisible);
-        mPostPictureAlert.findViewById(R.id.cancel).setVisibility(pickVisible);
+        int[] pickIds = {R.id.attach, R.id.cancel};
+        int[] normalIds = {R.id.share, R.id.discard};
+        int[] alwaysOnIds = {R.id.play};
+        int[] hideIds = pickIds;
+        int[] connectIds = normalIds;
+        if (isVideoCaptureIntent()) {
+            hideIds = normalIds;
+            connectIds = pickIds;
+        }
+        for(int id : hideIds) {
+            mPostPictureAlert.findViewById(id).setVisibility(View.GONE);
+        }
+        connectAndFadeIn(connectIds);
+        connectAndFadeIn(alwaysOnIds);
         mPostPictureAlert.setVisibility(View.VISIBLE);
     }
 
+    private void connectAndFadeIn(int[] connectIds) {
+        for(int id : connectIds) {
+            View view = mPostPictureAlert.findViewById(id);
+            view.setOnClickListener(this);
+            Animation animation = new AlphaAnimation(0F, 1F);
+            animation.setDuration(500);
+            view.setAnimation(animation);
+        }
+    }
+
     private void hidePostPictureAlert() {
         mPostPictureAlert.setVisibility(View.INVISIBLE);
     }
@@ -878,14 +921,44 @@
             releaseMediaRecorder();
             updateRecordingIndicator(false);
             mRecordingTimeView.setVisibility(View.GONE);
-            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+            setScreenTimeoutLong();
         }
         if (mNeedToRegisterRecording) {
             registerVideo();
             mNeedToRegisterRecording = false;
         }
-        if (mCameraVideoFilename != null){
-            deleteVideoFile(mCameraVideoFilename);
+        mCameraVideoFilename = null;
+    }
+
+    private void setScreenTimeoutSystemDefault() {
+        mHandler.removeMessages(CLEAR_SCREEN_DELAY);
+        clearScreenOnFlag();
+    }
+
+    private void setScreenTimeoutLong() {
+        mHandler.removeMessages(CLEAR_SCREEN_DELAY);
+        setScreenOnFlag();
+        mHandler.sendEmptyMessageDelayed(CLEAR_SCREEN_DELAY, SCREEN_DELAY);
+    }
+
+    private void setScreenTimeoutInfinite() {
+        mHandler.removeMessages(CLEAR_SCREEN_DELAY);
+        setScreenOnFlag();
+    }
+
+    private void clearScreenOnFlag() {
+        Window w = getWindow();
+        final int keepScreenOnFlag = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
+        if ((w.getAttributes().flags & keepScreenOnFlag) != 0) {
+            w.clearFlags(keepScreenOnFlag);
+        }
+    }
+
+    private void setScreenOnFlag() {
+        Window w = getWindow();
+        final int keepScreenOnFlag = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
+        if ((w.getAttributes().flags & keepScreenOnFlag) == 0) {
+            w.addFlags(keepScreenOnFlag);
         }
     }
 
@@ -897,7 +970,7 @@
 
     private void acquireAndShowVideoFrame() {
         recycleVideoFrameBitmap();
-        mVideoFrameBitmap = createVideoThumbnail(mCurrentVideoFilename);
+        mVideoFrameBitmap = ImageManager.createVideoThumbnail(mCurrentVideoFilename);
         mVideoFrame.setImageBitmap(mVideoFrameBitmap);
         mVideoFrame.setVisibility(View.VISIBLE);
     }
@@ -914,19 +987,5 @@
             mVideoFrameBitmap = null;
         }
     }
-
-    private Bitmap createVideoThumbnail(String filePath) {
-        Bitmap bitmap = null;
-        MediaMetadataRetriever retriever = new MediaMetadataRetriever();
-        try {
-            retriever.setMode(MediaMetadataRetriever.MODE_CAPTURE_FRAME_ONLY);
-            retriever.setDataSource(filePath);
-            bitmap = retriever.captureFrame();
-        } finally {
-            retriever.release();
-        }
-        return bitmap;
-    }
-
 }
 
diff --git a/src/com/android/camera/ViewImage.java b/src/com/android/camera/ViewImage.java
index 9760562..293f26b 100644
--- a/src/com/android/camera/ViewImage.java
+++ b/src/com/android/camera/ViewImage.java
@@ -16,8 +16,9 @@
 
 package com.android.camera;
 
+import java.util.Random;
+
 import android.app.Activity;
-import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
@@ -28,12 +29,11 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
-import android.os.PowerManager;
+import android.preference.PreferenceManager;
 import android.provider.MediaStore;
 import android.util.AttributeSet;
 import android.util.Config;
 import android.util.Log;
-import android.view.GestureDetector;
 import android.view.KeyEvent;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -43,21 +43,17 @@
 import android.view.WindowManager;
 import android.view.View.OnClickListener;
 import android.view.ViewGroup.LayoutParams;
-import android.view.animation.Animation;
 import android.view.animation.AlphaAnimation;
+import android.view.animation.Animation;
 import android.view.animation.AnimationUtils;
 import android.widget.LinearLayout;
 import android.widget.RelativeLayout;
 import android.widget.Scroller;
-import android.widget.TextView;
 import android.widget.Toast;
 import android.widget.ZoomControls;
-import android.preference.PreferenceManager;
 
 import com.android.camera.ImageManager.IImage;
 
-import java.util.Random;
-
 public class ViewImage extends Activity implements View.OnClickListener
 {
     static final String TAG = "ViewImage";
@@ -86,6 +82,7 @@
     private boolean mFullScreenInNormalMode;
     private boolean mShowActionIcons;
     private View mActionIconPanel;
+    private View mShutterButton;
 
     private boolean mSortAscending = false;
     private int mSlideShowInterval;
@@ -100,7 +97,6 @@
     private Animation [] mSlideShowOutAnimation;
 
     private SharedPreferences mPrefs;
-    private MenuItem mFlipItem;
 
     private View mNextImageView, mPrevImageView;
     private Animation mHideNextImageViewAnimation = new AlphaAnimation(1F, 0F);
@@ -130,8 +126,9 @@
 
     private MenuHelper.MenuItemsResult mImageMenuRunnable;
 
-    Runnable mDismissOnScreenControlsRunnable;
-    ZoomControls mZoomControls;
+    private Runnable mDismissOnScreenControlsRunnable;
+    private ZoomControls mZoomControls;
+    private boolean mCameraReviewMode;
 
     public ViewImage() {
     }
@@ -176,7 +173,9 @@
         if (mZoomControls != null) {
             if (mZoomControls.getVisibility() == View.GONE) {
                 mZoomControls.show();
-                mZoomControls.requestFocus();       // this shouldn't be necessary
+                if (! mShowActionIcons) {
+                    mZoomControls.requestFocus();       // this shouldn't be necessary
+                }
             }
             updateNextPrevControls();
             scheduleDismissOnScreenControls();
@@ -210,21 +209,22 @@
             mDismissOnScreenControlsRunnable = new Runnable() {
                 public void run() {
                     mZoomControls.hide();
+                    if (!mShowActionIcons) {
+                        if (mNextImageView.getVisibility() == View.VISIBLE) {
+                            Animation a = mHideNextImageViewAnimation;
+                            a.setDuration(500);
+                            a.startNow();
+                            mNextImageView.setAnimation(a);
+                            mNextImageView.setVisibility(View.INVISIBLE);
+                        }
 
-                    if (mNextImageView.getVisibility() == View.VISIBLE) {
-                        Animation a = mHideNextImageViewAnimation;
-                        a.setDuration(500);
-                        a.startNow();
-                        mNextImageView.setAnimation(a);
-                        mNextImageView.setVisibility(View.INVISIBLE);
-                    }
-
-                    if (mPrevImageView.getVisibility() == View.VISIBLE) {
-                        Animation a = mHidePrevImageViewAnimation;
-                        a.setDuration(500);
-                        a.startNow();
-                        mPrevImageView.setAnimation(a);
-                        mPrevImageView.setVisibility(View.INVISIBLE);
+                        if (mPrevImageView.getVisibility() == View.VISIBLE) {
+                            Animation a = mHidePrevImageViewAnimation;
+                            a.setDuration(500);
+                            a.startNow();
+                            mPrevImageView.setAnimation(a);
+                            mPrevImageView.setVisibility(View.INVISIBLE);
+                        }
                     }
                 }
             };
@@ -251,12 +251,12 @@
         return (Intent.ACTION_PICK.equals(action) || Intent.ACTION_GET_CONTENT.equals(action));
     }
 
-    private static final boolean sDragLeftRight = false;
     private static final boolean sUseBounce = false;
     private static final boolean sAnimateTransitions = false;
 
     static public class ImageViewTouch extends ImageViewTouchBase {
         private ViewImage mViewImage;
+        private boolean mEnableTrackballScroll;
 
         private static int TOUCH_STATE_REST = 0;
         private static int TOUCH_STATE_LEFT_PRESS = 1;
@@ -277,6 +277,10 @@
             mViewImage = (ViewImage) context;
         }
 
+        public void setEnableTrackballScroll(boolean enable) {
+            mEnableTrackballScroll = enable;
+        }
+
         protected void postTranslate(float dx, float dy, boolean bounceOK) {
             super.postTranslate(dx, dy);
             if (dx != 0F || dy != 0F)
@@ -390,6 +394,14 @@
         @Override
         public boolean onKeyDown(int keyCode, KeyEvent event)
         {
+            // Don't respond to arrow keys if trackball scrolling is not enabled
+            if (!mEnableTrackballScroll) {
+                if ((keyCode >= KeyEvent.KEYCODE_DPAD_UP)
+                        && (keyCode <= KeyEvent.KEYCODE_DPAD_RIGHT)) {
+                    return super.onKeyDown(keyCode, event);
+                }
+            }
+
             int current = mViewImage.mCurrentPosition;
 
             int nextImagePos = -2; // default no next image
@@ -557,7 +569,7 @@
     {
         super.onCreateOptionsMenu(menu);
 
-        if (true) {
+        if (! mCameraReviewMode) {
             MenuItem item = menu.add(Menu.CATEGORY_SECONDARY, 203, 0, R.string.slide_show);
             item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                 public boolean onMenuItemClick(MenuItem item) {
@@ -570,8 +582,6 @@
             item.setIcon(android.R.drawable.ic_menu_slideshow);
         }
 
-        mFlipItem = MenuHelper.addFlipOrientation(menu, ViewImage.this, mPrefs);
-
         final SelectedImageGetter selectedImageGetter = new SelectedImageGetter() {
             public ImageManager.IImage getCurrentImage() {
                 return mAllImages.getImageAt(mCurrentPosition);
@@ -657,8 +667,6 @@
             mImageMenuRunnable.gettingReadyToOpen(menu, mAllImages.getImageAt(mCurrentPosition));
         }
 
-        MenuHelper.setFlipOrientationEnabled(this, mFlipItem);
-
         menu.findItem(MenuHelper.MENU_IMAGE_SHARE).setEnabled(isCurrentImageShareable());
 
         return true;
@@ -986,8 +994,10 @@
 
         ImageGetterCallback cb = new ImageGetterCallback() {
             public void completed(boolean wasCanceled) {
-                mImageViews[1].setFocusableInTouchMode(true);
-                mImageViews[1].requestFocus();
+                if (!mShowActionIcons) {
+                    mImageViews[1].setFocusableInTouchMode(true);
+                    mImageViews[1].requestFocus();
+                }
             }
 
             public boolean wantsThumbnail(int pos, int offset) {
@@ -1037,6 +1047,11 @@
     public void onCreate(Bundle instanceState)
     {
         super.onCreate(instanceState);
+        Intent intent = getIntent();
+        mCameraReviewMode = intent.getBooleanExtra("com.android.camera.ReviewMode", false);
+        mFullScreenInNormalMode = intent.getBooleanExtra(MediaStore.EXTRA_FULL_SCREEN, true);
+        mShowActionIcons = intent.getBooleanExtra(MediaStore.EXTRA_SHOW_ACTION_ICONS, false);
+
         mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
 
         setDefaultKeyMode(DEFAULT_KEYS_SHORTCUT);
@@ -1047,6 +1062,10 @@
         mImageViews[1] = (ImageViewTouch) findViewById(R.id.image2);
         mImageViews[2] = (ImageViewTouch) findViewById(R.id.image3);
 
+        for(ImageViewTouch v : mImageViews) {
+            v.setEnableTrackballScroll(!mShowActionIcons);
+        }
+
         mScroller = (ScrollHandler)findViewById(R.id.scroller);
         makeGetter();
 
@@ -1066,16 +1085,16 @@
 
         mSlideShowImageViews[0] = (ImageViewTouch) findViewById(R.id.image1_slideShow);
         mSlideShowImageViews[1] = (ImageViewTouch) findViewById(R.id.image2_slideShow);
-        for (int i = 0; i < mSlideShowImageViews.length; i++) {
-            mSlideShowImageViews[i].setImageBitmapResetBase(null, true, true);
-            mSlideShowImageViews[i].setVisibility(View.INVISIBLE);
+        for (ImageViewTouch v : mSlideShowImageViews) {
+            v.setImageBitmapResetBase(null, true, true);
+            v.setVisibility(View.INVISIBLE);
+            v.setEnableTrackballScroll(!mShowActionIcons);
         }
 
         mActionIconPanel = findViewById(R.id.action_icon_panel);
         {
             int[] pickIds = {R.id.attach, R.id.cancel};
             int[] normalIds = {R.id.gallery, R.id.setas, R.id.share, R.id.discard};
-            int[] alwaysOnIds = {R.id.mode_indicator };
             int[] hideIds = pickIds;
             int[] connectIds = normalIds;
             if (isPickIntent()) {
@@ -1083,15 +1102,18 @@
                 connectIds = pickIds;
             }
             for(int id : hideIds) {
-                findViewById(id).setVisibility(View.GONE);
+                mActionIconPanel.findViewById(id).setVisibility(View.GONE);
             }
             for(int id : connectIds) {
-                findViewById(id).setOnClickListener(this);
-            }
-            for(int id : alwaysOnIds) {
-                findViewById(id).setOnClickListener(this);
+                View view = mActionIconPanel.findViewById(id);
+                view.setOnClickListener(this);
+                Animation animation = new AlphaAnimation(0F, 1F);
+                animation.setDuration(500);
+                view.setAnimation(animation);
             }
         }
+        mShutterButton = findViewById(R.id.shutter_button);
+        mShutterButton.setOnClickListener(this);
 
         Uri uri = getIntent().getData();
 
@@ -1107,10 +1129,6 @@
             return;
         }
         init(uri);
-        mFullScreenInNormalMode = getIntent().getBooleanExtra(
-                MediaStore.EXTRA_SHOW_ACTION_ICONS, false);
-        mShowActionIcons = getIntent().getBooleanExtra(
-                MediaStore.EXTRA_SHOW_ACTION_ICONS, false);
 
         Bundle b = getIntent().getExtras();
 
@@ -1124,6 +1142,7 @@
             }
             if (mShowActionIcons) {
                 mActionIconPanel.setVisibility(View.VISIBLE);
+                mShutterButton.setVisibility(View.VISIBLE);
             }
         }
 
@@ -1140,6 +1159,12 @@
         mNextImageView = findViewById(R.id.next_image);
         mPrevImageView = findViewById(R.id.prev_image);
 
+        if (mShowActionIcons) {
+            mNextImageView.setOnClickListener(this);
+            mNextImageView.setFocusable(true);
+            mPrevImageView.setOnClickListener(this);
+            mPrevImageView.setFocusable(true);
+        }
         setOrientation();
     }
 
@@ -1186,6 +1211,7 @@
                 ivt.clear();
             }
             mActionIconPanel.setVisibility(View.GONE);
+            mShutterButton.setVisibility(View.GONE);
 
             if (false) {
                 Log.v(TAG, "current is " + this.mSlideShowImageCurrent);
@@ -1237,6 +1263,7 @@
             }
             if (mShowActionIcons) {
                 mActionIconPanel.setVisibility(View.VISIBLE);
+                mShutterButton.setVisibility(View.VISIBLE);
             }
 
             ImageViewTouchBase dst = mImageViews[1];
@@ -1381,12 +1408,21 @@
         mGetter = new ImageGetter();
     }
 
-    private void init(Uri uri) {
+    private boolean desiredSortOrder() {
         String sortOrder = mPrefs.getString("pref_gallery_sort_key", null);
-        mSortAscending = false;
+        boolean sortAscending = false;
         if (sortOrder != null) {
-            mSortAscending = sortOrder.equals("ascending");
+            sortAscending = sortOrder.equals("ascending");
         }
+        if (mCameraReviewMode) {
+            // Force left-arrow older pictures, right-arrow newer pictures.
+            sortAscending = true;
+        }
+        return sortAscending;
+    }
+
+    private void init(Uri uri) {
+        mSortAscending = desiredSortOrder();
         int sort = mSortAscending ? ImageManager.SORT_ASCENDING : ImageManager.SORT_DESCENDING;
         mAllImages = ImageManager.makeImageList(uri, this, sort);
 
@@ -1436,12 +1472,7 @@
 
         ImageManager.IImage image = mAllImages.getImageAt(mCurrentPosition);
 
-        String sortOrder = mPrefs.getString("pref_gallery_sort_key", null);
-        boolean sortAscending = false;
-        if (sortOrder != null) {
-            sortAscending = sortOrder.equals("ascending");
-        }
-        if (sortAscending != mSortAscending) {
+        if (desiredSortOrder() != mSortAscending) {
             init(image.fullSizeImageUri());
         }
 
@@ -1496,8 +1527,12 @@
     public void onClick(View v) {
         switch (v.getId()) {
 
-        case R.id.mode_indicator: {
-            MenuHelper.gotoStillImageCapture(this);
+        case R.id.shutter_button: {
+            if (mCameraReviewMode) {
+                finish();
+            } else {
+                MenuHelper.gotoStillImageCapture(this);
+            }
         }
         break;
 
@@ -1507,7 +1542,11 @@
         break;
 
         case R.id.discard: {
-            MenuHelper.displayDeleteDialog(this, mDeletePhotoRunnable, true);
+            if (mCameraReviewMode) {
+                mDeletePhotoRunnable.run();
+            } else {
+                MenuHelper.deletePhoto(this, mDeletePhotoRunnable);
+            }
         }
         break;
 
@@ -1535,6 +1574,23 @@
             }
         }
         break;
+
+        case R.id.next_image: {
+            moveNextOrPrevious(1);
+        }
+        break;
+
+        case R.id.prev_image: {
+            moveNextOrPrevious(-1);
+        }
+        break;
+        }
+    }
+
+    private void moveNextOrPrevious(int delta) {
+        int nextImagePos = mCurrentPosition + delta;
+        if ((0 <= nextImagePos) && (nextImagePos < mAllImages.getCount())) {
+            setImage(nextImagePos);
         }
     }
 }
diff --git a/tests/Android.mk b/tests/Android.mk
index 714e078..f5972cb 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -1,3 +1,4 @@
+LOCAL_PATH:= $(call my-dir)
 include $(CLEAR_VARS)
 
 # We only want this apk build for tests.
@@ -14,3 +15,5 @@
 LOCAL_INSTRUMENTATION_FOR := Camera
 
 include $(BUILD_PACKAGE)
+
+
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
index b8074f5..1b7abd2 100644
--- a/tests/AndroidManifest.xml
+++ b/tests/AndroidManifest.xml
@@ -25,5 +25,10 @@
         android:targetPackage="com.android.camera"
         android:label="Camera Launch Performance">
     </instrumentation>
+    
+    <instrumentation android:name=".CameraStressTestRunner"
+         android:targetPackage="com.android.camera"
+         android:label="Camera Stress Test InstrumentationRunner">
+     </instrumentation>
 
 </manifest> 
diff --git a/tests/src/com/android/camera/CameraStressTestRunner.java b/tests/src/com/android/camera/CameraStressTestRunner.java
new file mode 100755
index 0000000..e34204c
--- /dev/null
+++ b/tests/src/com/android/camera/CameraStressTestRunner.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2009 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.tests;
+
+import android.test.InstrumentationTestRunner;
+import android.test.InstrumentationTestSuite;
+import com.android.camera.tests.stress.SwitchPreview;
+import com.android.camera.tests.stress.ImageCapture;
+
+import junit.framework.TestSuite;
+
+
+/**
+ * Instrumentation Test Runner for all Camera tests.
+ *
+ * Running all tests:
+ *
+ * adb shell am instrument -w \
+ *    com.android.camera.tests/.CameraStressTestRunner
+ */
+
+public class CameraStressTestRunner extends InstrumentationTestRunner {
+
+    @Override
+    public TestSuite getAllTests() {
+        TestSuite suite = new InstrumentationTestSuite(this);
+        suite.addTestSuite(SwitchPreview.class);
+        suite.addTestSuite(ImageCapture.class);
+        return suite;
+    }
+
+    @Override
+    public ClassLoader getLoader() {
+        return CameraStressTestRunner.class.getClassLoader();
+    }
+}
diff --git a/tests/src/com/android/camera/stress/ImageCapture.java b/tests/src/com/android/camera/stress/ImageCapture.java
new file mode 100755
index 0000000..dbb1f64
--- /dev/null
+++ b/tests/src/com/android/camera/stress/ImageCapture.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2009 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.tests.stress;
+
+import android.app.Activity;
+import android.app.Instrumentation;
+import android.test.ActivityInstrumentationTestCase2;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.test.suitebuilder.annotation.LargeTest;
+
+import com.android.camera.Camera;
+
+/**
+ * Junit / Instrumentation test case for camera test
+ * 
+ */
+
+public class ImageCapture extends ActivityInstrumentationTestCase2 <Camera> {
+    private String TAG = "ImageCapture";
+    private static final int TOTAL_NUMBER_OF_IMAGECAPTURE = 100;
+    private static final int TOTAL_NUMBER_OF_VIDEOCAPTURE = 100;
+    private static final long WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN = 1000;
+    private static final long WAIT_FOR_VIDEO_CAPTURE_TO_BE_TAKEN = 50000; //50seconds
+    private static final long WAIT_FOR_PREVIEW = 1000; //1 seconds
+
+    public ImageCapture() {
+        super("com.android.camera", Camera.class);       
+    }
+    
+    @Override 
+    protected void setUp() throws Exception {  
+        getActivity();
+        super.setUp();     
+    }
+    
+    @Override 
+    protected void tearDown() throws Exception {     
+        super.tearDown();              
+    }
+        
+    @LargeTest
+    public void testImageCapture() {
+        Instrumentation inst = getInstrumentation();
+        try {
+            for (int i = 0; i < TOTAL_NUMBER_OF_IMAGECAPTURE; i++) {
+                Thread.sleep(WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN);
+                inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_UP);
+                inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
+                Thread.sleep(WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN);
+            }
+        } catch (Exception e) {
+            Log.v(TAG, e.toString());
+        }
+            assertTrue("testImageCapture", true);
+    }
+    
+    @LargeTest
+    public void testVideoCapture() {
+        Instrumentation inst = getInstrumentation();
+        //Switch to the video mode
+        inst.sendKeyDownUpSync(KeyEvent.KEYCODE_MENU);
+        inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
+        try {
+            for (int i = 0; i < TOTAL_NUMBER_OF_VIDEOCAPTURE; i++) {
+                Thread.sleep(WAIT_FOR_PREVIEW);
+                inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_UP);
+                //record an video
+                inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
+                Thread.sleep(WAIT_FOR_VIDEO_CAPTURE_TO_BE_TAKEN);
+                inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
+                Thread.sleep(WAIT_FOR_PREVIEW);
+                inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
+            }
+        } catch (Exception e) {
+            Log.v(TAG, e.toString());
+        }
+            assertTrue("testVideoCapture", true);
+    }
+
+}
+    
diff --git a/tests/src/com/android/camera/stress/SwitchPreview.java b/tests/src/com/android/camera/stress/SwitchPreview.java
new file mode 100755
index 0000000..c00e553
--- /dev/null
+++ b/tests/src/com/android/camera/stress/SwitchPreview.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2009 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.tests.stress;
+
+import android.app.Activity;
+import android.app.Instrumentation;
+import android.test.ActivityInstrumentationTestCase2;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.test.suitebuilder.annotation.LargeTest;
+
+import com.android.camera.Camera;
+import com.android.camera.VideoCamera;
+
+/**
+ * Junit / Instrumentation test case for camera test
+ * 
+ */
+
+public class SwitchPreview extends ActivityInstrumentationTestCase2 <VideoCamera>{
+    private String TAG = "SwitchPreview";
+    private static final int TOTAL_NUMBER_OF_SWITCHING = 200;
+    private static final long WAIT_FOR_PREVIEW = 2000;
+    
+    
+    public SwitchPreview() {
+        super("com.android.camera", VideoCamera.class);      
+    }
+    
+    @Override 
+    protected void setUp() throws Exception {  
+        getActivity();
+        super.setUp();
+    }
+    
+    @Override 
+    protected void tearDown() throws Exception {   
+        getActivity().finish();
+        super.tearDown();              
+    }
+        
+    @LargeTest
+    public void testSwitchMode() {
+        //Switching the video and the video recorder mode
+        Instrumentation inst = getInstrumentation();
+        try{
+            for (int i=0; i< TOTAL_NUMBER_OF_SWITCHING; i++) {
+                Thread.sleep(WAIT_FOR_PREVIEW);
+                inst.sendKeyDownUpSync(KeyEvent.KEYCODE_MENU);
+                inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_LEFT);
+                inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
+                Thread.sleep(WAIT_FOR_PREVIEW);
+            }
+        } catch (Exception e){
+            Log.v(TAG, e.toString());
+        }
+            assertTrue("testSwitchMode",true);
+    }
+}
+