am 01ed85fb: Merge change Ic823abd0 into eclair

Merge commit '01ed85fbf71fd89db9d031d1cc5529afd7b624f0' into eclair-mr2

* commit '01ed85fbf71fd89db9d031d1cc5529afd7b624f0':
  Fix 2241232: Read system properties for quality setting.
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index efbaa3d..ec72fb7 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -58,21 +58,6 @@
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
         </activity>
-        <activity android:name="GalleryPicker" android:label="@string/gallery_picker_label"
-                android:configChanges="orientation|keyboardHidden"
-                android:icon="@drawable/ic_launcher_gallery"
-                android:clearTaskOnLaunch="true"
-                android:taskAffinity="android.task.pictures">
-        </activity>
-        <activity android:name="ImageGallery" android:label="@string/gallery_label"
-                android:configChanges="orientation|keyboardHidden"
-                android:icon="@drawable/ic_launcher_gallery">
-        </activity>
-        <activity android:name="CropImage"
-                android:process=":CropImage"
-                android:configChanges="orientation|keyboardHidden"
-                android:label="@string/crop_label">
-        </activity>
         <activity android:name="ReviewImage"
                 android:label="@string/view_label"
                 android:theme="@style/CustomTheme"
@@ -80,46 +65,6 @@
                 android:configChanges="orientation|keyboardHidden"
                 android:exported="true">
         </activity>
-        <activity android:name="ViewImage"
-                android:label="@string/view_label"
-                android:screenOrientation="behind"
-                android:configChanges="orientation|keyboardHidden">
-        </activity>
-        <activity android:name="MovieView"
-                android:label="@string/movieviewlabel"
-                android:screenOrientation="landscape"
-                android:configChanges="orientation|keyboardHidden"
-                android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">
-        </activity>
-        <activity android:name=".DeleteImage"
-                android:label="@string/delete_images_message"
-                android:theme="@style/Theme.DeleteImageDialog">
-        </activity>
-
-        <activity android:name="GallerySettings" android:label="@string/preferences_label">
-        </activity>
-
-        <activity android:name=".Wallpaper"
-                android:label="@string/camera_setas_wallpaper"
-                android:icon="@drawable/ic_launcher_gallery">
-        </activity>
-
-        <activity android:name=".PickWallpaper"
-                android:label="@string/camera_pick_wallpaper"
-                android:icon="@drawable/ic_launcher_gallery">
-        </activity>
-
-        <!-- We configure a widget by asking to pick a photo, then crop it, and store the config internally -->
-        <activity android:name="PhotoAppWidgetConfigure">
-        </activity>
-
-        <!-- We also allow direct binding where the caller provides a bitmap and
-             appWidgetId to bind.  We require the permission because this changes our
-             internal database without user confirmation. -->
-        <activity android:name="PhotoAppWidgetBind" android:exported="true"
-                android:theme="@android:style/Theme.NoDisplay"
-                android:permission="android.permission.BIND_APPWIDGET" />
-
     </application>
 </manifest>
 
diff --git a/res/anim/footer_appear.xml b/res/anim/footer_appear.xml
deleted file mode 100644
index 29e1c1d..0000000
--- a/res/anim/footer_appear.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 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.
-*/
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android" >
-    <translate
-        android:fromYDelta="+10%p"
-        android:toYDelta="0"
-        android:duration="300" />
-</set>
diff --git a/res/anim/footer_disappear.xml b/res/anim/footer_disappear.xml
deleted file mode 100644
index bb1d966..0000000
--- a/res/anim/footer_disappear.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 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.
-*/
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android" >
-    <translate
-        android:fromYDelta="0"
-        android:toYDelta="+10%p"
-        android:duration="300" />
-</set>
diff --git a/res/anim/slide_in.xml b/res/anim/slide_in.xml
deleted file mode 100644
index 0942e98..0000000
--- a/res/anim/slide_in.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 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.
--->
-
-<translate xmlns:android="http://schemas.android.com/apk/res/android"
-	android:fromXDelta="100%p"
-	android:toXDelta="0"
-	android:startOffset="0"
-	android:duration="400" />
diff --git a/res/anim/slide_in_vertical.xml b/res/anim/slide_in_vertical.xml
deleted file mode 100644
index dca8dac..0000000
--- a/res/anim/slide_in_vertical.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 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.
--->
-
-<translate xmlns:android="http://schemas.android.com/apk/res/android"
-	android:fromYDelta="100%p"
-	android:toYDelta="0"
-	android:startOffset="0"
-	android:duration="400" />
diff --git a/res/anim/slide_out.xml b/res/anim/slide_out.xml
deleted file mode 100644
index d99b225..0000000
--- a/res/anim/slide_out.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 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.
--->
-
-<translate xmlns:android="http://schemas.android.com/apk/res/android"
-	android:fromXDelta="0"
-	android:toXDelta="-100%p"
-	android:startOffset="0"
-	android:duration="400" />
diff --git a/res/anim/slide_out_vertical.xml b/res/anim/slide_out_vertical.xml
deleted file mode 100644
index 5cbea74..0000000
--- a/res/anim/slide_out_vertical.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 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.
--->
-
-<translate xmlns:android="http://schemas.android.com/apk/res/android"
-	android:fromYDelta="0"
-	android:toYDelta="-100%p"
-	android:startOffset="0"
-	android:duration="400" />
diff --git a/res/anim/transition_in.xml b/res/anim/transition_in.xml
deleted file mode 100644
index 2f037a3..0000000
--- a/res/anim/transition_in.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/* //device/apps/common/res/anim/fade_in.xml
-**
-** Copyright 2007, 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.
-*/
--->
-
-<alpha xmlns:android="http://schemas.android.com/apk/res/android"
-	android:fromAlpha="0.0"
-	android:toAlpha="1.0"
-	android:duration="1000" />
diff --git a/res/anim/transition_out.xml b/res/anim/transition_out.xml
deleted file mode 100644
index 4398f5d..0000000
--- a/res/anim/transition_out.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/* //device/apps/common/res/anim/fade_out.xml
-**
-** Copyright 2007, 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.
-*/
--->
-
-<alpha xmlns:android="http://schemas.android.com/apk/res/android"
-    android:fromAlpha="1.0"
-    android:toAlpha="0.0"
-    android:duration="1000"
-/>
diff --git a/res/drawable-hdpi/appwidget_bg.9.png b/res/drawable-hdpi/appwidget_bg.9.png
deleted file mode 100644
index 6861664..0000000
--- a/res/drawable-hdpi/appwidget_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/btn_check_buttonless_off.png b/res/drawable-hdpi/btn_check_buttonless_off.png
deleted file mode 100644
index bf58886..0000000
--- a/res/drawable-hdpi/btn_check_buttonless_off.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/btn_check_buttonless_on.png b/res/drawable-hdpi/btn_check_buttonless_on.png
deleted file mode 100644
index 324a6b0..0000000
--- a/res/drawable-hdpi/btn_check_buttonless_on.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/camera_crop_height.png b/res/drawable-hdpi/camera_crop_height.png
deleted file mode 100644
index dc157ed..0000000
--- a/res/drawable-hdpi/camera_crop_height.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/camera_crop_width.png b/res/drawable-hdpi/camera_crop_width.png
deleted file mode 100644
index b3f4ee0..0000000
--- a/res/drawable-hdpi/camera_crop_width.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/frame_gallery_preview_album.png b/res/drawable-hdpi/frame_gallery_preview_album.png
deleted file mode 100644
index acbd437..0000000
--- a/res/drawable-hdpi/frame_gallery_preview_album.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/frame_gallery_preview_album_mask.png b/res/drawable-hdpi/frame_gallery_preview_album_mask.png
deleted file mode 100644
index ff4ba21..0000000
--- a/res/drawable-hdpi/frame_gallery_preview_album_mask.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/frame_gallery_preview_album_pressed.png b/res/drawable-hdpi/frame_gallery_preview_album_pressed.png
deleted file mode 100644
index a974c6b..0000000
--- a/res/drawable-hdpi/frame_gallery_preview_album_pressed.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/frame_gallery_preview_album_selected.png b/res/drawable-hdpi/frame_gallery_preview_album_selected.png
deleted file mode 100644
index b95c6b7..0000000
--- a/res/drawable-hdpi/frame_gallery_preview_album_selected.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/frame_overlay_gallery_camera.png b/res/drawable-hdpi/frame_overlay_gallery_camera.png
deleted file mode 100644
index 729c4c9..0000000
--- a/res/drawable-hdpi/frame_overlay_gallery_camera.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/frame_overlay_gallery_folder.png b/res/drawable-hdpi/frame_overlay_gallery_folder.png
deleted file mode 100644
index 508fe51..0000000
--- a/res/drawable-hdpi/frame_overlay_gallery_folder.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/frame_overlay_gallery_video.png b/res/drawable-hdpi/frame_overlay_gallery_video.png
deleted file mode 100644
index 3249754..0000000
--- a/res/drawable-hdpi/frame_overlay_gallery_video.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_btn_actionmenu_attach_default.png b/res/drawable-hdpi/ic_btn_actionmenu_attach_default.png
deleted file mode 100644
index 9bb1bc6..0000000
--- a/res/drawable-hdpi/ic_btn_actionmenu_attach_default.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_btn_actionmenu_attach_pressed.png b/res/drawable-hdpi/ic_btn_actionmenu_attach_pressed.png
deleted file mode 100644
index 0614764..0000000
--- a/res/drawable-hdpi/ic_btn_actionmenu_attach_pressed.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_btn_actionmenu_attach_selected.png b/res/drawable-hdpi/ic_btn_actionmenu_attach_selected.png
deleted file mode 100644
index a5e1ddc..0000000
--- a/res/drawable-hdpi/ic_btn_actionmenu_attach_selected.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_btn_actionmenu_cancel_default.png b/res/drawable-hdpi/ic_btn_actionmenu_cancel_default.png
deleted file mode 100644
index 04fe74b..0000000
--- a/res/drawable-hdpi/ic_btn_actionmenu_cancel_default.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_btn_actionmenu_cancel_pressed.png b/res/drawable-hdpi/ic_btn_actionmenu_cancel_pressed.png
deleted file mode 100644
index ec3a9d9..0000000
--- a/res/drawable-hdpi/ic_btn_actionmenu_cancel_pressed.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_btn_actionmenu_cancel_selected.png b/res/drawable-hdpi/ic_btn_actionmenu_cancel_selected.png
deleted file mode 100644
index 33a9ee0..0000000
--- a/res/drawable-hdpi/ic_btn_actionmenu_cancel_selected.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_btn_actionmenu_play_default.png b/res/drawable-hdpi/ic_btn_actionmenu_play_default.png
deleted file mode 100644
index f8c2c62..0000000
--- a/res/drawable-hdpi/ic_btn_actionmenu_play_default.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_btn_actionmenu_play_pressed.png b/res/drawable-hdpi/ic_btn_actionmenu_play_pressed.png
deleted file mode 100644
index 2411d54..0000000
--- a/res/drawable-hdpi/ic_btn_actionmenu_play_pressed.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_btn_actionmenu_play_selected.png b/res/drawable-hdpi/ic_btn_actionmenu_play_selected.png
deleted file mode 100644
index 33cb377..0000000
--- a/res/drawable-hdpi/ic_btn_actionmenu_play_selected.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_error_mms_video_overlay.png b/res/drawable-hdpi/ic_error_mms_video_overlay.png
deleted file mode 100644
index df0564e..0000000
--- a/res/drawable-hdpi/ic_error_mms_video_overlay.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_gallery_empty2.png b/res/drawable-hdpi/ic_gallery_empty2.png
deleted file mode 100644
index 7658372..0000000
--- a/res/drawable-hdpi/ic_gallery_empty2.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_gallery_video_overlay.png b/res/drawable-hdpi/ic_gallery_video_overlay.png
deleted file mode 100644
index 0e3370e..0000000
--- a/res/drawable-hdpi/ic_gallery_video_overlay.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_launcher_gallery.png b/res/drawable-hdpi/ic_launcher_gallery.png
deleted file mode 100644
index 3e39baa..0000000
--- a/res/drawable-hdpi/ic_launcher_gallery.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_camera_video_view.png b/res/drawable-hdpi/ic_menu_camera_video_view.png
deleted file mode 100644
index 47bdfb6..0000000
--- a/res/drawable-hdpi/ic_menu_camera_video_view.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_multiselect_gallery.png b/res/drawable-hdpi/ic_menu_multiselect_gallery.png
deleted file mode 100644
index cdc83f3..0000000
--- a/res/drawable-hdpi/ic_menu_multiselect_gallery.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_missing_thumbnail_picture.png b/res/drawable-hdpi/ic_missing_thumbnail_picture.png
deleted file mode 100644
index f16b041..0000000
--- a/res/drawable-hdpi/ic_missing_thumbnail_picture.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_missing_thumbnail_video.png b/res/drawable-hdpi/ic_missing_thumbnail_video.png
deleted file mode 100644
index f6bff4e..0000000
--- a/res/drawable-hdpi/ic_missing_thumbnail_video.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/image_border_bg_focus_blue.9.png b/res/drawable-hdpi/image_border_bg_focus_blue.9.png
deleted file mode 100644
index cd6cde0..0000000
--- a/res/drawable-hdpi/image_border_bg_focus_blue.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/image_border_bg_normal.9.png b/res/drawable-hdpi/image_border_bg_normal.9.png
deleted file mode 100644
index 571c5dd..0000000
--- a/res/drawable-hdpi/image_border_bg_normal.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/image_border_bg_pressed_blue.9.png b/res/drawable-hdpi/image_border_bg_pressed_blue.9.png
deleted file mode 100644
index 36ccfb0..0000000
--- a/res/drawable-hdpi/image_border_bg_pressed_blue.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/indicator_autocrop.png b/res/drawable-hdpi/indicator_autocrop.png
deleted file mode 100644
index 73fa59e..0000000
--- a/res/drawable-hdpi/indicator_autocrop.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/photo_inner.9.png b/res/drawable-hdpi/photo_inner.9.png
deleted file mode 100644
index 8d27225..0000000
--- a/res/drawable-hdpi/photo_inner.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/appwidget_bg.9.png b/res/drawable-mdpi/appwidget_bg.9.png
deleted file mode 100644
index 8e7e3d7..0000000
--- a/res/drawable-mdpi/appwidget_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/btn_check_buttonless_off.png b/res/drawable-mdpi/btn_check_buttonless_off.png
deleted file mode 100755
index 45216dd..0000000
--- a/res/drawable-mdpi/btn_check_buttonless_off.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/btn_check_buttonless_on.png b/res/drawable-mdpi/btn_check_buttonless_on.png
deleted file mode 100755
index adf09fb..0000000
--- a/res/drawable-mdpi/btn_check_buttonless_on.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/camera_crop_height.png b/res/drawable-mdpi/camera_crop_height.png
deleted file mode 100644
index b089aec..0000000
--- a/res/drawable-mdpi/camera_crop_height.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/camera_crop_width.png b/res/drawable-mdpi/camera_crop_width.png
deleted file mode 100644
index 65216af..0000000
--- a/res/drawable-mdpi/camera_crop_width.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/frame_gallery_preview_album.png b/res/drawable-mdpi/frame_gallery_preview_album.png
deleted file mode 100644
index 5b92ee2..0000000
--- a/res/drawable-mdpi/frame_gallery_preview_album.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/frame_gallery_preview_album_mask.png b/res/drawable-mdpi/frame_gallery_preview_album_mask.png
deleted file mode 100644
index b053f30..0000000
--- a/res/drawable-mdpi/frame_gallery_preview_album_mask.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/frame_gallery_preview_album_pressed.png b/res/drawable-mdpi/frame_gallery_preview_album_pressed.png
deleted file mode 100644
index e3575ff..0000000
--- a/res/drawable-mdpi/frame_gallery_preview_album_pressed.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/frame_gallery_preview_album_selected.png b/res/drawable-mdpi/frame_gallery_preview_album_selected.png
deleted file mode 100644
index 222a38a..0000000
--- a/res/drawable-mdpi/frame_gallery_preview_album_selected.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/frame_overlay_gallery_camera.png b/res/drawable-mdpi/frame_overlay_gallery_camera.png
deleted file mode 100644
index e0c24a6..0000000
--- a/res/drawable-mdpi/frame_overlay_gallery_camera.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/frame_overlay_gallery_folder.png b/res/drawable-mdpi/frame_overlay_gallery_folder.png
deleted file mode 100644
index 05f64cc..0000000
--- a/res/drawable-mdpi/frame_overlay_gallery_folder.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/frame_overlay_gallery_video.png b/res/drawable-mdpi/frame_overlay_gallery_video.png
deleted file mode 100644
index 4b84854..0000000
--- a/res/drawable-mdpi/frame_overlay_gallery_video.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_btn_actionmenu_attach_default.png b/res/drawable-mdpi/ic_btn_actionmenu_attach_default.png
deleted file mode 100644
index c8f7ec7..0000000
--- a/res/drawable-mdpi/ic_btn_actionmenu_attach_default.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_btn_actionmenu_attach_pressed.png b/res/drawable-mdpi/ic_btn_actionmenu_attach_pressed.png
deleted file mode 100644
index 7753e5b..0000000
--- a/res/drawable-mdpi/ic_btn_actionmenu_attach_pressed.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_btn_actionmenu_attach_selected.png b/res/drawable-mdpi/ic_btn_actionmenu_attach_selected.png
deleted file mode 100644
index ca7e775..0000000
--- a/res/drawable-mdpi/ic_btn_actionmenu_attach_selected.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_btn_actionmenu_cancel_default.png b/res/drawable-mdpi/ic_btn_actionmenu_cancel_default.png
deleted file mode 100644
index ac7169a..0000000
--- a/res/drawable-mdpi/ic_btn_actionmenu_cancel_default.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_btn_actionmenu_cancel_pressed.png b/res/drawable-mdpi/ic_btn_actionmenu_cancel_pressed.png
deleted file mode 100644
index ecb1a1f..0000000
--- a/res/drawable-mdpi/ic_btn_actionmenu_cancel_pressed.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_btn_actionmenu_cancel_selected.png b/res/drawable-mdpi/ic_btn_actionmenu_cancel_selected.png
deleted file mode 100644
index 235ee88..0000000
--- a/res/drawable-mdpi/ic_btn_actionmenu_cancel_selected.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_btn_actionmenu_play_default.png b/res/drawable-mdpi/ic_btn_actionmenu_play_default.png
deleted file mode 100644
index eba780b..0000000
--- a/res/drawable-mdpi/ic_btn_actionmenu_play_default.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_btn_actionmenu_play_pressed.png b/res/drawable-mdpi/ic_btn_actionmenu_play_pressed.png
deleted file mode 100644
index 1caa2c2..0000000
--- a/res/drawable-mdpi/ic_btn_actionmenu_play_pressed.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_btn_actionmenu_play_selected.png b/res/drawable-mdpi/ic_btn_actionmenu_play_selected.png
deleted file mode 100644
index fea0ba0..0000000
--- a/res/drawable-mdpi/ic_btn_actionmenu_play_selected.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_error_mms_video_overlay.png b/res/drawable-mdpi/ic_error_mms_video_overlay.png
deleted file mode 100644
index 4f50072..0000000
--- a/res/drawable-mdpi/ic_error_mms_video_overlay.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_gallery_empty2.png b/res/drawable-mdpi/ic_gallery_empty2.png
deleted file mode 100644
index f950e08..0000000
--- a/res/drawable-mdpi/ic_gallery_empty2.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_gallery_video_overlay.png b/res/drawable-mdpi/ic_gallery_video_overlay.png
deleted file mode 100644
index ae263a7..0000000
--- a/res/drawable-mdpi/ic_gallery_video_overlay.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_launcher_gallery.png b/res/drawable-mdpi/ic_launcher_gallery.png
deleted file mode 100644
index 965fb71..0000000
--- a/res/drawable-mdpi/ic_launcher_gallery.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_camera_video_view.png b/res/drawable-mdpi/ic_menu_camera_video_view.png
deleted file mode 100644
index f7e52c2..0000000
--- a/res/drawable-mdpi/ic_menu_camera_video_view.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_multiselect_gallery.png b/res/drawable-mdpi/ic_menu_multiselect_gallery.png
deleted file mode 100644
index cb342c6..0000000
--- a/res/drawable-mdpi/ic_menu_multiselect_gallery.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_missing_thumbnail_picture.png b/res/drawable-mdpi/ic_missing_thumbnail_picture.png
deleted file mode 100644
index ebab487..0000000
--- a/res/drawable-mdpi/ic_missing_thumbnail_picture.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_missing_thumbnail_video.png b/res/drawable-mdpi/ic_missing_thumbnail_video.png
deleted file mode 100644
index b44d821..0000000
--- a/res/drawable-mdpi/ic_missing_thumbnail_video.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/image_border_bg_focus_blue.9.png b/res/drawable-mdpi/image_border_bg_focus_blue.9.png
deleted file mode 100644
index 89debd2..0000000
--- a/res/drawable-mdpi/image_border_bg_focus_blue.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/image_border_bg_normal.9.png b/res/drawable-mdpi/image_border_bg_normal.9.png
deleted file mode 100644
index 18e3607..0000000
--- a/res/drawable-mdpi/image_border_bg_normal.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/image_border_bg_pressed_blue.9.png b/res/drawable-mdpi/image_border_bg_pressed_blue.9.png
deleted file mode 100644
index 94fa74f..0000000
--- a/res/drawable-mdpi/image_border_bg_pressed_blue.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/indicator_autocrop.png b/res/drawable-mdpi/indicator_autocrop.png
deleted file mode 100644
index d960b1f..0000000
--- a/res/drawable-mdpi/indicator_autocrop.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/photo_inner.9.png b/res/drawable-mdpi/photo_inner.9.png
deleted file mode 100644
index 0e77c7b..0000000
--- a/res/drawable-mdpi/photo_inner.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/frame_gallery_preview.xml b/res/drawable/frame_gallery_preview.xml
deleted file mode 100644
index 546655e..0000000
--- a/res/drawable/frame_gallery_preview.xml
+++ /dev/null
@@ -1,31 +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_window_focused="false"
-        android:drawable="@drawable/frame_gallery_preview_album" />
-
-    <item android:state_selected="true" android:state_pressed="true"
-        android:drawable="@drawable/frame_gallery_preview_album_pressed" />
-
-    <item android:state_selected="false" android:state_pressed="true"
-        android:drawable="@drawable/frame_gallery_preview_album_pressed" />
-
-    <item android:state_selected="true"
-        android:drawable="@drawable/frame_gallery_preview_album_selected" />
-
-</selector>
diff --git a/res/drawable/grid_background.xml b/res/drawable/grid_background.xml
deleted file mode 100644
index fad1d2a..0000000
--- a/res/drawable/grid_background.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/* grid_background.xml
-**
-** Copyright 2006, 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/image_border_bg_pressed_blue" />
-    <item android:state_window_focused="true" android:state_focused="true" android:drawable="@drawable/image_border_bg_focus_blue" />
-    <item android:drawable="@drawable/image_border_bg_normal" />
-</selector>
diff --git a/res/drawable/ic_menu_attach.xml b/res/drawable/ic_menu_attach.xml
deleted file mode 100644
index 3526c78..0000000
--- a/res/drawable/ic_menu_attach.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2006, 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_btn_actionmenu_attach_pressed" />
-    <item android:state_window_focused="true" android:state_focused="true" android:drawable="@drawable/ic_btn_actionmenu_attach_selected" />
-    <item android:drawable="@drawable/ic_btn_actionmenu_attach_default" />
-</selector>
diff --git a/res/drawable/ic_menu_camera_play.xml b/res/drawable/ic_menu_camera_play.xml
deleted file mode 100644
index 3a70e69..0000000
--- a/res/drawable/ic_menu_camera_play.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/* grid_background.xml
-**
-** Copyright 2006, 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_btn_actionmenu_play_pressed" />
-    <item android:state_window_focused="true" android:state_focused="true" android:drawable="@drawable/ic_btn_actionmenu_play_selected" />
-    <item android:drawable="@drawable/ic_btn_actionmenu_play_default" />
-</selector>
diff --git a/res/drawable/ic_menu_cancel.xml b/res/drawable/ic_menu_cancel.xml
deleted file mode 100644
index 8e65188..0000000
--- a/res/drawable/ic_menu_cancel.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2006, 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_btn_actionmenu_cancel_pressed" />
-    <item android:state_window_focused="true" android:state_focused="true" android:drawable="@drawable/ic_btn_actionmenu_cancel_selected" />
-    <item android:drawable="@drawable/ic_btn_actionmenu_cancel_default" />
-</selector>
diff --git a/res/layout/camera.xml b/res/layout/camera.xml
index 8984a0c..b9530e6 100644
--- a/res/layout/camera.xml
+++ b/res/layout/camera.xml
@@ -80,7 +80,7 @@
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:id="@+id/flash_icon"
-                        camera:modes="@array/pref_camera_flashmode_entryvalues"
+                        camera:modes="@array/flash_modes"
                         camera:icons="@array/flash_icons"
                         android:visibility="visible"/>
             </com.android.camera.EvenlySpacedLayout>
diff --git a/res/layout/cropimage.xml b/res/layout/cropimage.xml
deleted file mode 100644
index dcb8b72..0000000
--- a/res/layout/cropimage.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 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.
--->
-
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent">
-
-    <RelativeLayout
-            android:layout_width="fill_parent"
-            android:layout_height="fill_parent"
-            android:orientation="horizontal">
-
-        <view class="com.android.camera.CropImageView" android:id="@+id/image"
-                android:background="#55000000"
-                android:layout_width="fill_parent"
-                android:layout_height="fill_parent"
-                android:layout_x="0dip"
-                android:layout_y="0dip"
-        />
-        <RelativeLayout android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:orientation="horizontal"
-                android:paddingLeft="10dip"
-                android:paddingRight="10dip"
-                android:layout_alignParentBottom="true"
-                android:layout_centerHorizontal="true">
-            <Button
-                    android:id="@+id/save"
-                    android:layout_width="100dip"
-                    android:layout_height="wrap_content"
-                    android:layout_alignParentLeft="true"
-                    android:text="@string/crop_save_text"
-            />
-            <Button
-                    android:id="@+id/discard"
-                    android:layout_width="100dip"
-                    android:layout_height="wrap_content"
-                    android:layout_alignParentRight="true"
-                    android:text="@string/crop_discard_text"
-            />
-        </RelativeLayout>
-    </RelativeLayout>
-
-</FrameLayout>
diff --git a/res/layout/custom_gallery_title.xml b/res/layout/custom_gallery_title.xml
deleted file mode 100644
index b85b981..0000000
--- a/res/layout/custom_gallery_title.xml
+++ /dev/null
@@ -1,30 +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.
--->
-
-<LinearLayout
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        android:id="@+id/screen"
-        android:orientation="horizontal"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent">
-
-    <TextView android:id="@+id/left_text"
-            android:gravity="center_vertical"
-            style="?android:attr/windowTitleStyle"
-            android:layout_width="wrap_content"
-            android:layout_height="fill_parent"
-            android:layout_weight="1" />
-</LinearLayout>
diff --git a/res/layout/delete_image.xml b/res/layout/delete_image.xml
deleted file mode 100644
index d60b1bd..0000000
--- a/res/layout/delete_image.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?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.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:orientation="vertical"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content">
-    <ProgressBar android:id="@+id/delete_progress"
-            style="?android:attr/progressBarStyleHorizontal"
-            android:layout_width="fill_parent"
-            android:layout_height="wrap_content"
-            android:max="10000"/>
-</LinearLayout>
diff --git a/res/layout/details.xml b/res/layout/details.xml
deleted file mode 100644
index e3c1075..0000000
--- a/res/layout/details.xml
+++ /dev/null
@@ -1,159 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 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.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
-    android:padding="10dip"
-    android:layout_width="fill_parent"
-    android:layout_height="wrap_content">
-
-    <LinearLayout
-        android:orientation="horizontal"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content">
-
-        <TextView
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:text="@string/details_title_label"
-            android:textSize="10sp"
-        />
-
-    </LinearLayout>
-
-    <EditText
-        android:id="@+id/title"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:text="@string/details_title_text"
-        android:autoText="true"
-        android:capitalize="words"
-        android:textSize="10sp"
-        android:textColor="#FF661700"
-    />
-
-    <TextView
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:text="@string/details_description_label"
-        android:textSize="10sp"
-    />
-
-    <EditText
-        android:id="@+id/description"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:text="@string/details_description_text"
-        android:autoText="true"
-        android:capitalize="sentences"
-        android:textSize="10sp"
-        android:textColor="#FF661700"
-    />
-
-    <TextView android:id="@+id/tags_label"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:text="@string/details_tags_label"
-        android:textSize="10sp"
-        android:visibility="gone"
-    />
-
-    <EditText
-        android:id="@+id/tags"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:text="@string/details_tags_text"
-        android:textSize="10sp"
-        android:textColor="#FF661700"
-        android:autoText="false"
-        android:capitalize="none"
-        android:visibility="gone"
-    />
-
-    <LinearLayout android:id="@+id/categories"
-        android:orientation="horizontal"
-        android:visibility="gone"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content">
-
-        <TextView
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:text="@string/details_category_label"
-            android:textSize="10sp"
-        />
-
-        <Spinner android:id="@+id/category"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:drawSelectorOnTop="false"
-            android:textSize="10sp"
-        />
-    </LinearLayout>
-
-    <LinearLayout android:id="@+id/languages"
-        android:orientation="horizontal"
-        android:visibility="gone"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content">
-
-        <TextView
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:text="@string/details_language_label"
-            android:textSize="10sp"
-        />
-
-        <Spinner android:id="@+id/language"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:drawSelectorOnTop="false"
-            android:textSize="10sp"
-        />
-    </LinearLayout>
-
-    <LinearLayout
-        android:orientation="horizontal"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content">
-
-        <RadioGroup android:id="@+id/publicprivate"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:orientation="horizontal">
-	        <RadioButton android:id="@+id/publicView"
-	            android:layout_width="wrap_content"
-	            android:layout_height="wrap_content"
-	            android:checked="false"
-	            android:text="@string/details_publicView_text"
-	        />
-	
-	        <RadioButton android:id="@+id/privateView"
-	            android:layout_width="wrap_content"
-	            android:layout_height="wrap_content"
-	            android:checked="false"
-	            android:text="@string/details_privateView_text"
-	        />
-	    </RadioGroup>
-
-        <Button android:id="@+id/save"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:text="@string/details_save_text"
-            android:layout_alignParentRight="true"
-        />
-    </LinearLayout>
-</LinearLayout>
diff --git a/res/layout/gallery_picker_item.xml b/res/layout/gallery_picker_item.xml
deleted file mode 100644
index bcaad62..0000000
--- a/res/layout/gallery_picker_item.xml
+++ /dev/null
@@ -1,40 +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.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:orientation="vertical"
-        android:layout_width="148dip"
-        android:layout_height="wrap_content"
-        android:gravity="center_horizontal">
-
-    <com.android.camera.GalleryPickerItem android:id="@+id/thumbnail"
-            android:layout_width="142dip"
-            android:layout_height="142dip"
-            android:scaleType="centerCrop" />
-
-    <TextView android:id="@+id/title"
-            android:paddingTop="3dip"
-            android:paddingBottom="9dip"
-            android:paddingRight="13dip"
-            android:paddingLeft="13dip"
-            android:gravity="top|center_horizontal"
-            android:textSize="14sp"
-            android:singleLine="true"
-            android:textColor="#ffffffff"
-            android:ellipsize="marquee"
-            android:layout_width="fill_parent"
-            android:layout_height="wrap_content" />
-</LinearLayout>
diff --git a/res/layout/gallerypicker.xml b/res/layout/gallerypicker.xml
deleted file mode 100644
index 2c0a5be..0000000
--- a/res/layout/gallerypicker.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 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.
--->
-
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/root"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent">
-    <GridView xmlns:android="http://schemas.android.com/apk/res/android"
-        android:id="@+id/albums"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent"
-        android:paddingTop="2dip"
-        android:numColumns="auto_fit"
-        android:columnWidth="148dp"
-        android:stretchMode="spacingWidthUniform"
-        android:drawSelectorOnTop="false"
-        android:cacheColorHint="#000000"
-        android:background="#000000"
-        android:listSelector="#000000"/>
-</RelativeLayout>
diff --git a/res/layout/gallerypicker_no_images.xml b/res/layout/gallerypicker_no_images.xml
deleted file mode 100644
index bae0118..0000000
--- a/res/layout/gallerypicker_no_images.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 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.
--->
-
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:id="@+id/no_images"
-        android:visibility="gone"
-        android:orientation="vertical"
-        android:layout_centerInParent="true"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent">
-
-        <ImageView
-            android:id="@+id/no_pictures_image"
-            android:layout_centerInParent="true"
-            android:layout_gravity="center"
-            android:background="@drawable/ic_gallery_empty2"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-        />
-
-        <TextView
-            android:layout_below="@id/no_pictures_image"
-            android:layout_centerHorizontal="true"
-            android:paddingTop="5dip"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center"
-            android:text="@string/image_gallery_NoImageView_text"
-            android:textColor="#FFBEBEBE"
-            android:textSize="18dip"
-        />
-</RelativeLayout>
diff --git a/res/layout/image_gallery.xml b/res/layout/image_gallery.xml
deleted file mode 100644
index 5ef1ec7..0000000
--- a/res/layout/image_gallery.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 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.
--->
-
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/root"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent">
-
-    <LinearLayout android:orientation="vertical"
-                android:layout_width="fill_parent"
-                android:layout_height="fill_parent">
-
-        <view class="com.android.camera.GridViewSpecial"
-                android:id="@+id/grid"
-                android:focusable="true"
-                android:layout_width="fill_parent"
-                android:layout_height="0dp"
-                android:layout_weight="1"
-                android:listSelector="@drawable/grid_background"
-        />
-
-        <LinearLayout android:id="@+id/footer_organize"
-                android:orientation="horizontal"
-                android:visibility="gone"
-                android:layout_width="fill_parent"
-                android:layout_height="wrap_content"
-                android:layout_weight="0"
-                android:clickable="false"
-                android:paddingTop="5dp"
-                android:paddingLeft="4dp"
-                android:paddingRight="4dp"
-                android:paddingBottom="1dp"
-                android:background="@android:drawable/bottom_bar">
-
-            <Button android:id="@+id/button_share"
-                android:layout_width="0dp"
-                android:layout_height="fill_parent"
-                android:layout_weight="1"
-                android:text="@string/multiselect_share" />
-
-            <Button android:id="@+id/button_delete"
-                    android:layout_width="0dp"
-                    android:layout_height="fill_parent"
-                    android:layout_weight="1"
-                    android:text="@string/multiselect_delete" />
-
-            <Button android:id="@+id/button_close"
-                    android:layout_width="0dp"
-                    android:layout_height="fill_parent"
-                    android:layout_weight="1"
-                    android:text="@string/multiselect_cancel" />
-        </LinearLayout>
-    </LinearLayout>
-
-    <RelativeLayout android:id="@+id/no_images"
-            android:visibility="gone"
-            android:orientation="vertical"
-            android:layout_centerInParent="true"
-            android:layout_width="fill_parent"
-            android:layout_height="fill_parent">
-
-        <ImageView
-                android:id="@+id/no_pictures_image"
-                android:layout_centerInParent="true"
-                android:layout_gravity="center"
-                android:background="@drawable/ic_gallery_empty2"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-        />
-
-        <TextView
-                android:layout_below="@id/no_pictures_image"
-                android:layout_centerHorizontal="true"
-                android:paddingTop="5dp"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center"
-                android:text="@string/image_gallery_NoImageView_text"
-                android:textColor="#FFBEBEBE"
-                android:textSize="18dp"
-        />
-    </RelativeLayout>
-</RelativeLayout>
-
diff --git a/res/layout/movie_view.xml b/res/layout/movie_view.xml
deleted file mode 100644
index 3008079..0000000
--- a/res/layout/movie_view.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 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.
--->
-
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/root"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent">
-
-    <VideoView android:id="@+id/surface_view"
-            android:layout_width="fill_parent"
-            android:layout_height="fill_parent"
-            android:layout_centerInParent="true" />
-
-    <LinearLayout android:id="@+id/progress_indicator"
-            android:orientation="vertical"
-            android:layout_centerInParent="true"
-            android:layout_width="fill_parent"
-            android:layout_height="wrap_content">
-
-        <ProgressBar android:id="@android:id/progress"
-                style="?android:attr/progressBarStyleLarge"
-                android:layout_gravity="center"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content" />
-
-        <TextView android:paddingTop="5dip"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center"
-                android:text="@string/loading_video" android:textSize="14sp"
-                android:textColor="#ffffffff" />
-    </LinearLayout>
-
-</RelativeLayout>
diff --git a/res/layout/photo_frame.xml b/res/layout/photo_frame.xml
deleted file mode 100644
index d3cde77..0000000
--- a/res/layout/photo_frame.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?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.
--->
-
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="@dimen/appwidget_width"
-    android:layout_height="@dimen/appwidget_height"
-    android:background="@drawable/appwidget_bg">
-
-    <ImageView
-        android:id="@+id/photo"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent"
-        android:scaleType="centerCrop"
-        android:cropToPadding="true" />
-
-    <ImageView
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent"
-        android:background="@drawable/photo_inner" />
-
-</FrameLayout>
diff --git a/res/layout/viewimage.xml b/res/layout/viewimage.xml
deleted file mode 100644
index b657254..0000000
--- a/res/layout/viewimage.xml
+++ /dev/null
@@ -1,118 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 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.
--->
-
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:id="@+id/rootLayout"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent">
-
-    <AbsoluteLayout android:id="@+id/slideShowContainer"
-            android:layout_width="fill_parent"
-            android:layout_height="fill_parent">
-        <com.android.camera.ImageViewTouch android:id="@+id/image1_slideShow"
-                android:background="#00000000"
-                android:layout_width="fill_parent"
-                android:layout_height="fill_parent"
-        />
-        <com.android.camera.ImageViewTouch android:id="@+id/image2_slideShow"
-                android:background="#00000000"
-                android:layout_width="fill_parent"
-                android:layout_height="fill_parent"
-        />
-    </AbsoluteLayout>
-
-    <AbsoluteLayout android:id="@+id/abs"
-            android:layout_width="fill_parent"
-            android:layout_height="fill_parent">
-        <com.android.camera.ImageViewTouch android:id="@+id/image"
-                    android:background="#FF000000"
-                    android:focusableInTouchMode="true"
-                    android:layout_width="fill_parent"
-                    android:layout_height="fill_parent" />
-    </AbsoluteLayout>
-    <ImageView android:id="@+id/prev_image"
-            android:clickable="true"
-            android:focusable="false"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_alignParentLeft="true"
-            android:layout_centerVertical="true"
-            android:visibility="invisible"
-            android:src="@drawable/btn_camera_arrow_left"
-    />
-
-    <ImageView android:id="@+id/next_image"
-            android:clickable="true"
-            android:focusable="false"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_alignParentRight="true"
-            android:layout_centerVertical="true"
-            android:visibility="invisible"
-            android:src="@drawable/btn_camera_arrow_right"
-    />
-
-    <com.android.camera.EvenlySpacedLayout
-            android:visibility="gone"
-            android:id="@+id/action_icon_panel"
-            android:layout_marginTop="20dp"
-            android:layout_width="fill_parent"
-            android:layout_height="wrap_content">
-        <com.android.camera.ActionMenuButton
-                android:id="@+id/setas"
-                android:visibility="gone"
-                android:drawableTop="@drawable/ic_menu_set_as"
-                android:text="@string/camera_set"
-                style="@style/OnscreenActionIcon"
-        />
-        <com.android.camera.ActionMenuButton
-                android:id="@+id/play"
-                android:visibility="gone"
-                android:drawableTop="@drawable/ic_menu_camera_play"
-                android:text="@string/camera_play"
-                style="@style/OnscreenActionIcon"
-        />
-        <com.android.camera.ActionMenuButton
-                android:id="@+id/share"
-                android:visibility="gone"
-                android:drawableTop="@drawable/ic_menu_share"
-                android:text="@string/camera_share"
-                style="@style/OnscreenActionIcon"
-        />
-        <com.android.camera.ActionMenuButton
-                android:id="@+id/discard"
-                android:visibility="gone"
-                android:drawableTop="@drawable/ic_menu_delete"
-                android:text="@string/camera_toss"
-                style="@style/OnscreenActionIcon"
-        />
-        <com.android.camera.ActionMenuButton
-                android:id="@+id/attach"
-                android:visibility="gone"
-                android:drawableTop="@drawable/ic_menu_attach"
-                android:text="@string/camera_attach"
-                style="@style/OnscreenActionIcon"
-        />
-        <com.android.camera.ActionMenuButton
-                android:id="@+id/cancel"
-                android:visibility="gone"
-                android:drawableTop="@drawable/ic_menu_cancel"
-                android:text="@string/camera_cancel"
-                style="@style/OnscreenActionIcon"
-        />
-    </com.android.camera.EvenlySpacedLayout>
-</RelativeLayout>
-
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 8279537..2df7a2d 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -17,42 +17,24 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="camera_error_title" msgid="1202232535191653443">"Chyba fotoaparátu"</string>
     <string name="cannot_connect_camera" msgid="8029009101380114174">"Nelze se připojit k fotoaparátu."</string>
-    <string name="all_images" msgid="1195501551939178807">"Všechny fotky"</string>
-    <string name="all_videos" msgid="3380966619230896013">"Všechna videa"</string>
     <string name="camera_label" msgid="6346560772074764302">"Fotoaparát"</string>
     <string name="video_camera_label" msgid="2899292505526427293">"Videokamera"</string>
-    <string name="gallery_picker_label" msgid="3080425245006492787">"Galerie"</string>
-    <string name="gallery_label" msgid="7119609703856708011">"Galerie"</string>
     <string name="gallery_camera_bucket_name" msgid="2924618424339240831">"Pořízené fotografie"</string>
     <string name="gallery_camera_videos_bucket_name" msgid="3369151581398551623">"Pořízená videa"</string>
-    <string name="gallery_camera_media_bucket_name" msgid="5560926838411387511">"Média zaznamenaná kamerou"</string>
-    <string name="crop_label" msgid="521114301871349328">"Oříznout fotografii"</string>
     <string name="view_label" msgid="4450531507947335704">"Zobrazit fotografii"</string>
-    <string name="preferences_label" msgid="5955678162525051163">"Nastavení fotoaparátu"</string>
     <string name="wait" msgid="8600187532323801552">"Čekejte prosím..."</string>
     <string name="no_storage" msgid="820691042667338625">"Než začnete používat fotoaparát, vložte kartu SD."</string>
     <string name="not_enough_space" msgid="6655334407957844653">"Vaše karta SD je plná."</string>
     <string name="preparing_sd" msgid="2914969119574812666">"Příprava karty SD..."</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Nastavování tapety, čekejte prosím..."</string>
-    <string name="savingImage" msgid="3051745378545909260">"Ukládání fotografie..."</string>
-    <string name="runningFaceDetection" msgid="2293932204708167704">"Čekejte prosím..."</string>
     <string name="settings" msgid="1534847740615665736">"Nastavení"</string>
-    <string name="view" msgid="6277795271119411881">"Zobrazit"</string>
     <string name="details" msgid="8415120088556445230">"Podrobnosti"</string>
     <string name="show_on_map" msgid="441725587731006228">"Zobrazit v Mapách"</string>
     <string name="rotate" msgid="460017689320955494">"Otočit"</string>
     <string name="rotate_left" msgid="5888273317282539839">"Otočit doleva"</string>
     <string name="rotate_right" msgid="6776325835923384839">"Otočit doprava"</string>
-    <string name="slide_show" msgid="1965192737233824143">"Prezentace"</string>
-    <string name="multiselect" msgid="4761682939945434146">"Režim Multiselect"</string>
-    <string name="capture_picture" msgid="4114265595549284643">"Fotografovat"</string>
-    <string name="capture_video" msgid="4047046282358697155">"Natočit video"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Uložit"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Zahodit"</string>
     <string name="confirm_delete_title" msgid="263478358046514887">"Smazat"</string>
     <string name="confirm_delete_message" msgid="4161389939579284604">"Fotografie bude smazána."</string>
     <string name="confirm_delete_video_message" msgid="5796154324948010221">"Video bude smazáno."</string>
-    <string name="confirm_delete_multiple_message" msgid="5962369828035778779">"Tyto mediální soubory budou smazány."</string>
     <string name="review_toss" msgid="7255331999518617841">"SMAZAT"</string>
     <string name="review_share" msgid="7294755861072174509">"SDÍLET"</string>
     <string name="review_set" msgid="8304758352155378636">"POUŽÍT JAKO"</string>
@@ -64,54 +46,11 @@
     <string name="camera_toss" msgid="3781186798552460833">"Smazat"</string>
     <string name="camera_share" msgid="8207701858325694182">"Sdílet"</string>
     <string name="camera_set" msgid="3422192914806971182">"Použít jako"</string>
-    <string name="camera_play" msgid="8248000517869959980">"Přehrát"</string>
-    <string name="camera_attach" msgid="4048659554893435232">"Připojit přílohu"</string>
-    <string name="camera_cancel" msgid="8203341746672085747">"Zrušit"</string>
     <string name="camera_crop" msgid="5584000454518174632">"Oříznout"</string>
     <string name="no_way_to_share_image" msgid="5011985309980187927">"Není k dispozici aplikace potřebná ke sdílení fotografie."</string>
     <string name="no_way_to_share_video" msgid="3684571102267072206">"Není k dispozici aplikace potřebná ke sdílení videa."</string>
-    <string name="no_way_to_share" msgid="863323712875014752">"Není k dispozici aplikace potřebná ke sdílení souborů médií."</string>
     <string name="video_play" msgid="5287787282508002895">"Přehrát"</string>
     <string name="camera_gallery_photos_text" msgid="6558048736561932758">"Galerie"</string>
-    <string name="camera_pick_wallpaper" msgid="7026385960511811641">"Fotografie"</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Tapeta"</string>
-    <string name="pref_gallery_category" msgid="5826488887237959433">"Obecné nastavení"</string>
-    <string name="pref_slideshow_category" msgid="9097962086335681667">"Nastavení prezentace"</string>
-    <string name="pref_gallery_size_title" msgid="1363406603879434418">"Zobrazovaná velikost"</string>
-    <string name="pref_gallery_size_summary" msgid="8179967445295243638">"Vyberte zobrazovanou velikost obrázků a videí"</string>
-    <string name="pref_gallery_size_dialogtitle" msgid="757380558320647503">"Velikost fotografií"</string>
-  <string-array name="pref_gallery_size_choices">
-    <item msgid="7157691836846678936">"Velké"</item>
-    <item msgid="1033164600689216410">"Malé"</item>
-  </string-array>
-    <string name="pref_gallery_sort_title" msgid="7447949250045443386">"Řazení"</string>
-    <string name="pref_gallery_sort_summary" msgid="6644398051645595214">"Vyberte způsob řazení fotografií a videí"</string>
-    <string name="pref_gallery_sort_dialogtitle" msgid="5787417105532562739">"Řazení fotografií"</string>
-  <string-array name="pref_gallery_sort_choices">
-    <item msgid="5546009539334018063">"Od nejnovějších"</item>
-    <item msgid="7931283047572866748">"Od nejstarších"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_interval_title" msgid="6534904787962619832">"Interval prezentace"</string>
-    <string name="pref_gallery_slideshow_interval_summary" msgid="329876327077905033">"Vyberte, jak dlouho má být zobrazen každý snímek"</string>
-    <string name="pref_gallery_slideshow_interval_dialogtitle" msgid="6775543119826248900">"Interval prezentace"</string>
-  <string-array name="pref_gallery_slideshow_interval_choices">
-    <item msgid="3089037742117543119">"2 sekundy"</item>
-    <item msgid="738579316565625730">"3 sekundy"</item>
-    <item msgid="5670078787463530498">"4 sekundy"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_transition_title" msgid="3235158556228218846">"Přechod v prezentaci"</string>
-    <string name="pref_gallery_slideshow_transition_summary" msgid="2390320265891546846">"Vyberte efekt při přechodu z jednoho snímku na další"</string>
-    <string name="pref_gallery_slideshow_transition_dialogtitle" msgid="5483406447721500371">"Přechod v prezentaci"</string>
-  <string-array name="pref_gallery_slideshow_transition_choices">
-    <item msgid="2825716730899894863">"Prolínat"</item>
-    <item msgid="403116336404005687">"Posouvat zleva doprava"</item>
-    <item msgid="4901733079450971731">"Posouvat shora dolů"</item>
-    <item msgid="9006732482485375438">"Náhodný výběr"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_repeat_title" msgid="6512135022461429738">"Opakovat prezentaci"</string>
-    <string name="pref_gallery_slideshow_repeat_summary" msgid="8289230397431855268">"Přehrát prezentaci více než jednou"</string>
-    <string name="pref_gallery_slideshow_shuffle_title" msgid="3677508579783015598">"Náhodné pořadí snímků"</string>
-    <string name="pref_gallery_slideshow_shuffle_summary" msgid="8566948749149325715">"Zobrazit fotografie v náhodném pořadí"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Úložiště"</string>
     <string name="pref_camera_recordlocation_entry_off" msgid="8888142742988946038">"Vypnuto"</string>
     <string name="pref_camera_recordlocation_entry_on" msgid="7954533529969575594">"Zapnout"</string>
@@ -154,10 +93,6 @@
     <string name="pref_camera_whitebalance_entry_daylight" msgid="2534757270149561027">"Denní světlo"</string>
     <string name="pref_camera_whitebalance_entry_fluorescent" msgid="2435332872847454032">"Světélkující"</string>
     <string name="pref_camera_whitebalance_entry_cloudy" msgid="3531996716997959326">"Zataženo"</string>
-    <string name="pref_camera_whitebalance_entry_twilight" msgid="2257942426397244556">"Šero"</string>
-    <string name="pref_camera_whitebalance_entry_shade" msgid="4685730287406277702">"Stín"</string>
-    <string name="pref_camera_whitebalance_entry_warm_fluorescent" msgid="2827098617308870248">"Hřejivě světélkující"</string>
-    <string name="pref_camera_whitebalance_entry_halogen" msgid="5473868018455084929">"Halogenová žárovka"</string>
     <string name="pref_camera_coloreffect_dialogtitle" msgid="7691751972871809763">"Barevný efekt"</string>
     <string name="pref_camera_coloreffect_title" msgid="4152827686267109207">"Barevný efekt"</string>
     <string name="pref_camera_coloreffect_entry_none" msgid="4759462740660236565">"Žádný"</string>
@@ -188,10 +123,6 @@
     <string name="pref_camera_scenemode_entry_sunset" msgid="181661154611507212">"Západ slunce"</string>
     <string name="pref_camera_scenemode_entry_steadyphoto" msgid="2147958278893914895">"Stabilní fotografie"</string>
     <string name="pref_camera_scenemode_entry_fireworks" msgid="3530608172188797432">"Ohňostroj"</string>
-    <string name="camerasettings" msgid="2433519618178453928">"Nastavení"</string>
-    <string name="image_gallery_NoImageView_text" msgid="409595259802877447">"Žádná média nebyla nalezena."</string>
-    <string name="pref_gallery_confirm_delete_title" msgid="642429032687845907">"Potvrdit smazání"</string>
-    <string name="pref_gallery_confirm_delete_summary" msgid="5253456492765525245">"Požadovat potvrzení před smazáním obrázku nebo videa"</string>
     <string name="no_location_image" msgid="6929172123058811834">"Tento obrázek neobsahuje žádné informace o poloze."</string>
     <string name="details_panel_title" msgid="4753347516759338122">"Podrobnosti"</string>
     <string name="details_file_size" msgid="2468878774843246797">"Velikost souboru:"</string>
@@ -215,30 +146,9 @@
     <string name="details_kbps" msgid="1515369011744784592">"<xliff:g id="SPEED">%1$d</xliff:g> Kb/s"</string>
     <string name="details_mbps" msgid="3291428849607323284">"<xliff:g id="SPEED">%1$g</xliff:g> Mb/s"</string>
     <string name="details_ok" msgid="6848594369924424312">"OK"</string>
-    <string name="context_menu_header" msgid="1185348426222302182">"Možnosti fotografií"</string>
-    <string name="video_context_menu_header" msgid="7318971116949475029">"Možnosti videa"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Začněte klepnutím na obličej."</string>
-    <string name="photos_gallery_title" msgid="6914406246471015448">"Galerie"</string>
-    <string name="pick_photos_gallery_title" msgid="12912682424915943">"Vyberte fotografii"</string>
-    <string name="videos_gallery_title" msgid="6150354029982749479">"Galerie"</string>
-    <string name="pick_videos_gallery_title" msgid="326727095201227333">"Vybrat video"</string>
     <string name="sendImage" msgid="7279510542799399570">"Sdílet fotografii pomocí"</string>
     <string name="setImage" msgid="7246975856983303047">"Fotografie bude použita jako"</string>
     <string name="sendVideo" msgid="3598567735831863073">"Sdílet video pomocí"</string>
-    <string name="send_media_files" msgid="8201083279723850611">"Sdílení souborů médií pomocí"</string>
-    <string name="movieviewlabel" msgid="7363495772706775465">"Filmy"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Načítání videa..."</string>
     <string name="spaceIsLow_content" msgid="2848517537672543641">"Na vaší kartě SD je málo místa. Změňte nastavení kvality nebo smažte položky z Galerie."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Pokračovat v přehrávání videa"</string>
-    <string name="resume_playing_message" msgid="7293000708492271389">"Pokračovat v přehrávání od <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Pokračovat v přehrávání"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Začít znovu"</string>
-    <string name="gadget_title" msgid="259405922673466798">"Rámeček fotografie"</string>
-    <string name="file_info_title" msgid="1628963357466012538">"Informace o souboru:"</string>
-    <string name="video_exceed_mms_limit" msgid="3835075281230780010">"Zaznamenané video je pro odeslání ve zprávě MMS příliš velké. Zkuste zaznamenat kratší videoklip."</string>
-    <string name="multiselect_share" msgid="5261644537749253581">"Sdílet"</string>
-    <string name="multiselect_delete" msgid="9113461994546744603">"Smazat"</string>
-    <string name="multiselect_cancel" msgid="5969428692864002165">"Zrušit"</string>
-    <string name="delete_images_message" msgid="4504926868037899430">"Probíhá mazání obrázků, počkejte prosím..."</string>
     <string name="video_reach_size_limit" msgid="6179877322015552390">"Bylo dosaženo limitu velikosti."</string>
 </resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 044f54b..3260125 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -17,42 +17,24 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="camera_error_title" msgid="1202232535191653443">"Kamerafejl"</string>
     <string name="cannot_connect_camera" msgid="8029009101380114174">"Der kan ikke oprettes forbindelse til kameraet."</string>
-    <string name="all_images" msgid="1195501551939178807">"Alle billeder"</string>
-    <string name="all_videos" msgid="3380966619230896013">"Alle videoer"</string>
     <string name="camera_label" msgid="6346560772074764302">"Kamera"</string>
     <string name="video_camera_label" msgid="2899292505526427293">"Videokamera"</string>
-    <string name="gallery_picker_label" msgid="3080425245006492787">"Galleri"</string>
-    <string name="gallery_label" msgid="7119609703856708011">"Galleri"</string>
     <string name="gallery_camera_bucket_name" msgid="2924618424339240831">"Kamerabilleder"</string>
     <string name="gallery_camera_videos_bucket_name" msgid="3369151581398551623">"Kameravideoer"</string>
-    <string name="gallery_camera_media_bucket_name" msgid="5560926838411387511">"Kameramedier"</string>
-    <string name="crop_label" msgid="521114301871349328">"Beskær billede"</string>
     <string name="view_label" msgid="4450531507947335704">"Vis billede"</string>
-    <string name="preferences_label" msgid="5955678162525051163">"Kameraindstillinger"</string>
     <string name="wait" msgid="8600187532323801552">"Vent ..."</string>
     <string name="no_storage" msgid="820691042667338625">"Indsæt et SD-kort, inden du bruger kameraet."</string>
     <string name="not_enough_space" msgid="6655334407957844653">"Dit SD-kort er fuldt."</string>
     <string name="preparing_sd" msgid="2914969119574812666">"Forbereder SD-kort ..."</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Indstiller tapet. Vent et øjeblik ..."</string>
-    <string name="savingImage" msgid="3051745378545909260">"Gemmer billede ..."</string>
-    <string name="runningFaceDetection" msgid="2293932204708167704">"Vent ..."</string>
     <string name="settings" msgid="1534847740615665736">"Indstillinger"</string>
-    <string name="view" msgid="6277795271119411881">"Vis"</string>
     <string name="details" msgid="8415120088556445230">"Detaljer"</string>
     <string name="show_on_map" msgid="441725587731006228">"Vis i Maps"</string>
     <string name="rotate" msgid="460017689320955494">"Roter"</string>
     <string name="rotate_left" msgid="5888273317282539839">"Roter til venstre"</string>
     <string name="rotate_right" msgid="6776325835923384839">"Roter til højre"</string>
-    <string name="slide_show" msgid="1965192737233824143">"Diasshow"</string>
-    <string name="multiselect" msgid="4761682939945434146">"Vælg flere"</string>
-    <string name="capture_picture" msgid="4114265595549284643">"Tag billede"</string>
-    <string name="capture_video" msgid="4047046282358697155">"Optag video"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Gem"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Kassér"</string>
     <string name="confirm_delete_title" msgid="263478358046514887">"Slet"</string>
     <string name="confirm_delete_message" msgid="4161389939579284604">"Billedet slettes."</string>
     <string name="confirm_delete_video_message" msgid="5796154324948010221">"Videoen slettes."</string>
-    <string name="confirm_delete_multiple_message" msgid="5962369828035778779">"Disse mediefiler slettes."</string>
     <string name="review_toss" msgid="7255331999518617841">"SLET"</string>
     <string name="review_share" msgid="7294755861072174509">"DEL"</string>
     <string name="review_set" msgid="8304758352155378636">"INDSTIL SOM"</string>
@@ -64,54 +46,11 @@
     <string name="camera_toss" msgid="3781186798552460833">"Slet"</string>
     <string name="camera_share" msgid="8207701858325694182">"Del"</string>
     <string name="camera_set" msgid="3422192914806971182">"Indstil som"</string>
-    <string name="camera_play" msgid="8248000517869959980">"Afspil"</string>
-    <string name="camera_attach" msgid="4048659554893435232">"Vedhæft"</string>
-    <string name="camera_cancel" msgid="8203341746672085747">"Annuller"</string>
     <string name="camera_crop" msgid="5584000454518174632">"Beskær"</string>
     <string name="no_way_to_share_image" msgid="5011985309980187927">"Der er intet program tilgængeligt til deling af billedet."</string>
     <string name="no_way_to_share_video" msgid="3684571102267072206">"Der er intet program tilgængeligt til deling af videoen."</string>
-    <string name="no_way_to_share" msgid="863323712875014752">"Der er intet program tilgængeligt til deling af mediefilen/-filerne."</string>
     <string name="video_play" msgid="5287787282508002895">"Afspil"</string>
     <string name="camera_gallery_photos_text" msgid="6558048736561932758">"Galleri"</string>
-    <string name="camera_pick_wallpaper" msgid="7026385960511811641">"Billeder"</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Tapet"</string>
-    <string name="pref_gallery_category" msgid="5826488887237959433">"Generelle indstillinger"</string>
-    <string name="pref_slideshow_category" msgid="9097962086335681667">"Diasshowindstillinger"</string>
-    <string name="pref_gallery_size_title" msgid="1363406603879434418">"Visningsstørrelse"</string>
-    <string name="pref_gallery_size_summary" msgid="8179967445295243638">"Vælg, hvilken størrelse billeder og videoer skal vises i"</string>
-    <string name="pref_gallery_size_dialogtitle" msgid="757380558320647503">"Billedstørrelse"</string>
-  <string-array name="pref_gallery_size_choices">
-    <item msgid="7157691836846678936">"Stor"</item>
-    <item msgid="1033164600689216410">"Lille"</item>
-  </string-array>
-    <string name="pref_gallery_sort_title" msgid="7447949250045443386">"Sorter rækkefølge"</string>
-    <string name="pref_gallery_sort_summary" msgid="6644398051645595214">"Vælg rækkefølge på billeder og videoer"</string>
-    <string name="pref_gallery_sort_dialogtitle" msgid="5787417105532562739">"Sorter billeder"</string>
-  <string-array name="pref_gallery_sort_choices">
-    <item msgid="5546009539334018063">"Nyeste først"</item>
-    <item msgid="7931283047572866748">"Nyeste sidst"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_interval_title" msgid="6534904787962619832">"Diasshowinterval"</string>
-    <string name="pref_gallery_slideshow_interval_summary" msgid="329876327077905033">"Vælg, hvor længe hvert dias skal vises i showet"</string>
-    <string name="pref_gallery_slideshow_interval_dialogtitle" msgid="6775543119826248900">"Diasshowinterval"</string>
-  <string-array name="pref_gallery_slideshow_interval_choices">
-    <item msgid="3089037742117543119">"2 sekunder"</item>
-    <item msgid="738579316565625730">"3 sekunder"</item>
-    <item msgid="5670078787463530498">"4 sekunder"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_transition_title" msgid="3235158556228218846">"Diasshowovergang"</string>
-    <string name="pref_gallery_slideshow_transition_summary" msgid="2390320265891546846">"Vælg den effekt, der skal bruges, når man går fra et dias til det næste"</string>
-    <string name="pref_gallery_slideshow_transition_dialogtitle" msgid="5483406447721500371">"Diasshowovergang"</string>
-  <string-array name="pref_gallery_slideshow_transition_choices">
-    <item msgid="2825716730899894863">"Ton ind og ud"</item>
-    <item msgid="403116336404005687">"Glid til venstre – højre"</item>
-    <item msgid="4901733079450971731">"Glid op – ned"</item>
-    <item msgid="9006732482485375438">"Tilfældigt udvalg"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_repeat_title" msgid="6512135022461429738">"Gentag diasshow"</string>
-    <string name="pref_gallery_slideshow_repeat_summary" msgid="8289230397431855268">"Afspil diasshow mere end en gang"</string>
-    <string name="pref_gallery_slideshow_shuffle_title" msgid="3677508579783015598">"Bland dias"</string>
-    <string name="pref_gallery_slideshow_shuffle_summary" msgid="8566948749149325715">"Vis billeder i tilfældig rækkefølge"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Lagringsplacering"</string>
     <string name="pref_camera_recordlocation_entry_off" msgid="8888142742988946038">"Fra"</string>
     <string name="pref_camera_recordlocation_entry_on" msgid="7954533529969575594">"Til"</string>
@@ -154,10 +93,6 @@
     <string name="pref_camera_whitebalance_entry_daylight" msgid="2534757270149561027">"Dagslys"</string>
     <string name="pref_camera_whitebalance_entry_fluorescent" msgid="2435332872847454032">"Flourescerende"</string>
     <string name="pref_camera_whitebalance_entry_cloudy" msgid="3531996716997959326">"Overskuet"</string>
-    <string name="pref_camera_whitebalance_entry_twilight" msgid="2257942426397244556">"Tusmørke"</string>
-    <string name="pref_camera_whitebalance_entry_shade" msgid="4685730287406277702">"Skygge"</string>
-    <string name="pref_camera_whitebalance_entry_warm_fluorescent" msgid="2827098617308870248">"Varmt flourescerende"</string>
-    <string name="pref_camera_whitebalance_entry_halogen" msgid="5473868018455084929">"Halogen"</string>
     <string name="pref_camera_coloreffect_dialogtitle" msgid="7691751972871809763">"Farveeffekt"</string>
     <string name="pref_camera_coloreffect_title" msgid="4152827686267109207">"Farveeffekt"</string>
     <string name="pref_camera_coloreffect_entry_none" msgid="4759462740660236565">"Ingen"</string>
@@ -188,10 +123,6 @@
     <string name="pref_camera_scenemode_entry_sunset" msgid="181661154611507212">"Solnedgang"</string>
     <string name="pref_camera_scenemode_entry_steadyphoto" msgid="2147958278893914895">"Roligt foto"</string>
     <string name="pref_camera_scenemode_entry_fireworks" msgid="3530608172188797432">"Fyrværkeri"</string>
-    <string name="camerasettings" msgid="2433519618178453928">"Indstillinger"</string>
-    <string name="image_gallery_NoImageView_text" msgid="409595259802877447">"Der blev ikke fundet nogen medier."</string>
-    <string name="pref_gallery_confirm_delete_title" msgid="642429032687845907">"Bekræft sletninger"</string>
-    <string name="pref_gallery_confirm_delete_summary" msgid="5253456492765525245">"Vis bekræftelse, inden der slettes et billede eller en video"</string>
     <string name="no_location_image" msgid="6929172123058811834">"Der findes ingen placeringsoplysninger i dette billede."</string>
     <string name="details_panel_title" msgid="4753347516759338122">"Detaljer"</string>
     <string name="details_file_size" msgid="2468878774843246797">"Filstørrelse:"</string>
@@ -215,30 +146,9 @@
     <string name="details_kbps" msgid="1515369011744784592">"<xliff:g id="SPEED">%1$d</xliff:g> Kbps"</string>
     <string name="details_mbps" msgid="3291428849607323284">"<xliff:g id="SPEED">%1$g</xliff:g> Mbps"</string>
     <string name="details_ok" msgid="6848594369924424312">"OK"</string>
-    <string name="context_menu_header" msgid="1185348426222302182">"Billedvalgmuligheder"</string>
-    <string name="video_context_menu_header" msgid="7318971116949475029">"Videovalgmuligheder"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Tryk på et ansigt for at begynde."</string>
-    <string name="photos_gallery_title" msgid="6914406246471015448">"Galleri"</string>
-    <string name="pick_photos_gallery_title" msgid="12912682424915943">"Vælg billede"</string>
-    <string name="videos_gallery_title" msgid="6150354029982749479">"Galleri"</string>
-    <string name="pick_videos_gallery_title" msgid="326727095201227333">"Vælg video"</string>
     <string name="sendImage" msgid="7279510542799399570">"Del billede via"</string>
     <string name="setImage" msgid="7246975856983303047">"Indstil billedet som"</string>
     <string name="sendVideo" msgid="3598567735831863073">"Del video via"</string>
-    <string name="send_media_files" msgid="8201083279723850611">"Del mediefiler via"</string>
-    <string name="movieviewlabel" msgid="7363495772706775465">"Film"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Indlæser video ..."</string>
     <string name="spaceIsLow_content" msgid="2848517537672543641">"Dit SD-kort er ved at løbe tør for plads. Skift kvalitetsindstillingerne, eller slet elementer fra Galleriet."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Genoptag video"</string>
-    <string name="resume_playing_message" msgid="7293000708492271389">"Genoptag afspilning fra <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Genoptag afspilning"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Start igen"</string>
-    <string name="gadget_title" msgid="259405922673466798">"Billedramme"</string>
-    <string name="file_info_title" msgid="1628963357466012538">"Filoplysninger:"</string>
-    <string name="video_exceed_mms_limit" msgid="3835075281230780010">"Den video, du optog, er for stor til at sende via MMS. Prøv at optage et klip af kortere varighed."</string>
-    <string name="multiselect_share" msgid="5261644537749253581">"Del"</string>
-    <string name="multiselect_delete" msgid="9113461994546744603">"Slet"</string>
-    <string name="multiselect_cancel" msgid="5969428692864002165">"Annuller"</string>
-    <string name="delete_images_message" msgid="4504926868037899430">"Sletter billeder. Vent lidt ..."</string>
     <string name="video_reach_size_limit" msgid="6179877322015552390">"Størrelsesgrænse er nået."</string>
 </resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index d8433a6..dfac4a8 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -17,42 +17,24 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="camera_error_title" msgid="1202232535191653443">"Kamerafehler"</string>
     <string name="cannot_connect_camera" msgid="8029009101380114174">"Keine Verbindung zur Kamera möglich"</string>
-    <string name="all_images" msgid="1195501551939178807">"Alle Bilder"</string>
-    <string name="all_videos" msgid="3380966619230896013">"Alle Videos"</string>
     <string name="camera_label" msgid="6346560772074764302">"Kamera"</string>
     <string name="video_camera_label" msgid="2899292505526427293">"Camcorder"</string>
-    <string name="gallery_picker_label" msgid="3080425245006492787">"Galerie"</string>
-    <string name="gallery_label" msgid="7119609703856708011">"Galerie"</string>
     <string name="gallery_camera_bucket_name" msgid="2924618424339240831">"Kamerabilder"</string>
     <string name="gallery_camera_videos_bucket_name" msgid="3369151581398551623">"Kameravideos"</string>
-    <string name="gallery_camera_media_bucket_name" msgid="5560926838411387511">"Kameramedien"</string>
-    <string name="crop_label" msgid="521114301871349328">"Bild zuschneiden"</string>
     <string name="view_label" msgid="4450531507947335704">"Bild anzeigen"</string>
-    <string name="preferences_label" msgid="5955678162525051163">"Kameraeinstellungen"</string>
     <string name="wait" msgid="8600187532323801552">"Bitte warten..."</string>
     <string name="no_storage" msgid="820691042667338625">"Legen Sie vor Verwendung der Kamera eine SD-Karte ein."</string>
     <string name="not_enough_space" msgid="6655334407957844653">"Ihre SD-Karte ist voll."</string>
     <string name="preparing_sd" msgid="2914969119574812666">"SD-Karte wird vorbereitet..."</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Hintergrund wird eingestellt, bitte warten..."</string>
-    <string name="savingImage" msgid="3051745378545909260">"Bild wird gespeichert..."</string>
-    <string name="runningFaceDetection" msgid="2293932204708167704">"Bitte warten..."</string>
     <string name="settings" msgid="1534847740615665736">"Einstellungen"</string>
-    <string name="view" msgid="6277795271119411881">"Anzeigen"</string>
     <string name="details" msgid="8415120088556445230">"Details"</string>
     <string name="show_on_map" msgid="441725587731006228">"In Google Maps anzeigen"</string>
     <string name="rotate" msgid="460017689320955494">"Drehen"</string>
     <string name="rotate_left" msgid="5888273317282539839">"Nach links drehen"</string>
     <string name="rotate_right" msgid="6776325835923384839">"Nach rechts drehen"</string>
-    <string name="slide_show" msgid="1965192737233824143">"Diashow"</string>
-    <string name="multiselect" msgid="4761682939945434146">"Mehrfachauswahl"</string>
-    <string name="capture_picture" msgid="4114265595549284643">"Bild aufnehmen"</string>
-    <string name="capture_video" msgid="4047046282358697155">"Video aufnehmen"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Speichern"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Verwerfen"</string>
     <string name="confirm_delete_title" msgid="263478358046514887">"Löschen"</string>
     <string name="confirm_delete_message" msgid="4161389939579284604">"Das Bild wird gelöscht."</string>
     <string name="confirm_delete_video_message" msgid="5796154324948010221">"Das Video wird gelöscht."</string>
-    <string name="confirm_delete_multiple_message" msgid="5962369828035778779">"Diese Mediendateien werden gelöscht."</string>
     <string name="review_toss" msgid="7255331999518617841">"LÖSCHEN"</string>
     <string name="review_share" msgid="7294755861072174509">"SENDEN"</string>
     <string name="review_set" msgid="8304758352155378636">"FESTLEGEN ALS"</string>
@@ -64,54 +46,11 @@
     <string name="camera_toss" msgid="3781186798552460833">"Löschen"</string>
     <string name="camera_share" msgid="8207701858325694182">"Senden"</string>
     <string name="camera_set" msgid="3422192914806971182">"Festlegen als"</string>
-    <string name="camera_play" msgid="8248000517869959980">"Wiedergeben"</string>
-    <string name="camera_attach" msgid="4048659554893435232">"Anhängen"</string>
-    <string name="camera_cancel" msgid="8203341746672085747">"Abbrechen"</string>
     <string name="camera_crop" msgid="5584000454518174632">"Zuschneiden"</string>
     <string name="no_way_to_share_image" msgid="5011985309980187927">"Keine Anwendung zur Freigabe des Bilds verfügbar"</string>
     <string name="no_way_to_share_video" msgid="3684571102267072206">"Keine Anwendung zur Freigabe des Videos verfügbar"</string>
-    <string name="no_way_to_share" msgid="863323712875014752">"Keine Anwendung zur Freigabe der Mediendatei(en) verfügbar"</string>
     <string name="video_play" msgid="5287787282508002895">"Wiedergeben"</string>
     <string name="camera_gallery_photos_text" msgid="6558048736561932758">"Galerie"</string>
-    <string name="camera_pick_wallpaper" msgid="7026385960511811641">"Bilder"</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Hintergrund"</string>
-    <string name="pref_gallery_category" msgid="5826488887237959433">"Allgemeine Einstellungen"</string>
-    <string name="pref_slideshow_category" msgid="9097962086335681667">"Einstellungen für Diashow"</string>
-    <string name="pref_gallery_size_title" msgid="1363406603879434418">"Anzeigegröße"</string>
-    <string name="pref_gallery_size_summary" msgid="8179967445295243638">"Anzeigegröße für Bilder und Videos auswählen"</string>
-    <string name="pref_gallery_size_dialogtitle" msgid="757380558320647503">"Bildgröße"</string>
-  <string-array name="pref_gallery_size_choices">
-    <item msgid="7157691836846678936">"Groß"</item>
-    <item msgid="1033164600689216410">"Klein"</item>
-  </string-array>
-    <string name="pref_gallery_sort_title" msgid="7447949250045443386">"Sortierreihenfolge"</string>
-    <string name="pref_gallery_sort_summary" msgid="6644398051645595214">"Sortierreihenfolge für Bilder und Videos auswählen"</string>
-    <string name="pref_gallery_sort_dialogtitle" msgid="5787417105532562739">"Sortierreihenfolge für Bilder"</string>
-  <string-array name="pref_gallery_sort_choices">
-    <item msgid="5546009539334018063">"Neue zuerst"</item>
-    <item msgid="7931283047572866748">"Neue zuletzt"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_interval_title" msgid="6534904787962619832">"Diashow-Intervall"</string>
-    <string name="pref_gallery_slideshow_interval_summary" msgid="329876327077905033">"Auswählen, wie lange jedes Bild in der Diashow angezeigt werden soll"</string>
-    <string name="pref_gallery_slideshow_interval_dialogtitle" msgid="6775543119826248900">"Diashow-Intervall"</string>
-  <string-array name="pref_gallery_slideshow_interval_choices">
-    <item msgid="3089037742117543119">"2 Sekunden"</item>
-    <item msgid="738579316565625730">"3 Sekunden"</item>
-    <item msgid="5670078787463530498">"4 Sekunden"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_transition_title" msgid="3235158556228218846">"Diashow-Übergang"</string>
-    <string name="pref_gallery_slideshow_transition_summary" msgid="2390320265891546846">"Effekt auswählen, der beim Wechsel zum nächsten Bild angewendet wird"</string>
-    <string name="pref_gallery_slideshow_transition_dialogtitle" msgid="5483406447721500371">"Diashow-Übergang"</string>
-  <string-array name="pref_gallery_slideshow_transition_choices">
-    <item msgid="2825716730899894863">"Ein- und ausblenden"</item>
-    <item msgid="403116336404005687">"Einblendung von links - rechts"</item>
-    <item msgid="4901733079450971731">"Einblendung von oben - unten"</item>
-    <item msgid="9006732482485375438">"Zufällige Auswahl"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_repeat_title" msgid="6512135022461429738">"Diashow wiederholen"</string>
-    <string name="pref_gallery_slideshow_repeat_summary" msgid="8289230397431855268">"Diashow mehrmals anzeigen"</string>
-    <string name="pref_gallery_slideshow_shuffle_title" msgid="3677508579783015598">"Bilder mischen"</string>
-    <string name="pref_gallery_slideshow_shuffle_summary" msgid="8566948749149325715">"Bilder in zufälliger Reihenfolge anzeigen"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Speicherort"</string>
     <string name="pref_camera_recordlocation_entry_off" msgid="8888142742988946038">"Aus"</string>
     <string name="pref_camera_recordlocation_entry_on" msgid="7954533529969575594">"An"</string>
@@ -154,10 +93,6 @@
     <string name="pref_camera_whitebalance_entry_daylight" msgid="2534757270149561027">"Tageslicht"</string>
     <string name="pref_camera_whitebalance_entry_fluorescent" msgid="2435332872847454032">"Neonlicht (kaltes Weiß)"</string>
     <string name="pref_camera_whitebalance_entry_cloudy" msgid="3531996716997959326">"Bewölkt"</string>
-    <string name="pref_camera_whitebalance_entry_twilight" msgid="2257942426397244556">"Dämmerung"</string>
-    <string name="pref_camera_whitebalance_entry_shade" msgid="4685730287406277702">"Schatten"</string>
-    <string name="pref_camera_whitebalance_entry_warm_fluorescent" msgid="2827098617308870248">"Neonlicht (warmes Weiß)"</string>
-    <string name="pref_camera_whitebalance_entry_halogen" msgid="5473868018455084929">"Halogen"</string>
     <string name="pref_camera_coloreffect_dialogtitle" msgid="7691751972871809763">"Farbeffekt"</string>
     <string name="pref_camera_coloreffect_title" msgid="4152827686267109207">"Farbeffekt"</string>
     <string name="pref_camera_coloreffect_entry_none" msgid="4759462740660236565">"Keine"</string>
@@ -188,10 +123,6 @@
     <string name="pref_camera_scenemode_entry_sunset" msgid="181661154611507212">"Sonnenuntergang"</string>
     <string name="pref_camera_scenemode_entry_steadyphoto" msgid="2147958278893914895">"Stabilisierung"</string>
     <string name="pref_camera_scenemode_entry_fireworks" msgid="3530608172188797432">"Feuerwerk"</string>
-    <string name="camerasettings" msgid="2433519618178453928">"Einstellungen"</string>
-    <string name="image_gallery_NoImageView_text" msgid="409595259802877447">"Keine Medien gefunden."</string>
-    <string name="pref_gallery_confirm_delete_title" msgid="642429032687845907">"Löschvorgang bestätigen"</string>
-    <string name="pref_gallery_confirm_delete_summary" msgid="5253456492765525245">"Bestätigung vor dem Löschen eines Bildes oder Videos anzeigen"</string>
     <string name="no_location_image" msgid="6929172123058811834">"In diesem Bild sind keine Standortinformationen enthalten."</string>
     <string name="details_panel_title" msgid="4753347516759338122">"Details"</string>
     <string name="details_file_size" msgid="2468878774843246797">"Dateigröße:"</string>
@@ -215,30 +146,9 @@
     <string name="details_kbps" msgid="1515369011744784592">"<xliff:g id="SPEED">%1$d</xliff:g> Kbit/s"</string>
     <string name="details_mbps" msgid="3291428849607323284">"<xliff:g id="SPEED">%1$g</xliff:g> Mbit/s"</string>
     <string name="details_ok" msgid="6848594369924424312">"OK"</string>
-    <string name="context_menu_header" msgid="1185348426222302182">"Bildoptionen"</string>
-    <string name="video_context_menu_header" msgid="7318971116949475029">"Videooptionen"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Tippen Sie zum Beginnen auf ein Gesicht."</string>
-    <string name="photos_gallery_title" msgid="6914406246471015448">"Galerie"</string>
-    <string name="pick_photos_gallery_title" msgid="12912682424915943">"Bild auswählen"</string>
-    <string name="videos_gallery_title" msgid="6150354029982749479">"Galerie"</string>
-    <string name="pick_videos_gallery_title" msgid="326727095201227333">"Video auswählen"</string>
     <string name="sendImage" msgid="7279510542799399570">"Bild senden via"</string>
     <string name="setImage" msgid="7246975856983303047">"Bild festlegen als"</string>
     <string name="sendVideo" msgid="3598567735831863073">"Video weiterleiten via"</string>
-    <string name="send_media_files" msgid="8201083279723850611">"Mediendateien freigeben über"</string>
-    <string name="movieviewlabel" msgid="7363495772706775465">"Filme"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Video wird geladen..."</string>
     <string name="spaceIsLow_content" msgid="2848517537672543641">"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>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Mit Video fortfahren"</string>
-    <string name="resume_playing_message" msgid="7293000708492271389">"Mit Wiedergabe fortfahren ab <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Mit Wiedergabe fortfahren"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Starten"</string>
-    <string name="gadget_title" msgid="259405922673466798">"Bildrahmen"</string>
-    <string name="file_info_title" msgid="1628963357466012538">"Dateiinfo:"</string>
-    <string name="video_exceed_mms_limit" msgid="3835075281230780010">"Das aufgenommene Video ist zu groß und kann nicht per MMS gesendet werden. Nehmen Sie einen kürzeren Clip auf."</string>
-    <string name="multiselect_share" msgid="5261644537749253581">"Senden"</string>
-    <string name="multiselect_delete" msgid="9113461994546744603">"Löschen"</string>
-    <string name="multiselect_cancel" msgid="5969428692864002165">"Abbrechen"</string>
-    <string name="delete_images_message" msgid="4504926868037899430">"Bilder werden gelöscht. Bitte warten..."</string>
     <string name="video_reach_size_limit" msgid="6179877322015552390">"Maximale Größe erreicht"</string>
 </resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index f0c7097..bc9e27a 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -17,42 +17,24 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="camera_error_title" msgid="1202232535191653443">"Σφάλμα φωτογραφικής μηχανής"</string>
     <string name="cannot_connect_camera" msgid="8029009101380114174">"Δεν είναι δυνατή η σύνδεση με τη φωτογραφική μηχανή."</string>
-    <string name="all_images" msgid="1195501551939178807">"Όλες οι εικόνες"</string>
-    <string name="all_videos" msgid="3380966619230896013">"Όλα τα βίντεο"</string>
     <string name="camera_label" msgid="6346560772074764302">"Φωτογ.μηχανή"</string>
     <string name="video_camera_label" msgid="2899292505526427293">"Βιντεοκάμ."</string>
-    <string name="gallery_picker_label" msgid="3080425245006492787">"Συλλογή"</string>
-    <string name="gallery_label" msgid="7119609703856708011">"Συλλογή"</string>
     <string name="gallery_camera_bucket_name" msgid="2924618424339240831">"Εικόνες φωτογραφικής μηχανής"</string>
     <string name="gallery_camera_videos_bucket_name" msgid="3369151581398551623">"Βίντεο φωτογραφικής μηχανής"</string>
-    <string name="gallery_camera_media_bucket_name" msgid="5560926838411387511">"Μέσα φωτογραφικής μηχανής"</string>
-    <string name="crop_label" msgid="521114301871349328">"Περικοπή εικόνας"</string>
     <string name="view_label" msgid="4450531507947335704">"Προβολή εικόνας"</string>
-    <string name="preferences_label" msgid="5955678162525051163">"Ρυθμίσεις φωτογραφικής μηχανής"</string>
     <string name="wait" msgid="8600187532323801552">"Περιμένετε..."</string>
     <string name="no_storage" msgid="820691042667338625">"Πριν χρησιμοποιήσετε τη φωτογραφική μηχανή, εισάγετε μία κάρτα SD."</string>
     <string name="not_enough_space" msgid="6655334407957844653">"Η κάρτα SD είναι πλήρης."</string>
     <string name="preparing_sd" msgid="2914969119574812666">"Προετοιμασία κάρτας SD…"</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Ρύθμιση ταπετσαρίας, περιμένετε..."</string>
-    <string name="savingImage" msgid="3051745378545909260">"Αποθήκευση εικόνας..."</string>
-    <string name="runningFaceDetection" msgid="2293932204708167704">"Περιμένετε..."</string>
     <string name="settings" msgid="1534847740615665736">"Ρυθμίσεις"</string>
-    <string name="view" msgid="6277795271119411881">"Προβολή"</string>
     <string name="details" msgid="8415120088556445230">"Λεπτομέρειες"</string>
     <string name="show_on_map" msgid="441725587731006228">"Προβολή στους Χάρτες"</string>
     <string name="rotate" msgid="460017689320955494">"Περιστροφή"</string>
     <string name="rotate_left" msgid="5888273317282539839">"Αριστερή περιστροφή"</string>
     <string name="rotate_right" msgid="6776325835923384839">"Δεξιά περιστροφή"</string>
-    <string name="slide_show" msgid="1965192737233824143">"Προβολή διαφανειών"</string>
-    <string name="multiselect" msgid="4761682939945434146">"Πολλαπλή επιλογή"</string>
-    <string name="capture_picture" msgid="4114265595549284643">"Λήψη εικόνας"</string>
-    <string name="capture_video" msgid="4047046282358697155">"Λήψη βίντεο"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Αποθήκευση"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Απόρριψη"</string>
     <string name="confirm_delete_title" msgid="263478358046514887">"Διαγραφή"</string>
     <string name="confirm_delete_message" msgid="4161389939579284604">"Η εικόνα θα διαγραφεί."</string>
     <string name="confirm_delete_video_message" msgid="5796154324948010221">"Το βίντεο θα διαγραφεί."</string>
-    <string name="confirm_delete_multiple_message" msgid="5962369828035778779">"Αυτά τα αρχεία μέσων θα διαγραφούν."</string>
     <string name="review_toss" msgid="7255331999518617841">"ΔΙΑΓΡΑΦΗ"</string>
     <string name="review_share" msgid="7294755861072174509">"ΚΟΙΝΗ ΧΡΗΣΗ"</string>
     <string name="review_set" msgid="8304758352155378636">"ΟΡΙΣΜΟΣ ΩΣ"</string>
@@ -64,54 +46,11 @@
     <string name="camera_toss" msgid="3781186798552460833">"Διαγραφή"</string>
     <string name="camera_share" msgid="8207701858325694182">"Κοινή χρήση"</string>
     <string name="camera_set" msgid="3422192914806971182">"Ορισμός ως"</string>
-    <string name="camera_play" msgid="8248000517869959980">"Αναπαραγωγή"</string>
-    <string name="camera_attach" msgid="4048659554893435232">"Επισύναψη"</string>
-    <string name="camera_cancel" msgid="8203341746672085747">"Ακύρωση"</string>
     <string name="camera_crop" msgid="5584000454518174632">"Περικοπή"</string>
     <string name="no_way_to_share_image" msgid="5011985309980187927">"Δεν υπάρχει διαθέσιμη εφαρμογή για την κοινή χρήση της φωτογραφίας."</string>
     <string name="no_way_to_share_video" msgid="3684571102267072206">"Δεν υπάρχει διαθέσιμη εφαρμογή για την κοινή χρήση του βίντεο."</string>
-    <string name="no_way_to_share" msgid="863323712875014752">"Δεν υπάρχει διαθέσιμη εφαρμογή για την κοινή χρήση των αρχείων μέσων."</string>
     <string name="video_play" msgid="5287787282508002895">"Αναπαραγωγή"</string>
     <string name="camera_gallery_photos_text" msgid="6558048736561932758">"Συλλογή"</string>
-    <string name="camera_pick_wallpaper" msgid="7026385960511811641">"Εικόνες"</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Ταπετσαρία"</string>
-    <string name="pref_gallery_category" msgid="5826488887237959433">"Γενικές ρυθμίσεις"</string>
-    <string name="pref_slideshow_category" msgid="9097962086335681667">"Ρυθμίσεις προβολής διαφανειών (slideshow)"</string>
-    <string name="pref_gallery_size_title" msgid="1363406603879434418">"Μέγεθος προβολής"</string>
-    <string name="pref_gallery_size_summary" msgid="8179967445295243638">"Επιλέξτε το μέγεθος προβολής των εικόνων και των βίντεο"</string>
-    <string name="pref_gallery_size_dialogtitle" msgid="757380558320647503">"Μέγεθος εικόνας"</string>
-  <string-array name="pref_gallery_size_choices">
-    <item msgid="7157691836846678936">"Μεγάλο"</item>
-    <item msgid="1033164600689216410">"Μικρό"</item>
-  </string-array>
-    <string name="pref_gallery_sort_title" msgid="7447949250045443386">"Σειρά ταξινόμησης"</string>
-    <string name="pref_gallery_sort_summary" msgid="6644398051645595214">"Επιλέξτε τη σειρά ταξινόμησης των εικόνων και των βίντεο"</string>
-    <string name="pref_gallery_sort_dialogtitle" msgid="5787417105532562739">"Ταξινόμηση εικόνων"</string>
-  <string-array name="pref_gallery_sort_choices">
-    <item msgid="5546009539334018063">"Πρώτα οι πιο πρόσφατες"</item>
-    <item msgid="7931283047572866748">"Οι πιο πρόσφατες τελευταίες"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_interval_title" msgid="6534904787962619832">"Διάστημα προβολής διαφανειών (slideshow)"</string>
-    <string name="pref_gallery_slideshow_interval_summary" msgid="329876327077905033">"Επιλέξτε πόση ώρα θα προβάλλεται κάθε διαφάνεια στην προβολή διαφανειών"</string>
-    <string name="pref_gallery_slideshow_interval_dialogtitle" msgid="6775543119826248900">"Διάστημα προβολής διαφανειών (slideshow)"</string>
-  <string-array name="pref_gallery_slideshow_interval_choices">
-    <item msgid="3089037742117543119">"2 δευτερόλεπτα"</item>
-    <item msgid="738579316565625730">"3 δευτερόλεπτα"</item>
-    <item msgid="5670078787463530498">"4 δευτερόλεπτα"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_transition_title" msgid="3235158556228218846">"Εναλλαγή προβολής διαφανειών (slideshow)"</string>
-    <string name="pref_gallery_slideshow_transition_summary" msgid="2390320265891546846">"Επιλ. του εφέ που θα χρησιμοποιηθεί κατά τη μετάβαση από μία διαφάνεια στην επόμενη"</string>
-    <string name="pref_gallery_slideshow_transition_dialogtitle" msgid="5483406447721500371">"Εναλλαγή προβολής διαφανειών (slideshow)"</string>
-  <string-array name="pref_gallery_slideshow_transition_choices">
-    <item msgid="2825716730899894863">"Σταδιακή εμφάνιση &amp; εξαφάνιση"</item>
-    <item msgid="403116336404005687">"Ολίσθηση αριστερά - δεξιά"</item>
-    <item msgid="4901733079450971731">"Ολίσθηση πάνω - κάτω"</item>
-    <item msgid="9006732482485375438">"Τυχαία επιλογή"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_repeat_title" msgid="6512135022461429738">"Επανάληψη προβολής διαφανειών (slideshow)"</string>
-    <string name="pref_gallery_slideshow_repeat_summary" msgid="8289230397431855268">"Αναπαρ.προβ.διαφαν.περισσότ.από μία φορά"</string>
-    <string name="pref_gallery_slideshow_shuffle_title" msgid="3677508579783015598">"Τυχαία αναπαραγωγή διαφανειών"</string>
-    <string name="pref_gallery_slideshow_shuffle_summary" msgid="8566948749149325715">"Εμφάνιση εικόνων με τυχαία σειρά"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Αποθήκευση τοποθεσίας"</string>
     <string name="pref_camera_recordlocation_entry_off" msgid="8888142742988946038">"ΑΠΕΝΕΡΓΟΠΟΙΗΜΕΝΟ"</string>
     <string name="pref_camera_recordlocation_entry_on" msgid="7954533529969575594">"Ενεργοποιημένο"</string>
@@ -154,10 +93,6 @@
     <string name="pref_camera_whitebalance_entry_daylight" msgid="2534757270149561027">"Φως ημέρας"</string>
     <string name="pref_camera_whitebalance_entry_fluorescent" msgid="2435332872847454032">"Λαμπτήρας φθορισμού"</string>
     <string name="pref_camera_whitebalance_entry_cloudy" msgid="3531996716997959326">"Συννεφιά"</string>
-    <string name="pref_camera_whitebalance_entry_twilight" msgid="2257942426397244556">"Λυκόφως"</string>
-    <string name="pref_camera_whitebalance_entry_shade" msgid="4685730287406277702">"Σκιά"</string>
-    <string name="pref_camera_whitebalance_entry_warm_fluorescent" msgid="2827098617308870248">"Θερμός λαμπτήρας φθορισμού"</string>
-    <string name="pref_camera_whitebalance_entry_halogen" msgid="5473868018455084929">"Λαμπτήρας αλογόνου"</string>
     <string name="pref_camera_coloreffect_dialogtitle" msgid="7691751972871809763">"Εφέ χρώματος"</string>
     <string name="pref_camera_coloreffect_title" msgid="4152827686267109207">"Εφέ χρώματος"</string>
     <string name="pref_camera_coloreffect_entry_none" msgid="4759462740660236565">"Κανένα"</string>
@@ -188,10 +123,6 @@
     <string name="pref_camera_scenemode_entry_sunset" msgid="181661154611507212">"Ηλιοβασίλεμα"</string>
     <string name="pref_camera_scenemode_entry_steadyphoto" msgid="2147958278893914895">"Σταθερή φωτογραφία"</string>
     <string name="pref_camera_scenemode_entry_fireworks" msgid="3530608172188797432">"Πυροτεχνήματα"</string>
-    <string name="camerasettings" msgid="2433519618178453928">"Ρυθμίσεις"</string>
-    <string name="image_gallery_NoImageView_text" msgid="409595259802877447">"Δεν βρέθηκαν μέσα."</string>
-    <string name="pref_gallery_confirm_delete_title" msgid="642429032687845907">"Επιβεβαίωση διαγραφών"</string>
-    <string name="pref_gallery_confirm_delete_summary" msgid="5253456492765525245">"Εμφ.μηνύμ.επιβεβ.πριν τη διαγρ.μιας εικόν.ή ενός βίντ."</string>
     <string name="no_location_image" msgid="6929172123058811834">"Δεν περιλαμβάνονται πληροφορίες τοποθεσίας σε αυτήν την εικόνα."</string>
     <string name="details_panel_title" msgid="4753347516759338122">"Λεπτομέρειες"</string>
     <string name="details_file_size" msgid="2468878774843246797">"Μέγεθος αρχείου:"</string>
@@ -215,30 +146,9 @@
     <string name="details_kbps" msgid="1515369011744784592">"<xliff:g id="SPEED">%1$d</xliff:g> Kbps"</string>
     <string name="details_mbps" msgid="3291428849607323284">"<xliff:g id="SPEED">%1$g</xliff:g> Mbps"</string>
     <string name="details_ok" msgid="6848594369924424312">"OK"</string>
-    <string name="context_menu_header" msgid="1185348426222302182">"Επιλογές εικόνας"</string>
-    <string name="video_context_menu_header" msgid="7318971116949475029">"Επιλογές βίντεο"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Πατήστε σε ένα πρόσωπο για να ξεκινήσετε."</string>
-    <string name="photos_gallery_title" msgid="6914406246471015448">"Συλλογή"</string>
-    <string name="pick_photos_gallery_title" msgid="12912682424915943">"Επιλογή εικόνας"</string>
-    <string name="videos_gallery_title" msgid="6150354029982749479">"Συλλογή"</string>
-    <string name="pick_videos_gallery_title" msgid="326727095201227333">"Επιλογή βίντεο"</string>
     <string name="sendImage" msgid="7279510542799399570">"Κοινή χρήση εικόνας μέσω"</string>
     <string name="setImage" msgid="7246975856983303047">"Ορισμός εικόνας ως"</string>
     <string name="sendVideo" msgid="3598567735831863073">"Κοινή χρήση βίντεο μέσω"</string>
-    <string name="send_media_files" msgid="8201083279723850611">"Κοινή χρήση αρχείων μέσων μέσω"</string>
-    <string name="movieviewlabel" msgid="7363495772706775465">"Ταινίες"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Φόρτωση βίντεο..."</string>
     <string name="spaceIsLow_content" msgid="2848517537672543641">"Ο διαθέσιμος χώρος στην κάρτα SD είναι ελάχιστος. Αλλάξτε τη ρύθμιση ποιότητας ή διαγράψτε στοιχεία από τη συλλογή."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Συνέχιση βίντεο"</string>
-    <string name="resume_playing_message" msgid="7293000708492271389">"Συνέχιση αναπαραγωγής από το <xliff:g id="DURATION">%s</xliff:g> ;"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Συνέχιση αναπαραγωγής"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Έναρξη από την αρχή"</string>
-    <string name="gadget_title" msgid="259405922673466798">"Πλαίσιο εικόνας"</string>
-    <string name="file_info_title" msgid="1628963357466012538">"Πληροφορίες αρχείου:"</string>
-    <string name="video_exceed_mms_limit" msgid="3835075281230780010">"Το βίντεο που εγγράψατε είναι πολύ μεγάλο για να αποσταλεί μέσω μηνύματος MMS. Δοκιμάστε να εγγράψετε μικρότερου μεγέθους βίντεο."</string>
-    <string name="multiselect_share" msgid="5261644537749253581">"Κοινή χρήση"</string>
-    <string name="multiselect_delete" msgid="9113461994546744603">"Διαγραφή"</string>
-    <string name="multiselect_cancel" msgid="5969428692864002165">"Ακύρωση"</string>
-    <string name="delete_images_message" msgid="4504926868037899430">"Πραγματοποιείται διαγραφή εικόνων, περιμένετε…"</string>
     <string name="video_reach_size_limit" msgid="6179877322015552390">"Συμπληρώθηκε το όριο μεγέθους."</string>
 </resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index fa337c2..95e305f 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -17,42 +17,24 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="camera_error_title" msgid="1202232535191653443">"Error de cámara"</string>
     <string name="cannot_connect_camera" msgid="8029009101380114174">"No se puede conectar a la cámara."</string>
-    <string name="all_images" msgid="1195501551939178807">"Todas las imágenes"</string>
-    <string name="all_videos" msgid="3380966619230896013">"Todos los videos"</string>
     <string name="camera_label" msgid="6346560772074764302">"Cámara"</string>
     <string name="video_camera_label" msgid="2899292505526427293">"Cámara de video"</string>
-    <string name="gallery_picker_label" msgid="3080425245006492787">"Galería"</string>
-    <string name="gallery_label" msgid="7119609703856708011">"Galería"</string>
     <string name="gallery_camera_bucket_name" msgid="2924618424339240831">"Imágenes de la cámara"</string>
     <string name="gallery_camera_videos_bucket_name" msgid="3369151581398551623">"Videos de la cámara"</string>
-    <string name="gallery_camera_media_bucket_name" msgid="5560926838411387511">"Medios de cámara"</string>
-    <string name="crop_label" msgid="521114301871349328">"Cortar la imagen"</string>
     <string name="view_label" msgid="4450531507947335704">"Ver imagen"</string>
-    <string name="preferences_label" msgid="5955678162525051163">"Configuración de cámara"</string>
     <string name="wait" msgid="8600187532323801552">"Espera, por favor..."</string>
     <string name="no_storage" msgid="820691042667338625">"Inserta una tarjeta SD antes de utilizar la cámara."</string>
     <string name="not_enough_space" msgid="6655334407957844653">"Tu tarjeta SD está llena."</string>
     <string name="preparing_sd" msgid="2914969119574812666">"Preparando la tarjeta SD..."</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Configurando papel tapiz. Espera, por favor..."</string>
-    <string name="savingImage" msgid="3051745378545909260">"Guardando imagen..."</string>
-    <string name="runningFaceDetection" msgid="2293932204708167704">"Espera, por favor..."</string>
     <string name="settings" msgid="1534847740615665736">"Configuración"</string>
-    <string name="view" msgid="6277795271119411881">"Ver"</string>
     <string name="details" msgid="8415120088556445230">"Detalles"</string>
     <string name="show_on_map" msgid="441725587731006228">"Mostrar en Google Maps"</string>
     <string name="rotate" msgid="460017689320955494">"Rotar"</string>
     <string name="rotate_left" msgid="5888273317282539839">"Rotar hacia la izquierda"</string>
     <string name="rotate_right" msgid="6776325835923384839">"Rotar hacia la derecha"</string>
-    <string name="slide_show" msgid="1965192737233824143">"Presentación de diapositivas"</string>
-    <string name="multiselect" msgid="4761682939945434146">"Selección múltiple"</string>
-    <string name="capture_picture" msgid="4114265595549284643">"Capturar imagen"</string>
-    <string name="capture_video" msgid="4047046282358697155">"Capturar video"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Guardar"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Eliminar"</string>
     <string name="confirm_delete_title" msgid="263478358046514887">"Eliminar"</string>
     <string name="confirm_delete_message" msgid="4161389939579284604">"La imagen se eliminará."</string>
     <string name="confirm_delete_video_message" msgid="5796154324948010221">"El video se eliminará."</string>
-    <string name="confirm_delete_multiple_message" msgid="5962369828035778779">"Estos archivos de medios serán suprimidos."</string>
     <string name="review_toss" msgid="7255331999518617841">"ELIMINAR"</string>
     <string name="review_share" msgid="7294755861072174509">"COMPARTIR"</string>
     <string name="review_set" msgid="8304758352155378636">"DEFINIR COMO"</string>
@@ -64,54 +46,11 @@
     <string name="camera_toss" msgid="3781186798552460833">"Eliminar"</string>
     <string name="camera_share" msgid="8207701858325694182">"Compartir"</string>
     <string name="camera_set" msgid="3422192914806971182">"Definir como"</string>
-    <string name="camera_play" msgid="8248000517869959980">"Reproducir"</string>
-    <string name="camera_attach" msgid="4048659554893435232">"Adjuntar"</string>
-    <string name="camera_cancel" msgid="8203341746672085747">"Cancelar"</string>
     <string name="camera_crop" msgid="5584000454518174632">"Cortar"</string>
     <string name="no_way_to_share_image" msgid="5011985309980187927">"No hay aplicación disponible para compartir la imagen."</string>
     <string name="no_way_to_share_video" msgid="3684571102267072206">"No hay aplicación disponible para compartir el video."</string>
-    <string name="no_way_to_share" msgid="863323712875014752">"No hay aplicación disponible para compartir el/los archivo/s de medios."</string>
     <string name="video_play" msgid="5287787282508002895">"Reproducir"</string>
     <string name="camera_gallery_photos_text" msgid="6558048736561932758">"Galería"</string>
-    <string name="camera_pick_wallpaper" msgid="7026385960511811641">"Imágenes"</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Papel tapiz"</string>
-    <string name="pref_gallery_category" msgid="5826488887237959433">"Configuración general"</string>
-    <string name="pref_slideshow_category" msgid="9097962086335681667">"Conf. present. de diapositivas"</string>
-    <string name="pref_gallery_size_title" msgid="1363406603879434418">"Visualizar tamaño"</string>
-    <string name="pref_gallery_size_summary" msgid="8179967445295243638">"Seleccionar el tamaño de visualización de imágenes y videos"</string>
-    <string name="pref_gallery_size_dialogtitle" msgid="757380558320647503">"Tamaño de imagen"</string>
-  <string-array name="pref_gallery_size_choices">
-    <item msgid="7157691836846678936">"Grande"</item>
-    <item msgid="1033164600689216410">"Pequeño"</item>
-  </string-array>
-    <string name="pref_gallery_sort_title" msgid="7447949250045443386">"Ordenar"</string>
-    <string name="pref_gallery_sort_summary" msgid="6644398051645595214">"Selecciona el orden de imágenes y videos"</string>
-    <string name="pref_gallery_sort_dialogtitle" msgid="5787417105532562739">"Orden de imágenes"</string>
-  <string-array name="pref_gallery_sort_choices">
-    <item msgid="5546009539334018063">"Lo más nuevo primero"</item>
-    <item msgid="7931283047572866748">"Lo más nuevo al final"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_interval_title" msgid="6534904787962619832">"Intervalo de la presentación"</string>
-    <string name="pref_gallery_slideshow_interval_summary" msgid="329876327077905033">"Seleccionar cuánto tiempo se visualizará cada diapositiva en la presentación"</string>
-    <string name="pref_gallery_slideshow_interval_dialogtitle" msgid="6775543119826248900">"Intervalo de la presentación"</string>
-  <string-array name="pref_gallery_slideshow_interval_choices">
-    <item msgid="3089037742117543119">"2 segundos"</item>
-    <item msgid="738579316565625730">"3 segundos"</item>
-    <item msgid="5670078787463530498">"4 segundos"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_transition_title" msgid="3235158556228218846">"Transic. de la present. de diapos."</string>
-    <string name="pref_gallery_slideshow_transition_summary" msgid="2390320265891546846">"Seleccionar el efecto utilizado al pasar de una diapositiva a otra"</string>
-    <string name="pref_gallery_slideshow_transition_dialogtitle" msgid="5483406447721500371">"Transición de la presentación de diapositivas"</string>
-  <string-array name="pref_gallery_slideshow_transition_choices">
-    <item msgid="2825716730899894863">"Fundido de entrada/salida"</item>
-    <item msgid="403116336404005687">"Deslizar hacia la izquierda/derecha"</item>
-    <item msgid="4901733079450971731">"Deslizar hacia arriba/abajo"</item>
-    <item msgid="9006732482485375438">"Selección aleatoria"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_repeat_title" msgid="6512135022461429738">"Repetir la presentación"</string>
-    <string name="pref_gallery_slideshow_repeat_summary" msgid="8289230397431855268">"Reproducir la presentación de diapositivas más de una vez"</string>
-    <string name="pref_gallery_slideshow_shuffle_title" msgid="3677508579783015598">"Arrastrar diapositivas"</string>
-    <string name="pref_gallery_slideshow_shuffle_summary" msgid="8566948749149325715">"Mostrar imágenes en orden aleatorio"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Ubicación de tienda"</string>
     <string name="pref_camera_recordlocation_entry_off" msgid="8888142742988946038">"Apagado"</string>
     <string name="pref_camera_recordlocation_entry_on" msgid="7954533529969575594">"Encendido"</string>
@@ -154,10 +93,6 @@
     <string name="pref_camera_whitebalance_entry_daylight" msgid="2534757270149561027">"Luz del día"</string>
     <string name="pref_camera_whitebalance_entry_fluorescent" msgid="2435332872847454032">"Fluorescente"</string>
     <string name="pref_camera_whitebalance_entry_cloudy" msgid="3531996716997959326">"Nublado"</string>
-    <string name="pref_camera_whitebalance_entry_twilight" msgid="2257942426397244556">"Penumbra"</string>
-    <string name="pref_camera_whitebalance_entry_shade" msgid="4685730287406277702">"Tono"</string>
-    <string name="pref_camera_whitebalance_entry_warm_fluorescent" msgid="2827098617308870248">"Fluorescente cálido"</string>
-    <string name="pref_camera_whitebalance_entry_halogen" msgid="5473868018455084929">"Halógeno"</string>
     <string name="pref_camera_coloreffect_dialogtitle" msgid="7691751972871809763">"Efecto de color"</string>
     <string name="pref_camera_coloreffect_title" msgid="4152827686267109207">"Efecto de color"</string>
     <string name="pref_camera_coloreffect_entry_none" msgid="4759462740660236565">"Ninguno"</string>
@@ -188,10 +123,6 @@
     <string name="pref_camera_scenemode_entry_sunset" msgid="181661154611507212">"Crepúsculo"</string>
     <string name="pref_camera_scenemode_entry_steadyphoto" msgid="2147958278893914895">"Foto fija"</string>
     <string name="pref_camera_scenemode_entry_fireworks" msgid="3530608172188797432">"Fuegos artificiales"</string>
-    <string name="camerasettings" msgid="2433519618178453928">"Configuración"</string>
-    <string name="image_gallery_NoImageView_text" msgid="409595259802877447">"No se han encontrado medios."</string>
-    <string name="pref_gallery_confirm_delete_title" msgid="642429032687845907">"Confirmar eliminaciones"</string>
-    <string name="pref_gallery_confirm_delete_summary" msgid="5253456492765525245">"Mostrar configuración antes de eliminar una imagen o un video"</string>
     <string name="no_location_image" msgid="6929172123058811834">"Esta imagen no contiene información de la ubicación."</string>
     <string name="details_panel_title" msgid="4753347516759338122">"Detalles"</string>
     <string name="details_file_size" msgid="2468878774843246797">"Tamaño de archivo:"</string>
@@ -215,30 +146,9 @@
     <string name="details_kbps" msgid="1515369011744784592">"<xliff:g id="SPEED">%1$d</xliff:g> Kbps"</string>
     <string name="details_mbps" msgid="3291428849607323284">"<xliff:g id="SPEED">%1$g</xliff:g> Mbps"</string>
     <string name="details_ok" msgid="6848594369924424312">"Aceptar"</string>
-    <string name="context_menu_header" msgid="1185348426222302182">"Opciones de imagen"</string>
-    <string name="video_context_menu_header" msgid="7318971116949475029">"Opciones de video"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Golpea una cara para comenzar."</string>
-    <string name="photos_gallery_title" msgid="6914406246471015448">"Galería"</string>
-    <string name="pick_photos_gallery_title" msgid="12912682424915943">"Seleccionar imagen"</string>
-    <string name="videos_gallery_title" msgid="6150354029982749479">"Galería"</string>
-    <string name="pick_videos_gallery_title" msgid="326727095201227333">"Seleccionar video"</string>
     <string name="sendImage" msgid="7279510542799399570">"Compartir imagen mediante"</string>
     <string name="setImage" msgid="7246975856983303047">"Definir imagen como"</string>
     <string name="sendVideo" msgid="3598567735831863073">"Compartir video mediante"</string>
-    <string name="send_media_files" msgid="8201083279723850611">"Compartir archivos de medios"</string>
-    <string name="movieviewlabel" msgid="7363495772706775465">"Películas"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Cargando el video..."</string>
     <string name="spaceIsLow_content" msgid="2848517537672543641">"Tu tarjeta SD se está quedando sin espacio. Cambia la configuración de calidad o elimina elementos de la galería."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Retomar video"</string>
-    <string name="resume_playing_message" msgid="7293000708492271389">"¿Deseas retomar la reproducción desde <xliff:g id="DURATION">%s</xliff:g> ?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Retomar la reproducción"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Empezar de nuevo"</string>
-    <string name="gadget_title" msgid="259405922673466798">"Marco de imagen"</string>
-    <string name="file_info_title" msgid="1628963357466012538">"Información del archivo:"</string>
-    <string name="video_exceed_mms_limit" msgid="3835075281230780010">"El video que has grabado es demasiado grande para enviarlo por MMS. Intenta grabar uno más corto."</string>
-    <string name="multiselect_share" msgid="5261644537749253581">"Compartir"</string>
-    <string name="multiselect_delete" msgid="9113461994546744603">"Suprimir"</string>
-    <string name="multiselect_cancel" msgid="5969428692864002165">"Cancelar"</string>
-    <string name="delete_images_message" msgid="4504926868037899430">"Suprimiendo imágenes. Espera, por favor..."</string>
     <string name="video_reach_size_limit" msgid="6179877322015552390">"Se alcanzó el límite del tamaño."</string>
 </resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 7317c9c..f978f4d 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -17,42 +17,24 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="camera_error_title" msgid="1202232535191653443">"Error de la cámara"</string>
     <string name="cannot_connect_camera" msgid="8029009101380114174">"No se puede establecer conexión con la cámara."</string>
-    <string name="all_images" msgid="1195501551939178807">"Todas las imágenes"</string>
-    <string name="all_videos" msgid="3380966619230896013">"Todos los vídeos"</string>
     <string name="camera_label" msgid="6346560772074764302">"Cámara"</string>
     <string name="video_camera_label" msgid="2899292505526427293">"Videocámara"</string>
-    <string name="gallery_picker_label" msgid="3080425245006492787">"Galería"</string>
-    <string name="gallery_label" msgid="7119609703856708011">"Galería"</string>
     <string name="gallery_camera_bucket_name" msgid="2924618424339240831">"Imágenes de cámara"</string>
     <string name="gallery_camera_videos_bucket_name" msgid="3369151581398551623">"Vídeos de cámara"</string>
-    <string name="gallery_camera_media_bucket_name" msgid="5560926838411387511">"Medios de cámara"</string>
-    <string name="crop_label" msgid="521114301871349328">"Recortar imagen"</string>
     <string name="view_label" msgid="4450531507947335704">"Ver imagen"</string>
-    <string name="preferences_label" msgid="5955678162525051163">"Configuración de cámara"</string>
     <string name="wait" msgid="8600187532323801552">"Por favor, espera..."</string>
     <string name="no_storage" msgid="820691042667338625">"Inserta o activa la tarjeta SD para poder utilizar la cámara."</string>
     <string name="not_enough_space" msgid="6655334407957844653">"La tarjeta SD está llena."</string>
     <string name="preparing_sd" msgid="2914969119574812666">"Preparando tarjeta SD…"</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Estableciendo fondo de pantalla..."</string>
-    <string name="savingImage" msgid="3051745378545909260">"Guardando imagen..."</string>
-    <string name="runningFaceDetection" msgid="2293932204708167704">"Por favor, espera..."</string>
     <string name="settings" msgid="1534847740615665736">"Ajustes"</string>
-    <string name="view" msgid="6277795271119411881">"Ver"</string>
     <string name="details" msgid="8415120088556445230">"Detalles"</string>
     <string name="show_on_map" msgid="441725587731006228">"Mostrar en mapas"</string>
     <string name="rotate" msgid="460017689320955494">"Girar"</string>
     <string name="rotate_left" msgid="5888273317282539839">"Girar a la izquierda"</string>
     <string name="rotate_right" msgid="6776325835923384839">"Girar a la derecha"</string>
-    <string name="slide_show" msgid="1965192737233824143">"Presentación"</string>
-    <string name="multiselect" msgid="4761682939945434146">"Selección múltiple"</string>
-    <string name="capture_picture" msgid="4114265595549284643">"Capturar imagen"</string>
-    <string name="capture_video" msgid="4047046282358697155">"Capturar vídeo"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Guardar"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Descartar"</string>
     <string name="confirm_delete_title" msgid="263478358046514887">"Suprimir"</string>
     <string name="confirm_delete_message" msgid="4161389939579284604">"Se eliminará la imagen."</string>
     <string name="confirm_delete_video_message" msgid="5796154324948010221">"Se eliminará el vídeo."</string>
-    <string name="confirm_delete_multiple_message" msgid="5962369828035778779">"Estos archivos de medios se eliminarán."</string>
     <string name="review_toss" msgid="7255331999518617841">"SUPRIMIR"</string>
     <string name="review_share" msgid="7294755861072174509">"COMPARTIR"</string>
     <string name="review_set" msgid="8304758352155378636">"ESTABLECER COMO"</string>
@@ -64,54 +46,11 @@
     <string name="camera_toss" msgid="3781186798552460833">"Suprimir"</string>
     <string name="camera_share" msgid="8207701858325694182">"Compartir"</string>
     <string name="camera_set" msgid="3422192914806971182">"Establecer como"</string>
-    <string name="camera_play" msgid="8248000517869959980">"Reproducir"</string>
-    <string name="camera_attach" msgid="4048659554893435232">"Adjuntar"</string>
-    <string name="camera_cancel" msgid="8203341746672085747">"Cancelar"</string>
     <string name="camera_crop" msgid="5584000454518174632">"Recortar"</string>
     <string name="no_way_to_share_image" msgid="5011985309980187927">"No hay ninguna aplicación disponible para compartir la imagen."</string>
     <string name="no_way_to_share_video" msgid="3684571102267072206">"No hay ninguna aplicación disponible para compartir el vídeo."</string>
-    <string name="no_way_to_share" msgid="863323712875014752">"No hay ninguna aplicación disponible para compartir los archivos de medios."</string>
     <string name="video_play" msgid="5287787282508002895">"Reproducir"</string>
     <string name="camera_gallery_photos_text" msgid="6558048736561932758">"Galería"</string>
-    <string name="camera_pick_wallpaper" msgid="7026385960511811641">"Imágenes"</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Fondo de pantalla"</string>
-    <string name="pref_gallery_category" msgid="5826488887237959433">"Configuración general"</string>
-    <string name="pref_slideshow_category" msgid="9097962086335681667">"Configuración de presentación"</string>
-    <string name="pref_gallery_size_title" msgid="1363406603879434418">"Tamaño de visualización"</string>
-    <string name="pref_gallery_size_summary" msgid="8179967445295243638">"Seleccionar el tamaño de visualización de imágenes y vídeos"</string>
-    <string name="pref_gallery_size_dialogtitle" msgid="757380558320647503">"Tamaño de imagen"</string>
-  <string-array name="pref_gallery_size_choices">
-    <item msgid="7157691836846678936">"Grande"</item>
-    <item msgid="1033164600689216410">"Pequeña"</item>
-  </string-array>
-    <string name="pref_gallery_sort_title" msgid="7447949250045443386">"Orden"</string>
-    <string name="pref_gallery_sort_summary" msgid="6644398051645595214">"Seleccionar el orden de imágenes y vídeos"</string>
-    <string name="pref_gallery_sort_dialogtitle" msgid="5787417105532562739">"Ordenación de imágenes"</string>
-  <string-array name="pref_gallery_sort_choices">
-    <item msgid="5546009539334018063">"Más recientes primero"</item>
-    <item msgid="7931283047572866748">"Más recientes al final"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_interval_title" msgid="6534904787962619832">"Intervalo de presentación"</string>
-    <string name="pref_gallery_slideshow_interval_summary" msgid="329876327077905033">"Seleccionar la duración de cada diapositiva"</string>
-    <string name="pref_gallery_slideshow_interval_dialogtitle" msgid="6775543119826248900">"Intervalo de presentación"</string>
-  <string-array name="pref_gallery_slideshow_interval_choices">
-    <item msgid="3089037742117543119">"2 segundos"</item>
-    <item msgid="738579316565625730">"3 segundos"</item>
-    <item msgid="5670078787463530498">"4 segundos"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_transition_title" msgid="3235158556228218846">"Transición de diapositivas"</string>
-    <string name="pref_gallery_slideshow_transition_summary" msgid="2390320265891546846">"Seleccionar el efecto que se aplicará al pasar de una diapositiva a otra"</string>
-    <string name="pref_gallery_slideshow_transition_dialogtitle" msgid="5483406447721500371">"Transición de diapositivas"</string>
-  <string-array name="pref_gallery_slideshow_transition_choices">
-    <item msgid="2825716730899894863">"Fundido de entrada y salida"</item>
-    <item msgid="403116336404005687">"Transición de izquierda a derecha"</item>
-    <item msgid="4901733079450971731">"Transición de arriba a abajo"</item>
-    <item msgid="9006732482485375438">"Selección aleatoria"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_repeat_title" msgid="6512135022461429738">"Repetir presentación"</string>
-    <string name="pref_gallery_slideshow_repeat_summary" msgid="8289230397431855268">"Mostrar presentación más de una vez"</string>
-    <string name="pref_gallery_slideshow_shuffle_title" msgid="3677508579783015598">"Orden aleatorio"</string>
-    <string name="pref_gallery_slideshow_shuffle_summary" msgid="8566948749149325715">"Mostrar imágenes en orden aleatorio"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Almacenar ubicación"</string>
     <string name="pref_camera_recordlocation_entry_off" msgid="8888142742988946038">"Desactivada"</string>
     <string name="pref_camera_recordlocation_entry_on" msgid="7954533529969575594">"Activada"</string>
@@ -154,10 +93,6 @@
     <string name="pref_camera_whitebalance_entry_daylight" msgid="2534757270149561027">"Luz natural"</string>
     <string name="pref_camera_whitebalance_entry_fluorescent" msgid="2435332872847454032">"Fluorescente"</string>
     <string name="pref_camera_whitebalance_entry_cloudy" msgid="3531996716997959326">"Nublado"</string>
-    <string name="pref_camera_whitebalance_entry_twilight" msgid="2257942426397244556">"Penumbra"</string>
-    <string name="pref_camera_whitebalance_entry_shade" msgid="4685730287406277702">"Sombra"</string>
-    <string name="pref_camera_whitebalance_entry_warm_fluorescent" msgid="2827098617308870248">"Fluorescente cálido"</string>
-    <string name="pref_camera_whitebalance_entry_halogen" msgid="5473868018455084929">"Halógeno"</string>
     <string name="pref_camera_coloreffect_dialogtitle" msgid="7691751972871809763">"Efecto de color"</string>
     <string name="pref_camera_coloreffect_title" msgid="4152827686267109207">"Efecto de color"</string>
     <string name="pref_camera_coloreffect_entry_none" msgid="4759462740660236565">"Ninguno"</string>
@@ -188,10 +123,6 @@
     <string name="pref_camera_scenemode_entry_sunset" msgid="181661154611507212">"Atardecer"</string>
     <string name="pref_camera_scenemode_entry_steadyphoto" msgid="2147958278893914895">"Foto fija"</string>
     <string name="pref_camera_scenemode_entry_fireworks" msgid="3530608172188797432">"Fuegos artificiales"</string>
-    <string name="camerasettings" msgid="2433519618178453928">"Ajustes"</string>
-    <string name="image_gallery_NoImageView_text" msgid="409595259802877447">"No se ha encontrado ningún elemento."</string>
-    <string name="pref_gallery_confirm_delete_title" msgid="642429032687845907">"Confirmar eliminaciones"</string>
-    <string name="pref_gallery_confirm_delete_summary" msgid="5253456492765525245">"Mostrar confirmación antes de eliminar una imagen o un vídeo"</string>
     <string name="no_location_image" msgid="6929172123058811834">"Esta imagen no contiene ninguna información sobre ubicación."</string>
     <string name="details_panel_title" msgid="4753347516759338122">"Detalles"</string>
     <string name="details_file_size" msgid="2468878774843246797">"Tamaño de archivo:"</string>
@@ -215,30 +146,9 @@
     <string name="details_kbps" msgid="1515369011744784592">"<xliff:g id="SPEED">%1$d</xliff:g> Kbps"</string>
     <string name="details_mbps" msgid="3291428849607323284">"<xliff:g id="SPEED">%1$g</xliff:g> Mbps"</string>
     <string name="details_ok" msgid="6848594369924424312">"Aceptar"</string>
-    <string name="context_menu_header" msgid="1185348426222302182">"Opciones de imagen"</string>
-    <string name="video_context_menu_header" msgid="7318971116949475029">"Opciones de vídeo"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Toca una cara para empezar."</string>
-    <string name="photos_gallery_title" msgid="6914406246471015448">"Galería"</string>
-    <string name="pick_photos_gallery_title" msgid="12912682424915943">"Seleccionar imagen"</string>
-    <string name="videos_gallery_title" msgid="6150354029982749479">"Galería"</string>
-    <string name="pick_videos_gallery_title" msgid="326727095201227333">"Seleccionar vídeo"</string>
     <string name="sendImage" msgid="7279510542799399570">"Compartir imagen por"</string>
     <string name="setImage" msgid="7246975856983303047">"Establecer imagen como"</string>
     <string name="sendVideo" msgid="3598567735831863073">"Compartir vídeo a través de"</string>
-    <string name="send_media_files" msgid="8201083279723850611">"Compartir archivos de medios mediante"</string>
-    <string name="movieviewlabel" msgid="7363495772706775465">"Películas"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Cargando vídeo…"</string>
     <string name="spaceIsLow_content" msgid="2848517537672543641">"No queda espacio en la tarjeta SD. Cambia la configuración de calidad o elimina elementos de la galería."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Reanudar vídeo"</string>
-    <string name="resume_playing_message" msgid="7293000708492271389">"¿Reanudar reproducción a partir de <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Reanudar reproducción"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Volver a reproducir"</string>
-    <string name="gadget_title" msgid="259405922673466798">"Picture frame"</string>
-    <string name="file_info_title" msgid="1628963357466012538">"Información de archivo:"</string>
-    <string name="video_exceed_mms_limit" msgid="3835075281230780010">"El vídeo que has grabado es demasiado grande para enviarlo a través de MMS. Intenta grabar un vídeo de menor duración."</string>
-    <string name="multiselect_share" msgid="5261644537749253581">"Compartir"</string>
-    <string name="multiselect_delete" msgid="9113461994546744603">"Suprimir"</string>
-    <string name="multiselect_cancel" msgid="5969428692864002165">"Cancelar"</string>
-    <string name="delete_images_message" msgid="4504926868037899430">"Eliminando imágenes; por favor, espera…"</string>
     <string name="video_reach_size_limit" msgid="6179877322015552390">"Se ha alcanzado el límite de tamaño."</string>
 </resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 4c7c3b3..624f5c0 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -17,42 +17,24 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="camera_error_title" msgid="1202232535191653443">"Erreur au niveau de l\'appareil photo"</string>
     <string name="cannot_connect_camera" msgid="8029009101380114174">"Impossible d\'établir une connexion avec l\'appareil photo."</string>
-    <string name="all_images" msgid="1195501551939178807">"Toutes les images"</string>
-    <string name="all_videos" msgid="3380966619230896013">"Toutes les vidéos"</string>
     <string name="camera_label" msgid="6346560772074764302">"Appareil photo"</string>
     <string name="video_camera_label" msgid="2899292505526427293">"Caméra"</string>
-    <string name="gallery_picker_label" msgid="3080425245006492787">"Galerie"</string>
-    <string name="gallery_label" msgid="7119609703856708011">"Galerie"</string>
     <string name="gallery_camera_bucket_name" msgid="2924618424339240831">"Photos de l\'appareil"</string>
     <string name="gallery_camera_videos_bucket_name" msgid="3369151581398551623">"Vidéos de la caméra"</string>
-    <string name="gallery_camera_media_bucket_name" msgid="5560926838411387511">"Vidéos"</string>
-    <string name="crop_label" msgid="521114301871349328">"Rogner l\'image"</string>
     <string name="view_label" msgid="4450531507947335704">"Afficher l\'image"</string>
-    <string name="preferences_label" msgid="5955678162525051163">"Paramètres de l\'appareil photo"</string>
     <string name="wait" msgid="8600187532323801552">"Veuillez patienter..."</string>
     <string name="no_storage" msgid="820691042667338625">"Veuillez insérer une carte SD avant d\'utiliser l\'appareil photo."</string>
     <string name="not_enough_space" msgid="6655334407957844653">"Votre carte SD est pleine."</string>
     <string name="preparing_sd" msgid="2914969119574812666">"Préparation de la carte SD..."</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Configuration du fond d\'écran en cours. Veuillez patienter..."</string>
-    <string name="savingImage" msgid="3051745378545909260">"Enregistrement de l\'image"</string>
-    <string name="runningFaceDetection" msgid="2293932204708167704">"Veuillez patienter..."</string>
     <string name="settings" msgid="1534847740615665736">"Paramètres"</string>
-    <string name="view" msgid="6277795271119411881">"Afficher"</string>
     <string name="details" msgid="8415120088556445230">"Détails"</string>
     <string name="show_on_map" msgid="441725587731006228">"Afficher sur une carte"</string>
     <string name="rotate" msgid="460017689320955494">"Faire pivoter"</string>
     <string name="rotate_left" msgid="5888273317282539839">"Faire pivoter à gauche"</string>
     <string name="rotate_right" msgid="6776325835923384839">"Faire pivoter à droite"</string>
-    <string name="slide_show" msgid="1965192737233824143">"Diaporama"</string>
-    <string name="multiselect" msgid="4761682939945434146">"Sélection multiple"</string>
-    <string name="capture_picture" msgid="4114265595549284643">"Prendre une photo"</string>
-    <string name="capture_video" msgid="4047046282358697155">"Prendre une vidéo"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Enregistrer"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Annuler"</string>
     <string name="confirm_delete_title" msgid="263478358046514887">"Supprimer"</string>
     <string name="confirm_delete_message" msgid="4161389939579284604">"L\'image sera supprimée."</string>
     <string name="confirm_delete_video_message" msgid="5796154324948010221">"La vidéo va être supprimée."</string>
-    <string name="confirm_delete_multiple_message" msgid="5962369828035778779">"Ces fichiers vont être supprimés."</string>
     <string name="review_toss" msgid="7255331999518617841">"SUPPRIMER"</string>
     <string name="review_share" msgid="7294755861072174509">"PARTAGER"</string>
     <string name="review_set" msgid="8304758352155378636">"DÉFINIR COMME"</string>
@@ -64,54 +46,11 @@
     <string name="camera_toss" msgid="3781186798552460833">"Supprimer"</string>
     <string name="camera_share" msgid="8207701858325694182">"Partager"</string>
     <string name="camera_set" msgid="3422192914806971182">"Définir comme"</string>
-    <string name="camera_play" msgid="8248000517869959980">"Lire"</string>
-    <string name="camera_attach" msgid="4048659554893435232">"Pièce jointe"</string>
-    <string name="camera_cancel" msgid="8203341746672085747">"Annuler"</string>
     <string name="camera_crop" msgid="5584000454518174632">"Rogner"</string>
     <string name="no_way_to_share_image" msgid="5011985309980187927">"Aucune application disponible pour partager l\'image"</string>
     <string name="no_way_to_share_video" msgid="3684571102267072206">"Aucune application disponible pour partager la vidéo"</string>
-    <string name="no_way_to_share" msgid="863323712875014752">"Aucune application disponible pour partager les fichiers multimédia"</string>
     <string name="video_play" msgid="5287787282508002895">"Lire"</string>
     <string name="camera_gallery_photos_text" msgid="6558048736561932758">"Galerie"</string>
-    <string name="camera_pick_wallpaper" msgid="7026385960511811641">"Images"</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Fond d\'écran"</string>
-    <string name="pref_gallery_category" msgid="5826488887237959433">"Paramètres généraux"</string>
-    <string name="pref_slideshow_category" msgid="9097962086335681667">"Paramètres du diaporama"</string>
-    <string name="pref_gallery_size_title" msgid="1363406603879434418">"Taille d\'affichage"</string>
-    <string name="pref_gallery_size_summary" msgid="8179967445295243638">"Sélectionner la taille d\'affichage des images et des vidéos"</string>
-    <string name="pref_gallery_size_dialogtitle" msgid="757380558320647503">"Taille de l\'image"</string>
-  <string-array name="pref_gallery_size_choices">
-    <item msgid="7157691836846678936">"Grande"</item>
-    <item msgid="1033164600689216410">"Petite"</item>
-  </string-array>
-    <string name="pref_gallery_sort_title" msgid="7447949250045443386">"Ordre de tri"</string>
-    <string name="pref_gallery_sort_summary" msgid="6644398051645595214">"Sélectionner l\'ordre de tri des images et des vidéos"</string>
-    <string name="pref_gallery_sort_dialogtitle" msgid="5787417105532562739">"Trier les images"</string>
-  <string-array name="pref_gallery_sort_choices">
-    <item msgid="5546009539334018063">"La plus récente en premier"</item>
-    <item msgid="7931283047572866748">"La plus récente en dernier"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_interval_title" msgid="6534904787962619832">"Intervalle entre photos"</string>
-    <string name="pref_gallery_slideshow_interval_summary" msgid="329876327077905033">"Sélectionner la durée d\'affichage de chaque diapositive dans le diaporama"</string>
-    <string name="pref_gallery_slideshow_interval_dialogtitle" msgid="6775543119826248900">"Intervalle du diaporama"</string>
-  <string-array name="pref_gallery_slideshow_interval_choices">
-    <item msgid="3089037742117543119">"2 secondes"</item>
-    <item msgid="738579316565625730">"3 secondes"</item>
-    <item msgid="5670078787463530498">"4 secondes"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_transition_title" msgid="3235158556228218846">"Transition du diaporama"</string>
-    <string name="pref_gallery_slideshow_transition_summary" msgid="2390320265891546846">"Sélectionner l\'effet utilisé lors de la transition d\'une diapositive à une autre"</string>
-    <string name="pref_gallery_slideshow_transition_dialogtitle" msgid="5483406447721500371">"Transition du diaporama"</string>
-  <string-array name="pref_gallery_slideshow_transition_choices">
-    <item msgid="2825716730899894863">"Ouverture et fermeture en fondu"</item>
-    <item msgid="403116336404005687">"Glisser de gauche à droite"</item>
-    <item msgid="4901733079450971731">"Glisser de haut en bas"</item>
-    <item msgid="9006732482485375438">"Sélection aléatoire"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_repeat_title" msgid="6512135022461429738">"Rejouer le diaporama"</string>
-    <string name="pref_gallery_slideshow_repeat_summary" msgid="8289230397431855268">"Rejouer le diaporama plusieurs fois"</string>
-    <string name="pref_gallery_slideshow_shuffle_title" msgid="3677508579783015598">"Lecture aléatoire"</string>
-    <string name="pref_gallery_slideshow_shuffle_summary" msgid="8566948749149325715">"Afficher les images"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Enregistrer la position"</string>
     <string name="pref_camera_recordlocation_entry_off" msgid="8888142742988946038">"Désactivé"</string>
     <string name="pref_camera_recordlocation_entry_on" msgid="7954533529969575594">"Activé"</string>
@@ -154,10 +93,6 @@
     <string name="pref_camera_whitebalance_entry_daylight" msgid="2534757270149561027">"Lumière du jour"</string>
     <string name="pref_camera_whitebalance_entry_fluorescent" msgid="2435332872847454032">"Fluorescent"</string>
     <string name="pref_camera_whitebalance_entry_cloudy" msgid="3531996716997959326">"Nuageux"</string>
-    <string name="pref_camera_whitebalance_entry_twilight" msgid="2257942426397244556">"Crépuscule"</string>
-    <string name="pref_camera_whitebalance_entry_shade" msgid="4685730287406277702">"Ombre"</string>
-    <string name="pref_camera_whitebalance_entry_warm_fluorescent" msgid="2827098617308870248">"Fluorescent type chaud"</string>
-    <string name="pref_camera_whitebalance_entry_halogen" msgid="5473868018455084929">"Halogène"</string>
     <string name="pref_camera_coloreffect_dialogtitle" msgid="7691751972871809763">"Effet couleur"</string>
     <string name="pref_camera_coloreffect_title" msgid="4152827686267109207">"Effet couleur"</string>
     <string name="pref_camera_coloreffect_entry_none" msgid="4759462740660236565">"Aucun"</string>
@@ -188,10 +123,6 @@
     <string name="pref_camera_scenemode_entry_sunset" msgid="181661154611507212">"Coucher de soleil"</string>
     <string name="pref_camera_scenemode_entry_steadyphoto" msgid="2147958278893914895">"Anti-flou"</string>
     <string name="pref_camera_scenemode_entry_fireworks" msgid="3530608172188797432">"Feux d\'artifice"</string>
-    <string name="camerasettings" msgid="2433519618178453928">"Paramètres"</string>
-    <string name="image_gallery_NoImageView_text" msgid="409595259802877447">"Aucun fichier trouvé."</string>
-    <string name="pref_gallery_confirm_delete_title" msgid="642429032687845907">"Confirmer suppressions"</string>
-    <string name="pref_gallery_confirm_delete_summary" msgid="5253456492765525245">"Afficher une confirmation avant de supprimer une image ou une vidéo"</string>
     <string name="no_location_image" msgid="6929172123058811834">"Cette image ne contient pas d\'informations de localisation."</string>
     <string name="details_panel_title" msgid="4753347516759338122">"Détails"</string>
     <string name="details_file_size" msgid="2468878774843246797">"Taille du fichier :"</string>
@@ -215,30 +146,9 @@
     <string name="details_kbps" msgid="1515369011744784592">"<xliff:g id="SPEED">%1$d</xliff:g> Kbits/s"</string>
     <string name="details_mbps" msgid="3291428849607323284">"<xliff:g id="SPEED">%1$g</xliff:g> Mbits/s"</string>
     <string name="details_ok" msgid="6848594369924424312">"OK"</string>
-    <string name="context_menu_header" msgid="1185348426222302182">"Options de l\'image"</string>
-    <string name="video_context_menu_header" msgid="7318971116949475029">"Options vidéo"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Appuyez sur un visage pour commencer."</string>
-    <string name="photos_gallery_title" msgid="6914406246471015448">"Galerie"</string>
-    <string name="pick_photos_gallery_title" msgid="12912682424915943">"Sélectionnez une image"</string>
-    <string name="videos_gallery_title" msgid="6150354029982749479">"Galerie"</string>
-    <string name="pick_videos_gallery_title" msgid="326727095201227333">"Sélectionnez une vidéo"</string>
     <string name="sendImage" msgid="7279510542799399570">"Partager l\'image via"</string>
     <string name="setImage" msgid="7246975856983303047">"Définir l\'image comme"</string>
     <string name="sendVideo" msgid="3598567735831863073">"Partager la vidéo via"</string>
-    <string name="send_media_files" msgid="8201083279723850611">"Partager les fichiers multimédia via"</string>
-    <string name="movieviewlabel" msgid="7363495772706775465">"Films"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Chargement de la vidéo..."</string>
     <string name="spaceIsLow_content" msgid="2848517537672543641">"Votre carte SD est pleine. Modifiez le paramètre de qualité ou supprimez des éléments de la galerie."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Reprendre la vidéo"</string>
-    <string name="resume_playing_message" msgid="7293000708492271389">"Reprendre la lecture à partir de <xliff:g id="DURATION">%s</xliff:g> ?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Reprendre la lecture"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Démarrer"</string>
-    <string name="gadget_title" msgid="259405922673466798">"Cadre d\'image"</string>
-    <string name="file_info_title" msgid="1628963357466012538">"Informations sur le fichier :"</string>
-    <string name="video_exceed_mms_limit" msgid="3835075281230780010">"La vidéo que vous avez enregistrée est trop volumineuse et ne peut être envoyée par MMS. Enregistrez une vidéo plus courte."</string>
-    <string name="multiselect_share" msgid="5261644537749253581">"Partager"</string>
-    <string name="multiselect_delete" msgid="9113461994546744603">"Supprimer"</string>
-    <string name="multiselect_cancel" msgid="5969428692864002165">"Annuler"</string>
-    <string name="delete_images_message" msgid="4504926868037899430">"Suppression des images en cours, veuillez patienter..."</string>
     <string name="video_reach_size_limit" msgid="6179877322015552390">"Taille maximale atteinte."</string>
 </resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index a4bbd8c..3356c3a 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -17,42 +17,24 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="camera_error_title" msgid="1202232535191653443">"Errore fotocamera"</string>
     <string name="cannot_connect_camera" msgid="8029009101380114174">"Impossibile collegarsi alla fotocamera."</string>
-    <string name="all_images" msgid="1195501551939178807">"Tutte le foto"</string>
-    <string name="all_videos" msgid="3380966619230896013">"Tutti i video"</string>
     <string name="camera_label" msgid="6346560772074764302">"Fotocamera"</string>
     <string name="video_camera_label" msgid="2899292505526427293">"Videocamera"</string>
-    <string name="gallery_picker_label" msgid="3080425245006492787">"Galleria"</string>
-    <string name="gallery_label" msgid="7119609703856708011">"Galleria"</string>
     <string name="gallery_camera_bucket_name" msgid="2924618424339240831">"Foto"</string>
     <string name="gallery_camera_videos_bucket_name" msgid="3369151581398551623">"Video"</string>
-    <string name="gallery_camera_media_bucket_name" msgid="5560926838411387511">"File fotocamera"</string>
-    <string name="crop_label" msgid="521114301871349328">"Ritaglia foto"</string>
     <string name="view_label" msgid="4450531507947335704">"Visualizza foto"</string>
-    <string name="preferences_label" msgid="5955678162525051163">"Impostazioni fotocamera"</string>
     <string name="wait" msgid="8600187532323801552">"Attendere..."</string>
     <string name="no_storage" msgid="820691042667338625">"Per usare la fotocamera devi inserire una scheda SD."</string>
     <string name="not_enough_space" msgid="6655334407957844653">"La scheda SD è piena."</string>
     <string name="preparing_sd" msgid="2914969119574812666">"Preparazione scheda SD…"</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Impostazione sfondo, attendi..."</string>
-    <string name="savingImage" msgid="3051745378545909260">"Salvataggio foto..."</string>
-    <string name="runningFaceDetection" msgid="2293932204708167704">"Attendere..."</string>
     <string name="settings" msgid="1534847740615665736">"Impostazioni"</string>
-    <string name="view" msgid="6277795271119411881">"Visualizza"</string>
     <string name="details" msgid="8415120088556445230">"Dettagli"</string>
     <string name="show_on_map" msgid="441725587731006228">"Mostra su Google Maps"</string>
     <string name="rotate" msgid="460017689320955494">"Ruota"</string>
     <string name="rotate_left" msgid="5888273317282539839">"Ruota a sinistra"</string>
     <string name="rotate_right" msgid="6776325835923384839">"Ruota a destra"</string>
-    <string name="slide_show" msgid="1965192737233824143">"Presentazione"</string>
-    <string name="multiselect" msgid="4761682939945434146">"Multiselezione"</string>
-    <string name="capture_picture" msgid="4114265595549284643">"Scatta foto"</string>
-    <string name="capture_video" msgid="4047046282358697155">"Registra video"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Salva"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Annulla"</string>
     <string name="confirm_delete_title" msgid="263478358046514887">"Elimina"</string>
     <string name="confirm_delete_message" msgid="4161389939579284604">"La foto verrà eliminata."</string>
     <string name="confirm_delete_video_message" msgid="5796154324948010221">"Il video verrà eliminato."</string>
-    <string name="confirm_delete_multiple_message" msgid="5962369828035778779">"Questi file multimediali verranno eliminati."</string>
     <string name="review_toss" msgid="7255331999518617841">"ELIMINA"</string>
     <string name="review_share" msgid="7294755861072174509">"CONDIVIDI"</string>
     <string name="review_set" msgid="8304758352155378636">"IMPOSTA COME"</string>
@@ -64,54 +46,11 @@
     <string name="camera_toss" msgid="3781186798552460833">"Elimina"</string>
     <string name="camera_share" msgid="8207701858325694182">"Condividi"</string>
     <string name="camera_set" msgid="3422192914806971182">"Imposta come"</string>
-    <string name="camera_play" msgid="8248000517869959980">"Riproduci"</string>
-    <string name="camera_attach" msgid="4048659554893435232">"Allega"</string>
-    <string name="camera_cancel" msgid="8203341746672085747">"Annulla"</string>
     <string name="camera_crop" msgid="5584000454518174632">"Ritaglia"</string>
     <string name="no_way_to_share_image" msgid="5011985309980187927">"Nessuna applicazione disponibile per condividere la foto."</string>
     <string name="no_way_to_share_video" msgid="3684571102267072206">"Nessuna applicazione disponibile per condividere il video."</string>
-    <string name="no_way_to_share" msgid="863323712875014752">"Nessuna applicazione disponibile per condividere i file multimediali."</string>
     <string name="video_play" msgid="5287787282508002895">"Riproduci"</string>
     <string name="camera_gallery_photos_text" msgid="6558048736561932758">"Galleria"</string>
-    <string name="camera_pick_wallpaper" msgid="7026385960511811641">"Foto"</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Sfondo"</string>
-    <string name="pref_gallery_category" msgid="5826488887237959433">"Impostazioni generali"</string>
-    <string name="pref_slideshow_category" msgid="9097962086335681667">"Impostazioni presentazione"</string>
-    <string name="pref_gallery_size_title" msgid="1363406603879434418">"Dimensioni schermo"</string>
-    <string name="pref_gallery_size_summary" msgid="8179967445295243638">"Seleziona dimensioni di visualizz. di foto e video"</string>
-    <string name="pref_gallery_size_dialogtitle" msgid="757380558320647503">"Dimensioni foto"</string>
-  <string-array name="pref_gallery_size_choices">
-    <item msgid="7157691836846678936">"Grandi"</item>
-    <item msgid="1033164600689216410">"Piccole"</item>
-  </string-array>
-    <string name="pref_gallery_sort_title" msgid="7447949250045443386">"Ordinamento"</string>
-    <string name="pref_gallery_sort_summary" msgid="6644398051645595214">"Seleziona l\'ordinamento di foto e video"</string>
-    <string name="pref_gallery_sort_dialogtitle" msgid="5787417105532562739">"Ordine foto"</string>
-  <string-array name="pref_gallery_sort_choices">
-    <item msgid="5546009539334018063">"Da più recente"</item>
-    <item msgid="7931283047572866748">"Da meno recente"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_interval_title" msgid="6534904787962619832">"Intervallo presentazione"</string>
-    <string name="pref_gallery_slideshow_interval_summary" msgid="329876327077905033">"Seleziona la durata di ogni diapositiva"</string>
-    <string name="pref_gallery_slideshow_interval_dialogtitle" msgid="6775543119826248900">"Intervallo presentazione"</string>
-  <string-array name="pref_gallery_slideshow_interval_choices">
-    <item msgid="3089037742117543119">"2 secondi"</item>
-    <item msgid="738579316565625730">"3 secondi"</item>
-    <item msgid="5670078787463530498">"4 secondi"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_transition_title" msgid="3235158556228218846">"Transizione presentazione"</string>
-    <string name="pref_gallery_slideshow_transition_summary" msgid="2390320265891546846">"Seleziona l\'effetto da usare per passare da una diapositiva all\'altra"</string>
-    <string name="pref_gallery_slideshow_transition_dialogtitle" msgid="5483406447721500371">"Transizione diapositive"</string>
-  <string-array name="pref_gallery_slideshow_transition_choices">
-    <item msgid="2825716730899894863">"Dissolvenza"</item>
-    <item msgid="403116336404005687">"Da sinistra a destra"</item>
-    <item msgid="4901733079450971731">"Dall\'alto verso il basso"</item>
-    <item msgid="9006732482485375438">"Selezione casuale"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_repeat_title" msgid="6512135022461429738">"Ripeti presentazione"</string>
-    <string name="pref_gallery_slideshow_repeat_summary" msgid="8289230397431855268">"Riproduci più volte la presentazione"</string>
-    <string name="pref_gallery_slideshow_shuffle_title" msgid="3677508579783015598">"Riproduzione casuale"</string>
-    <string name="pref_gallery_slideshow_shuffle_summary" msgid="8566948749149325715">"Mostra le foto in ordine casuale"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Registra località"</string>
     <string name="pref_camera_recordlocation_entry_off" msgid="8888142742988946038">"Non attiva"</string>
     <string name="pref_camera_recordlocation_entry_on" msgid="7954533529969575594">"Attiva"</string>
@@ -154,10 +93,6 @@
     <string name="pref_camera_whitebalance_entry_daylight" msgid="2534757270149561027">"Luce diurna"</string>
     <string name="pref_camera_whitebalance_entry_fluorescent" msgid="2435332872847454032">"Luce neon"</string>
     <string name="pref_camera_whitebalance_entry_cloudy" msgid="3531996716997959326">"Nuvoloso"</string>
-    <string name="pref_camera_whitebalance_entry_twilight" msgid="2257942426397244556">"Crepuscolo"</string>
-    <string name="pref_camera_whitebalance_entry_shade" msgid="4685730287406277702">"Ombra"</string>
-    <string name="pref_camera_whitebalance_entry_warm_fluorescent" msgid="2827098617308870248">"Luce neon calda"</string>
-    <string name="pref_camera_whitebalance_entry_halogen" msgid="5473868018455084929">"Luce alogena"</string>
     <string name="pref_camera_coloreffect_dialogtitle" msgid="7691751972871809763">"Effetto colore"</string>
     <string name="pref_camera_coloreffect_title" msgid="4152827686267109207">"Effetto colore"</string>
     <string name="pref_camera_coloreffect_entry_none" msgid="4759462740660236565">"Nessuno"</string>
@@ -188,10 +123,6 @@
     <string name="pref_camera_scenemode_entry_sunset" msgid="181661154611507212">"Tramonto"</string>
     <string name="pref_camera_scenemode_entry_steadyphoto" msgid="2147958278893914895">"Stabilizzazione foto"</string>
     <string name="pref_camera_scenemode_entry_fireworks" msgid="3530608172188797432">"Fuochi d\'artificio"</string>
-    <string name="camerasettings" msgid="2433519618178453928">"Impostazioni"</string>
-    <string name="image_gallery_NoImageView_text" msgid="409595259802877447">"Nessun media trovato."</string>
-    <string name="pref_gallery_confirm_delete_title" msgid="642429032687845907">"Conferma eliminazioni"</string>
-    <string name="pref_gallery_confirm_delete_summary" msgid="5253456492765525245">"Mostra conferma prima di eliminare una foto o un video"</string>
     <string name="no_location_image" msgid="6929172123058811834">"Nessuna informazione di posizione contenuta in questa immagine."</string>
     <string name="details_panel_title" msgid="4753347516759338122">"Dettagli"</string>
     <string name="details_file_size" msgid="2468878774843246797">"Dim. file:"</string>
@@ -215,30 +146,9 @@
     <string name="details_kbps" msgid="1515369011744784592">"<xliff:g id="SPEED">%1$d</xliff:g> kbps"</string>
     <string name="details_mbps" msgid="3291428849607323284">"<xliff:g id="SPEED">%1$g</xliff:g> Mbps"</string>
     <string name="details_ok" msgid="6848594369924424312">"OK"</string>
-    <string name="context_menu_header" msgid="1185348426222302182">"Opzioni foto"</string>
-    <string name="video_context_menu_header" msgid="7318971116949475029">"Opzioni video"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Tocca un viso per iniziare."</string>
-    <string name="photos_gallery_title" msgid="6914406246471015448">"Galleria"</string>
-    <string name="pick_photos_gallery_title" msgid="12912682424915943">"Seleziona foto"</string>
-    <string name="videos_gallery_title" msgid="6150354029982749479">"Galleria"</string>
-    <string name="pick_videos_gallery_title" msgid="326727095201227333">"Seleziona video"</string>
     <string name="sendImage" msgid="7279510542799399570">"Condividi foto via"</string>
     <string name="setImage" msgid="7246975856983303047">"Imposta foto come"</string>
     <string name="sendVideo" msgid="3598567735831863073">"Condividi video tramite"</string>
-    <string name="send_media_files" msgid="8201083279723850611">"Condividi file multimediali tramite"</string>
-    <string name="movieviewlabel" msgid="7363495772706775465">"Film"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Caricamento video..."</string>
     <string name="spaceIsLow_content" msgid="2848517537672543641">"Lo spazio della scheda SD si sta esaurendo. Cambia l\'impostazione di qualità o elimina elementi nella galleria."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Riprendi video"</string>
-    <string name="resume_playing_message" msgid="7293000708492271389">"Riprendere la riproduzione da <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Riprendi riproduzione"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Ricomincia"</string>
-    <string name="gadget_title" msgid="259405922673466798">"Cornice immagine"</string>
-    <string name="file_info_title" msgid="1628963357466012538">"Info file:"</string>
-    <string name="video_exceed_mms_limit" msgid="3835075281230780010">"Il video registrato è troppo grande per essere inviato tramite MMS. Prova a registrare un clip più corto."</string>
-    <string name="multiselect_share" msgid="5261644537749253581">"Condividi"</string>
-    <string name="multiselect_delete" msgid="9113461994546744603">"Elimina"</string>
-    <string name="multiselect_cancel" msgid="5969428692864002165">"Annulla"</string>
-    <string name="delete_images_message" msgid="4504926868037899430">"Eliminazione immagini, attendi..."</string>
     <string name="video_reach_size_limit" msgid="6179877322015552390">"Limite di dimensione raggiunto."</string>
 </resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index fe9d158..6829566 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -17,42 +17,24 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="camera_error_title" msgid="1202232535191653443">"カメラエラー"</string>
     <string name="cannot_connect_camera" msgid="8029009101380114174">"カメラに接続できません。"</string>
-    <string name="all_images" msgid="1195501551939178807">"すべての写真"</string>
-    <string name="all_videos" msgid="3380966619230896013">"すべての動画"</string>
     <string name="camera_label" msgid="6346560772074764302">"カメラ"</string>
     <string name="video_camera_label" msgid="2899292505526427293">"ビデオ録画"</string>
-    <string name="gallery_picker_label" msgid="3080425245006492787">"ギャラリー"</string>
-    <string name="gallery_label" msgid="7119609703856708011">"ギャラリー"</string>
     <string name="gallery_camera_bucket_name" msgid="2924618424339240831">"カメラ (写真)"</string>
     <string name="gallery_camera_videos_bucket_name" msgid="3369151581398551623">"カメラ (動画)"</string>
-    <string name="gallery_camera_media_bucket_name" msgid="5560926838411387511">"カメラメディア"</string>
-    <string name="crop_label" msgid="521114301871349328">"トリミング"</string>
     <string name="view_label" msgid="4450531507947335704">"画像を表示"</string>
-    <string name="preferences_label" msgid="5955678162525051163">"カメラ設定"</string>
     <string name="wait" msgid="8600187532323801552">"お待ちください..."</string>
     <string name="no_storage" msgid="820691042667338625">"カメラを使用する前にSDカードを挿入してください。"</string>
     <string name="not_enough_space" msgid="6655334407957844653">"SDカードがいっぱいです。"</string>
     <string name="preparing_sd" msgid="2914969119574812666">"SDカードの準備中..."</string>
-    <string name="wallpaper" msgid="9222901738515471972">"壁紙を設定しています。しばらくお待ちください..."</string>
-    <string name="savingImage" msgid="3051745378545909260">"写真を保存中..."</string>
-    <string name="runningFaceDetection" msgid="2293932204708167704">"お待ちください..."</string>
     <string name="settings" msgid="1534847740615665736">"設定"</string>
-    <string name="view" msgid="6277795271119411881">"表示"</string>
     <string name="details" msgid="8415120088556445230">"詳細情報"</string>
     <string name="show_on_map" msgid="441725587731006228">"地図に表示"</string>
     <string name="rotate" msgid="460017689320955494">"回転"</string>
     <string name="rotate_left" msgid="5888273317282539839">"左に回転"</string>
     <string name="rotate_right" msgid="6776325835923384839">"右に回転"</string>
-    <string name="slide_show" msgid="1965192737233824143">"スライドショー"</string>
-    <string name="multiselect" msgid="4761682939945434146">"複数選択"</string>
-    <string name="capture_picture" msgid="4114265595549284643">"写真撮影"</string>
-    <string name="capture_video" msgid="4047046282358697155">"ムービー撮影"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"保存"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"キャンセル"</string>
     <string name="confirm_delete_title" msgid="263478358046514887">"削除"</string>
     <string name="confirm_delete_message" msgid="4161389939579284604">"画像を削除します。"</string>
     <string name="confirm_delete_video_message" msgid="5796154324948010221">"動画を削除します。"</string>
-    <string name="confirm_delete_multiple_message" msgid="5962369828035778779">"これらのメディアファイルが削除されます。"</string>
     <string name="review_toss" msgid="7255331999518617841">"削除"</string>
     <string name="review_share" msgid="7294755861072174509">"共有"</string>
     <string name="review_set" msgid="8304758352155378636">"登録"</string>
@@ -64,54 +46,11 @@
     <string name="camera_toss" msgid="3781186798552460833">"削除"</string>
     <string name="camera_share" msgid="8207701858325694182">"共有"</string>
     <string name="camera_set" msgid="3422192914806971182">"登録"</string>
-    <string name="camera_play" msgid="8248000517869959980">"再生"</string>
-    <string name="camera_attach" msgid="4048659554893435232">"添付"</string>
-    <string name="camera_cancel" msgid="8203341746672085747">"キャンセル"</string>
     <string name="camera_crop" msgid="5584000454518174632">"トリミング"</string>
     <string name="no_way_to_share_image" msgid="5011985309980187927">"写真を共有できるアプリケーションがありません。"</string>
     <string name="no_way_to_share_video" msgid="3684571102267072206">"動画を共有できるアプリケーションがありません。"</string>
-    <string name="no_way_to_share" msgid="863323712875014752">"メディアファイルを共有できるアプリケーションがありません。"</string>
     <string name="video_play" msgid="5287787282508002895">"再生"</string>
     <string name="camera_gallery_photos_text" msgid="6558048736561932758">"ギャラリー"</string>
-    <string name="camera_pick_wallpaper" msgid="7026385960511811641">"カメラで撮影した画像"</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"壁紙"</string>
-    <string name="pref_gallery_category" msgid="5826488887237959433">"全般設定"</string>
-    <string name="pref_slideshow_category" msgid="9097962086335681667">"スライドショー設定"</string>
-    <string name="pref_gallery_size_title" msgid="1363406603879434418">"表示サイズ"</string>
-    <string name="pref_gallery_size_summary" msgid="8179967445295243638">"画像や動画の表示サイズ"</string>
-    <string name="pref_gallery_size_dialogtitle" msgid="757380558320647503">"表示サイズ"</string>
-  <string-array name="pref_gallery_size_choices">
-    <item msgid="7157691836846678936">"大"</item>
-    <item msgid="1033164600689216410">"小"</item>
-  </string-array>
-    <string name="pref_gallery_sort_title" msgid="7447949250045443386">"表示順序"</string>
-    <string name="pref_gallery_sort_summary" msgid="6644398051645595214">"画像や動画の表示順序を選択"</string>
-    <string name="pref_gallery_sort_dialogtitle" msgid="5787417105532562739">"表示順序"</string>
-  <string-array name="pref_gallery_sort_choices">
-    <item msgid="5546009539334018063">"日付の新しい順"</item>
-    <item msgid="7931283047572866748">"日付の古い順"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_interval_title" msgid="6534904787962619832">"スライドの再生間隔"</string>
-    <string name="pref_gallery_slideshow_interval_summary" msgid="329876327077905033">"各スライドの表示時間"</string>
-    <string name="pref_gallery_slideshow_interval_dialogtitle" msgid="6775543119826248900">"スライドの再生間隔"</string>
-  <string-array name="pref_gallery_slideshow_interval_choices">
-    <item msgid="3089037742117543119">"2秒"</item>
-    <item msgid="738579316565625730">"3秒"</item>
-    <item msgid="5670078787463530498">"4秒"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_transition_title" msgid="3235158556228218846">"スライド切り替え"</string>
-    <string name="pref_gallery_slideshow_transition_summary" msgid="2390320265891546846">"スライドが切り替わるときの効果"</string>
-    <string name="pref_gallery_slideshow_transition_dialogtitle" msgid="5483406447721500371">"スライド切り替え"</string>
-  <string-array name="pref_gallery_slideshow_transition_choices">
-    <item msgid="2825716730899894863">"フェードイン&amp;アウト"</item>
-    <item msgid="403116336404005687">"左右にスライド"</item>
-    <item msgid="4901733079450971731">"上下にスライド"</item>
-    <item msgid="9006732482485375438">"ランダム"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_repeat_title" msgid="6512135022461429738">"リピート再生"</string>
-    <string name="pref_gallery_slideshow_repeat_summary" msgid="8289230397431855268">"スライドショーを繰り返し再生"</string>
-    <string name="pref_gallery_slideshow_shuffle_title" msgid="3677508579783015598">"スライドのシャッフル"</string>
-    <string name="pref_gallery_slideshow_shuffle_summary" msgid="8566948749149325715">"ランダムに表示する"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"位置情報を記録する"</string>
     <string name="pref_camera_recordlocation_entry_off" msgid="8888142742988946038">"OFF"</string>
     <string name="pref_camera_recordlocation_entry_on" msgid="7954533529969575594">"ON"</string>
@@ -154,10 +93,6 @@
     <string name="pref_camera_whitebalance_entry_daylight" msgid="2534757270149561027">"昼光"</string>
     <string name="pref_camera_whitebalance_entry_fluorescent" msgid="2435332872847454032">"蛍光灯"</string>
     <string name="pref_camera_whitebalance_entry_cloudy" msgid="3531996716997959326">"曇り"</string>
-    <string name="pref_camera_whitebalance_entry_twilight" msgid="2257942426397244556">"夕暮れ"</string>
-    <string name="pref_camera_whitebalance_entry_shade" msgid="4685730287406277702">"影"</string>
-    <string name="pref_camera_whitebalance_entry_warm_fluorescent" msgid="2827098617308870248">"暖色蛍光灯"</string>
-    <string name="pref_camera_whitebalance_entry_halogen" msgid="5473868018455084929">"ハロゲン"</string>
     <string name="pref_camera_coloreffect_dialogtitle" msgid="7691751972871809763">"色効果"</string>
     <string name="pref_camera_coloreffect_title" msgid="4152827686267109207">"色効果"</string>
     <string name="pref_camera_coloreffect_entry_none" msgid="4759462740660236565">"なし"</string>
@@ -188,10 +123,6 @@
     <string name="pref_camera_scenemode_entry_sunset" msgid="181661154611507212">"夕日"</string>
     <string name="pref_camera_scenemode_entry_steadyphoto" msgid="2147958278893914895">"手振れ補正"</string>
     <string name="pref_camera_scenemode_entry_fireworks" msgid="3530608172188797432">"花火"</string>
-    <string name="camerasettings" msgid="2433519618178453928">"設定"</string>
-    <string name="image_gallery_NoImageView_text" msgid="409595259802877447">"メディアが見つかりません。"</string>
-    <string name="pref_gallery_confirm_delete_title" msgid="642429032687845907">"削除確認"</string>
-    <string name="pref_gallery_confirm_delete_summary" msgid="5253456492765525245">"画像や動画を削除する前に確認する"</string>
     <string name="no_location_image" msgid="6929172123058811834">"この画像には位置情報は含まれていません。"</string>
     <string name="details_panel_title" msgid="4753347516759338122">"詳細情報"</string>
     <string name="details_file_size" msgid="2468878774843246797">"ファイルサイズ:"</string>
@@ -215,30 +146,9 @@
     <string name="details_kbps" msgid="1515369011744784592">"<xliff:g id="SPEED">%1$d</xliff:g>Kbps"</string>
     <string name="details_mbps" msgid="3291428849607323284">"<xliff:g id="SPEED">%1$g</xliff:g>Mbps"</string>
     <string name="details_ok" msgid="6848594369924424312">"OK"</string>
-    <string name="context_menu_header" msgid="1185348426222302182">"画像オプション"</string>
-    <string name="video_context_menu_header" msgid="7318971116949475029">"動画オプション"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"顔をタップして開始します。"</string>
-    <string name="photos_gallery_title" msgid="6914406246471015448">"ギャラリー"</string>
-    <string name="pick_photos_gallery_title" msgid="12912682424915943">"画像を選択"</string>
-    <string name="videos_gallery_title" msgid="6150354029982749479">"ギャラリー"</string>
-    <string name="pick_videos_gallery_title" msgid="326727095201227333">"動画を選択"</string>
     <string name="sendImage" msgid="7279510542799399570">"画像を共有:"</string>
     <string name="setImage" msgid="7246975856983303047">"登録"</string>
     <string name="sendVideo" msgid="3598567735831863073">"動画を共有"</string>
-    <string name="send_media_files" msgid="8201083279723850611">"メディアファイルを共有:"</string>
-    <string name="movieviewlabel" msgid="7363495772706775465">"映画"</string>
-    <string name="loading_video" msgid="4013492720121891585">"動画を読み込み中..."</string>
     <string name="spaceIsLow_content" msgid="2848517537672543641">"SDカードの容量が足りません。クオリティ設定を変更するか、ギャラリーからアイテムを削除してください。"</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"動画の再開"</string>
-    <string name="resume_playing_message" msgid="7293000708492271389">"<xliff:g id="DURATION">%s</xliff:g>から再生を再開しますか?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"再生を再開"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"最初から再生"</string>
-    <string name="gadget_title" msgid="259405922673466798">"写真フレーム"</string>
-    <string name="file_info_title" msgid="1628963357466012538">"ファイル情報:"</string>
-    <string name="video_exceed_mms_limit" msgid="3835075281230780010">"録画した動画のサイズが大きすぎるため送信できません。録画時間を短縮してみてください。"</string>
-    <string name="multiselect_share" msgid="5261644537749253581">"共有"</string>
-    <string name="multiselect_delete" msgid="9113461994546744603">"削除"</string>
-    <string name="multiselect_cancel" msgid="5969428692864002165">"キャンセル"</string>
-    <string name="delete_images_message" msgid="4504926868037899430">"画像を削除しています。お待ちください..."</string>
     <string name="video_reach_size_limit" msgid="6179877322015552390">"サイズ制限に達しました。"</string>
 </resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index ef96fa9..be4a1b9 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -17,42 +17,24 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="camera_error_title" msgid="1202232535191653443">"카메라 오류"</string>
     <string name="cannot_connect_camera" msgid="8029009101380114174">"카메라에 연결할 수 없습니다."</string>
-    <string name="all_images" msgid="1195501551939178807">"모든 사진"</string>
-    <string name="all_videos" msgid="3380966619230896013">"모든 동영상"</string>
     <string name="camera_label" msgid="6346560772074764302">"카메라"</string>
     <string name="video_camera_label" msgid="2899292505526427293">"캠코더"</string>
-    <string name="gallery_picker_label" msgid="3080425245006492787">"갤러리"</string>
-    <string name="gallery_label" msgid="7119609703856708011">"갤러리"</string>
     <string name="gallery_camera_bucket_name" msgid="2924618424339240831">"카메라 사진"</string>
     <string name="gallery_camera_videos_bucket_name" msgid="3369151581398551623">"카메라 동영상"</string>
-    <string name="gallery_camera_media_bucket_name" msgid="5560926838411387511">"카메라 미디어"</string>
-    <string name="crop_label" msgid="521114301871349328">"사진 자르기"</string>
     <string name="view_label" msgid="4450531507947335704">"사진 보기"</string>
-    <string name="preferences_label" msgid="5955678162525051163">"카메라 설정"</string>
     <string name="wait" msgid="8600187532323801552">"잠시 기다려 주세요..."</string>
     <string name="no_storage" msgid="820691042667338625">"카메라를 사용하려면 SD 카드를 넣으세요."</string>
     <string name="not_enough_space" msgid="6655334407957844653">"SD 카드가 꽉 찼습니다."</string>
     <string name="preparing_sd" msgid="2914969119574812666">"SD 카드 준비중..."</string>
-    <string name="wallpaper" msgid="9222901738515471972">"배경화면을 설정하는 중입니다. 잠시 기다려 주세요..."</string>
-    <string name="savingImage" msgid="3051745378545909260">"사진 저장 중..."</string>
-    <string name="runningFaceDetection" msgid="2293932204708167704">"잠시 기다려 주세요..."</string>
     <string name="settings" msgid="1534847740615665736">"설정"</string>
-    <string name="view" msgid="6277795271119411881">"보기"</string>
     <string name="details" msgid="8415120088556445230">"세부정보"</string>
     <string name="show_on_map" msgid="441725587731006228">"지도에 표시"</string>
     <string name="rotate" msgid="460017689320955494">"회전"</string>
     <string name="rotate_left" msgid="5888273317282539839">"왼쪽으로 회전"</string>
     <string name="rotate_right" msgid="6776325835923384839">"오른쪽으로 회전"</string>
-    <string name="slide_show" msgid="1965192737233824143">"슬라이드쇼"</string>
-    <string name="multiselect" msgid="4761682939945434146">"여러 개 선택"</string>
-    <string name="capture_picture" msgid="4114265595549284643">"사진촬영"</string>
-    <string name="capture_video" msgid="4047046282358697155">"동영상 캡처"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"저장"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"취소"</string>
     <string name="confirm_delete_title" msgid="263478358046514887">"삭제"</string>
     <string name="confirm_delete_message" msgid="4161389939579284604">"사진이 삭제됩니다."</string>
     <string name="confirm_delete_video_message" msgid="5796154324948010221">"동영상이 삭제됩니다."</string>
-    <string name="confirm_delete_multiple_message" msgid="5962369828035778779">"미디어 파일이 삭제됩니다."</string>
     <string name="review_toss" msgid="7255331999518617841">"삭제"</string>
     <string name="review_share" msgid="7294755861072174509">"공유"</string>
     <string name="review_set" msgid="8304758352155378636">"다음으로 설정"</string>
@@ -64,54 +46,11 @@
     <string name="camera_toss" msgid="3781186798552460833">"삭제"</string>
     <string name="camera_share" msgid="8207701858325694182">"공유"</string>
     <string name="camera_set" msgid="3422192914806971182">"다음으로 설정"</string>
-    <string name="camera_play" msgid="8248000517869959980">"재생"</string>
-    <string name="camera_attach" msgid="4048659554893435232">"첨부"</string>
-    <string name="camera_cancel" msgid="8203341746672085747">"취소"</string>
     <string name="camera_crop" msgid="5584000454518174632">"자르기"</string>
     <string name="no_way_to_share_image" msgid="5011985309980187927">"사진을 공유하기 위해 사용할 수 있는 응용프로그램이 없습니다."</string>
     <string name="no_way_to_share_video" msgid="3684571102267072206">"동영상을 공유하기 위해 사용할 수 있는 응용프로그램이 없습니다."</string>
-    <string name="no_way_to_share" msgid="863323712875014752">"미디어 파일을 공유하기 위해 사용할 수 있는 응용프로그램이 없습니다."</string>
     <string name="video_play" msgid="5287787282508002895">"재생"</string>
     <string name="camera_gallery_photos_text" msgid="6558048736561932758">"갤러리"</string>
-    <string name="camera_pick_wallpaper" msgid="7026385960511811641">"사진"</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"배경화면"</string>
-    <string name="pref_gallery_category" msgid="5826488887237959433">"일반 설정"</string>
-    <string name="pref_slideshow_category" msgid="9097962086335681667">"슬라이드쇼 설정"</string>
-    <string name="pref_gallery_size_title" msgid="1363406603879434418">"디스플레이 크기"</string>
-    <string name="pref_gallery_size_summary" msgid="8179967445295243638">"사진 및 동영상 표시 크기 선택"</string>
-    <string name="pref_gallery_size_dialogtitle" msgid="757380558320647503">"사진 크기"</string>
-  <string-array name="pref_gallery_size_choices">
-    <item msgid="7157691836846678936">"크게"</item>
-    <item msgid="1033164600689216410">"작게"</item>
-  </string-array>
-    <string name="pref_gallery_sort_title" msgid="7447949250045443386">"정렬 순서"</string>
-    <string name="pref_gallery_sort_summary" msgid="6644398051645595214">"사진 및 동영상 정렬 순서 선택"</string>
-    <string name="pref_gallery_sort_dialogtitle" msgid="5787417105532562739">"사진 정렬"</string>
-  <string-array name="pref_gallery_sort_choices">
-    <item msgid="5546009539334018063">"최근 사진부터"</item>
-    <item msgid="7931283047572866748">"오래된 사진부터"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_interval_title" msgid="6534904787962619832">"슬라이드쇼 간격"</string>
-    <string name="pref_gallery_slideshow_interval_summary" msgid="329876327077905033">"쇼에서 각 슬라이드를 표시할 시간 선택"</string>
-    <string name="pref_gallery_slideshow_interval_dialogtitle" msgid="6775543119826248900">"슬라이드쇼 간격"</string>
-  <string-array name="pref_gallery_slideshow_interval_choices">
-    <item msgid="3089037742117543119">"2초"</item>
-    <item msgid="738579316565625730">"3초"</item>
-    <item msgid="5670078787463530498">"4초"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_transition_title" msgid="3235158556228218846">"슬라이드쇼 화면전환"</string>
-    <string name="pref_gallery_slideshow_transition_summary" msgid="2390320265891546846">"슬라이드 간에 이동할 때 사용할 효과 선택"</string>
-    <string name="pref_gallery_slideshow_transition_dialogtitle" msgid="5483406447721500371">"슬라이드쇼 화면전환"</string>
-  <string-array name="pref_gallery_slideshow_transition_choices">
-    <item msgid="2825716730899894863">"페이드 인/아웃"</item>
-    <item msgid="403116336404005687">"슬라이드 왼쪽 - 오른쪽"</item>
-    <item msgid="4901733079450971731">"슬라이드 위 - 아래"</item>
-    <item msgid="9006732482485375438">"무작위 선택"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_repeat_title" msgid="6512135022461429738">"슬라이드쇼 반복"</string>
-    <string name="pref_gallery_slideshow_repeat_summary" msgid="8289230397431855268">"슬라이드쇼를 한 번 이상 재생"</string>
-    <string name="pref_gallery_slideshow_shuffle_title" msgid="3677508579783015598">"슬라이드 섞기"</string>
-    <string name="pref_gallery_slideshow_shuffle_summary" msgid="8566948749149325715">"무작위로 사진 표시"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"저장 위치"</string>
     <string name="pref_camera_recordlocation_entry_off" msgid="8888142742988946038">"사용 안함"</string>
     <string name="pref_camera_recordlocation_entry_on" msgid="7954533529969575594">"사용"</string>
@@ -154,10 +93,6 @@
     <string name="pref_camera_whitebalance_entry_daylight" msgid="2534757270149561027">"일광"</string>
     <string name="pref_camera_whitebalance_entry_fluorescent" msgid="2435332872847454032">"형광"</string>
     <string name="pref_camera_whitebalance_entry_cloudy" msgid="3531996716997959326">"흐림"</string>
-    <string name="pref_camera_whitebalance_entry_twilight" msgid="2257942426397244556">"여명"</string>
-    <string name="pref_camera_whitebalance_entry_shade" msgid="4685730287406277702">"음영"</string>
-    <string name="pref_camera_whitebalance_entry_warm_fluorescent" msgid="2827098617308870248">"따뜻한 형광"</string>
-    <string name="pref_camera_whitebalance_entry_halogen" msgid="5473868018455084929">"할로겐"</string>
     <string name="pref_camera_coloreffect_dialogtitle" msgid="7691751972871809763">"색상 효과"</string>
     <string name="pref_camera_coloreffect_title" msgid="4152827686267109207">"색상 효과"</string>
     <string name="pref_camera_coloreffect_entry_none" msgid="4759462740660236565">"없음"</string>
@@ -188,10 +123,6 @@
     <string name="pref_camera_scenemode_entry_sunset" msgid="181661154611507212">"일몰"</string>
     <string name="pref_camera_scenemode_entry_steadyphoto" msgid="2147958278893914895">"손떨림 방지 사진"</string>
     <string name="pref_camera_scenemode_entry_fireworks" msgid="3530608172188797432">"불꽃놀이"</string>
-    <string name="camerasettings" msgid="2433519618178453928">"설정"</string>
-    <string name="image_gallery_NoImageView_text" msgid="409595259802877447">"미디어 파일이 없습니다."</string>
-    <string name="pref_gallery_confirm_delete_title" msgid="642429032687845907">"삭제 확인"</string>
-    <string name="pref_gallery_confirm_delete_summary" msgid="5253456492765525245">"사진 및 동영상 삭제 전 확인 표시"</string>
     <string name="no_location_image" msgid="6929172123058811834">"이미지에 위치 정보가 없습니다."</string>
     <string name="details_panel_title" msgid="4753347516759338122">"세부정보"</string>
     <string name="details_file_size" msgid="2468878774843246797">"파일 크기:"</string>
@@ -215,30 +146,9 @@
     <string name="details_kbps" msgid="1515369011744784592">"<xliff:g id="SPEED">%1$d</xliff:g>Kbps"</string>
     <string name="details_mbps" msgid="3291428849607323284">"<xliff:g id="SPEED">%1$g</xliff:g>Mbps"</string>
     <string name="details_ok" msgid="6848594369924424312">"확인"</string>
-    <string name="context_menu_header" msgid="1185348426222302182">"사진 옵션"</string>
-    <string name="video_context_menu_header" msgid="7318971116949475029">"동영상 옵션"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"시작하려면 얼굴을 탭하세요."</string>
-    <string name="photos_gallery_title" msgid="6914406246471015448">"갤러리"</string>
-    <string name="pick_photos_gallery_title" msgid="12912682424915943">"사진 선택"</string>
-    <string name="videos_gallery_title" msgid="6150354029982749479">"갤러리"</string>
-    <string name="pick_videos_gallery_title" msgid="326727095201227333">"동영상 선택"</string>
     <string name="sendImage" msgid="7279510542799399570">"사진 공유 응용프로그램"</string>
     <string name="setImage" msgid="7246975856983303047">"사진을 다음으로 설정"</string>
     <string name="sendVideo" msgid="3598567735831863073">"동영상 공유 응용프로그램"</string>
-    <string name="send_media_files" msgid="8201083279723850611">"미디어 파일 공유"</string>
-    <string name="movieviewlabel" msgid="7363495772706775465">"영화"</string>
-    <string name="loading_video" msgid="4013492720121891585">"동영상 로드 중..."</string>
     <string name="spaceIsLow_content" msgid="2848517537672543641">"SD 카드의 공간이 부족합니다. 화질 설정을 변경하거나 갤러리에서 항목을 삭제하세요."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"동영상 다시 시작"</string>
-    <string name="resume_playing_message" msgid="7293000708492271389">"<xliff:g id="DURATION">%s</xliff:g>에서 재생을 다시 시작하시겠습니까?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"재생 다시 시작"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"시작"</string>
-    <string name="gadget_title" msgid="259405922673466798">"사진 프레임"</string>
-    <string name="file_info_title" msgid="1628963357466012538">"파일 정보:"</string>
-    <string name="video_exceed_mms_limit" msgid="3835075281230780010">"녹화한 동영상이 너무 커서 MMS를 통해 전송할 수 없습니다. 클립의 길이를 더 짧게 녹화하세요."</string>
-    <string name="multiselect_share" msgid="5261644537749253581">"공유"</string>
-    <string name="multiselect_delete" msgid="9113461994546744603">"삭제"</string>
-    <string name="multiselect_cancel" msgid="5969428692864002165">"취소"</string>
-    <string name="delete_images_message" msgid="4504926868037899430">"이미지를 삭제하는 중입니다. 잠시 기다려 주세요."</string>
     <string name="video_reach_size_limit" msgid="6179877322015552390">"크기 한도에 도달했습니다."</string>
 </resources>
diff --git a/res/values-land/dimens.xml b/res/values-land/dimens.xml
index 2cdfb99..ea239e1 100644
--- a/res/values-land/dimens.xml
+++ b/res/values-land/dimens.xml
@@ -15,6 +15,4 @@
 -->
 
 <resources>
-    <dimen name="appwidget_width">206dip</dimen>
-    <dimen name="appwidget_height">143dip</dimen>
 </resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 19e4af9..937e5b5 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -17,42 +17,24 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="camera_error_title" msgid="1202232535191653443">"Kamerafeil"</string>
     <string name="cannot_connect_camera" msgid="8029009101380114174">"Kan ikke koble til kameraet."</string>
-    <string name="all_images" msgid="1195501551939178807">"Alle bilder"</string>
-    <string name="all_videos" msgid="3380966619230896013">"Alle videoer"</string>
     <string name="camera_label" msgid="6346560772074764302">"Kamera"</string>
     <string name="video_camera_label" msgid="2899292505526427293">"Video"</string>
-    <string name="gallery_picker_label" msgid="3080425245006492787">"Galleri"</string>
-    <string name="gallery_label" msgid="7119609703856708011">"Galleri"</string>
     <string name="gallery_camera_bucket_name" msgid="2924618424339240831">"Bilder fra kamera"</string>
     <string name="gallery_camera_videos_bucket_name" msgid="3369151581398551623">"Videoer fra kamera"</string>
-    <string name="gallery_camera_media_bucket_name" msgid="5560926838411387511">"Kameramedier"</string>
-    <string name="crop_label" msgid="521114301871349328">"Beskjær bilde"</string>
     <string name="view_label" msgid="4450531507947335704">"Se på bilde"</string>
-    <string name="preferences_label" msgid="5955678162525051163">"Kamerainnstillinger"</string>
     <string name="wait" msgid="8600187532323801552">"Vent litt…"</string>
     <string name="no_storage" msgid="820691042667338625">"Sett inn et minnekort før du bruker kameraet."</string>
     <string name="not_enough_space" msgid="6655334407957844653">"Minnekortet er fullt."</string>
     <string name="preparing_sd" msgid="2914969119574812666">"Forbereder minnekort…"</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Setter bakgrunnsbilde, vent litt…"</string>
-    <string name="savingImage" msgid="3051745378545909260">"Lagrer bilde…"</string>
-    <string name="runningFaceDetection" msgid="2293932204708167704">"Vent litt…"</string>
     <string name="settings" msgid="1534847740615665736">"Innstillinger"</string>
-    <string name="view" msgid="6277795271119411881">"Vis"</string>
     <string name="details" msgid="8415120088556445230">"Detaljer"</string>
     <string name="show_on_map" msgid="441725587731006228">"Vis i Maps"</string>
     <string name="rotate" msgid="460017689320955494">"Roter"</string>
     <string name="rotate_left" msgid="5888273317282539839">"Roter mot venstre"</string>
     <string name="rotate_right" msgid="6776325835923384839">"Roter mot høyre"</string>
-    <string name="slide_show" msgid="1965192737233824143">"Lysbildevisning"</string>
-    <string name="multiselect" msgid="4761682939945434146">"Flervalg"</string>
-    <string name="capture_picture" msgid="4114265595549284643">"Ta bilde"</string>
-    <string name="capture_video" msgid="4047046282358697155">"Ta opp video"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Lagre"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Forkast"</string>
     <string name="confirm_delete_title" msgid="263478358046514887">"Slett"</string>
     <string name="confirm_delete_message" msgid="4161389939579284604">"Bildet vil bli slettet."</string>
     <string name="confirm_delete_video_message" msgid="5796154324948010221">"Videoen vil bli slettet."</string>
-    <string name="confirm_delete_multiple_message" msgid="5962369828035778779">"Disse mediefilene vil bli slettet."</string>
     <string name="review_toss" msgid="7255331999518617841">"Slett"</string>
     <string name="review_share" msgid="7294755861072174509">"Del"</string>
     <string name="review_set" msgid="8304758352155378636">"Bruk som"</string>
@@ -64,54 +46,11 @@
     <string name="camera_toss" msgid="3781186798552460833">"Slett"</string>
     <string name="camera_share" msgid="8207701858325694182">"Del"</string>
     <string name="camera_set" msgid="3422192914806971182">"Bruk som"</string>
-    <string name="camera_play" msgid="8248000517869959980">"Spill"</string>
-    <string name="camera_attach" msgid="4048659554893435232">"Legg ved"</string>
-    <string name="camera_cancel" msgid="8203341746672085747">"Avbryt"</string>
     <string name="camera_crop" msgid="5584000454518174632">"Beskjær"</string>
     <string name="no_way_to_share_image" msgid="5011985309980187927">"Ingen applikasjoner kan dele bildet."</string>
     <string name="no_way_to_share_video" msgid="3684571102267072206">"Ingen applikasjoner kan dele videoen."</string>
-    <string name="no_way_to_share" msgid="863323712875014752">"Ingen applikasjoner kan dele mediefilen(ene)."</string>
     <string name="video_play" msgid="5287787282508002895">"Spill"</string>
     <string name="camera_gallery_photos_text" msgid="6558048736561932758">"Galleri"</string>
-    <string name="camera_pick_wallpaper" msgid="7026385960511811641">"Bilder"</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Bakgrunnsbilde"</string>
-    <string name="pref_gallery_category" msgid="5826488887237959433">"Generelle innstillinger"</string>
-    <string name="pref_slideshow_category" msgid="9097962086335681667">"Innstillinger for lysbildevisning"</string>
-    <string name="pref_gallery_size_title" msgid="1363406603879434418">"Bildestørrelse"</string>
-    <string name="pref_gallery_size_summary" msgid="8179967445295243638">"Velg hvor stort bilder skal vises"</string>
-    <string name="pref_gallery_size_dialogtitle" msgid="757380558320647503">"Bildestørrelse"</string>
-  <string-array name="pref_gallery_size_choices">
-    <item msgid="7157691836846678936">"Stor"</item>
-    <item msgid="1033164600689216410">"Liten"</item>
-  </string-array>
-    <string name="pref_gallery_sort_title" msgid="7447949250045443386">"Bildesortering"</string>
-    <string name="pref_gallery_sort_summary" msgid="6644398051645595214">"Velg i hvilken rekkefølge bildene skal sorteres"</string>
-    <string name="pref_gallery_sort_dialogtitle" msgid="5787417105532562739">"Bildesortering"</string>
-  <string-array name="pref_gallery_sort_choices">
-    <item msgid="5546009539334018063">"Nyeste først"</item>
-    <item msgid="7931283047572866748">"Nyeste sist"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_interval_title" msgid="6534904787962619832">"Pause i lysbildevisning"</string>
-    <string name="pref_gallery_slideshow_interval_summary" msgid="329876327077905033">"Velg hvor lenge hvert lysbilde skal vises"</string>
-    <string name="pref_gallery_slideshow_interval_dialogtitle" msgid="6775543119826248900">"Pause i lysbildevisning"</string>
-  <string-array name="pref_gallery_slideshow_interval_choices">
-    <item msgid="3089037742117543119">"2 sekunder"</item>
-    <item msgid="738579316565625730">"3 sekunder"</item>
-    <item msgid="5670078787463530498">"4 sekunder"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_transition_title" msgid="3235158556228218846">"Lysbildeovergang"</string>
-    <string name="pref_gallery_slideshow_transition_summary" msgid="2390320265891546846">"Velg effekten som skal brukes mellom lysbilder"</string>
-    <string name="pref_gallery_slideshow_transition_dialogtitle" msgid="5483406447721500371">"Lysbildevergang"</string>
-  <string-array name="pref_gallery_slideshow_transition_choices">
-    <item msgid="2825716730899894863">"Ton inn og ut"</item>
-    <item msgid="403116336404005687">"Skli venstre - høyre"</item>
-    <item msgid="4901733079450971731">"Skli opp - ned"</item>
-    <item msgid="9006732482485375438">"Tilfeldig"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_repeat_title" msgid="6512135022461429738">"Gjenta lysbildeserie"</string>
-    <string name="pref_gallery_slideshow_repeat_summary" msgid="8289230397431855268">"Vis lydbildeserie mer enn én gang"</string>
-    <string name="pref_gallery_slideshow_shuffle_title" msgid="3677508579783015598">"Stokk lysbilder"</string>
-    <string name="pref_gallery_slideshow_shuffle_summary" msgid="8566948749149325715">"Vis bilder i tilfeldig rekkefølge"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Lagre sted i bilder"</string>
     <string name="pref_camera_recordlocation_entry_off" msgid="8888142742988946038">"Av"</string>
     <string name="pref_camera_recordlocation_entry_on" msgid="7954533529969575594">"På"</string>
@@ -154,10 +93,6 @@
     <string name="pref_camera_whitebalance_entry_daylight" msgid="2534757270149561027">"Dagslys"</string>
     <string name="pref_camera_whitebalance_entry_fluorescent" msgid="2435332872847454032">"Lysstoffrør"</string>
     <string name="pref_camera_whitebalance_entry_cloudy" msgid="3531996716997959326">"Overskyet"</string>
-    <string name="pref_camera_whitebalance_entry_twilight" msgid="2257942426397244556">"Grålysning"</string>
-    <string name="pref_camera_whitebalance_entry_shade" msgid="4685730287406277702">"Skygge"</string>
-    <string name="pref_camera_whitebalance_entry_warm_fluorescent" msgid="2827098617308870248">"Varmt lysstoffrør"</string>
-    <string name="pref_camera_whitebalance_entry_halogen" msgid="5473868018455084929">"Halogen"</string>
     <string name="pref_camera_coloreffect_dialogtitle" msgid="7691751972871809763">"Fargeeffekt"</string>
     <string name="pref_camera_coloreffect_title" msgid="4152827686267109207">"Fargeeffekt"</string>
     <string name="pref_camera_coloreffect_entry_none" msgid="4759462740660236565">"Ingen"</string>
@@ -188,10 +123,6 @@
     <string name="pref_camera_scenemode_entry_sunset" msgid="181661154611507212">"Solnedgang"</string>
     <string name="pref_camera_scenemode_entry_steadyphoto" msgid="2147958278893914895">"Stødig foto"</string>
     <string name="pref_camera_scenemode_entry_fireworks" msgid="3530608172188797432">"Fyrverkeri"</string>
-    <string name="camerasettings" msgid="2433519618178453928">"Innstillinger"</string>
-    <string name="image_gallery_NoImageView_text" msgid="409595259802877447">"Fant ingen bilder."</string>
-    <string name="pref_gallery_confirm_delete_title" msgid="642429032687845907">"Bekreft sletting"</string>
-    <string name="pref_gallery_confirm_delete_summary" msgid="5253456492765525245">"Vis bekreftelse før bilder slettes"</string>
     <string name="no_location_image" msgid="6929172123058811834">"Bildet inneholder ingen stedsinformasjon."</string>
     <string name="details_panel_title" msgid="4753347516759338122">"Detaljer"</string>
     <string name="details_file_size" msgid="2468878774843246797">"Filstørrelse:"</string>
@@ -215,30 +146,9 @@
     <string name="details_kbps" msgid="1515369011744784592">"<xliff:g id="SPEED">%1$d</xliff:g> kbit/s"</string>
     <string name="details_mbps" msgid="3291428849607323284">"<xliff:g id="SPEED">%1$g</xliff:g> Mbit/sek"</string>
     <string name="details_ok" msgid="6848594369924424312">"OK"</string>
-    <string name="context_menu_header" msgid="1185348426222302182">"Bildeinnstillinger"</string>
-    <string name="video_context_menu_header" msgid="7318971116949475029">"Videoinnstillinger"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Trykk på et ansikt for å begynne."</string>
-    <string name="photos_gallery_title" msgid="6914406246471015448">"Galleri"</string>
-    <string name="pick_photos_gallery_title" msgid="12912682424915943">"Velg bilde"</string>
-    <string name="videos_gallery_title" msgid="6150354029982749479">"Galleri"</string>
-    <string name="pick_videos_gallery_title" msgid="326727095201227333">"Velg video"</string>
     <string name="sendImage" msgid="7279510542799399570">"Del bilde via"</string>
     <string name="setImage" msgid="7246975856983303047">"Bruk bilde som"</string>
     <string name="sendVideo" msgid="3598567735831863073">"Del video via"</string>
-    <string name="send_media_files" msgid="8201083279723850611">"Del mediefiler via"</string>
-    <string name="movieviewlabel" msgid="7363495772706775465">"Filmer"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Laster video…"</string>
     <string name="spaceIsLow_content" msgid="2848517537672543641">"Minnekortet begynner å gå tom for plass. Endre kvalitetsinnstillingen eller slett bilder fra galleriet."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Fortsett avspilling"</string>
-    <string name="resume_playing_message" msgid="7293000708492271389">"Fortsett avspilling fra <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Fortsett avspilling"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Begynn på nytt"</string>
-    <string name="gadget_title" msgid="259405922673466798">"Bilderamme"</string>
-    <string name="file_info_title" msgid="1628963357466012538">"Filinformasjon:"</string>
-    <string name="video_exceed_mms_limit" msgid="3835075281230780010">"Videoen er for stor til å sendes over MMS. Prøv å ta opp en kortere video."</string>
-    <string name="multiselect_share" msgid="5261644537749253581">"Del"</string>
-    <string name="multiselect_delete" msgid="9113461994546744603">"Slett"</string>
-    <string name="multiselect_cancel" msgid="5969428692864002165">"Avbryt"</string>
-    <string name="delete_images_message" msgid="4504926868037899430">"Sletter bilder, vennligst vent …"</string>
     <string name="video_reach_size_limit" msgid="6179877322015552390">"Videoen ble for stor."</string>
 </resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index c90afab..c0ef0df 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -17,42 +17,24 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="camera_error_title" msgid="1202232535191653443">"Camerafout"</string>
     <string name="cannot_connect_camera" msgid="8029009101380114174">"Kan geen verbinding maken met de camera."</string>
-    <string name="all_images" msgid="1195501551939178807">"Alle foto\'s"</string>
-    <string name="all_videos" msgid="3380966619230896013">"Alle video\'s"</string>
     <string name="camera_label" msgid="6346560772074764302">"Camera"</string>
     <string name="video_camera_label" msgid="2899292505526427293">"Camcorder"</string>
-    <string name="gallery_picker_label" msgid="3080425245006492787">"Galerij"</string>
-    <string name="gallery_label" msgid="7119609703856708011">"Galerij"</string>
     <string name="gallery_camera_bucket_name" msgid="2924618424339240831">"Camerafoto\'s"</string>
     <string name="gallery_camera_videos_bucket_name" msgid="3369151581398551623">"Cameravideo\'s"</string>
-    <string name="gallery_camera_media_bucket_name" msgid="5560926838411387511">"Cameramedia"</string>
-    <string name="crop_label" msgid="521114301871349328">"Foto bijsnijden"</string>
     <string name="view_label" msgid="4450531507947335704">"Foto weergeven"</string>
-    <string name="preferences_label" msgid="5955678162525051163">"Camera-instellingen"</string>
     <string name="wait" msgid="8600187532323801552">"Een ogenblik geduld..."</string>
     <string name="no_storage" msgid="820691042667338625">"Plaats een SD-kaart voordat u de camera gebruikt."</string>
     <string name="not_enough_space" msgid="6655334407957844653">"De SD-kaart is vol."</string>
     <string name="preparing_sd" msgid="2914969119574812666">"SD-kaart voorbereiden…"</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Achtergrond wordt ingesteld. Een ogenblik geduld..."</string>
-    <string name="savingImage" msgid="3051745378545909260">"Foto opslaan..."</string>
-    <string name="runningFaceDetection" msgid="2293932204708167704">"Een ogenblik geduld..."</string>
     <string name="settings" msgid="1534847740615665736">"Instellingen"</string>
-    <string name="view" msgid="6277795271119411881">"Weergeven"</string>
     <string name="details" msgid="8415120088556445230">"Details"</string>
     <string name="show_on_map" msgid="441725587731006228">"Weergeven op Maps"</string>
     <string name="rotate" msgid="460017689320955494">"Draaien"</string>
     <string name="rotate_left" msgid="5888273317282539839">"Linksom draaien"</string>
     <string name="rotate_right" msgid="6776325835923384839">"Rechtsom draaien"</string>
-    <string name="slide_show" msgid="1965192737233824143">"Diavoorstelling"</string>
-    <string name="multiselect" msgid="4761682939945434146">"Meerdere selecteren"</string>
-    <string name="capture_picture" msgid="4114265595549284643">"Foto nemen"</string>
-    <string name="capture_video" msgid="4047046282358697155">"Video opnemen"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Opslaan"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Ongedaan maken"</string>
     <string name="confirm_delete_title" msgid="263478358046514887">"Verwijderen"</string>
     <string name="confirm_delete_message" msgid="4161389939579284604">"De foto wordt verwijderd."</string>
     <string name="confirm_delete_video_message" msgid="5796154324948010221">"De video wordt verwijderd."</string>
-    <string name="confirm_delete_multiple_message" msgid="5962369828035778779">"Deze mediabestanden worden verwijderd."</string>
     <string name="review_toss" msgid="7255331999518617841">"VERWIJDEREN"</string>
     <string name="review_share" msgid="7294755861072174509">"DELEN"</string>
     <string name="review_set" msgid="8304758352155378636">"INSTELLEN ALS"</string>
@@ -64,54 +46,11 @@
     <string name="camera_toss" msgid="3781186798552460833">"Verwijderen"</string>
     <string name="camera_share" msgid="8207701858325694182">"Delen"</string>
     <string name="camera_set" msgid="3422192914806971182">"Instellen als"</string>
-    <string name="camera_play" msgid="8248000517869959980">"Afspelen"</string>
-    <string name="camera_attach" msgid="4048659554893435232">"Bijvoegen"</string>
-    <string name="camera_cancel" msgid="8203341746672085747">"Annuleren"</string>
     <string name="camera_crop" msgid="5584000454518174632">"Bijsnijden"</string>
     <string name="no_way_to_share_image" msgid="5011985309980187927">"Er is geen toepassing beschikbaar om de foto mee te delen."</string>
     <string name="no_way_to_share_video" msgid="3684571102267072206">"Er is geen toepassing beschikbaar om de video mee te delen."</string>
-    <string name="no_way_to_share" msgid="863323712875014752">"Er is geen toepassing beschikbaar om de mediabestanden mee te delen."</string>
     <string name="video_play" msgid="5287787282508002895">"Afspelen"</string>
     <string name="camera_gallery_photos_text" msgid="6558048736561932758">"Galerij"</string>
-    <string name="camera_pick_wallpaper" msgid="7026385960511811641">"Foto\'s"</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Achtergrond"</string>
-    <string name="pref_gallery_category" msgid="5826488887237959433">"Algemene instellingen"</string>
-    <string name="pref_slideshow_category" msgid="9097962086335681667">"Instellingen van diavoorstelling"</string>
-    <string name="pref_gallery_size_title" msgid="1363406603879434418">"Weergavegrootte"</string>
-    <string name="pref_gallery_size_summary" msgid="8179967445295243638">"De weergavegrootte van foto\'s en video\'s selecteren"</string>
-    <string name="pref_gallery_size_dialogtitle" msgid="757380558320647503">"Grootte van foto"</string>
-  <string-array name="pref_gallery_size_choices">
-    <item msgid="7157691836846678936">"Groot"</item>
-    <item msgid="1033164600689216410">"Klein"</item>
-  </string-array>
-    <string name="pref_gallery_sort_title" msgid="7447949250045443386">"Sorteervolgorde"</string>
-    <string name="pref_gallery_sort_summary" msgid="6644398051645595214">"De sorteervolgorde van foto\'s en video\'s selecteren"</string>
-    <string name="pref_gallery_sort_dialogtitle" msgid="5787417105532562739">"Foto\'s sorteren"</string>
-  <string-array name="pref_gallery_sort_choices">
-    <item msgid="5546009539334018063">"Nieuwste eerst"</item>
-    <item msgid="7931283047572866748">"Nieuwste laatst"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_interval_title" msgid="6534904787962619832">"Interval in diavoorstelling"</string>
-    <string name="pref_gallery_slideshow_interval_summary" msgid="329876327077905033">"Selecteren hoe lang elke dia wordt weergegeven in de voorstelling"</string>
-    <string name="pref_gallery_slideshow_interval_dialogtitle" msgid="6775543119826248900">"Interval in diavoorstelling"</string>
-  <string-array name="pref_gallery_slideshow_interval_choices">
-    <item msgid="3089037742117543119">"2 seconden"</item>
-    <item msgid="738579316565625730">"3 seconden"</item>
-    <item msgid="5670078787463530498">"4 seconden"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_transition_title" msgid="3235158556228218846">"Overgangen in diavoorstellingen"</string>
-    <string name="pref_gallery_slideshow_transition_summary" msgid="2390320265891546846">"Het effect selecteren dat wordt gebruikt om naar de volgende dia te gaan"</string>
-    <string name="pref_gallery_slideshow_transition_dialogtitle" msgid="5483406447721500371">"Overgangen in diavoorstellingen"</string>
-  <string-array name="pref_gallery_slideshow_transition_choices">
-    <item msgid="2825716730899894863">"Infaden/uitfaden"</item>
-    <item msgid="403116336404005687">"Dia vanaf linkerkant/rechterkant"</item>
-    <item msgid="4901733079450971731">"Dia vanaf bovenkant/onderkant"</item>
-    <item msgid="9006732482485375438">"Willekeurige selectie"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_repeat_title" msgid="6512135022461429738">"Diavoorstelling herhalen"</string>
-    <string name="pref_gallery_slideshow_repeat_summary" msgid="8289230397431855268">"Diavoorstelling meerdere keren afspelen"</string>
-    <string name="pref_gallery_slideshow_shuffle_title" msgid="3677508579783015598">"Dia\'s in willekeurige volgorde weergeven"</string>
-    <string name="pref_gallery_slideshow_shuffle_summary" msgid="8566948749149325715">"Foto\'s in willekeurige volgorde weergeven"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Locatie opslaan"</string>
     <string name="pref_camera_recordlocation_entry_off" msgid="8888142742988946038">"Uit"</string>
     <string name="pref_camera_recordlocation_entry_on" msgid="7954533529969575594">"Aan"</string>
@@ -154,10 +93,6 @@
     <string name="pref_camera_whitebalance_entry_daylight" msgid="2534757270149561027">"Daglicht"</string>
     <string name="pref_camera_whitebalance_entry_fluorescent" msgid="2435332872847454032">"Fluorescerend"</string>
     <string name="pref_camera_whitebalance_entry_cloudy" msgid="3531996716997959326">"Bewolkt"</string>
-    <string name="pref_camera_whitebalance_entry_twilight" msgid="2257942426397244556">"Schemering"</string>
-    <string name="pref_camera_whitebalance_entry_shade" msgid="4685730287406277702">"Schaduw"</string>
-    <string name="pref_camera_whitebalance_entry_warm_fluorescent" msgid="2827098617308870248">"Warm fluorescerend"</string>
-    <string name="pref_camera_whitebalance_entry_halogen" msgid="5473868018455084929">"Halogeen"</string>
     <string name="pref_camera_coloreffect_dialogtitle" msgid="7691751972871809763">"Kleureffect"</string>
     <string name="pref_camera_coloreffect_title" msgid="4152827686267109207">"Kleureffect"</string>
     <string name="pref_camera_coloreffect_entry_none" msgid="4759462740660236565">"Geen"</string>
@@ -188,10 +123,6 @@
     <string name="pref_camera_scenemode_entry_sunset" msgid="181661154611507212">"Zonsondergang"</string>
     <string name="pref_camera_scenemode_entry_steadyphoto" msgid="2147958278893914895">"Stabiele foto"</string>
     <string name="pref_camera_scenemode_entry_fireworks" msgid="3530608172188797432">"Vuurwerk"</string>
-    <string name="camerasettings" msgid="2433519618178453928">"Instellingen"</string>
-    <string name="image_gallery_NoImageView_text" msgid="409595259802877447">"Geen medium gevonden."</string>
-    <string name="pref_gallery_confirm_delete_title" msgid="642429032687845907">"Verwijderen bevestigen"</string>
-    <string name="pref_gallery_confirm_delete_summary" msgid="5253456492765525245">"Bevestiging weergeven voordat een foto of video wordt verwijderd"</string>
     <string name="no_location_image" msgid="6929172123058811834">"Deze afbeelding bevat geen locatiegegevens."</string>
     <string name="details_panel_title" msgid="4753347516759338122">"Details"</string>
     <string name="details_file_size" msgid="2468878774843246797">"Bestandsgrootte:"</string>
@@ -215,30 +146,9 @@
     <string name="details_kbps" msgid="1515369011744784592">"<xliff:g id="SPEED">%1$d</xliff:g> kbps"</string>
     <string name="details_mbps" msgid="3291428849607323284">"<xliff:g id="SPEED">%1$g</xliff:g> Mbps"</string>
     <string name="details_ok" msgid="6848594369924424312">"OK"</string>
-    <string name="context_menu_header" msgid="1185348426222302182">"Opties voor foto\'s"</string>
-    <string name="video_context_menu_header" msgid="7318971116949475029">"Video-opties"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Tik op een gezicht om te beginnen."</string>
-    <string name="photos_gallery_title" msgid="6914406246471015448">"Galerij"</string>
-    <string name="pick_photos_gallery_title" msgid="12912682424915943">"Foto selecteren"</string>
-    <string name="videos_gallery_title" msgid="6150354029982749479">"Galerij"</string>
-    <string name="pick_videos_gallery_title" msgid="326727095201227333">"Video selecteren"</string>
     <string name="sendImage" msgid="7279510542799399570">"Foto delen via"</string>
     <string name="setImage" msgid="7246975856983303047">"Foto instellen als"</string>
     <string name="sendVideo" msgid="3598567735831863073">"Video delen via"</string>
-    <string name="send_media_files" msgid="8201083279723850611">"Mediabestanden delen via"</string>
-    <string name="movieviewlabel" msgid="7363495772706775465">"Films"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Video laden..."</string>
     <string name="spaceIsLow_content" msgid="2848517537672543641">"Er is weinig ruimte beschikbaar op uw SD-kaart. U kunt de kwaliteitsinstelling wijzigen of items uit de galerij verwijderen."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Video hervatten"</string>
-    <string name="resume_playing_message" msgid="7293000708492271389">"Afspelen hervatten vanaf <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Afspelen hervatten"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Opnieuw starten"</string>
-    <string name="gadget_title" msgid="259405922673466798">"Fotolijstje"</string>
-    <string name="file_info_title" msgid="1628963357466012538">"Bestandsinformatie:"</string>
-    <string name="video_exceed_mms_limit" msgid="3835075281230780010">"De video die u heeft opgenomen, is te lang om via MMS te verzenden. Neem een kortere video op."</string>
-    <string name="multiselect_share" msgid="5261644537749253581">"Delen"</string>
-    <string name="multiselect_delete" msgid="9113461994546744603">"Verwijderen"</string>
-    <string name="multiselect_cancel" msgid="5969428692864002165">"Annuleren"</string>
-    <string name="delete_images_message" msgid="4504926868037899430">"Afbeeldingen verwijderen. Een ogenblik geduld…"</string>
     <string name="video_reach_size_limit" msgid="6179877322015552390">"Maximale grootte bereikt"</string>
 </resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 15f6494..af48638 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -17,42 +17,24 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="camera_error_title" msgid="1202232535191653443">"Błąd aparatu"</string>
     <string name="cannot_connect_camera" msgid="8029009101380114174">"Nie można nawiązać połączenia z aparatem."</string>
-    <string name="all_images" msgid="1195501551939178807">"Wszystkie zdjęcia"</string>
-    <string name="all_videos" msgid="3380966619230896013">"Wszystkie filmy"</string>
     <string name="camera_label" msgid="6346560772074764302">"Aparat"</string>
     <string name="video_camera_label" msgid="2899292505526427293">"Kamera"</string>
-    <string name="gallery_picker_label" msgid="3080425245006492787">"Galeria"</string>
-    <string name="gallery_label" msgid="7119609703856708011">"Galeria"</string>
     <string name="gallery_camera_bucket_name" msgid="2924618424339240831">"Zdjęcia z aparatu"</string>
     <string name="gallery_camera_videos_bucket_name" msgid="3369151581398551623">"Filmy z aparatu"</string>
-    <string name="gallery_camera_media_bucket_name" msgid="5560926838411387511">"Multimedia z aparatu"</string>
-    <string name="crop_label" msgid="521114301871349328">"Przytnij zdjęcie"</string>
     <string name="view_label" msgid="4450531507947335704">"Wyświetl zdjęcie"</string>
-    <string name="preferences_label" msgid="5955678162525051163">"Ustawienia aparatu"</string>
     <string name="wait" msgid="8600187532323801552">"Proszę czekać…"</string>
     <string name="no_storage" msgid="820691042667338625">"Zanim zaczniesz korzystać z aparatu fotograficznego, włóż kartę SD."</string>
     <string name="not_enough_space" msgid="6655334407957844653">"Karta SD jest pełna."</string>
     <string name="preparing_sd" msgid="2914969119574812666">"Przygotowywanie karty SD..."</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Ustawianie tapety, proszę czekać…"</string>
-    <string name="savingImage" msgid="3051745378545909260">"Trwa zapisywanie zdjęcia…"</string>
-    <string name="runningFaceDetection" msgid="2293932204708167704">"Proszę czekać…"</string>
     <string name="settings" msgid="1534847740615665736">"Ustawienia"</string>
-    <string name="view" msgid="6277795271119411881">"Wyświetl"</string>
     <string name="details" msgid="8415120088556445230">"Szczegóły"</string>
     <string name="show_on_map" msgid="441725587731006228">"Pokaż w Mapach Google"</string>
     <string name="rotate" msgid="460017689320955494">"Obróć"</string>
     <string name="rotate_left" msgid="5888273317282539839">"Obróć w lewo"</string>
     <string name="rotate_right" msgid="6776325835923384839">"Obróć w prawo"</string>
-    <string name="slide_show" msgid="1965192737233824143">"Pokaz slajdów"</string>
-    <string name="multiselect" msgid="4761682939945434146">"Wybór wielokrotny"</string>
-    <string name="capture_picture" msgid="4114265595549284643">"Zrób zdjęcie"</string>
-    <string name="capture_video" msgid="4047046282358697155">"Nagraj film wideo"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Zapisz"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Odrzuć"</string>
     <string name="confirm_delete_title" msgid="263478358046514887">"Usuń"</string>
     <string name="confirm_delete_message" msgid="4161389939579284604">"Zdjęcie zostanie usunięte."</string>
     <string name="confirm_delete_video_message" msgid="5796154324948010221">"Film wideo zostanie usunięty."</string>
-    <string name="confirm_delete_multiple_message" msgid="5962369828035778779">"Te pliki multimedialne zostaną usunięte."</string>
     <string name="review_toss" msgid="7255331999518617841">"USUŃ"</string>
     <string name="review_share" msgid="7294755861072174509">"UDOSTĘPNIJ"</string>
     <string name="review_set" msgid="8304758352155378636">"USTAW JAKO"</string>
@@ -64,54 +46,11 @@
     <string name="camera_toss" msgid="3781186798552460833">"Usuń"</string>
     <string name="camera_share" msgid="8207701858325694182">"Prześlij"</string>
     <string name="camera_set" msgid="3422192914806971182">"Ustaw jako"</string>
-    <string name="camera_play" msgid="8248000517869959980">"Odtwórz"</string>
-    <string name="camera_attach" msgid="4048659554893435232">"Załącz"</string>
-    <string name="camera_cancel" msgid="8203341746672085747">"Anuluj"</string>
     <string name="camera_crop" msgid="5584000454518174632">"Przytnij"</string>
     <string name="no_way_to_share_image" msgid="5011985309980187927">"Brak dostępnej aplikacji do udostępnienia zdjęcia."</string>
     <string name="no_way_to_share_video" msgid="3684571102267072206">"Brak dostępnej aplikacji do udostępnienia filmu wideo."</string>
-    <string name="no_way_to_share" msgid="863323712875014752">"Brak dostępnej aplikacji do udostępnienia plików multimedialnych."</string>
     <string name="video_play" msgid="5287787282508002895">"Odtwórz"</string>
     <string name="camera_gallery_photos_text" msgid="6558048736561932758">"Galeria"</string>
-    <string name="camera_pick_wallpaper" msgid="7026385960511811641">"Zdjęcia"</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Tapeta"</string>
-    <string name="pref_gallery_category" msgid="5826488887237959433">"Ustawienia ogólne"</string>
-    <string name="pref_slideshow_category" msgid="9097962086335681667">"Ustawienia pokazu slajdów"</string>
-    <string name="pref_gallery_size_title" msgid="1363406603879434418">"Rozmiar zdjęć i filmów"</string>
-    <string name="pref_gallery_size_summary" msgid="8179967445295243638">"Ustaw wyświetlany rozmiar zdjęć i filmów"</string>
-    <string name="pref_gallery_size_dialogtitle" msgid="757380558320647503">"Rozmiar"</string>
-  <string-array name="pref_gallery_size_choices">
-    <item msgid="7157691836846678936">"Duży"</item>
-    <item msgid="1033164600689216410">"Mały"</item>
-  </string-array>
-    <string name="pref_gallery_sort_title" msgid="7447949250045443386">"Kolejność sortowania"</string>
-    <string name="pref_gallery_sort_summary" msgid="6644398051645595214">"Wybierz kolejność sortowania zdjęć i filmów"</string>
-    <string name="pref_gallery_sort_dialogtitle" msgid="5787417105532562739">"Sortowanie zdjęć"</string>
-  <string-array name="pref_gallery_sort_choices">
-    <item msgid="5546009539334018063">"Od najnowszego"</item>
-    <item msgid="7931283047572866748">"Od najstarszego"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_interval_title" msgid="6534904787962619832">"Interwał pokazu slajdów"</string>
-    <string name="pref_gallery_slideshow_interval_summary" msgid="329876327077905033">"Wybierz, jak długo mają być wyświetlane poszczególne zdjęcia w pokazie slajdów"</string>
-    <string name="pref_gallery_slideshow_interval_dialogtitle" msgid="6775543119826248900">"Interwał pokazu slajdów"</string>
-  <string-array name="pref_gallery_slideshow_interval_choices">
-    <item msgid="3089037742117543119">"2 sekundy"</item>
-    <item msgid="738579316565625730">"3 sekundy"</item>
-    <item msgid="5670078787463530498">"4 sekundy"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_transition_title" msgid="3235158556228218846">"Efekty pokazu slajdów"</string>
-    <string name="pref_gallery_slideshow_transition_summary" msgid="2390320265891546846">"Wybierz efekt używany przy przejściu z jednego zdjęcia do kolejnego"</string>
-    <string name="pref_gallery_slideshow_transition_dialogtitle" msgid="5483406447721500371">"Efekty pokazu slajdów"</string>
-  <string-array name="pref_gallery_slideshow_transition_choices">
-    <item msgid="2825716730899894863">"Pojawianie i znikanie"</item>
-    <item msgid="403116336404005687">"Przesuwanie z lewa w prawo"</item>
-    <item msgid="4901733079450971731">"Przesuwanie góra-dół"</item>
-    <item msgid="9006732482485375438">"Wybór losowy"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_repeat_title" msgid="6512135022461429738">"Powtórz pokaz slajdów"</string>
-    <string name="pref_gallery_slideshow_repeat_summary" msgid="8289230397431855268">"Wyświetlaj pokaz slajdów więcej niż raz"</string>
-    <string name="pref_gallery_slideshow_shuffle_title" msgid="3677508579783015598">"Losowa kolejność"</string>
-    <string name="pref_gallery_slideshow_shuffle_summary" msgid="8566948749149325715">"Wyświetlaj zdjęcia w kolejności losowej"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Lokalizacja przechowywania"</string>
     <string name="pref_camera_recordlocation_entry_off" msgid="8888142742988946038">"Wyłączona"</string>
     <string name="pref_camera_recordlocation_entry_on" msgid="7954533529969575594">"Włączona"</string>
@@ -154,10 +93,6 @@
     <string name="pref_camera_whitebalance_entry_daylight" msgid="2534757270149561027">"Światło dzienne"</string>
     <string name="pref_camera_whitebalance_entry_fluorescent" msgid="2435332872847454032">"Fluorescencja"</string>
     <string name="pref_camera_whitebalance_entry_cloudy" msgid="3531996716997959326">"Zachmurzenie"</string>
-    <string name="pref_camera_whitebalance_entry_twilight" msgid="2257942426397244556">"Zmierzch"</string>
-    <string name="pref_camera_whitebalance_entry_shade" msgid="4685730287406277702">"Cień"</string>
-    <string name="pref_camera_whitebalance_entry_warm_fluorescent" msgid="2827098617308870248">"Ciepła fluorescencja"</string>
-    <string name="pref_camera_whitebalance_entry_halogen" msgid="5473868018455084929">"Światło halogenowe"</string>
     <string name="pref_camera_coloreffect_dialogtitle" msgid="7691751972871809763">"Efekt koloru"</string>
     <string name="pref_camera_coloreffect_title" msgid="4152827686267109207">"Efekt koloru"</string>
     <string name="pref_camera_coloreffect_entry_none" msgid="4759462740660236565">"Brak"</string>
@@ -188,10 +123,6 @@
     <string name="pref_camera_scenemode_entry_sunset" msgid="181661154611507212">"Zachód słońca"</string>
     <string name="pref_camera_scenemode_entry_steadyphoto" msgid="2147958278893914895">"Statyczne zdjęcie"</string>
     <string name="pref_camera_scenemode_entry_fireworks" msgid="3530608172188797432">"Sztuczne ognie"</string>
-    <string name="camerasettings" msgid="2433519618178453928">"Ustawienia"</string>
-    <string name="image_gallery_NoImageView_text" msgid="409595259802877447">"Brak plików"</string>
-    <string name="pref_gallery_confirm_delete_title" msgid="642429032687845907">"Potwierdzanie usuwania"</string>
-    <string name="pref_gallery_confirm_delete_summary" msgid="5253456492765525245">"Wyświetl potwierdzenie przed usunięciem zdjęcia lub filmu"</string>
     <string name="no_location_image" msgid="6929172123058811834">"Brak informacji o lokalizacji zapisanych w pliku zdjęcia."</string>
     <string name="details_panel_title" msgid="4753347516759338122">"Szczegóły"</string>
     <string name="details_file_size" msgid="2468878774843246797">"Rozmiar pliku:"</string>
@@ -215,30 +146,9 @@
     <string name="details_kbps" msgid="1515369011744784592">"<xliff:g id="SPEED">%1$d</xliff:g> kb/s"</string>
     <string name="details_mbps" msgid="3291428849607323284">"<xliff:g id="SPEED">%1$g</xliff:g> Mb/s"</string>
     <string name="details_ok" msgid="6848594369924424312">"OK"</string>
-    <string name="context_menu_header" msgid="1185348426222302182">"Opcje zdjęć"</string>
-    <string name="video_context_menu_header" msgid="7318971116949475029">"Opcje wideo"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Dotknij twarzy, aby rozpocząć"</string>
-    <string name="photos_gallery_title" msgid="6914406246471015448">"Galeria"</string>
-    <string name="pick_photos_gallery_title" msgid="12912682424915943">"Wybierz zdjęcie"</string>
-    <string name="videos_gallery_title" msgid="6150354029982749479">"Galeria"</string>
-    <string name="pick_videos_gallery_title" msgid="326727095201227333">"Wybierz film wideo"</string>
     <string name="sendImage" msgid="7279510542799399570">"Prześlij zdjęcie następującą drogą:"</string>
     <string name="setImage" msgid="7246975856983303047">"Ustaw zdjęcie jako"</string>
     <string name="sendVideo" msgid="3598567735831863073">"Prześlij film następującą drogą:"</string>
-    <string name="send_media_files" msgid="8201083279723850611">"Udostępnij pliki multimedialne za pośrednictwem"</string>
-    <string name="movieviewlabel" msgid="7363495772706775465">"Filmy"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Ładowanie filmu..."</string>
     <string name="spaceIsLow_content" msgid="2848517537672543641">"Na karcie SD brakuje miejsca. Zmień ustawienie jakości lub usuń elementy z Galerii."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Wznów film"</string>
-    <string name="resume_playing_message" msgid="7293000708492271389">"Wznowić odtwarzanie od momentu <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Wznów odtwarzanie"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Rozpocznij"</string>
-    <string name="gadget_title" msgid="259405922673466798">"Ramka zdjęcia"</string>
-    <string name="file_info_title" msgid="1628963357466012538">"Informacje o pliku:"</string>
-    <string name="video_exceed_mms_limit" msgid="3835075281230780010">"Nagrany film wideo jest zbyt duży, aby wysłać go w wiadomości MMS. Spróbuj nagrać krótszy film wideo."</string>
-    <string name="multiselect_share" msgid="5261644537749253581">"Udostępnij"</string>
-    <string name="multiselect_delete" msgid="9113461994546744603">"Usuń"</string>
-    <string name="multiselect_cancel" msgid="5969428692864002165">"Anuluj"</string>
-    <string name="delete_images_message" msgid="4504926868037899430">"Trwa usuwanie zdjęć, czekaj…"</string>
     <string name="video_reach_size_limit" msgid="6179877322015552390">"Osiągnięto limit rozmiaru."</string>
 </resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index e7ac18e..821a326 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -17,42 +17,24 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="camera_error_title" msgid="1202232535191653443">"Erro da câmara"</string>
     <string name="cannot_connect_camera" msgid="8029009101380114174">"Não é possível efectuar a ligação à câmara."</string>
-    <string name="all_images" msgid="1195501551939178807">"Todas as imagens"</string>
-    <string name="all_videos" msgid="3380966619230896013">"Todos os vídeos"</string>
     <string name="camera_label" msgid="6346560772074764302">"Câmara"</string>
     <string name="video_camera_label" msgid="2899292505526427293">"Câmara de vídeo"</string>
-    <string name="gallery_picker_label" msgid="3080425245006492787">"Galeria"</string>
-    <string name="gallery_label" msgid="7119609703856708011">"Galeria"</string>
     <string name="gallery_camera_bucket_name" msgid="2924618424339240831">"Imagens da câmara"</string>
     <string name="gallery_camera_videos_bucket_name" msgid="3369151581398551623">"Vídeos da câmara"</string>
-    <string name="gallery_camera_media_bucket_name" msgid="5560926838411387511">"Vídeos da câmara"</string>
-    <string name="crop_label" msgid="521114301871349328">"Recortar imagem"</string>
     <string name="view_label" msgid="4450531507947335704">"Ver imagem"</string>
-    <string name="preferences_label" msgid="5955678162525051163">"Definições da câmara"</string>
     <string name="wait" msgid="8600187532323801552">"Aguarde..."</string>
     <string name="no_storage" msgid="820691042667338625">"Insira um cartão SD antes de utilizar a câmara."</string>
     <string name="not_enough_space" msgid="6655334407957844653">"O cartão SD está cheio."</string>
     <string name="preparing_sd" msgid="2914969119574812666">"A preparar o cartão SD..."</string>
-    <string name="wallpaper" msgid="9222901738515471972">"A definir a imagem de fundo, aguarde..."</string>
-    <string name="savingImage" msgid="3051745378545909260">"A guardar imagem..."</string>
-    <string name="runningFaceDetection" msgid="2293932204708167704">"Aguarde..."</string>
     <string name="settings" msgid="1534847740615665736">"Definições"</string>
-    <string name="view" msgid="6277795271119411881">"Ver"</string>
     <string name="details" msgid="8415120088556445230">"Detalhes"</string>
     <string name="show_on_map" msgid="441725587731006228">"Mostrar no Google Maps"</string>
     <string name="rotate" msgid="460017689320955494">"Rodar"</string>
     <string name="rotate_left" msgid="5888273317282539839">"Rodar para a esquerda"</string>
     <string name="rotate_right" msgid="6776325835923384839">"Rodar para a direita"</string>
-    <string name="slide_show" msgid="1965192737233824143">"Apresentação de diapositivos"</string>
-    <string name="multiselect" msgid="4761682939945434146">"Selecção múltipla"</string>
-    <string name="capture_picture" msgid="4114265595549284643">"Capturar imagem"</string>
-    <string name="capture_video" msgid="4047046282358697155">"Capturar vídeo"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Guardar"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Rejeitar"</string>
     <string name="confirm_delete_title" msgid="263478358046514887">"Eliminar"</string>
     <string name="confirm_delete_message" msgid="4161389939579284604">"A imagem será eliminada."</string>
     <string name="confirm_delete_video_message" msgid="5796154324948010221">"O vídeo será eliminado."</string>
-    <string name="confirm_delete_multiple_message" msgid="5962369828035778779">"Estes ficheiros multimédia serão eliminados."</string>
     <string name="review_toss" msgid="7255331999518617841">"ELIMINAR"</string>
     <string name="review_share" msgid="7294755861072174509">"PARTILHAR"</string>
     <string name="review_set" msgid="8304758352155378636">"DEFINIR COMO"</string>
@@ -64,54 +46,11 @@
     <string name="camera_toss" msgid="3781186798552460833">"Eliminar"</string>
     <string name="camera_share" msgid="8207701858325694182">"Partilhar"</string>
     <string name="camera_set" msgid="3422192914806971182">"Definir como"</string>
-    <string name="camera_play" msgid="8248000517869959980">"Reproduzir"</string>
-    <string name="camera_attach" msgid="4048659554893435232">"Anexar"</string>
-    <string name="camera_cancel" msgid="8203341746672085747">"Cancelar"</string>
     <string name="camera_crop" msgid="5584000454518174632">"Recortar"</string>
     <string name="no_way_to_share_image" msgid="5011985309980187927">"Não existe nenhuma aplicação disponível para partilhar a imagem."</string>
     <string name="no_way_to_share_video" msgid="3684571102267072206">"Não existe nenhuma aplicação disponível para partilhar o vídeo."</string>
-    <string name="no_way_to_share" msgid="863323712875014752">"Não existe nenhuma aplicação disponível para partilhar o(s) ficheiro(s) multimédia."</string>
     <string name="video_play" msgid="5287787282508002895">"Reproduzir"</string>
     <string name="camera_gallery_photos_text" msgid="6558048736561932758">"Galeria"</string>
-    <string name="camera_pick_wallpaper" msgid="7026385960511811641">"Imagens"</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Imagem de fundo"</string>
-    <string name="pref_gallery_category" msgid="5826488887237959433">"Definições gerais"</string>
-    <string name="pref_slideshow_category" msgid="9097962086335681667">"Definições da apresentação de diapositivos"</string>
-    <string name="pref_gallery_size_title" msgid="1363406603879434418">"Tamanho da visualização"</string>
-    <string name="pref_gallery_size_summary" msgid="8179967445295243638">"Seleccione o tamanho da apresentação de imagens e vídeo"</string>
-    <string name="pref_gallery_size_dialogtitle" msgid="757380558320647503">"Tamanho da imagem"</string>
-  <string-array name="pref_gallery_size_choices">
-    <item msgid="7157691836846678936">"Grande"</item>
-    <item msgid="1033164600689216410">"Pequeno"</item>
-  </string-array>
-    <string name="pref_gallery_sort_title" msgid="7447949250045443386">"Ordenação"</string>
-    <string name="pref_gallery_sort_summary" msgid="6644398051645595214">"Seleccione a sequência de ordenação das imagens e dos vídeos"</string>
-    <string name="pref_gallery_sort_dialogtitle" msgid="5787417105532562739">"Ordenação de imagens"</string>
-  <string-array name="pref_gallery_sort_choices">
-    <item msgid="5546009539334018063">"As mais recentes primeiro"</item>
-    <item msgid="7931283047572866748">"As mais recentes por último"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_interval_title" msgid="6534904787962619832">"Intervalo da apresentação de diapositivos"</string>
-    <string name="pref_gallery_slideshow_interval_summary" msgid="329876327077905033">"Seleccione o tempo de apresentação de cada diapositivo"</string>
-    <string name="pref_gallery_slideshow_interval_dialogtitle" msgid="6775543119826248900">"Intervalo da apresentação de diapositivos"</string>
-  <string-array name="pref_gallery_slideshow_interval_choices">
-    <item msgid="3089037742117543119">"2 segundos"</item>
-    <item msgid="738579316565625730">"3 segundos"</item>
-    <item msgid="5670078787463530498">"4 segundos"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_transition_title" msgid="3235158556228218846">"Transição da apresentação de diapositivos"</string>
-    <string name="pref_gallery_slideshow_transition_summary" msgid="2390320265891546846">"Seleccione o efeito a utilizar na transição entre slides"</string>
-    <string name="pref_gallery_slideshow_transition_dialogtitle" msgid="5483406447721500371">"Transição da apresentação de diapositivos"</string>
-  <string-array name="pref_gallery_slideshow_transition_choices">
-    <item msgid="2825716730899894863">"Aumentar e diminuir gradualmente"</item>
-    <item msgid="403116336404005687">"Apresentar diapositivos da esquerda para a direita"</item>
-    <item msgid="4901733079450971731">"Apresentar diapositivos de cima para baixo"</item>
-    <item msgid="9006732482485375438">"Selecção aleatória"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_repeat_title" msgid="6512135022461429738">"Repetir apresentação de diapositivos"</string>
-    <string name="pref_gallery_slideshow_repeat_summary" msgid="8289230397431855268">"Repetir a apresentação de diapositivos"</string>
-    <string name="pref_gallery_slideshow_shuffle_title" msgid="3677508579783015598">"Reproduzir diapositivos aleatoriamente"</string>
-    <string name="pref_gallery_slideshow_shuffle_summary" msgid="8566948749149325715">"Mostrar imagens por ordem aleatória"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Armazenar localização"</string>
     <string name="pref_camera_recordlocation_entry_off" msgid="8888142742988946038">"Desactivado"</string>
     <string name="pref_camera_recordlocation_entry_on" msgid="7954533529969575594">"Activado"</string>
@@ -154,10 +93,6 @@
     <string name="pref_camera_whitebalance_entry_daylight" msgid="2534757270149561027">"Luz do dia"</string>
     <string name="pref_camera_whitebalance_entry_fluorescent" msgid="2435332872847454032">"Fluorescente"</string>
     <string name="pref_camera_whitebalance_entry_cloudy" msgid="3531996716997959326">"Nublado"</string>
-    <string name="pref_camera_whitebalance_entry_twilight" msgid="2257942426397244556">"Crepúsculo"</string>
-    <string name="pref_camera_whitebalance_entry_shade" msgid="4685730287406277702">"Sombra"</string>
-    <string name="pref_camera_whitebalance_entry_warm_fluorescent" msgid="2827098617308870248">"Fluorescente quente"</string>
-    <string name="pref_camera_whitebalance_entry_halogen" msgid="5473868018455084929">"Halogéneo"</string>
     <string name="pref_camera_coloreffect_dialogtitle" msgid="7691751972871809763">"Efeito de cor"</string>
     <string name="pref_camera_coloreffect_title" msgid="4152827686267109207">"Efeito de cor"</string>
     <string name="pref_camera_coloreffect_entry_none" msgid="4759462740660236565">"Nenhum"</string>
@@ -188,10 +123,6 @@
     <string name="pref_camera_scenemode_entry_sunset" msgid="181661154611507212">"Ocaso"</string>
     <string name="pref_camera_scenemode_entry_steadyphoto" msgid="2147958278893914895">"Fotografia uniforme"</string>
     <string name="pref_camera_scenemode_entry_fireworks" msgid="3530608172188797432">"Fogo-de-artifício"</string>
-    <string name="camerasettings" msgid="2433519618178453928">"Definições"</string>
-    <string name="image_gallery_NoImageView_text" msgid="409595259802877447">"Nenhum suporte de dados encontrado."</string>
-    <string name="pref_gallery_confirm_delete_title" msgid="642429032687845907">"Confirmar a eliminação"</string>
-    <string name="pref_gallery_confirm_delete_summary" msgid="5253456492765525245">"Mostrar confirmação antes de eliminar uma imagem ou vídeo"</string>
     <string name="no_location_image" msgid="6929172123058811834">"Nenhuma informação de Localização contida nesta imagem."</string>
     <string name="details_panel_title" msgid="4753347516759338122">"Detalhes"</string>
     <string name="details_file_size" msgid="2468878774843246797">"Tamanho do ficheiro:"</string>
@@ -215,30 +146,9 @@
     <string name="details_kbps" msgid="1515369011744784592">"<xliff:g id="SPEED">%1$d</xliff:g> Kbps"</string>
     <string name="details_mbps" msgid="3291428849607323284">"<xliff:g id="SPEED">%1$g</xliff:g> Mbps"</string>
     <string name="details_ok" msgid="6848594369924424312">"OK"</string>
-    <string name="context_menu_header" msgid="1185348426222302182">"Opções de imagem"</string>
-    <string name="video_context_menu_header" msgid="7318971116949475029">"Opções de vídeo"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Toque num rosto para começar."</string>
-    <string name="photos_gallery_title" msgid="6914406246471015448">"Galeria"</string>
-    <string name="pick_photos_gallery_title" msgid="12912682424915943">"Seleccionar imagem"</string>
-    <string name="videos_gallery_title" msgid="6150354029982749479">"Galeria"</string>
-    <string name="pick_videos_gallery_title" msgid="326727095201227333">"Seleccionar vídeo"</string>
     <string name="sendImage" msgid="7279510542799399570">"Partilhar a imagem através de"</string>
     <string name="setImage" msgid="7246975856983303047">"Definir imagem como:"</string>
     <string name="sendVideo" msgid="3598567735831863073">"Partilhar vídeo através de"</string>
-    <string name="send_media_files" msgid="8201083279723850611">"Partilhar ficheiros multimédia através de"</string>
-    <string name="movieviewlabel" msgid="7363495772706775465">"Filmes"</string>
-    <string name="loading_video" msgid="4013492720121891585">"A carregar vídeo..."</string>
     <string name="spaceIsLow_content" msgid="2848517537672543641">"Está a ficar sem espaço no cartão SD. Altere as definições de qualidade ou elimine itens da Galeria."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Retomar o vídeo"</string>
-    <string name="resume_playing_message" msgid="7293000708492271389">"Retomar reprodução a partir de <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Retomar a reprodução"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Recomeçar"</string>
-    <string name="gadget_title" msgid="259405922673466798">"Moldura da imagem"</string>
-    <string name="file_info_title" msgid="1628963357466012538">"Informações do ficheiro:"</string>
-    <string name="video_exceed_mms_limit" msgid="3835075281230780010">"O vídeo que gravou é demasiado grande para ser enviado por MMS. Tente gravar um filme mais curto."</string>
-    <string name="multiselect_share" msgid="5261644537749253581">"Partilhar"</string>
-    <string name="multiselect_delete" msgid="9113461994546744603">"Eliminar"</string>
-    <string name="multiselect_cancel" msgid="5969428692864002165">"Cancelar"</string>
-    <string name="delete_images_message" msgid="4504926868037899430">"A eliminar imagens, por favor aguarde..."</string>
     <string name="video_reach_size_limit" msgid="6179877322015552390">"Limite de tamanho atingido."</string>
 </resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 072b681..011744a 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -17,42 +17,24 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="camera_error_title" msgid="1202232535191653443">"Erro de câmera"</string>
     <string name="cannot_connect_camera" msgid="8029009101380114174">"Não é possível se conectar à câmera."</string>
-    <string name="all_images" msgid="1195501551939178807">"Todas as imagens"</string>
-    <string name="all_videos" msgid="3380966619230896013">"Todos os vídeos"</string>
     <string name="camera_label" msgid="6346560772074764302">"Câmera"</string>
     <string name="video_camera_label" msgid="2899292505526427293">"Filmadora"</string>
-    <string name="gallery_picker_label" msgid="3080425245006492787">"Galeria"</string>
-    <string name="gallery_label" msgid="7119609703856708011">"Galeria"</string>
     <string name="gallery_camera_bucket_name" msgid="2924618424339240831">"Imagens da câmera"</string>
     <string name="gallery_camera_videos_bucket_name" msgid="3369151581398551623">"Vídeos de câmera"</string>
-    <string name="gallery_camera_media_bucket_name" msgid="5560926838411387511">"Mídia da câmera"</string>
-    <string name="crop_label" msgid="521114301871349328">"Cortar imagem"</string>
     <string name="view_label" msgid="4450531507947335704">"Visualizar imagem"</string>
-    <string name="preferences_label" msgid="5955678162525051163">"Configurações da câmera"</string>
     <string name="wait" msgid="8600187532323801552">"Aguarde..."</string>
     <string name="no_storage" msgid="820691042667338625">"Insira um cartão SD antes de usar a câmera."</string>
     <string name="not_enough_space" msgid="6655334407957844653">"O seu cartão SD está cheio."</string>
     <string name="preparing_sd" msgid="2914969119574812666">"Preparando o cartão SD…"</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Configurando o papel de parede, aguarde…"</string>
-    <string name="savingImage" msgid="3051745378545909260">"Salvando imagem…"</string>
-    <string name="runningFaceDetection" msgid="2293932204708167704">"Aguarde..."</string>
     <string name="settings" msgid="1534847740615665736">"Configurações"</string>
-    <string name="view" msgid="6277795271119411881">"Exibir"</string>
     <string name="details" msgid="8415120088556445230">"Detalhes"</string>
     <string name="show_on_map" msgid="441725587731006228">"Mostrar no Google Maps"</string>
     <string name="rotate" msgid="460017689320955494">"Girar"</string>
     <string name="rotate_left" msgid="5888273317282539839">"Girar para a esquerda"</string>
     <string name="rotate_right" msgid="6776325835923384839">"Girar para a direita"</string>
-    <string name="slide_show" msgid="1965192737233824143">"Apresentação de slides"</string>
-    <string name="multiselect" msgid="4761682939945434146">"Selecionar vários"</string>
-    <string name="capture_picture" msgid="4114265595549284643">"Capturar imagem"</string>
-    <string name="capture_video" msgid="4047046282358697155">"Capturar vídeo"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Salvar"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Descartar"</string>
     <string name="confirm_delete_title" msgid="263478358046514887">"Excluir"</string>
     <string name="confirm_delete_message" msgid="4161389939579284604">"A imagem será excluída."</string>
     <string name="confirm_delete_video_message" msgid="5796154324948010221">"O vídeo será excluído."</string>
-    <string name="confirm_delete_multiple_message" msgid="5962369828035778779">"Os arquivos de mídia serão excluídos."</string>
     <string name="review_toss" msgid="7255331999518617841">"EXCLUIR"</string>
     <string name="review_share" msgid="7294755861072174509">"COMPARTILHAR"</string>
     <string name="review_set" msgid="8304758352155378636">"DEFINIR COMO"</string>
@@ -64,54 +46,11 @@
     <string name="camera_toss" msgid="3781186798552460833">"Excluir"</string>
     <string name="camera_share" msgid="8207701858325694182">"Compartilhar"</string>
     <string name="camera_set" msgid="3422192914806971182">"Definir como"</string>
-    <string name="camera_play" msgid="8248000517869959980">"Reproduzir"</string>
-    <string name="camera_attach" msgid="4048659554893435232">"Anexar"</string>
-    <string name="camera_cancel" msgid="8203341746672085747">"Cancelar"</string>
     <string name="camera_crop" msgid="5584000454518174632">"Cortar"</string>
     <string name="no_way_to_share_image" msgid="5011985309980187927">"Não há aplicativo disponível para compartilhar a imagem."</string>
     <string name="no_way_to_share_video" msgid="3684571102267072206">"Não há aplicativo disponível para compartilhar o vídeo."</string>
-    <string name="no_way_to_share" msgid="863323712875014752">"Não há aplicativo disponível para compartilhar os arquivos de mídia."</string>
     <string name="video_play" msgid="5287787282508002895">"Reproduzir"</string>
     <string name="camera_gallery_photos_text" msgid="6558048736561932758">"Galeria"</string>
-    <string name="camera_pick_wallpaper" msgid="7026385960511811641">"Imagens"</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Papel de parede"</string>
-    <string name="pref_gallery_category" msgid="5826488887237959433">"Configurações gerais"</string>
-    <string name="pref_slideshow_category" msgid="9097962086335681667">"Configurações da apresentação de slides"</string>
-    <string name="pref_gallery_size_title" msgid="1363406603879434418">"Tamanho da exibição"</string>
-    <string name="pref_gallery_size_summary" msgid="8179967445295243638">"Selecione o tamanho de exibição das imagens e vídeos"</string>
-    <string name="pref_gallery_size_dialogtitle" msgid="757380558320647503">"Tamanho da imagem"</string>
-  <string-array name="pref_gallery_size_choices">
-    <item msgid="7157691836846678936">"Grande"</item>
-    <item msgid="1033164600689216410">"Pequeno"</item>
-  </string-array>
-    <string name="pref_gallery_sort_title" msgid="7447949250045443386">"Ordem de classificação"</string>
-    <string name="pref_gallery_sort_summary" msgid="6644398051645595214">"Selecione a ordem de classificação das imagens e dos vídeos."</string>
-    <string name="pref_gallery_sort_dialogtitle" msgid="5787417105532562739">"Classificação de imagens"</string>
-  <string-array name="pref_gallery_sort_choices">
-    <item msgid="5546009539334018063">"O mais recente primeiro"</item>
-    <item msgid="7931283047572866748">"O mais recente por último"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_interval_title" msgid="6534904787962619832">"Intervalo dos slides"</string>
-    <string name="pref_gallery_slideshow_interval_summary" msgid="329876327077905033">"Selecione a duração de exibição de cada slide na apresentação de slides."</string>
-    <string name="pref_gallery_slideshow_interval_dialogtitle" msgid="6775543119826248900">"Intervalo da apresentação de slides"</string>
-  <string-array name="pref_gallery_slideshow_interval_choices">
-    <item msgid="3089037742117543119">"2 segundos"</item>
-    <item msgid="738579316565625730">"3 segundos"</item>
-    <item msgid="5670078787463530498">"4 segundos"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_transition_title" msgid="3235158556228218846">"Transição dos slides"</string>
-    <string name="pref_gallery_slideshow_transition_summary" msgid="2390320265891546846">"Selecione o efeito usado ao passar de um slide para o próximo."</string>
-    <string name="pref_gallery_slideshow_transition_dialogtitle" msgid="5483406447721500371">"Transição da apresentação de slides"</string>
-  <string-array name="pref_gallery_slideshow_transition_choices">
-    <item msgid="2825716730899894863">"Aparecimento/desaparecimento"</item>
-    <item msgid="403116336404005687">"Deslizar para a esquerda - direita"</item>
-    <item msgid="4901733079450971731">"Deslizar para cima - para baixo"</item>
-    <item msgid="9006732482485375438">"Seleção aleatória"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_repeat_title" msgid="6512135022461429738">"Repetir apresentação"</string>
-    <string name="pref_gallery_slideshow_repeat_summary" msgid="8289230397431855268">"Reproduzir apresentação de slides mais de uma vez"</string>
-    <string name="pref_gallery_slideshow_shuffle_title" msgid="3677508579783015598">"Reproduzir aleatoriamente"</string>
-    <string name="pref_gallery_slideshow_shuffle_summary" msgid="8566948749149325715">"Mostrar imagens em ordem aleatória"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Local de armazenamento"</string>
     <string name="pref_camera_recordlocation_entry_off" msgid="8888142742988946038">"Desativado"</string>
     <string name="pref_camera_recordlocation_entry_on" msgid="7954533529969575594">"Ativado"</string>
@@ -154,10 +93,6 @@
     <string name="pref_camera_whitebalance_entry_daylight" msgid="2534757270149561027">"Luz do dia"</string>
     <string name="pref_camera_whitebalance_entry_fluorescent" msgid="2435332872847454032">"Fluorescente"</string>
     <string name="pref_camera_whitebalance_entry_cloudy" msgid="3531996716997959326">"Nublado"</string>
-    <string name="pref_camera_whitebalance_entry_twilight" msgid="2257942426397244556">"Crepúsculo"</string>
-    <string name="pref_camera_whitebalance_entry_shade" msgid="4685730287406277702">"Sombreado"</string>
-    <string name="pref_camera_whitebalance_entry_warm_fluorescent" msgid="2827098617308870248">"Fluorescente quente"</string>
-    <string name="pref_camera_whitebalance_entry_halogen" msgid="5473868018455084929">"Halogênico"</string>
     <string name="pref_camera_coloreffect_dialogtitle" msgid="7691751972871809763">"Efeito de cor"</string>
     <string name="pref_camera_coloreffect_title" msgid="4152827686267109207">"Efeito de cor"</string>
     <string name="pref_camera_coloreffect_entry_none" msgid="4759462740660236565">"Nenhum"</string>
@@ -188,10 +123,6 @@
     <string name="pref_camera_scenemode_entry_sunset" msgid="181661154611507212">"Pôr-do-sol"</string>
     <string name="pref_camera_scenemode_entry_steadyphoto" msgid="2147958278893914895">"Foto nítida"</string>
     <string name="pref_camera_scenemode_entry_fireworks" msgid="3530608172188797432">"Fogos de artifício"</string>
-    <string name="camerasettings" msgid="2433519618178453928">"Configurações"</string>
-    <string name="image_gallery_NoImageView_text" msgid="409595259802877447">"Nenhuma mídia encontrada."</string>
-    <string name="pref_gallery_confirm_delete_title" msgid="642429032687845907">"Confirmar exclusões"</string>
-    <string name="pref_gallery_confirm_delete_summary" msgid="5253456492765525245">"Mostrar confirmação antes de excluir uma imagem ou vídeo."</string>
     <string name="no_location_image" msgid="6929172123058811834">"Nenhuma informação de localização contida nesta imagem."</string>
     <string name="details_panel_title" msgid="4753347516759338122">"Detalhes"</string>
     <string name="details_file_size" msgid="2468878774843246797">"Tamanho do arquivo:"</string>
@@ -215,30 +146,9 @@
     <string name="details_kbps" msgid="1515369011744784592">"<xliff:g id="SPEED">%1$d</xliff:g> Kbps"</string>
     <string name="details_mbps" msgid="3291428849607323284">"<xliff:g id="SPEED">%1$g</xliff:g> Mbps"</string>
     <string name="details_ok" msgid="6848594369924424312">"OK"</string>
-    <string name="context_menu_header" msgid="1185348426222302182">"Opções da imagem"</string>
-    <string name="video_context_menu_header" msgid="7318971116949475029">"Opções de vídeo"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Toque em uma face para começar."</string>
-    <string name="photos_gallery_title" msgid="6914406246471015448">"Galeria"</string>
-    <string name="pick_photos_gallery_title" msgid="12912682424915943">"Selecionar imagem"</string>
-    <string name="videos_gallery_title" msgid="6150354029982749479">"Galeria"</string>
-    <string name="pick_videos_gallery_title" msgid="326727095201227333">"Selecionar vídeo"</string>
     <string name="sendImage" msgid="7279510542799399570">"Compartilhar imagem via"</string>
     <string name="setImage" msgid="7246975856983303047">"Definir imagem como"</string>
     <string name="sendVideo" msgid="3598567735831863073">"Compartilhar vídeo via"</string>
-    <string name="send_media_files" msgid="8201083279723850611">"Compartilhar arquivos de mídia via"</string>
-    <string name="movieviewlabel" msgid="7363495772706775465">"Filmes"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Carregando vídeo..."</string>
     <string name="spaceIsLow_content" msgid="2848517537672543641">"O seu cartão SD está sem espaço. Mude a configuração de qualidade ou exclua itens da Galeria."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Retomar vídeo"</string>
-    <string name="resume_playing_message" msgid="7293000708492271389">"Retomar reprodução a partir de <xliff:g id="DURATION">%s</xliff:g> ?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Retomar a reprodução"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Reiniciar"</string>
-    <string name="gadget_title" msgid="259405922673466798">"Frame da imagem"</string>
-    <string name="file_info_title" msgid="1628963357466012538">"Informações do arquivo:"</string>
-    <string name="video_exceed_mms_limit" msgid="3835075281230780010">"O vídeo gravado é muito grande para ser enviado via MMS. Tente gravar um clipe mais curto."</string>
-    <string name="multiselect_share" msgid="5261644537749253581">"Compartilhar"</string>
-    <string name="multiselect_delete" msgid="9113461994546744603">"Excluir"</string>
-    <string name="multiselect_cancel" msgid="5969428692864002165">"Cancelar"</string>
-    <string name="delete_images_message" msgid="4504926868037899430">"Excluindo imagens. Aguarde..."</string>
     <string name="video_reach_size_limit" msgid="6179877322015552390">"Limite de tamanho atingido."</string>
 </resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 9d7dd63..212cf9d 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -17,42 +17,24 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="camera_error_title" msgid="1202232535191653443">"Ошибка камеры"</string>
     <string name="cannot_connect_camera" msgid="8029009101380114174">"Не удается подключиться к камере."</string>
-    <string name="all_images" msgid="1195501551939178807">"Все картинки"</string>
-    <string name="all_videos" msgid="3380966619230896013">"Все видео"</string>
     <string name="camera_label" msgid="6346560772074764302">"Фотокамера"</string>
     <string name="video_camera_label" msgid="2899292505526427293">"Видеокамера"</string>
-    <string name="gallery_picker_label" msgid="3080425245006492787">"Фотоальбом"</string>
-    <string name="gallery_label" msgid="7119609703856708011">"Фотоальбом"</string>
     <string name="gallery_camera_bucket_name" msgid="2924618424339240831">"Снимки, сделанные камерой"</string>
     <string name="gallery_camera_videos_bucket_name" msgid="3369151581398551623">"Видео"</string>
-    <string name="gallery_camera_media_bucket_name" msgid="5560926838411387511">"Медиафайлы"</string>
-    <string name="crop_label" msgid="521114301871349328">"Обрезать фотографию"</string>
     <string name="view_label" msgid="4450531507947335704">"Просмотр картинки"</string>
-    <string name="preferences_label" msgid="5955678162525051163">"Настройки камеры"</string>
     <string name="wait" msgid="8600187532323801552">"Подождите..."</string>
     <string name="no_storage" msgid="820691042667338625">"Прежде чем использовать камеру, вставьте SD-карту."</string>
     <string name="not_enough_space" msgid="6655334407957844653">"Ваша SD-карта заполнена."</string>
     <string name="preparing_sd" msgid="2914969119574812666">"Подготовка карты SD..."</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Установка обоев, подождите..."</string>
-    <string name="savingImage" msgid="3051745378545909260">"Сохранение картинки..."</string>
-    <string name="runningFaceDetection" msgid="2293932204708167704">"Подождите..."</string>
     <string name="settings" msgid="1534847740615665736">"Настройки"</string>
-    <string name="view" msgid="6277795271119411881">"Просмотр"</string>
     <string name="details" msgid="8415120088556445230">"Сведения"</string>
     <string name="show_on_map" msgid="441725587731006228">"Показать в Картах"</string>
     <string name="rotate" msgid="460017689320955494">"Повернуть"</string>
     <string name="rotate_left" msgid="5888273317282539839">"Повернуть влево"</string>
     <string name="rotate_right" msgid="6776325835923384839">"Повернуть вправо"</string>
-    <string name="slide_show" msgid="1965192737233824143">"Слайд-шоу"</string>
-    <string name="multiselect" msgid="4761682939945434146">"Множественный выбор"</string>
-    <string name="capture_picture" msgid="4114265595549284643">"Сделать фотографию"</string>
-    <string name="capture_video" msgid="4047046282358697155">"Снять видео"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Сохранить"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Отменить"</string>
     <string name="confirm_delete_title" msgid="263478358046514887">"Удалить"</string>
     <string name="confirm_delete_message" msgid="4161389939579284604">"Картинка будет удалена."</string>
     <string name="confirm_delete_video_message" msgid="5796154324948010221">"Видео будет удалено."</string>
-    <string name="confirm_delete_multiple_message" msgid="5962369828035778779">"Эти медиафайлы будут удалены."</string>
     <string name="review_toss" msgid="7255331999518617841">"УДАЛИТЬ"</string>
     <string name="review_share" msgid="7294755861072174509">"ОТПРАВИТЬ"</string>
     <string name="review_set" msgid="8304758352155378636">"УСТАНОВИТЬ КАК"</string>
@@ -64,54 +46,11 @@
     <string name="camera_toss" msgid="3781186798552460833">"Удалить"</string>
     <string name="camera_share" msgid="8207701858325694182">"Отправить"</string>
     <string name="camera_set" msgid="3422192914806971182">"Установить как"</string>
-    <string name="camera_play" msgid="8248000517869959980">"Воспроизвести"</string>
-    <string name="camera_attach" msgid="4048659554893435232">"Вложить"</string>
-    <string name="camera_cancel" msgid="8203341746672085747">"Отмена"</string>
     <string name="camera_crop" msgid="5584000454518174632">"Обрезать"</string>
     <string name="no_way_to_share_image" msgid="5011985309980187927">"Отсутствует приложение для открытия совместного доступа к фотографии."</string>
     <string name="no_way_to_share_video" msgid="3684571102267072206">"Отсутствует приложение для открытия совместного доступа к видео."</string>
-    <string name="no_way_to_share" msgid="863323712875014752">"Отсутствует приложение для открытия совместного доступа к мультимедийным файлам."</string>
     <string name="video_play" msgid="5287787282508002895">"Воспроизвести"</string>
     <string name="camera_gallery_photos_text" msgid="6558048736561932758">"Фотоальбом"</string>
-    <string name="camera_pick_wallpaper" msgid="7026385960511811641">"Картинки"</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Обои"</string>
-    <string name="pref_gallery_category" msgid="5826488887237959433">"Общие настройки"</string>
-    <string name="pref_slideshow_category" msgid="9097962086335681667">"Настройки слайд-шоу"</string>
-    <string name="pref_gallery_size_title" msgid="1363406603879434418">"Отображаемый размер"</string>
-    <string name="pref_gallery_size_summary" msgid="8179967445295243638">"Выбор отображаемого размера изображений и видео"</string>
-    <string name="pref_gallery_size_dialogtitle" msgid="757380558320647503">"Размер картинки"</string>
-  <string-array name="pref_gallery_size_choices">
-    <item msgid="7157691836846678936">"Большой"</item>
-    <item msgid="1033164600689216410">"Небольшой"</item>
-  </string-array>
-    <string name="pref_gallery_sort_title" msgid="7447949250045443386">"Порядок сортировки"</string>
-    <string name="pref_gallery_sort_summary" msgid="6644398051645595214">"Выберите порядок сортировки изображений и видео"</string>
-    <string name="pref_gallery_sort_dialogtitle" msgid="5787417105532562739">"Сортировать картинки"</string>
-  <string-array name="pref_gallery_sort_choices">
-    <item msgid="5546009539334018063">"Сначала новые"</item>
-    <item msgid="7931283047572866748">"Сначала старые"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_interval_title" msgid="6534904787962619832">"Интервал в слайд-шоу"</string>
-    <string name="pref_gallery_slideshow_interval_summary" msgid="329876327077905033">"Выбор длительности показа каждого слайда"</string>
-    <string name="pref_gallery_slideshow_interval_dialogtitle" msgid="6775543119826248900">"Интервал слайд-шоу"</string>
-  <string-array name="pref_gallery_slideshow_interval_choices">
-    <item msgid="3089037742117543119">"2 сек."</item>
-    <item msgid="738579316565625730">"3 сек."</item>
-    <item msgid="5670078787463530498">"4 сек."</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_transition_title" msgid="3235158556228218846">"Переход в слайд-шоу"</string>
-    <string name="pref_gallery_slideshow_transition_summary" msgid="2390320265891546846">"Выбор эффекта при переходе от одного слайда к другому"</string>
-    <string name="pref_gallery_slideshow_transition_dialogtitle" msgid="5483406447721500371">"Переход в слайд-шоу"</string>
-  <string-array name="pref_gallery_slideshow_transition_choices">
-    <item msgid="2825716730899894863">"Затемнение и проявление"</item>
-    <item msgid="403116336404005687">"Прокрутка слева направо"</item>
-    <item msgid="4901733079450971731">"Прокрутка сверху вниз"</item>
-    <item msgid="9006732482485375438">"Случайный выбор"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_repeat_title" msgid="6512135022461429738">"Повтор слайд-шоу"</string>
-    <string name="pref_gallery_slideshow_repeat_summary" msgid="8289230397431855268">"Воспроизвести слайд-шоу более одного раза"</string>
-    <string name="pref_gallery_slideshow_shuffle_title" msgid="3677508579783015598">"Перемешать слайды"</string>
-    <string name="pref_gallery_slideshow_shuffle_summary" msgid="8566948749149325715">"Показ фотографий в случайном порядке"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Записывать местоположение"</string>
     <string name="pref_camera_recordlocation_entry_off" msgid="8888142742988946038">"Выкл."</string>
     <string name="pref_camera_recordlocation_entry_on" msgid="7954533529969575594">"Вкл."</string>
@@ -154,10 +93,6 @@
     <string name="pref_camera_whitebalance_entry_daylight" msgid="2534757270149561027">"Дневной свет"</string>
     <string name="pref_camera_whitebalance_entry_fluorescent" msgid="2435332872847454032">"Лампа дневного света"</string>
     <string name="pref_camera_whitebalance_entry_cloudy" msgid="3531996716997959326">"Пасмурно"</string>
-    <string name="pref_camera_whitebalance_entry_twilight" msgid="2257942426397244556">"Сумерки"</string>
-    <string name="pref_camera_whitebalance_entry_shade" msgid="4685730287406277702">"Тень"</string>
-    <string name="pref_camera_whitebalance_entry_warm_fluorescent" msgid="2827098617308870248">"Лампа дневного света (теплых тонов)"</string>
-    <string name="pref_camera_whitebalance_entry_halogen" msgid="5473868018455084929">"Галогенная лампа"</string>
     <string name="pref_camera_coloreffect_dialogtitle" msgid="7691751972871809763">"Цветовые эффекты"</string>
     <string name="pref_camera_coloreffect_title" msgid="4152827686267109207">"Цветовые эффекты"</string>
     <string name="pref_camera_coloreffect_entry_none" msgid="4759462740660236565">"Нет"</string>
@@ -188,10 +123,6 @@
     <string name="pref_camera_scenemode_entry_sunset" msgid="181661154611507212">"Закат"</string>
     <string name="pref_camera_scenemode_entry_steadyphoto" msgid="2147958278893914895">"Четкость"</string>
     <string name="pref_camera_scenemode_entry_fireworks" msgid="3530608172188797432">"Фейерверк"</string>
-    <string name="camerasettings" msgid="2433519618178453928">"Настройки"</string>
-    <string name="image_gallery_NoImageView_text" msgid="409595259802877447">"Нет мультимедийных материалов."</string>
-    <string name="pref_gallery_confirm_delete_title" msgid="642429032687845907">"Подтверждать удаление"</string>
-    <string name="pref_gallery_confirm_delete_summary" msgid="5253456492765525245">"Запрашивать подтверждения перед удалением изображения или видео"</string>
     <string name="no_location_image" msgid="6929172123058811834">"Это изображение не содержит данных о местоположении."</string>
     <string name="details_panel_title" msgid="4753347516759338122">"Сведения"</string>
     <string name="details_file_size" msgid="2468878774843246797">"Размер файла:"</string>
@@ -215,30 +146,9 @@
     <string name="details_kbps" msgid="1515369011744784592">"<xliff:g id="SPEED">%1$d</xliff:g> Кбит/с"</string>
     <string name="details_mbps" msgid="3291428849607323284">"<xliff:g id="SPEED">%1$g</xliff:g> Мбит/с"</string>
     <string name="details_ok" msgid="6848594369924424312">"ОК"</string>
-    <string name="context_menu_header" msgid="1185348426222302182">"Параметры картинки"</string>
-    <string name="video_context_menu_header" msgid="7318971116949475029">"Параметры видео"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Нажмите лицо, чтобы начать."</string>
-    <string name="photos_gallery_title" msgid="6914406246471015448">"Фотоальбом"</string>
-    <string name="pick_photos_gallery_title" msgid="12912682424915943">"Выберите картинку"</string>
-    <string name="videos_gallery_title" msgid="6150354029982749479">"Фотоальбом"</string>
-    <string name="pick_videos_gallery_title" msgid="326727095201227333">"Выбор видео"</string>
     <string name="sendImage" msgid="7279510542799399570">"Отправить картинку через"</string>
     <string name="setImage" msgid="7246975856983303047">"Установить картинку как"</string>
     <string name="sendVideo" msgid="3598567735831863073">"Отправить видео при помощи"</string>
-    <string name="send_media_files" msgid="8201083279723850611">"Открыть совместный доступ к файлам через"</string>
-    <string name="movieviewlabel" msgid="7363495772706775465">"Фильмы"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Загрузка видео…"</string>
     <string name="spaceIsLow_content" msgid="2848517537672543641">"Место на вашей SD-карте заканчивается. Измените настройки качества или удалите содержимое из фотоальбома."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Продолжение просмотра видео"</string>
-    <string name="resume_playing_message" msgid="7293000708492271389">"Продолжить воспроизведение с <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Продолжить воспроизведение"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Начать с начала"</string>
-    <string name="gadget_title" msgid="259405922673466798">"Рамка фотографии"</string>
-    <string name="file_info_title" msgid="1628963357466012538">"Сведения о файле:"</string>
-    <string name="video_exceed_mms_limit" msgid="3835075281230780010">"Записанное видео имеет слишком большой размер для отправки в MMS. Запишите более короткий ролик."</string>
-    <string name="multiselect_share" msgid="5261644537749253581">"Отправить"</string>
-    <string name="multiselect_delete" msgid="9113461994546744603">"Удалить"</string>
-    <string name="multiselect_cancel" msgid="5969428692864002165">"Отмена"</string>
-    <string name="delete_images_message" msgid="4504926868037899430">"Удаление изображений, подождите..."</string>
     <string name="video_reach_size_limit" msgid="6179877322015552390">"Достигнут предельный размер видео."</string>
 </resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index ac51d02..0590319 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -17,42 +17,24 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="camera_error_title" msgid="1202232535191653443">"Kamerafel"</string>
     <string name="cannot_connect_camera" msgid="8029009101380114174">"Det går inte att ansluta till kameran."</string>
-    <string name="all_images" msgid="1195501551939178807">"Alla bilder"</string>
-    <string name="all_videos" msgid="3380966619230896013">"Alla videor"</string>
     <string name="camera_label" msgid="6346560772074764302">"Kamera"</string>
     <string name="video_camera_label" msgid="2899292505526427293">"Videokamera"</string>
-    <string name="gallery_picker_label" msgid="3080425245006492787">"Galleri"</string>
-    <string name="gallery_label" msgid="7119609703856708011">"Galleri"</string>
     <string name="gallery_camera_bucket_name" msgid="2924618424339240831">"Kamerabilder"</string>
     <string name="gallery_camera_videos_bucket_name" msgid="3369151581398551623">"Kameravideor"</string>
-    <string name="gallery_camera_media_bucket_name" msgid="5560926838411387511">"Kameramedia"</string>
-    <string name="crop_label" msgid="521114301871349328">"Beskär bild"</string>
     <string name="view_label" msgid="4450531507947335704">"Visa bild"</string>
-    <string name="preferences_label" msgid="5955678162525051163">"Kamerainställningar"</string>
     <string name="wait" msgid="8600187532323801552">"Vänta…"</string>
     <string name="no_storage" msgid="820691042667338625">"Sätt i ett SD-kort innan du använder kameran."</string>
     <string name="not_enough_space" msgid="6655334407957844653">"Ditt SD-kort är fullt."</string>
     <string name="preparing_sd" msgid="2914969119574812666">"Förbereder SD-kort…"</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Anger bakgrund, vänta…"</string>
-    <string name="savingImage" msgid="3051745378545909260">"Sparar bild…"</string>
-    <string name="runningFaceDetection" msgid="2293932204708167704">"Vänta…"</string>
     <string name="settings" msgid="1534847740615665736">"Inställningar"</string>
-    <string name="view" msgid="6277795271119411881">"Visa"</string>
     <string name="details" msgid="8415120088556445230">"Information"</string>
     <string name="show_on_map" msgid="441725587731006228">"Visa på kartor"</string>
     <string name="rotate" msgid="460017689320955494">"Rotera"</string>
     <string name="rotate_left" msgid="5888273317282539839">"Rotera åt vänster"</string>
     <string name="rotate_right" msgid="6776325835923384839">"Rotera åt höger"</string>
-    <string name="slide_show" msgid="1965192737233824143">"Bildspel"</string>
-    <string name="multiselect" msgid="4761682939945434146">"Markera flera"</string>
-    <string name="capture_picture" msgid="4114265595549284643">"Fota"</string>
-    <string name="capture_video" msgid="4047046282358697155">"Spela in video"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Spara"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Ignorera"</string>
     <string name="confirm_delete_title" msgid="263478358046514887">"Ta bort"</string>
     <string name="confirm_delete_message" msgid="4161389939579284604">"Bilden kommer att tas bort."</string>
     <string name="confirm_delete_video_message" msgid="5796154324948010221">"Videon kommer att tas bort."</string>
-    <string name="confirm_delete_multiple_message" msgid="5962369828035778779">"Dessa mediefiler tas bort."</string>
     <string name="review_toss" msgid="7255331999518617841">"TA BORT"</string>
     <string name="review_share" msgid="7294755861072174509">"DELA"</string>
     <string name="review_set" msgid="8304758352155378636">"ANVÄND SOM"</string>
@@ -64,54 +46,11 @@
     <string name="camera_toss" msgid="3781186798552460833">"Ta bort"</string>
     <string name="camera_share" msgid="8207701858325694182">"Dela"</string>
     <string name="camera_set" msgid="3422192914806971182">"Använd som"</string>
-    <string name="camera_play" msgid="8248000517869959980">"Spela"</string>
-    <string name="camera_attach" msgid="4048659554893435232">"Bifoga"</string>
-    <string name="camera_cancel" msgid="8203341746672085747">"Avbryt"</string>
     <string name="camera_crop" msgid="5584000454518174632">"Beskär"</string>
     <string name="no_way_to_share_image" msgid="5011985309980187927">"Det finns inget program som kan dela bilden."</string>
     <string name="no_way_to_share_video" msgid="3684571102267072206">"Det finns inget program som kan dela videoklippet."</string>
-    <string name="no_way_to_share" msgid="863323712875014752">"Det finns inget program som kan dela mediefilerna."</string>
     <string name="video_play" msgid="5287787282508002895">"Spela"</string>
     <string name="camera_gallery_photos_text" msgid="6558048736561932758">"Galleri"</string>
-    <string name="camera_pick_wallpaper" msgid="7026385960511811641">"Bilder"</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Bakgrund"</string>
-    <string name="pref_gallery_category" msgid="5826488887237959433">"Allmänna inställningar"</string>
-    <string name="pref_slideshow_category" msgid="9097962086335681667">"Bildspelsinställningar"</string>
-    <string name="pref_gallery_size_title" msgid="1363406603879434418">"Visningsstorlek"</string>
-    <string name="pref_gallery_size_summary" msgid="8179967445295243638">"Välj visningsstorlek för bilder och videor"</string>
-    <string name="pref_gallery_size_dialogtitle" msgid="757380558320647503">"Bildstorlek"</string>
-  <string-array name="pref_gallery_size_choices">
-    <item msgid="7157691836846678936">"Stor"</item>
-    <item msgid="1033164600689216410">"Liten"</item>
-  </string-array>
-    <string name="pref_gallery_sort_title" msgid="7447949250045443386">"Sorteringsordning"</string>
-    <string name="pref_gallery_sort_summary" msgid="6644398051645595214">"Välj sorteringsordning för bilder och videor"</string>
-    <string name="pref_gallery_sort_dialogtitle" msgid="5787417105532562739">"Sortera bilder"</string>
-  <string-array name="pref_gallery_sort_choices">
-    <item msgid="5546009539334018063">"Nyast först"</item>
-    <item msgid="7931283047572866748">"Nyast sist"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_interval_title" msgid="6534904787962619832">"Bildspelsintervall"</string>
-    <string name="pref_gallery_slideshow_interval_summary" msgid="329876327077905033">"Ange hur länge varje bild ska visas i bildspelet"</string>
-    <string name="pref_gallery_slideshow_interval_dialogtitle" msgid="6775543119826248900">"Bildspelsintervall"</string>
-  <string-array name="pref_gallery_slideshow_interval_choices">
-    <item msgid="3089037742117543119">"2 sekunder"</item>
-    <item msgid="738579316565625730">"3 sekunder"</item>
-    <item msgid="5670078787463530498">"4 sekunder"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_transition_title" msgid="3235158556228218846">"Bildspelsövergång"</string>
-    <string name="pref_gallery_slideshow_transition_summary" msgid="2390320265891546846">"Välj vilken effekt som ska användas i växlingen mellan bilder"</string>
-    <string name="pref_gallery_slideshow_transition_dialogtitle" msgid="5483406447721500371">"Bildspelsövergång"</string>
-  <string-array name="pref_gallery_slideshow_transition_choices">
-    <item msgid="2825716730899894863">"Tonas fram och bort"</item>
-    <item msgid="403116336404005687">"Skjuts åt vänster eller höger"</item>
-    <item msgid="4901733079450971731">"Skjuts upp och ned"</item>
-    <item msgid="9006732482485375438">"Slumpmässigt urval"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_repeat_title" msgid="6512135022461429738">"Upprepa bildspel"</string>
-    <string name="pref_gallery_slideshow_repeat_summary" msgid="8289230397431855268">"Visa bildspel mer än en gång"</string>
-    <string name="pref_gallery_slideshow_shuffle_title" msgid="3677508579783015598">"Blanda bilder"</string>
-    <string name="pref_gallery_slideshow_shuffle_summary" msgid="8566948749149325715">"Visa bilder i slumpmässig ordning"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Spara plats"</string>
     <string name="pref_camera_recordlocation_entry_off" msgid="8888142742988946038">"Av"</string>
     <string name="pref_camera_recordlocation_entry_on" msgid="7954533529969575594">"På"</string>
@@ -154,10 +93,6 @@
     <string name="pref_camera_whitebalance_entry_daylight" msgid="2534757270149561027">"Dagsljus"</string>
     <string name="pref_camera_whitebalance_entry_fluorescent" msgid="2435332872847454032">"Fluorescerande"</string>
     <string name="pref_camera_whitebalance_entry_cloudy" msgid="3531996716997959326">"Molnigt"</string>
-    <string name="pref_camera_whitebalance_entry_twilight" msgid="2257942426397244556">"Skymning"</string>
-    <string name="pref_camera_whitebalance_entry_shade" msgid="4685730287406277702">"Skugga"</string>
-    <string name="pref_camera_whitebalance_entry_warm_fluorescent" msgid="2827098617308870248">"Varmt fluorescerande"</string>
-    <string name="pref_camera_whitebalance_entry_halogen" msgid="5473868018455084929">"Halogen"</string>
     <string name="pref_camera_coloreffect_dialogtitle" msgid="7691751972871809763">"Färgeffekt"</string>
     <string name="pref_camera_coloreffect_title" msgid="4152827686267109207">"Färgeffekt"</string>
     <string name="pref_camera_coloreffect_entry_none" msgid="4759462740660236565">"Inga"</string>
@@ -188,10 +123,6 @@
     <string name="pref_camera_scenemode_entry_sunset" msgid="181661154611507212">"Solnedgång"</string>
     <string name="pref_camera_scenemode_entry_steadyphoto" msgid="2147958278893914895">"Stadigt foto"</string>
     <string name="pref_camera_scenemode_entry_fireworks" msgid="3530608172188797432">"Fyrverkerier"</string>
-    <string name="camerasettings" msgid="2433519618178453928">"Inställningar"</string>
-    <string name="image_gallery_NoImageView_text" msgid="409595259802877447">"Inga medieobjekt hittades."</string>
-    <string name="pref_gallery_confirm_delete_title" msgid="642429032687845907">"Bekräfta borttagningar"</string>
-    <string name="pref_gallery_confirm_delete_summary" msgid="5253456492765525245">"Visa bekräftelse innan bild eller video tas bort"</string>
     <string name="no_location_image" msgid="6929172123058811834">"Bilden innehöll ingen platsinformation."</string>
     <string name="details_panel_title" msgid="4753347516759338122">"Information"</string>
     <string name="details_file_size" msgid="2468878774843246797">"Filstorlek:"</string>
@@ -215,30 +146,9 @@
     <string name="details_kbps" msgid="1515369011744784592">"<xliff:g id="SPEED">%1$d</xliff:g> kbit/s"</string>
     <string name="details_mbps" msgid="3291428849607323284">"<xliff:g id="SPEED">%1$g</xliff:g> Mbit/s"</string>
     <string name="details_ok" msgid="6848594369924424312">"OK"</string>
-    <string name="context_menu_header" msgid="1185348426222302182">"Bildalternativ"</string>
-    <string name="video_context_menu_header" msgid="7318971116949475029">"Videoalternativ"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Peka på ett ansikte när du vill börja."</string>
-    <string name="photos_gallery_title" msgid="6914406246471015448">"Galleri"</string>
-    <string name="pick_photos_gallery_title" msgid="12912682424915943">"Välj bild"</string>
-    <string name="videos_gallery_title" msgid="6150354029982749479">"Galleri"</string>
-    <string name="pick_videos_gallery_title" msgid="326727095201227333">"Välj video"</string>
     <string name="sendImage" msgid="7279510542799399570">"Dela bild via"</string>
     <string name="setImage" msgid="7246975856983303047">"Använd bild som"</string>
     <string name="sendVideo" msgid="3598567735831863073">"Dela video via"</string>
-    <string name="send_media_files" msgid="8201083279723850611">"Dela mediefiler via"</string>
-    <string name="movieviewlabel" msgid="7363495772706775465">"Filmer"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Läser in video…"</string>
     <string name="spaceIsLow_content" msgid="2848517537672543641">"Ditt SD-kort börjar bli fullt. Ändra inställningen för kvalitet eller ta bort objekt från Galleri."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Fortsätt spela videon"</string>
-    <string name="resume_playing_message" msgid="7293000708492271389">"Vill du fortsätta spela upp från <xliff:g id="DURATION">%s</xliff:g>?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Fortsätt spela upp"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Börja om"</string>
-    <string name="gadget_title" msgid="259405922673466798">"Bildram"</string>
-    <string name="file_info_title" msgid="1628963357466012538">"Filinformation:"</string>
-    <string name="video_exceed_mms_limit" msgid="3835075281230780010">"Videon som du spelade in är för stor för att skickas via MMS. Försök spela in ett kortare klipp."</string>
-    <string name="multiselect_share" msgid="5261644537749253581">"Dela"</string>
-    <string name="multiselect_delete" msgid="9113461994546744603">"Ta bort"</string>
-    <string name="multiselect_cancel" msgid="5969428692864002165">"Avbryt"</string>
-    <string name="delete_images_message" msgid="4504926868037899430">"Tar bort bilder, vänta..."</string>
     <string name="video_reach_size_limit" msgid="6179877322015552390">"Storleksgränsen nådd."</string>
 </resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index fa0bd40..c4d95ec 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -17,42 +17,24 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="camera_error_title" msgid="1202232535191653443">"Kamera Hatası"</string>
     <string name="cannot_connect_camera" msgid="8029009101380114174">"Kamera bağlantısı yapılamıyor."</string>
-    <string name="all_images" msgid="1195501551939178807">"Tüm resimler"</string>
-    <string name="all_videos" msgid="3380966619230896013">"Tüm videolar"</string>
     <string name="camera_label" msgid="6346560772074764302">"Kamera"</string>
     <string name="video_camera_label" msgid="2899292505526427293">"Video Kamera"</string>
-    <string name="gallery_picker_label" msgid="3080425245006492787">"Galeri"</string>
-    <string name="gallery_label" msgid="7119609703856708011">"Galeri"</string>
     <string name="gallery_camera_bucket_name" msgid="2924618424339240831">"Kamera resimleri"</string>
     <string name="gallery_camera_videos_bucket_name" msgid="3369151581398551623">"Kamera videoları"</string>
-    <string name="gallery_camera_media_bucket_name" msgid="5560926838411387511">"Kamera ortamı"</string>
-    <string name="crop_label" msgid="521114301871349328">"Resmi kırp"</string>
     <string name="view_label" msgid="4450531507947335704">"Resmi görüntüle"</string>
-    <string name="preferences_label" msgid="5955678162525051163">"Kamera ayarları"</string>
     <string name="wait" msgid="8600187532323801552">"Lütfen bekleyin..."</string>
     <string name="no_storage" msgid="820691042667338625">"Kamerayı kullanmadan önce lütfen bir SD kart takın."</string>
     <string name="not_enough_space" msgid="6655334407957844653">"SD kartınız dolu."</string>
     <string name="preparing_sd" msgid="2914969119574812666">"SD kart hazırlanıyor..."</string>
-    <string name="wallpaper" msgid="9222901738515471972">"Duvar kağıdı ayarlanıyor, lütfen bekleyin..."</string>
-    <string name="savingImage" msgid="3051745378545909260">"Resim kaydediliyor..."</string>
-    <string name="runningFaceDetection" msgid="2293932204708167704">"Lütfen bekleyin..."</string>
     <string name="settings" msgid="1534847740615665736">"Ayarlar"</string>
-    <string name="view" msgid="6277795271119411881">"Görüntüle"</string>
     <string name="details" msgid="8415120088556445230">"Ayrıntılar"</string>
     <string name="show_on_map" msgid="441725587731006228">"Google Haritalar\'da göster"</string>
     <string name="rotate" msgid="460017689320955494">"Döndür"</string>
     <string name="rotate_left" msgid="5888273317282539839">"Sola döndür"</string>
     <string name="rotate_right" msgid="6776325835923384839">"Sağa döndür"</string>
-    <string name="slide_show" msgid="1965192737233824143">"Slayt gösterisi"</string>
-    <string name="multiselect" msgid="4761682939945434146">"Çoklu seçim"</string>
-    <string name="capture_picture" msgid="4114265595549284643">"Fotoğraf çek"</string>
-    <string name="capture_video" msgid="4047046282358697155">"Video çek"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"Kaydet"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"Sil"</string>
     <string name="confirm_delete_title" msgid="263478358046514887">"Sil"</string>
     <string name="confirm_delete_message" msgid="4161389939579284604">"Resim silinecek."</string>
     <string name="confirm_delete_video_message" msgid="5796154324948010221">"Video silinecek."</string>
-    <string name="confirm_delete_multiple_message" msgid="5962369828035778779">"Bu medya dosyaları silinecek."</string>
     <string name="review_toss" msgid="7255331999518617841">"SİL"</string>
     <string name="review_share" msgid="7294755861072174509">"PAYLAŞ"</string>
     <string name="review_set" msgid="8304758352155378636">"ŞU ŞEKİLDE AYARLA:"</string>
@@ -64,54 +46,11 @@
     <string name="camera_toss" msgid="3781186798552460833">"Sil"</string>
     <string name="camera_share" msgid="8207701858325694182">"Paylaş"</string>
     <string name="camera_set" msgid="3422192914806971182">"Şu şekilde ayarla:"</string>
-    <string name="camera_play" msgid="8248000517869959980">"Yürüt"</string>
-    <string name="camera_attach" msgid="4048659554893435232">"Ekle"</string>
-    <string name="camera_cancel" msgid="8203341746672085747">"İptal"</string>
     <string name="camera_crop" msgid="5584000454518174632">"Kırp"</string>
     <string name="no_way_to_share_image" msgid="5011985309980187927">"Resmi paylaşmak için kullanılacak uygulama yok."</string>
     <string name="no_way_to_share_video" msgid="3684571102267072206">"Videoyu paylaşmak için kullanılacak uygulama yok."</string>
-    <string name="no_way_to_share" msgid="863323712875014752">"Medya dosyalarını paylaşmak için kullanılacak uygulama yok."</string>
     <string name="video_play" msgid="5287787282508002895">"Yürüt"</string>
     <string name="camera_gallery_photos_text" msgid="6558048736561932758">"Galeri"</string>
-    <string name="camera_pick_wallpaper" msgid="7026385960511811641">"Resimler"</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"Duvar Kağıdı"</string>
-    <string name="pref_gallery_category" msgid="5826488887237959433">"Genel ayarlar"</string>
-    <string name="pref_slideshow_category" msgid="9097962086335681667">"Slayt gösterisi ayarları"</string>
-    <string name="pref_gallery_size_title" msgid="1363406603879434418">"Görüntü boyutu"</string>
-    <string name="pref_gallery_size_summary" msgid="8179967445295243638">"Resimlerin ve videoların görüntülenme boyutunu seçin"</string>
-    <string name="pref_gallery_size_dialogtitle" msgid="757380558320647503">"Resim boyutu"</string>
-  <string-array name="pref_gallery_size_choices">
-    <item msgid="7157691836846678936">"Büyük"</item>
-    <item msgid="1033164600689216410">"Küçük"</item>
-  </string-array>
-    <string name="pref_gallery_sort_title" msgid="7447949250045443386">"Sıralama düzeni"</string>
-    <string name="pref_gallery_sort_summary" msgid="6644398051645595214">"Resimlerin ve videoların sıralama düzenini seçin"</string>
-    <string name="pref_gallery_sort_dialogtitle" msgid="5787417105532562739">"Resim sıralama"</string>
-  <string-array name="pref_gallery_sort_choices">
-    <item msgid="5546009539334018063">"Önce en yenisi"</item>
-    <item msgid="7931283047572866748">"En yenisi en sonra"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_interval_title" msgid="6534904787962619832">"Slayt gösterisi aralığı"</string>
-    <string name="pref_gallery_slideshow_interval_summary" msgid="329876327077905033">"Her slaytın slayt gösterisinde ne kadar süreyle görüntüleneceğini seçin"</string>
-    <string name="pref_gallery_slideshow_interval_dialogtitle" msgid="6775543119826248900">"Slayt gösterisi aralığı"</string>
-  <string-array name="pref_gallery_slideshow_interval_choices">
-    <item msgid="3089037742117543119">"2 saniye"</item>
-    <item msgid="738579316565625730">"3 saniye"</item>
-    <item msgid="5670078787463530498">"4 saniye"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_transition_title" msgid="3235158556228218846">"Slayt gösterisi geçişi"</string>
-    <string name="pref_gallery_slideshow_transition_summary" msgid="2390320265891546846">"Bir slayttan diğerine geçerken kullanılan efekti seçin"</string>
-    <string name="pref_gallery_slideshow_transition_dialogtitle" msgid="5483406447721500371">"Slayt gösterisi geçişi"</string>
-  <string-array name="pref_gallery_slideshow_transition_choices">
-    <item msgid="2825716730899894863">"Rengi açma ve karartma"</item>
-    <item msgid="403116336404005687">"Sağa - sola kaydır"</item>
-    <item msgid="4901733079450971731">"Sonraki - önceki slayta geç"</item>
-    <item msgid="9006732482485375438">"Rasgele seçim"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_repeat_title" msgid="6512135022461429738">"Slayt gösterisini tekrar et"</string>
-    <string name="pref_gallery_slideshow_repeat_summary" msgid="8289230397431855268">"Slayt gösterisini birden fazla kez yürüt"</string>
-    <string name="pref_gallery_slideshow_shuffle_title" msgid="3677508579783015598">"Slaytları karıştır"</string>
-    <string name="pref_gallery_slideshow_shuffle_summary" msgid="8566948749149325715">"Resimleri rasgele sırada göster"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"Depo konumu"</string>
     <string name="pref_camera_recordlocation_entry_off" msgid="8888142742988946038">"Kapalı"</string>
     <string name="pref_camera_recordlocation_entry_on" msgid="7954533529969575594">"Açık"</string>
@@ -154,10 +93,6 @@
     <string name="pref_camera_whitebalance_entry_daylight" msgid="2534757270149561027">"Gün Işığı"</string>
     <string name="pref_camera_whitebalance_entry_fluorescent" msgid="2435332872847454032">"Floresan"</string>
     <string name="pref_camera_whitebalance_entry_cloudy" msgid="3531996716997959326">"Bulutlu"</string>
-    <string name="pref_camera_whitebalance_entry_twilight" msgid="2257942426397244556">"Alaca Karanlık"</string>
-    <string name="pref_camera_whitebalance_entry_shade" msgid="4685730287406277702">"Gölge"</string>
-    <string name="pref_camera_whitebalance_entry_warm_fluorescent" msgid="2827098617308870248">"Sıcak Floresan"</string>
-    <string name="pref_camera_whitebalance_entry_halogen" msgid="5473868018455084929">"Halojen"</string>
     <string name="pref_camera_coloreffect_dialogtitle" msgid="7691751972871809763">"Renk efekti"</string>
     <string name="pref_camera_coloreffect_title" msgid="4152827686267109207">"Renk efekti"</string>
     <string name="pref_camera_coloreffect_entry_none" msgid="4759462740660236565">"Yok"</string>
@@ -188,10 +123,6 @@
     <string name="pref_camera_scenemode_entry_sunset" msgid="181661154611507212">"Gün batımı"</string>
     <string name="pref_camera_scenemode_entry_steadyphoto" msgid="2147958278893914895">"Sabit Fotoğraf"</string>
     <string name="pref_camera_scenemode_entry_fireworks" msgid="3530608172188797432">"Havai fişekler"</string>
-    <string name="camerasettings" msgid="2433519618178453928">"Ayarlar"</string>
-    <string name="image_gallery_NoImageView_text" msgid="409595259802877447">"Medya bulunamadı."</string>
-    <string name="pref_gallery_confirm_delete_title" msgid="642429032687845907">"Silme işlemlerini doğrula"</string>
-    <string name="pref_gallery_confirm_delete_summary" msgid="5253456492765525245">"Bir resmi veya videoyu silmeden önce doğrulama göster"</string>
     <string name="no_location_image" msgid="6929172123058811834">"Bu görselde Konum bilgisi bulunmuyor."</string>
     <string name="details_panel_title" msgid="4753347516759338122">"Ayrıntılar"</string>
     <string name="details_file_size" msgid="2468878774843246797">"Dosya boyutu:"</string>
@@ -215,30 +146,9 @@
     <string name="details_kbps" msgid="1515369011744784592">"<xliff:g id="SPEED">%1$d</xliff:g> Kbps"</string>
     <string name="details_mbps" msgid="3291428849607323284">"<xliff:g id="SPEED">%1$g</xliff:g> Mbps"</string>
     <string name="details_ok" msgid="6848594369924424312">"Tamam"</string>
-    <string name="context_menu_header" msgid="1185348426222302182">"Resim seçenekleri"</string>
-    <string name="video_context_menu_header" msgid="7318971116949475029">"Video seçenekleri"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"Başlamak için bir yüze hafifçe dokunun"</string>
-    <string name="photos_gallery_title" msgid="6914406246471015448">"Galeri"</string>
-    <string name="pick_photos_gallery_title" msgid="12912682424915943">"Resmi seç"</string>
-    <string name="videos_gallery_title" msgid="6150354029982749479">"Galeri"</string>
-    <string name="pick_videos_gallery_title" msgid="326727095201227333">"Video seç"</string>
     <string name="sendImage" msgid="7279510542799399570">"Resmi şunun aracılığıyla paylaş:"</string>
     <string name="setImage" msgid="7246975856983303047">"Resmi şu şekilde ayarla:"</string>
     <string name="sendVideo" msgid="3598567735831863073">"Videoyu şunun aracılığıyla paylaş:"</string>
-    <string name="send_media_files" msgid="8201083279723850611">"Medya dosyalarını paylaşın"</string>
-    <string name="movieviewlabel" msgid="7363495772706775465">"Filmler"</string>
-    <string name="loading_video" msgid="4013492720121891585">"Video yükleniyor..."</string>
     <string name="spaceIsLow_content" msgid="2848517537672543641">"SD kartınızda boş alan azalıyor. Kalite ayarlarını değiştirin veya Galeri\'den öğe silin."</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"Videoyu sürdür"</string>
-    <string name="resume_playing_message" msgid="7293000708492271389">"Yürütme şu noktadan devam ettirilsin mi?: <xliff:g id="DURATION">%s</xliff:g>"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"Yürütmeyi sürdür"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"Başlat"</string>
-    <string name="gadget_title" msgid="259405922673466798">"Resim çerçevesi"</string>
-    <string name="file_info_title" msgid="1628963357466012538">"Dosya bilgileri:"</string>
-    <string name="video_exceed_mms_limit" msgid="3835075281230780010">"Kaydettiğiniz video MMS ile gönderilemeyecek kadar büyük. Daha kısa bir klip kaydetmeyi deneyin."</string>
-    <string name="multiselect_share" msgid="5261644537749253581">"Paylaş"</string>
-    <string name="multiselect_delete" msgid="9113461994546744603">"Sil"</string>
-    <string name="multiselect_cancel" msgid="5969428692864002165">"İptal"</string>
-    <string name="delete_images_message" msgid="4504926868037899430">"Görseller siliniyor, lütfen bekleyin..."</string>
     <string name="video_reach_size_limit" msgid="6179877322015552390">"Boyut sınırına ulaşıldı."</string>
 </resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index e125405..37113da 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -17,42 +17,24 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="camera_error_title" msgid="1202232535191653443">"相机故障"</string>
     <string name="cannot_connect_camera" msgid="8029009101380114174">"无法连接到相机。"</string>
-    <string name="all_images" msgid="1195501551939178807">"所有图片"</string>
-    <string name="all_videos" msgid="3380966619230896013">"所有视频"</string>
     <string name="camera_label" msgid="6346560772074764302">"相机"</string>
     <string name="video_camera_label" msgid="2899292505526427293">"摄像机"</string>
-    <string name="gallery_picker_label" msgid="3080425245006492787">"图库"</string>
-    <string name="gallery_label" msgid="7119609703856708011">"图库"</string>
     <string name="gallery_camera_bucket_name" msgid="2924618424339240831">"用相机拍摄的照片"</string>
     <string name="gallery_camera_videos_bucket_name" msgid="3369151581398551623">"用相机拍摄的视频"</string>
-    <string name="gallery_camera_media_bucket_name" msgid="5560926838411387511">"相机媒体"</string>
-    <string name="crop_label" msgid="521114301871349328">"修剪图片"</string>
     <string name="view_label" msgid="4450531507947335704">"查看图片"</string>
-    <string name="preferences_label" msgid="5955678162525051163">"相机设置"</string>
     <string name="wait" msgid="8600187532323801552">"请稍候..."</string>
     <string name="no_storage" msgid="820691042667338625">"使用相机前请先插入 SD 卡。"</string>
     <string name="not_enough_space" msgid="6655334407957844653">"SD 卡已满。"</string>
     <string name="preparing_sd" msgid="2914969119574812666">"正在准备 SD 卡..."</string>
-    <string name="wallpaper" msgid="9222901738515471972">"正在设置壁纸,请稍候..."</string>
-    <string name="savingImage" msgid="3051745378545909260">"正在保存图片..."</string>
-    <string name="runningFaceDetection" msgid="2293932204708167704">"请稍候..."</string>
     <string name="settings" msgid="1534847740615665736">"设置"</string>
-    <string name="view" msgid="6277795271119411881">"查看"</string>
     <string name="details" msgid="8415120088556445230">"详细信息"</string>
     <string name="show_on_map" msgid="441725587731006228">"显示在地图上"</string>
     <string name="rotate" msgid="460017689320955494">"旋转"</string>
     <string name="rotate_left" msgid="5888273317282539839">"向左旋转"</string>
     <string name="rotate_right" msgid="6776325835923384839">"向右旋转"</string>
-    <string name="slide_show" msgid="1965192737233824143">"播放幻灯片"</string>
-    <string name="multiselect" msgid="4761682939945434146">"多选"</string>
-    <string name="capture_picture" msgid="4114265595549284643">"拍摄照片"</string>
-    <string name="capture_video" msgid="4047046282358697155">"拍摄视频"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"保存"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"舍弃"</string>
     <string name="confirm_delete_title" msgid="263478358046514887">"删除"</string>
     <string name="confirm_delete_message" msgid="4161389939579284604">"将会删除此图片。"</string>
     <string name="confirm_delete_video_message" msgid="5796154324948010221">"将会删除视频。"</string>
-    <string name="confirm_delete_multiple_message" msgid="5962369828035778779">"此时将删除这些媒体文件。"</string>
     <string name="review_toss" msgid="7255331999518617841">"删除"</string>
     <string name="review_share" msgid="7294755861072174509">"分享"</string>
     <string name="review_set" msgid="8304758352155378636">"设置为"</string>
@@ -64,54 +46,11 @@
     <string name="camera_toss" msgid="3781186798552460833">"删除"</string>
     <string name="camera_share" msgid="8207701858325694182">"分享"</string>
     <string name="camera_set" msgid="3422192914806971182">"设置为"</string>
-    <string name="camera_play" msgid="8248000517869959980">"播放"</string>
-    <string name="camera_attach" msgid="4048659554893435232">"附加"</string>
-    <string name="camera_cancel" msgid="8203341746672085747">"取消"</string>
     <string name="camera_crop" msgid="5584000454518174632">"修剪"</string>
     <string name="no_way_to_share_image" msgid="5011985309980187927">"没有可用于分享照片的应用程序。"</string>
     <string name="no_way_to_share_video" msgid="3684571102267072206">"没有可用于分享视频的应用程序。"</string>
-    <string name="no_way_to_share" msgid="863323712875014752">"没有可用于分享媒体文件的应用程序。"</string>
     <string name="video_play" msgid="5287787282508002895">"播放"</string>
     <string name="camera_gallery_photos_text" msgid="6558048736561932758">"图库"</string>
-    <string name="camera_pick_wallpaper" msgid="7026385960511811641">"图片"</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"壁纸"</string>
-    <string name="pref_gallery_category" msgid="5826488887237959433">"常规设置"</string>
-    <string name="pref_slideshow_category" msgid="9097962086335681667">"幻灯片设置"</string>
-    <string name="pref_gallery_size_title" msgid="1363406603879434418">"显示大小"</string>
-    <string name="pref_gallery_size_summary" msgid="8179967445295243638">"选择图片和视频的显示大小"</string>
-    <string name="pref_gallery_size_dialogtitle" msgid="757380558320647503">"图片大小"</string>
-  <string-array name="pref_gallery_size_choices">
-    <item msgid="7157691836846678936">"大"</item>
-    <item msgid="1033164600689216410">"小"</item>
-  </string-array>
-    <string name="pref_gallery_sort_title" msgid="7447949250045443386">"排列顺序"</string>
-    <string name="pref_gallery_sort_summary" msgid="6644398051645595214">"选择图片和视频的排列顺序"</string>
-    <string name="pref_gallery_sort_dialogtitle" msgid="5787417105532562739">"图片排序"</string>
-  <string-array name="pref_gallery_sort_choices">
-    <item msgid="5546009539334018063">"最新的图片在最前面"</item>
-    <item msgid="7931283047572866748">"最新的图片在最后面"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_interval_title" msgid="6534904787962619832">"幻灯片播放间隔"</string>
-    <string name="pref_gallery_slideshow_interval_summary" msgid="329876327077905033">"选择每张幻灯片在播放过程中呈现的时间"</string>
-    <string name="pref_gallery_slideshow_interval_dialogtitle" msgid="6775543119826248900">"幻灯片播放间隔"</string>
-  <string-array name="pref_gallery_slideshow_interval_choices">
-    <item msgid="3089037742117543119">"2 秒"</item>
-    <item msgid="738579316565625730">"3 秒"</item>
-    <item msgid="5670078787463530498">"4 秒"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_transition_title" msgid="3235158556228218846">"幻灯片切换"</string>
-    <string name="pref_gallery_slideshow_transition_summary" msgid="2390320265891546846">"选择幻灯片切换时应用的效果"</string>
-    <string name="pref_gallery_slideshow_transition_dialogtitle" msgid="5483406447721500371">"幻灯片切换"</string>
-  <string-array name="pref_gallery_slideshow_transition_choices">
-    <item msgid="2825716730899894863">"淡入淡出"</item>
-    <item msgid="403116336404005687">"自左至右滑动"</item>
-    <item msgid="4901733079450971731">"自上至下滑动"</item>
-    <item msgid="9006732482485375438">"随机选择"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_repeat_title" msgid="6512135022461429738">"重复播放幻灯片"</string>
-    <string name="pref_gallery_slideshow_repeat_summary" msgid="8289230397431855268">"循环播放幻灯片"</string>
-    <string name="pref_gallery_slideshow_shuffle_title" msgid="3677508579783015598">"随机播放幻灯片"</string>
-    <string name="pref_gallery_slideshow_shuffle_summary" msgid="8566948749149325715">"以随机顺序显示图片"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"存储位置"</string>
     <string name="pref_camera_recordlocation_entry_off" msgid="8888142742988946038">"关"</string>
     <string name="pref_camera_recordlocation_entry_on" msgid="7954533529969575594">"开"</string>
@@ -154,10 +93,6 @@
     <string name="pref_camera_whitebalance_entry_daylight" msgid="2534757270149561027">"日光"</string>
     <string name="pref_camera_whitebalance_entry_fluorescent" msgid="2435332872847454032">"荧光"</string>
     <string name="pref_camera_whitebalance_entry_cloudy" msgid="3531996716997959326">"阴天"</string>
-    <string name="pref_camera_whitebalance_entry_twilight" msgid="2257942426397244556">"微光"</string>
-    <string name="pref_camera_whitebalance_entry_shade" msgid="4685730287406277702">"阴影"</string>
-    <string name="pref_camera_whitebalance_entry_warm_fluorescent" msgid="2827098617308870248">"暖荧光"</string>
-    <string name="pref_camera_whitebalance_entry_halogen" msgid="5473868018455084929">"钨丝灯"</string>
     <string name="pref_camera_coloreffect_dialogtitle" msgid="7691751972871809763">"色彩效果"</string>
     <string name="pref_camera_coloreffect_title" msgid="4152827686267109207">"色彩效果"</string>
     <string name="pref_camera_coloreffect_entry_none" msgid="4759462740660236565">"无"</string>
@@ -188,10 +123,6 @@
     <string name="pref_camera_scenemode_entry_sunset" msgid="181661154611507212">"日落"</string>
     <string name="pref_camera_scenemode_entry_steadyphoto" msgid="2147958278893914895">"防抖"</string>
     <string name="pref_camera_scenemode_entry_fireworks" msgid="3530608172188797432">"烟火"</string>
-    <string name="camerasettings" msgid="2433519618178453928">"设置"</string>
-    <string name="image_gallery_NoImageView_text" msgid="409595259802877447">"找不到媒体。"</string>
-    <string name="pref_gallery_confirm_delete_title" msgid="642429032687845907">"确认删除"</string>
-    <string name="pref_gallery_confirm_delete_summary" msgid="5253456492765525245">"在删除图片或视频前显示确认消息"</string>
     <string name="no_location_image" msgid="6929172123058811834">"此图片中没有地点信息。"</string>
     <string name="details_panel_title" msgid="4753347516759338122">"详细信息"</string>
     <string name="details_file_size" msgid="2468878774843246797">"文件大小:"</string>
@@ -215,30 +146,9 @@
     <string name="details_kbps" msgid="1515369011744784592">"<xliff:g id="SPEED">%1$d</xliff:g> Kbps"</string>
     <string name="details_mbps" msgid="3291428849607323284">"<xliff:g id="SPEED">%1$g</xliff:g> Mbps"</string>
     <string name="details_ok" msgid="6848594369924424312">"确定"</string>
-    <string name="context_menu_header" msgid="1185348426222302182">"图片选项"</string>
-    <string name="video_context_menu_header" msgid="7318971116949475029">"视频选项"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"点按一张脸开始裁剪。"</string>
-    <string name="photos_gallery_title" msgid="6914406246471015448">"图库"</string>
-    <string name="pick_photos_gallery_title" msgid="12912682424915943">"选择图片"</string>
-    <string name="videos_gallery_title" msgid="6150354029982749479">"图库"</string>
-    <string name="pick_videos_gallery_title" msgid="326727095201227333">"选择视频"</string>
     <string name="sendImage" msgid="7279510542799399570">"图片分享方式"</string>
     <string name="setImage" msgid="7246975856983303047">"将图片设置为"</string>
     <string name="sendVideo" msgid="3598567735831863073">"分享视频的方式"</string>
-    <string name="send_media_files" msgid="8201083279723850611">"媒体文件分享方式:"</string>
-    <string name="movieviewlabel" msgid="7363495772706775465">"电影"</string>
-    <string name="loading_video" msgid="4013492720121891585">"正在载入视频..."</string>
     <string name="spaceIsLow_content" msgid="2848517537672543641">"SD 卡空间不足。请更改画质设置或从图库中删除部分项。"</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"重新播放视频"</string>
-    <string name="resume_playing_message" msgid="7293000708492271389">"从 <xliff:g id="DURATION">%s</xliff:g> 开始继续播放吗?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"重新播放"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"重新开始"</string>
-    <string name="gadget_title" msgid="259405922673466798">"相框"</string>
-    <string name="file_info_title" msgid="1628963357466012538">"文件信息:"</string>
-    <string name="video_exceed_mms_limit" msgid="3835075281230780010">"您录制的视频太大,无法用彩信发送。请尝试录制短一点的剪辑。"</string>
-    <string name="multiselect_share" msgid="5261644537749253581">"分享"</string>
-    <string name="multiselect_delete" msgid="9113461994546744603">"删除"</string>
-    <string name="multiselect_cancel" msgid="5969428692864002165">"取消"</string>
-    <string name="delete_images_message" msgid="4504926868037899430">"正在删除图片,请稍候..."</string>
     <string name="video_reach_size_limit" msgid="6179877322015552390">"已达到大小上限。"</string>
 </resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 9d6b7dd..e15f422 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -17,42 +17,24 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="camera_error_title" msgid="1202232535191653443">"相機發生錯誤"</string>
     <string name="cannot_connect_camera" msgid="8029009101380114174">"無法連線至相機。"</string>
-    <string name="all_images" msgid="1195501551939178807">"所有相片"</string>
-    <string name="all_videos" msgid="3380966619230896013">"所有影片"</string>
     <string name="camera_label" msgid="6346560772074764302">"相機"</string>
     <string name="video_camera_label" msgid="2899292505526427293">"攝錄影機"</string>
-    <string name="gallery_picker_label" msgid="3080425245006492787">"圖庫"</string>
-    <string name="gallery_label" msgid="7119609703856708011">"圖片庫"</string>
     <string name="gallery_camera_bucket_name" msgid="2924618424339240831">"相機圖片"</string>
     <string name="gallery_camera_videos_bucket_name" msgid="3369151581398551623">"相機影片"</string>
-    <string name="gallery_camera_media_bucket_name" msgid="5560926838411387511">"相機媒體"</string>
-    <string name="crop_label" msgid="521114301871349328">"裁剪相片"</string>
     <string name="view_label" msgid="4450531507947335704">"檢視相片"</string>
-    <string name="preferences_label" msgid="5955678162525051163">"相機設定"</string>
     <string name="wait" msgid="8600187532323801552">"請稍候…"</string>
     <string name="no_storage" msgid="820691042667338625">"使用相機前請先插入 SD 卡。"</string>
     <string name="not_enough_space" msgid="6655334407957844653">"SD 卡已滿。"</string>
     <string name="preparing_sd" msgid="2914969119574812666">"正在準備 SD 卡..."</string>
-    <string name="wallpaper" msgid="9222901738515471972">"設定桌布中,請稍候…"</string>
-    <string name="savingImage" msgid="3051745378545909260">"儲存相片中…"</string>
-    <string name="runningFaceDetection" msgid="2293932204708167704">"請稍候…"</string>
     <string name="settings" msgid="1534847740615665736">"設定"</string>
-    <string name="view" msgid="6277795271119411881">"檢視"</string>
     <string name="details" msgid="8415120088556445230">"詳細資料"</string>
     <string name="show_on_map" msgid="441725587731006228">"顯示在地圖上"</string>
     <string name="rotate" msgid="460017689320955494">"旋轉"</string>
     <string name="rotate_left" msgid="5888273317282539839">"向左旋轉"</string>
     <string name="rotate_right" msgid="6776325835923384839">"向右旋轉"</string>
-    <string name="slide_show" msgid="1965192737233824143">"投影片"</string>
-    <string name="multiselect" msgid="4761682939945434146">"複選"</string>
-    <string name="capture_picture" msgid="4114265595549284643">"拍攝照片"</string>
-    <string name="capture_video" msgid="4047046282358697155">"拍攝影片"</string>
-    <string name="crop_save_text" msgid="8140440041190264400">"儲存"</string>
-    <string name="crop_discard_text" msgid="5303657888280340603">"放棄"</string>
     <string name="confirm_delete_title" msgid="263478358046514887">"刪除"</string>
     <string name="confirm_delete_message" msgid="4161389939579284604">"刪除相片?"</string>
     <string name="confirm_delete_video_message" msgid="5796154324948010221">"刪除這部影片?"</string>
-    <string name="confirm_delete_multiple_message" msgid="5962369828035778779">"系統將刪除這些媒體檔案。"</string>
     <string name="review_toss" msgid="7255331999518617841">"刪除"</string>
     <string name="review_share" msgid="7294755861072174509">"分享"</string>
     <string name="review_set" msgid="8304758352155378636">"設為"</string>
@@ -64,54 +46,11 @@
     <string name="camera_toss" msgid="3781186798552460833">"刪除"</string>
     <string name="camera_share" msgid="8207701858325694182">"分享"</string>
     <string name="camera_set" msgid="3422192914806971182">"設為"</string>
-    <string name="camera_play" msgid="8248000517869959980">"播放"</string>
-    <string name="camera_attach" msgid="4048659554893435232">"附加"</string>
-    <string name="camera_cancel" msgid="8203341746672085747">"取消"</string>
     <string name="camera_crop" msgid="5584000454518174632">"裁剪"</string>
     <string name="no_way_to_share_image" msgid="5011985309980187927">"找不到可用於分享相片的應用程式。"</string>
     <string name="no_way_to_share_video" msgid="3684571102267072206">"找不到可用於分享影片的應用程式。"</string>
-    <string name="no_way_to_share" msgid="863323712875014752">"找不到可用於分享媒體檔案的應用程式。"</string>
     <string name="video_play" msgid="5287787282508002895">"播放"</string>
     <string name="camera_gallery_photos_text" msgid="6558048736561932758">"圖庫"</string>
-    <string name="camera_pick_wallpaper" msgid="7026385960511811641">"圖片"</string>
-    <string name="camera_setas_wallpaper" msgid="797463183863414289">"桌布"</string>
-    <string name="pref_gallery_category" msgid="5826488887237959433">"一般設定"</string>
-    <string name="pref_slideshow_category" msgid="9097962086335681667">"投影片設定"</string>
-    <string name="pref_gallery_size_title" msgid="1363406603879434418">"顯示大小"</string>
-    <string name="pref_gallery_size_summary" msgid="8179967445295243638">"選取相片和影片的顯示大小"</string>
-    <string name="pref_gallery_size_dialogtitle" msgid="757380558320647503">"相片大小"</string>
-  <string-array name="pref_gallery_size_choices">
-    <item msgid="7157691836846678936">"大"</item>
-    <item msgid="1033164600689216410">"小"</item>
-  </string-array>
-    <string name="pref_gallery_sort_title" msgid="7447949250045443386">"排序順序"</string>
-    <string name="pref_gallery_sort_summary" msgid="6644398051645595214">"選取相片和影片的排序順序"</string>
-    <string name="pref_gallery_sort_dialogtitle" msgid="5787417105532562739">"圖片排序"</string>
-  <string-array name="pref_gallery_sort_choices">
-    <item msgid="5546009539334018063">"最新的在前"</item>
-    <item msgid="7931283047572866748">"最新的在後"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_interval_title" msgid="6534904787962619832">"投影片顯示間隔"</string>
-    <string name="pref_gallery_slideshow_interval_summary" msgid="329876327077905033">"選取每張投影片顯示時間"</string>
-    <string name="pref_gallery_slideshow_interval_dialogtitle" msgid="6775543119826248900">"投影片顯示間隔"</string>
-  <string-array name="pref_gallery_slideshow_interval_choices">
-    <item msgid="3089037742117543119">"2 秒"</item>
-    <item msgid="738579316565625730">"3 秒"</item>
-    <item msgid="5670078787463530498">"4 秒"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_transition_title" msgid="3235158556228218846">"投影片轉場特效"</string>
-    <string name="pref_gallery_slideshow_transition_summary" msgid="2390320265891546846">"選取更換相片時的轉場特效"</string>
-    <string name="pref_gallery_slideshow_transition_dialogtitle" msgid="5483406447721500371">"投影片轉場特效"</string>
-  <string-array name="pref_gallery_slideshow_transition_choices">
-    <item msgid="2825716730899894863">"淡入淡出"</item>
-    <item msgid="403116336404005687">"左右滑動"</item>
-    <item msgid="4901733079450971731">"上下滑動"</item>
-    <item msgid="9006732482485375438">"隨機選取"</item>
-  </string-array>
-    <string name="pref_gallery_slideshow_repeat_title" msgid="6512135022461429738">"重複播放投影片"</string>
-    <string name="pref_gallery_slideshow_repeat_summary" msgid="8289230397431855268">"旋環播放投影片"</string>
-    <string name="pref_gallery_slideshow_shuffle_title" msgid="3677508579783015598">"隨機播放投影片"</string>
-    <string name="pref_gallery_slideshow_shuffle_summary" msgid="8566948749149325715">"隨機顯示相片"</string>
     <string name="pref_camera_recordlocation_title" msgid="371208839215448917">"儲存位置"</string>
     <string name="pref_camera_recordlocation_entry_off" msgid="8888142742988946038">"關閉"</string>
     <string name="pref_camera_recordlocation_entry_on" msgid="7954533529969575594">"開啟"</string>
@@ -154,10 +93,6 @@
     <string name="pref_camera_whitebalance_entry_daylight" msgid="2534757270149561027">"日光"</string>
     <string name="pref_camera_whitebalance_entry_fluorescent" msgid="2435332872847454032">"螢光燈"</string>
     <string name="pref_camera_whitebalance_entry_cloudy" msgid="3531996716997959326">"陰天"</string>
-    <string name="pref_camera_whitebalance_entry_twilight" msgid="2257942426397244556">"微光"</string>
-    <string name="pref_camera_whitebalance_entry_shade" msgid="4685730287406277702">"陰影"</string>
-    <string name="pref_camera_whitebalance_entry_warm_fluorescent" msgid="2827098617308870248">"暖色螢光燈"</string>
-    <string name="pref_camera_whitebalance_entry_halogen" msgid="5473868018455084929">"鹵素燈"</string>
     <string name="pref_camera_coloreffect_dialogtitle" msgid="7691751972871809763">"色彩效果"</string>
     <string name="pref_camera_coloreffect_title" msgid="4152827686267109207">"色彩效果"</string>
     <string name="pref_camera_coloreffect_entry_none" msgid="4759462740660236565">"無"</string>
@@ -188,10 +123,6 @@
     <string name="pref_camera_scenemode_entry_sunset" msgid="181661154611507212">"黃昏"</string>
     <string name="pref_camera_scenemode_entry_steadyphoto" msgid="2147958278893914895">"防手震"</string>
     <string name="pref_camera_scenemode_entry_fireworks" msgid="3530608172188797432">"煙火"</string>
-    <string name="camerasettings" msgid="2433519618178453928">"設定"</string>
-    <string name="image_gallery_NoImageView_text" msgid="409595259802877447">"找不到媒體。"</string>
-    <string name="pref_gallery_confirm_delete_title" msgid="642429032687845907">"刪除確認"</string>
-    <string name="pref_gallery_confirm_delete_summary" msgid="5253456492765525245">"刪除相片或影片前要顯示確認"</string>
     <string name="no_location_image" msgid="6929172123058811834">"此圖片沒有地點資訊。"</string>
     <string name="details_panel_title" msgid="4753347516759338122">"詳細資料"</string>
     <string name="details_file_size" msgid="2468878774843246797">"檔案大小:"</string>
@@ -215,30 +146,9 @@
     <string name="details_kbps" msgid="1515369011744784592">"<xliff:g id="SPEED">%1$d</xliff:g> Kbps"</string>
     <string name="details_mbps" msgid="3291428849607323284">"<xliff:g id="SPEED">%1$g</xliff:g> Mbps"</string>
     <string name="details_ok" msgid="6848594369924424312">"確定"</string>
-    <string name="context_menu_header" msgid="1185348426222302182">"圖片選項"</string>
-    <string name="video_context_menu_header" msgid="7318971116949475029">"影片選項"</string>
-    <string name="multiface_crop_help" msgid="3127018992717032779">"輕觸所需的臉孔開始裁剪。"</string>
-    <string name="photos_gallery_title" msgid="6914406246471015448">"圖庫"</string>
-    <string name="pick_photos_gallery_title" msgid="12912682424915943">"選取相片"</string>
-    <string name="videos_gallery_title" msgid="6150354029982749479">"圖庫"</string>
-    <string name="pick_videos_gallery_title" msgid="326727095201227333">"選取影片"</string>
     <string name="sendImage" msgid="7279510542799399570">"透過…分享圖片"</string>
     <string name="setImage" msgid="7246975856983303047">"設定相片為…"</string>
     <string name="sendVideo" msgid="3598567735831863073">"透過…分享影片"</string>
-    <string name="send_media_files" msgid="8201083279723850611">"媒體檔案分享媒介:"</string>
-    <string name="movieviewlabel" msgid="7363495772706775465">"電影"</string>
-    <string name="loading_video" msgid="4013492720121891585">"正在載入影片…"</string>
     <string name="spaceIsLow_content" msgid="2848517537672543641">"您的 SD 卡空間已快用完。請變更品質設定或刪除圖庫中的項目。"</string>
-    <string name="resume_playing_title" msgid="8996677350649355013">"繼續播放影片"</string>
-    <string name="resume_playing_message" msgid="7293000708492271389">"要從 <xliff:g id="DURATION">%s</xliff:g> 繼續播放嗎?"</string>
-    <string name="resume_playing_resume" msgid="3847915469173852416">"繼續播放"</string>
-    <string name="resume_playing_restart" msgid="5471008499835769292">"重新開始"</string>
-    <string name="gadget_title" msgid="259405922673466798">"相框"</string>
-    <string name="file_info_title" msgid="1628963357466012538">"檔案資訊:"</string>
-    <string name="video_exceed_mms_limit" msgid="3835075281230780010">"您所錄製的影片太大,無法透過 MMS 傳送。請試著錄製較短的影片。"</string>
-    <string name="multiselect_share" msgid="5261644537749253581">"分享"</string>
-    <string name="multiselect_delete" msgid="9113461994546744603">"刪除"</string>
-    <string name="multiselect_cancel" msgid="5969428692864002165">"取消"</string>
-    <string name="delete_images_message" msgid="4504926868037899430">"正在刪除圖片,請稍候..."</string>
     <string name="video_reach_size_limit" msgid="6179877322015552390">"已達大小上限。"</string>
 </resources>
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 53d9edb..89f959f 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -134,9 +134,17 @@
         <item>@string/pref_camera_recordlocation_entry_on</item>
     </array>
 
+    <string-array name="flash_modes" translatable="false">
+        <item>auto</item>
+        <item>on</item>
+        <item>off</item>
+        <item>no_flash</item>
+    </string-array>
+
     <array name="flash_icons">
         <item>@drawable/ic_viewfinder_flash_auto</item>
         <item>@drawable/ic_viewfinder_flash_on</item>
+        <item>@drawable/ic_viewfinder_flash_off</item>
         <item>@drawable/ic_viewfinder_empty</item>
     </array>
 
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 5d0a93c..7193b7c 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -18,7 +18,6 @@
 */
 -->
 <resources>
-    <color name="bubble_dark_background">#B2191919</color>
     <color name="recording_time_elapsed_text">#FFFFFFFF</color>
     <color name="recording_time_remaining_text">#FFFF0033</color>
 </resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 8bcda80..5ec105b 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -19,6 +19,4 @@
 -->
 <resources>
     <dimen name="hint_y_offset">64dip</dimen>
-    <dimen name="appwidget_width">151dip</dimen>
-    <dimen name="appwidget_height">196dip</dimen>
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 40b148d..5a1dc4b 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -23,43 +23,21 @@
     <!-- message for the dialog showing the error of camera hardware -->
     <string name="cannot_connect_camera">Cannot connect to camera.</string>
 
-    <!-- label for the icon meaning 'show me all the images' -->
-    <string name="all_images">All pictures</string>
-
-    <!-- label for the icon meaning 'show me all the videos' -->
-    <string name="all_videos">All videos</string>
-
     <!-- label for the icon meaning 'show me all the images that were taken with the camera' -->
     <string name="camera_label">Camera</string>
 
     <!-- label for the 'video recording application shown in the top level 'all applications' -->
     <string name="video_camera_label">Camcorder</string>
 
-    <!-- label for the 'pictures application shown in the top level 'all applications' -->
-    <string name="gallery_picker_label">Gallery</string>
-
-    <!-- label for the gallery application (displayed when the user needs to
-         choose an application to pick a picture or a video) -->
-    <string name="gallery_label">Gallery</string>
-
     <!-- label for the folder that contains Camera pictures in the gallery -->
     <string name="gallery_camera_bucket_name">Camera pictures</string>
 
     <!-- label for the folder that contains Camera videos in the gallery -->
     <string name="gallery_camera_videos_bucket_name">Camera videos</string>
 
-    <!-- label for the folder that contains Camera videos in the gallery -->
-    <string name="gallery_camera_media_bucket_name">Camera media</string>
-
-    <!-- menu pick: crop the currently selected image -->
-    <string name="crop_label">Crop picture</string>
-
     <!-- menu pick: view the currently selected image -->
     <string name="view_label">View picture</string>
 
-    <!-- menu pick: go to the preferences screen for the camera or image gallery -->
-    <string name="preferences_label">Camera settings</string>
-
     <!-- alert to the user to wait for some operation to complete -->
     <string name="wait">Please wait\u2026</string>
 
@@ -72,25 +50,12 @@
     <!-- 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>
-
     <!-- Settings stuff -->
 
-    <!-- Toast/alert that the image is being saved to the SD card -->
-    <string name="savingImage">Saving picture\u2026</string>
-
-    <!-- Toast/alert that the face detection is being run -->
-    <string name="runningFaceDetection">Please wait\u2026</string>
-
-
     <!-- Menu items: -->
     <!-- menu pick to go to the settings screen -->
     <string name="settings">Settings</string>
 
-    <!-- menu pick to view the currently selected image -->
-    <string name="view">View</string>
-
     <!-- menu pick to view the details of the currently selected image -->
     <string name="details">Details</string>
 
@@ -106,22 +71,6 @@
     <!-- menu pick to rotate the currently selected image to the right -->
     <string name="rotate_right">Rotate right</string>
 
-    <!-- menu pick to start a slide show -->
-    <string name="slide_show">Slideshow</string>
-
-    <!-- menu pick to enter multiselect mode -->
-    <string name="multiselect">Multiselect</string>
-
-    <!-- menu pick to go to camera mode to capture a picture -->
-    <string name="capture_picture">Capture picture</string>
-    <!-- menu pick to go to video mode to capture a video -->
-    <string name="capture_video">Capture video</string>
-
-    <!-- button indicating that the cropped image should be saved -->
-    <string name="crop_save_text">Save</string>
-    <!-- button indicating that the cropped image should be reverted back to the original -->
-    <string name="crop_discard_text">Discard</string>
-
     <!-- Confirmation dialog title after deleting a picture -->
     <string name="confirm_delete_title">Delete</string>
     <!-- Confirmation dialog message after deleting a picture -->
@@ -129,9 +78,6 @@
     <!-- Confirmation dialog message after deleting a video -->
     <string name="confirm_delete_video_message">The video will be deleted.</string>
 
-    <!-- Confirmation dialog message after deleting a multiple media files -->
-    <string name="confirm_delete_multiple_message">These media files will be deleted.</string>
-
     <!-- button in review mode indicating that the picture just taken should be deleted -->
     <string name="review_toss">DELETE</string>
 
@@ -165,15 +111,6 @@
     <!-- button indicating that the picture just taken should be set as a contact photo, wallpaper, etc -->
     <string name="camera_set">Set as</string>
 
-    <!-- button indicating that the video just taken should be played -->
-    <string name="camera_play">Play</string>
-
-    <!-- button indicating that the video just taken should be accepted as an attachment -->
-    <string name="camera_attach">Attach</string>
-
-    <!-- button indicating that the video recording session should be canceled -->
-    <string name="camera_cancel">Cancel</string>
-
     <!-- button indicating that the picture just taken should be cropped -->
     <string name="camera_crop">Crop</string>
 
@@ -183,129 +120,12 @@
     <!-- Toast after trying to share a video indicating that there are no applications which are capable of so doing. -->
     <string name="no_way_to_share_video">No application available to share the video.</string>
 
-    <!-- Toast after trying to share multiple media files indicating that there are no applications which are capable of so doing. -->
-    <string name="no_way_to_share">No application available to share the media file(s).</string>
-
     <!-- Menu item for playing the video. -->
     <string name="video_play">Play</string>
 
     <!-- Button indicating to go to the image gallery -->
     <string name="camera_gallery_photos_text">Gallery</string>
 
-    <!-- String indicating an action of picking a picture to use as wallpaper (e.g. set wallpaper from "Pictures") -->
-    <string name="camera_pick_wallpaper">Pictures</string>
-    <string name="camera_setas_wallpaper">Wallpaper</string>
-
-    <!-- Settings screen, section heading  -->
-    <string name="pref_gallery_category">General settings</string>
-
-    <!-- Settings screen, section heading  -->
-    <string name="pref_slideshow_category">Slideshow settings</string>
-
-    <!-- Settings screen, setting summary text -->
-    <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 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 -->
-    <string-array name="pref_gallery_size_choices">
-        <!-- size choice of "large" -->
-        <item>Large</item>
-        <!-- size choice of "small" -->
-        <item>Small</item>
-    </string-array>
-    <!-- Option values in dialog that appears after selecting Picture size setting option -->
-    <string-array name="pref_gallery_size_values" translatable="false">
-        <item>1</item>
-        <item>0</item>
-    </string-array>
-    <!-- Default option value in dialog that appears after selecting Picture size setting option -->
-    <string name="default_value_pref_gallery_size" translatable="false">1</string>
-    <!-- Settings screen, setting option name -->
-    <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 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 -->
-    <string-array name="pref_gallery_sort_choices">
-        <!-- Preference choice to show "newest first" -->
-        <item>Newest first</item>
-        <!-- Preference choice to show "newest last" -->
-        <item>Newest last</item>
-    </string-array>
-    <!-- Option values in dialog that appears after selecting Picture sort setting option -->
-    <string-array name="pref_gallery_sort_values" translatable="false">
-        <item>descending</item>
-        <item>ascending</item>
-    </string-array>
-    <!-- Default option value in dialog that appears after selecting Picture sort setting option -->
-    <string name="default_value_pref_gallery_sort" translatable="false">descending</string>
-    <!-- Settings screen, setting option name -->
-    <string name="pref_gallery_slideshow_interval_title">Slideshow interval</string>
-    <!-- Settings screen, setting summary text -->
-    <string name="pref_gallery_slideshow_interval_summary">Select how long each slide displays in the show</string>
-    <!-- Title of dialog that appears after selecting Slideshow interval setting option -->
-    <string name="pref_gallery_slideshow_interval_dialogtitle">Slideshow interval</string>
-    <!-- Options in dialog that appears after selecting Slideshow interval setting option -->
-    <string-array name="pref_gallery_slideshow_interval_choices">
-        <!-- slide show interval "N seconds" where N is 2 -->
-        <item>2 seconds</item>
-        <!-- slide show interval "N seconds" where N is 3 -->
-        <item>3 seconds</item>
-        <!-- slide show interval "N seconds" where N is 4 -->
-        <item>4 seconds</item>
-    </string-array>
-    <!-- Option values in dialog that appears after selecting Slideshow interval setting option -->
-    <string-array name="pref_gallery_slideshow_interval_values" translatable="false">
-        <item>"2"</item>
-        <item>"3"</item>
-        <item>"4"</item>
-    </string-array>
-    <!-- Default option value in dialog that appears after selecting Slideshow interval setting option -->
-    <string name="default_value_pref_gallery_slideshow_interval" translatable="false">"2"</string>
-    <!-- Settings screen, setting option name -->
-    <string name="pref_gallery_slideshow_transition_title">Slideshow transition</string>
-    <!-- Settings screen, setting summary text -->
-    <string name="pref_gallery_slideshow_transition_summary">Select the effect used when moving from one slide to the next</string>
-    <!-- Title of dialog that appears after selecting Slideshow transition setting option -->
-    <string name="pref_gallery_slideshow_transition_dialogtitle">Slideshow transition</string>
-    <!-- Options in dialog that appears after selecting Slideshow transition
-     setting option -->
-    <string-array name="pref_gallery_slideshow_transition_choices">
-        <!-- Slide show transition to fade in and fade out -->
-        <item>Fade in &amp; out</item>
-        <!-- Slide show transition to slide in and out from the left and right -->
-        <item>Slide left - right</item>
-        <!-- Slide show transition to slide in and out from the top and bottom -->
-        <item>Slide up - down</item>
-        <!-- Slide show transition to be chosen randomly -->
-        <item>Random selection</item>
-    </string-array>
-    <!-- Option values in dialog that appears after selecting Slideshow transition setting option -->
-    <string-array name="pref_gallery_slideshow_transition_values" translatable="false">
-        <item>"0"</item>
-        <item>"1"</item>
-        <item>"2"</item>
-        <item>"-1"</item>
-    </string-array>
-    <!-- Default option value in dialog that appears after selecting Slideshow transition setting option -->
-    <string name="default_value_pref_gallery_slideshow_transition" translatable="false">"0"</string>
-
-    <!-- Settings screen, setting check box name -->
-    <string name="pref_gallery_slideshow_repeat_title">Repeat slideshow</string>
-
-    <!-- Settings screen, setting summary text -->
-    <string name="pref_gallery_slideshow_repeat_summary">Play slideshow more than once</string>
-
-    <!-- Settings screen, setting check box name -->
-    <string name="pref_gallery_slideshow_shuffle_title">Shuffle slides</string>
-
-    <!-- Settings screen, setting summary text -->
-    <string name="pref_gallery_slideshow_shuffle_summary">Show pictures in random order</string>
-
     <!-- Settings screen, setting title text -->
     <string name="pref_camera_recordlocation_title">Store location</string>
 
@@ -420,11 +240,6 @@
     <string name="pref_camera_whitebalance_entry_daylight">Daylight</string>
     <string name="pref_camera_whitebalance_entry_fluorescent">Fluorescent</string>
     <string name="pref_camera_whitebalance_entry_cloudy">Cloudy</string>
-    <string name="pref_camera_whitebalance_entry_twilight">Twilight</string>
-    <string name="pref_camera_whitebalance_entry_shade">Shade</string>
-    <string name="pref_camera_whitebalance_entry_warm_fluorescent">Warm Fluorescent</string>
-    <!-- Manual white-balance for very bright and yellowish light. -->
-    <string name="pref_camera_whitebalance_entry_halogen">Halogen</string>
 
     <!-- Settings screen, color effect dialog title -->
     <string name="pref_camera_coloreffect_dialogtitle">Color effect</string>
@@ -486,32 +301,6 @@
     <!-- Scene mode optimized for taking images of fireworks. -->
     <string name="pref_camera_scenemode_entry_fireworks">Fireworks</string>
 
-    <!-- Menu item to go to the settings screen -->
-    <string name="camerasettings">Settings</string>
-
-    <!-- Text message indicating that there are no pictures or videos in a particular
-         bucket on the SD card -->
-    <string name="image_gallery_NoImageView_text">No media found.</string>
-
-    <!-- Preference title for whether the user should be prompted form confirmation when deleting images  -->
-    <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 a picture or video</string>
-
-    <!-- Details stuff -->
-    <string name="details_title_text" translatable="false">myvideo</string>
-    <string name="details_tags_text" translatable="false">monster</string>
-    <string name="details_category_label" translatable="false">Category:</string>
-    <string name="details_description_label" translatable="false">Description:</string>
-    <string name="details_publicView_text" translatable="false">Public</string>
-    <string name="details_tags_label" translatable="false">Tags:</string>
-    <string name="details_description_text" translatable="false">testdescription</string>
-    <string name="details_title_label" translatable="false">Title:</string>
-    <string name="details_save_text" translatable="false">Save</string>
-    <string name="details_language_label" translatable="false">Language:</string>
-    <string name="details_privateView_text" translatable="false">Private</string>
-
     <!-- Message to show when there's no lat/lng information in the image -->
     <string name="no_location_image">No Location information contained in this image.</string>
     <!-- Title of Details dialog  -->
@@ -560,25 +349,6 @@
     <!-- Details dialog "OK" button. Dismisses dialog. -->
     <string name="details_ok">OK</string>
 
-    <!-- Text of context menu when an image is selected -->
-    <string name="context_menu_header">Picture options</string>
-    <!-- Text of context menu when a video is selected -->
-    <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>
-
-    <!-- Activity title when in the image gallery to see pictures -->
-    <string name="photos_gallery_title">Gallery</string>
-
-    <!-- Activity title when in the image gallery to select a picture -->
-    <string name="pick_photos_gallery_title">Select picture</string>
-
-    <!-- Activity title when in the image gallery to see videos -->
-    <string name="videos_gallery_title">Gallery</string>
-
-    <!-- Activity title when in the image gallery to select a video -->
-    <string name="pick_videos_gallery_title">Select video</string>
-
     <!-- Displayed in the title of the dialog for things to do with a picture that
          is to be sent to another application: -->
     <string name="sendImage">Share picture via</string>
@@ -591,54 +361,12 @@
          is to be sent to another application. -->
     <string name="sendVideo">Share video via</string>
 
-    <!-- Displayed in the title of the dialog for things to do with media files that
-         are to be sent to another application: -->
-    <string name="send_media_files">Share media files via</string>
-
-    <!-- Activity label. This might show up in the activity-picker -->
-    <string name="movieviewlabel">Movies</string>
-    <!-- shown in the video player view while the video is being loaded, before it starts playing -->
-    <string name="loading_video">Loading video\u2026</string>
-
     <!-- Low-memory dialog message -->
     <string name="spaceIsLow_content">Your SD card is running out of space. Change the quality setting or delete items from Gallery.</string>
 
-    <!-- Movie View Resume Playing dialog title -->
-    <string name="resume_playing_title">Resume video</string>
-
-    <!-- Movie View Start Playing dialog title -->
-    <string name="resume_playing_message">Resume playing from <xliff:g id="duration" example="5:30">%s</xliff:g> ?</string>
-
-    <!-- Movie View Start Playing button "Resume from bookmark" -->
-    <string name="resume_playing_resume">Resume playing</string>
-
-    <!-- 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. -->
     <string name="video_file_name_format" translatable="false">"'video'-yyyy-MM-dd-HH-mm-ss"</string>
 
-    <!-- Title for the file information dialog -->
-    <string name="file_info_title">File info:</string>
-
-    <!-- The video is execeed the size limit of a MMS, and suggest user to record a shorter length clip -->
-    <string name="video_exceed_mms_limit">The video you recorded is too large to send via MMS. Try recording a shorter length clip.</string>
-
-    <!-- The title shown on the button which share the selected images by gmail, mms, and etc. -->
-    <string name="multiselect_share">Share</string>
-
-    <!-- The title shown on the button which will delete all the selected images -->
-    <string name="multiselect_delete">Delete</string>
-
-    <!-- Title shown on the button which will close the multiselction mode -->
-    <string name="multiselect_cancel">Cancel</string>
-
-    <!-- The messsage shown on progress dialog when deleting images -->
-    <string name="delete_images_message">Deleting images, please wait\u2026</string>
-
     <!-- The messsage shown when video record reaches size limit. -->
     <string name="video_reach_size_limit">Size limit reached.</string>
 
diff --git a/res/values/styles.xml b/res/values/styles.xml
index ae5d16a..4a79fe5 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -31,25 +31,10 @@
         <item name="android:textStyle">normal</item>
         <item name="android:textColor">@android:color/secondary_text_dark</item>
     </style>
-    <style name="Animation" />
-    <style name="Animation.OnScreenHint">
+    <style name="Animation_OnScreenHint">
         <item name="android:windowEnterAnimation">@anim/on_screen_hint_enter</item>
         <item name="android:windowExitAnimation">@anim/on_screen_hint_exit</item>
     </style>
-    <style name="OnscreenActionIcon">
-        <item name="android:focusable">false</item>
-        <item name="android:clickable">true</item>
-        <item name="android:textSize">13dip</item>
-        <item name="android:singleLine">true</item>
-        <item name="android:ellipsize">marquee</item>
-        <item name="android:shadowColor">#FF000000</item>
-        <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">wrap_content</item>
-        <item name="android:layout_height">wrap_content</item>
-        <item name="android:drawablePadding">3dip</item>
-    </style>
     <style name="ReviewControlText">
         <item name="android:textSize">12sp</item>
         <item name="android:gravity">center</item>
@@ -72,8 +57,6 @@
         <item name="android:layout_height">wrap_content</item>
         <item name="android:layout_width">fill_parent</item>
     </style>
-    <style name="Theme.DeleteImageDialog" parent="android:style/Theme.Dialog.Alert">
-    </style>
     <style name="NoEnterExitAnimation">
         <item name="android:windowEnterAnimation">@null</item>
         <item name="android:windowExitAnimation">@null</item>
diff --git a/res/xml/appwidget_info.xml b/res/xml/appwidget_info.xml
deleted file mode 100644
index 2c77183..0000000
--- a/res/xml/appwidget_info.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?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.
--->
-
-<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
-    android:minWidth="146dip"
-    android:minHeight="146dip"
-    android:updatePeriodMillis="0"
-    android:initialLayout="@layout/photo_frame"
-    android:configure="com.android.camera.PhotoAppWidgetConfigure"
-    >
-</appwidget-provider>
diff --git a/res/xml/gallery_preferences.xml b/res/xml/gallery_preferences.xml
deleted file mode 100644
index b466bd1..0000000
--- a/res/xml/gallery_preferences.xml
+++ /dev/null
@@ -1,90 +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.
--->
-
-<!-- This is the preference setting for Gallery. -->
-<PreferenceScreen
-        xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <PreferenceCategory
-            android:title="@string/pref_gallery_category">
-
-        <!-- Display size -->
-        <ListPreference
-                android:key="pref_gallery_size_key"
-                android:title="@string/pref_gallery_size_title"
-                android:summary="@string/pref_gallery_size_summary"
-                android:entries="@array/pref_gallery_size_choices"
-                android:entryValues="@array/pref_gallery_size_values"
-                android:dialogTitle="@string/pref_gallery_size_dialogtitle"
-                android:defaultValue="@string/default_value_pref_gallery_size" />
-
-        <!-- Sort order -->
-        <ListPreference
-                android:key="pref_gallery_sort_key"
-                android:title="@string/pref_gallery_sort_title"
-                android:summary="@string/pref_gallery_sort_summary"
-                android:entries="@array/pref_gallery_sort_choices"
-                android:entryValues="@array/pref_gallery_sort_values"
-                android:dialogTitle="@string/pref_gallery_sort_dialogtitle"
-                android:defaultValue="@string/default_value_pref_gallery_sort" />
-
-        <!-- Confirm deletions -->
-        <CheckBoxPreference
-                android:key="pref_gallery_confirm_delete_key"
-                android:title="@string/pref_gallery_confirm_delete_title"
-                android:summary="@string/pref_gallery_confirm_delete_summary"
-                android:defaultValue="true"/>
-
-    </PreferenceCategory>
-    <PreferenceCategory
-      android:title="@string/pref_slideshow_category">
-
-        <!--  Slideshow interval -->
-        <ListPreference
-                android:key="pref_gallery_slideshow_interval_key"
-                android:title="@string/pref_gallery_slideshow_interval_title"
-                android:summary="@string/pref_gallery_slideshow_interval_summary"
-                android:entries="@array/pref_gallery_slideshow_interval_choices"
-                android:entryValues="@array/pref_gallery_slideshow_interval_values"
-                android:dialogTitle="@string/pref_gallery_slideshow_interval_dialogtitle"
-                android:defaultValue="@string/default_value_pref_gallery_slideshow_interval" />
-
-        <!-- Slideshow transition -->
-        <ListPreference
-                android:key="pref_gallery_slideshow_transition_key"
-                android:title="@string/pref_gallery_slideshow_transition_title"
-                android:summary="@string/pref_gallery_slideshow_transition_summary"
-                android:entries="@array/pref_gallery_slideshow_transition_choices"
-                android:entryValues="@array/pref_gallery_slideshow_transition_values"
-                android:dialogTitle="@string/pref_gallery_slideshow_transition_dialogtitle"
-                android:defaultValue="@string/default_value_pref_gallery_slideshow_transition" />
-
-        <!-- Repeat slideshow -->
-        <CheckBoxPreference
-                android:key="pref_gallery_slideshow_repeat_key"
-                android:title="@string/pref_gallery_slideshow_repeat_title"
-                android:summary="@string/pref_gallery_slideshow_repeat_summary"
-                android:defaultValue="false"/>
-
-        <!-- Shuffle slides -->
-        <CheckBoxPreference
-                android:key="pref_gallery_slideshow_shuffle_key"
-                android:title="@string/pref_gallery_slideshow_shuffle_title"
-                android:summary="@string/pref_gallery_slideshow_shuffle_summary"
-                android:defaultValue="false"/>
-
-    </PreferenceCategory>
-</PreferenceScreen>
diff --git a/src/com/android/camera/ActionMenuButton.java b/src/com/android/camera/ActionMenuButton.java
deleted file mode 100644
index e9033cc..0000000
--- a/src/com/android/camera/ActionMenuButton.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.camera;
-
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.graphics.RectF;
-import android.text.Layout;
-import android.util.AttributeSet;
-import android.widget.TextView;
-
-/**
- * TextView that draws a bubble behind the text. We cannot use a
- * LineBackgroundSpan because we want to make the bubble taller than the text
- * and TextView's clip is too aggressive.
- */
-public class ActionMenuButton extends TextView {
-    private static final int CORNER_RADIUS = 8;
-    private static final int PADDING_H = 5;
-    private static final int PADDING_V = 1;
-
-    private final RectF mRect = new RectF();
-    private Paint mPaint;
-
-    public ActionMenuButton(Context context) {
-        super(context);
-        init();
-    }
-
-    public ActionMenuButton(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        init();
-    }
-
-    public ActionMenuButton(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-        init();
-    }
-
-    private void init() {
-        setFocusable(true);
-        // We need extra padding below to prevent the bubble being cut.
-        setPadding(PADDING_H, 0, PADDING_H, PADDING_V);
-
-        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
-        mPaint.setColor(getContext().getResources()
-                .getColor(R.color.bubble_dark_background));
-    }
-
-    @Override
-    protected void drawableStateChanged() {
-        invalidate();
-        super.drawableStateChanged();
-    }
-
-    @Override
-    public void draw(Canvas canvas) {
-        final Layout layout = getLayout();
-        final RectF rect = mRect;
-        final int left = getCompoundPaddingLeft();
-        final int top = getExtendedPaddingTop();
-
-        rect.set(left + layout.getLineLeft(0) - PADDING_H,
-                 top + layout.getLineTop(0) - PADDING_V,
-                 Math.min(left + layout.getLineRight(0) + PADDING_H,
-                          mScrollX + mRight - mLeft),
-                 top + layout.getLineBottom(0) + PADDING_V);
-        canvas.drawRoundRect(rect, CORNER_RADIUS, CORNER_RADIUS, mPaint);
-
-        super.draw(canvas);
-    }
-}
diff --git a/src/com/android/camera/BitmapCache.java b/src/com/android/camera/BitmapCache.java
new file mode 100644
index 0000000..3476c71
--- /dev/null
+++ b/src/com/android/camera/BitmapCache.java
@@ -0,0 +1,126 @@
+/*
+ * 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;
+
+import android.graphics.Bitmap;
+
+class BitmapCache implements ImageViewTouchBase.Recycler {
+    public static class Entry {
+        int mPos;
+        Bitmap mBitmap;
+        public Entry() {
+            clear();
+        }
+        public void clear() {
+            mPos = -1;
+            mBitmap = null;
+        }
+    }
+
+    private final Entry[] mCache;
+
+    public BitmapCache(int size) {
+        mCache = new Entry[size];
+        for (int i = 0; i < mCache.length; i++) {
+            mCache[i] = new Entry();
+        }
+    }
+
+    // Given the position, find the associated entry. Returns null if there is
+    // no such entry.
+    private Entry findEntry(int pos) {
+        for (Entry e : mCache) {
+            if (pos == e.mPos) {
+                return e;
+            }
+        }
+        return null;
+    }
+
+    // Returns the thumb bitmap if we have it, otherwise return null.
+    public synchronized Bitmap getBitmap(int pos) {
+        Entry e = findEntry(pos);
+        if (e != null) {
+            return e.mBitmap;
+        }
+        return null;
+    }
+
+    public synchronized void put(int pos, Bitmap bitmap) {
+        // First see if we already have this entry.
+        if (findEntry(pos) != null) {
+            return;
+        }
+
+        // Find the best entry we should replace.
+        // See if there is any empty entry.
+        // Otherwise assuming sequential access, kick out the entry with the
+        // greatest distance.
+        Entry best = null;
+        int maxDist = -1;
+        for (Entry e : mCache) {
+            if (e.mPos == -1) {
+                best = e;
+                break;
+            } else {
+                int dist = Math.abs(pos - e.mPos);
+                if (dist > maxDist) {
+                    maxDist = dist;
+                    best = e;
+                }
+            }
+        }
+
+        // Recycle the image being kicked out.
+        // This only works because our current usage is sequential, so we
+        // do not happen to recycle the image being displayed.
+        if (best.mBitmap != null) {
+            best.mBitmap.recycle();
+        }
+
+        best.mPos = pos;
+        best.mBitmap = bitmap;
+    }
+
+    // Recycle all bitmaps in the cache and clear the cache.
+    public synchronized void clear() {
+        for (Entry e : mCache) {
+            if (e.mBitmap != null) {
+                e.mBitmap.recycle();
+            }
+            e.clear();
+        }
+    }
+
+    // Returns whether the bitmap is in the cache.
+    public synchronized boolean hasBitmap(int pos) {
+        Entry e = findEntry(pos);
+        return (e != null);
+    }
+
+    // Recycle the bitmap if it's not in the cache.
+    // The input must be non-null.
+    public synchronized void recycle(Bitmap b) {
+        for (Entry e : mCache) {
+            if (e.mPos != -1) {
+                if (e.mBitmap == b) {
+                    return;
+                }
+            }
+        }
+        b.recycle();
+    }
+}
diff --git a/src/com/android/camera/BitmapManager.java b/src/com/android/camera/BitmapManager.java
index 36c7ec1..7846d87 100644
--- a/src/com/android/camera/BitmapManager.java
+++ b/src/com/android/camera/BitmapManager.java
@@ -16,21 +16,27 @@
 
 package com.android.camera;
 
+import android.content.ContentResolver;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
+import android.provider.MediaStore.Images;
+import android.provider.MediaStore.Video;
 import android.util.Log;
 
 import java.io.FileDescriptor;
 import java.util.WeakHashMap;
 
 /**
- * This class provides several utilities to cancel bitmap decoding.
+ * Provides utilities to decode bitmap, get thumbnail, and cancel the
+ * operations.
  *
- * The function decodeFileDescriptor() is used to decode a bitmap. During
- * decoding if another thread wants to cancel it, it calls the function
- * cancelThreadDecoding() specifying the Thread which is in decoding.
+ * <p>The function {@link #decodeFileDescriptor(FileDescriptor,
+ * BitmapFactory.Options)} is used to decode a bitmap. During decoding another
+ * thread can cancel it using the function {@link #cancelThreadDecoding(Thread,
+ * ContentResolver)} specifying the {@code Thread} which is in decoding.
  *
- * cancelThreadDecoding() is sticky until allowThreadDecoding() is called.
+ * <p>{@code cancelThreadDecoding(Thread,ContentResolver)} is sticky until
+ * {@code allowThreadDecoding(Thread) } is called.
  */
 public class BitmapManager {
     private static final String TAG = "BitmapManager";
@@ -38,7 +44,7 @@
     private static class ThreadStatus {
         public State mState = State.ALLOW;
         public BitmapFactory.Options mOptions;
-
+        public boolean mThumbRequesting;
         @Override
         public String toString() {
             String s;
@@ -74,10 +80,10 @@
         return status;
     }
 
-    /**
-     * The following three methods are used to keep track of
-     * BitmapFaction.Options used for decoding and cancelling.
-     */
+    //
+    // The following two methods are used to keep track of
+    // BitmapFaction.Options used for decoding and cancelling.
+    //
     private synchronized void setDecodingOptions(Thread t,
             BitmapFactory.Options options) {
         getOrCreateThreadStatus(t).mOptions = options;
@@ -88,10 +94,6 @@
         status.mOptions = null;
     }
 
-    /**
-     * The following three methods are used to keep track of which thread
-     * is being disabled for bitmap decoding.
-     */
     public synchronized boolean canThreadDecoding(Thread t) {
         ThreadStatus status = mThreadStatus.get(t);
         if (status == null) {
@@ -107,7 +109,8 @@
         getOrCreateThreadStatus(t).mState = State.ALLOW;
     }
 
-    public synchronized void cancelThreadDecoding(Thread t) {
+    public synchronized void cancelThreadDecoding(Thread t,
+            ContentResolver cr) {
         ThreadStatus status = getOrCreateThreadStatus(t);
         status.mState = State.CANCEL;
         if (status.mOptions != null) {
@@ -116,6 +119,56 @@
 
         // Wake up threads in waiting list
         notifyAll();
+
+        // Since our cancel request can arrive MediaProvider earlier than
+        // getThumbnail request, we use mThumbRequesting flag to make sure our
+        // request does cancel the request.
+        try {
+            synchronized (status) {
+                while (status.mThumbRequesting) {
+                    Images.Thumbnails.cancelThumbnailRequest(cr, -1, t.getId());
+                    Video.Thumbnails.cancelThumbnailRequest(cr, -1, t.getId());
+                    status.wait(200);
+                }
+            }
+        } catch (InterruptedException ex) {
+            // ignore it.
+        }
+    }
+
+    /**
+     * Gets the thumbnail of the given ID of the original image.
+     *
+     * <p> This method wraps around @{code getThumbnail} in {@code
+     * android.provider.MediaStore}. It provides the ability to cancel it.
+     */
+    public Bitmap getThumbnail(ContentResolver cr, long origId, int kind,
+            BitmapFactory.Options options, boolean isVideo) {
+        Thread t = Thread.currentThread();
+        ThreadStatus status = getOrCreateThreadStatus(t);
+
+        if (!canThreadDecoding(t)) {
+            Log.d(TAG, "Thread " + t + " is not allowed to decode.");
+            return null;
+        }
+
+        try {
+            synchronized (status) {
+                status.mThumbRequesting = true;
+            }
+            if (isVideo) {
+                return Video.Thumbnails.getThumbnail(cr, origId, t.getId(),
+                        kind, null);
+            } else {
+                return Images.Thumbnails.getThumbnail(cr, origId, t.getId(),
+                        kind, null);
+            }
+        } finally {
+            synchronized (status) {
+                status.mThumbRequesting = false;
+                status.notifyAll();
+            }
+        }
     }
 
     public static synchronized BitmapManager instance() {
diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java
index 972476d..c4c946a 100644
--- a/src/com/android/camera/Camera.java
+++ b/src/com/android/camera/Camera.java
@@ -80,16 +80,17 @@
 import java.util.Collections;
 import java.util.List;
 
-/**
- * Activity of the Camera which used to see preview and take pictures.
- */
-public class Camera extends Activity implements View.OnClickListener,
+/** The Camera activity which can preview and take pictures. */
+public class Camera extends NoSearchActivity implements View.OnClickListener,
         ShutterButton.OnShutterButtonListener, SurfaceHolder.Callback,
         Switcher.OnSwitchListener, OnScreenSettings.OnVisibilityChangedListener,
         OnSharedPreferenceChangeListener {
 
     private static final String TAG = "camera";
 
+    // This value must be as same as the item value of the string array
+    // "flash_mode" in file "res/values/arrays.xml".
+    private static final String NO_FLASH_MODE = "no_flash";
     private static final int CROP_MSG = 1;
     private static final int FIRST_TIME_INIT = 2;
     private static final int RESTART_PREVIEW = 3;
@@ -839,7 +840,7 @@
         }
     }
 
-    public boolean saveDataToFile(String filePath, byte[] data) {
+    private boolean saveDataToFile(String filePath, byte[] data) {
         FileOutputStream f = null;
         try {
             f = new FileOutputStream(filePath);
@@ -1039,7 +1040,7 @@
         }
 
         // Limit to 50k pixels so we can return it in the intent.
-        Bitmap bitmap = Util.makeBitmap(data, 50*1024);
+        Bitmap bitmap = Util.makeBitmap(data, 50 * 1024);
         bitmap = Util.rotate(bitmap, degree);
         return bitmap;
     }
@@ -1678,9 +1679,9 @@
                 mParameters.setSceneMode(sceneMode);
                 mCameraDevice.setParameters(mParameters);
 
-                // Setting scene mode will change the settings of flash mode, white
-                // balance, and focus mode. So read back here, so that we know
-                // what're the settings
+                // Setting scene mode will change the settings of flash mode,
+                // white balance, and focus mode. Here we read back the
+                // parameters, so we can know those settings.
                 mParameters = mCameraDevice.getParameters();
             }
         } else {
@@ -1780,7 +1781,7 @@
             } else {
                 flashMode = mParameters.getFlashMode();
                 if (flashMode == null) {
-                    flashMode = Parameters.FLASH_MODE_OFF;
+                    flashMode = NO_FLASH_MODE;
                 }
             }
 
diff --git a/src/com/android/camera/CameraButtonIntentReceiver.java b/src/com/android/camera/CameraButtonIntentReceiver.java
index 0d9c4fb..38f9241 100644
--- a/src/com/android/camera/CameraButtonIntentReceiver.java
+++ b/src/com/android/camera/CameraButtonIntentReceiver.java
@@ -20,9 +20,17 @@
 import android.content.Context;
 import android.content.Intent;
 
+/**
+ * {@code CameraButtonIntentReceiver} is invoked when the camera button is
+ * long-pressed.
+ *
+ * It is declared in {@code AndroidManifest.xml} to receive the
+ * {@code android.intent.action.CAMERA_BUTTON} intent.
+ *
+ * After making sure we can use the camera hardware, it starts the Camera
+ * activity.
+ */
 public class CameraButtonIntentReceiver extends BroadcastReceiver {
-    public CameraButtonIntentReceiver() {
-    }
 
     @Override
     public void onReceive(Context context, Intent intent) {
@@ -35,8 +43,9 @@
         holder.release();
         Intent i = new Intent(Intent.ACTION_MAIN);
         i.setClass(context, Camera.class);
-        i.addCategory("android.intent.category.LAUNCHER");
-        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        i.addCategory(Intent.CATEGORY_LAUNCHER);
+        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
+                | Intent.FLAG_ACTIVITY_CLEAR_TOP);
         context.startActivity(i);
     }
 }
diff --git a/src/com/android/camera/CameraHardwareException.java b/src/com/android/camera/CameraHardwareException.java
index a975cbd..8209055 100644
--- a/src/com/android/camera/CameraHardwareException.java
+++ b/src/com/android/camera/CameraHardwareException.java
@@ -16,11 +16,11 @@
 
 package com.android.camera;
 
+/**
+ * This class represents the condition that we cannot open the camera hardware
+ * successfully. For example, another process is using the camera.
+ */
 public class CameraHardwareException extends Exception {
-    private static final long serialVersionUID = -4453804913829319918L;
-
-    public CameraHardwareException() {
-    }
 
     public CameraHardwareException(Throwable t) {
         super(t);
diff --git a/src/com/android/camera/CameraHolder.java b/src/com/android/camera/CameraHolder.java
index 7fd2b4e..18abd15 100644
--- a/src/com/android/camera/CameraHolder.java
+++ b/src/com/android/camera/CameraHolder.java
@@ -28,17 +28,19 @@
 
 import java.io.IOException;
 
-//
-// CameraHolder is used to hold an android.hardware.Camera instance.
-//
-// The open() and release() calls are similar to the ones in
-// android.hardware.Camera. The difference is if keep() is called before
-// release(), CameraHolder will try to hold the android.hardware.Camera
-// instance for a while, so if open() call called soon after, we can avoid
-// the cost of open() in android.hardware.Camera.
-//
-// This is used in switching between Camera and VideoCamera activities.
-//
+/**
+ * The class is used to hold an {@code android.hardware.Camera} instance.
+ *
+ * <p>The {@code open()} and {@code release()} calls are similar to the ones
+ * in {@code android.hardware.Camera}. The difference is if {@code keep()} is
+ * called before {@code release()}, CameraHolder will try to hold the {@code
+ * android.hardware.Camera} instance for a while, so if {@code open()} is
+ * called soon after, we can avoid the cost of {@code open()} in {@code
+ * android.hardware.Camera}.
+ *
+ * <p>This is used in switching between {@code Camera} and {@code VideoCamera}
+ * activities.
+ */
 public class CameraHolder {
     private static final String TAG = "CameraHolder";
     private android.hardware.Camera mCameraDevice;
diff --git a/src/com/android/camera/CameraSettings.java b/src/com/android/camera/CameraSettings.java
index 9b106ff..9010243 100644
--- a/src/com/android/camera/CameraSettings.java
+++ b/src/com/android/camera/CameraSettings.java
@@ -1,3 +1,19 @@
+/*
+ * 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;
 
 import android.app.Activity;
@@ -17,6 +33,9 @@
 import java.util.ArrayList;
 import java.util.List;
 
+/**
+ *  Provides utilities and keys for Camera settings.
+ */
 public class CameraSettings {
     private static final int FIRST_REQUEST_CODE = 100;
     private static final int NOT_FOUND = -1;
diff --git a/src/com/android/camera/CropImage.java b/src/com/android/camera/CropImage.java
deleted file mode 100644
index 6a52d72..0000000
--- a/src/com/android/camera/CropImage.java
+++ /dev/null
@@ -1,792 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.camera;
-
-import com.android.camera.gallery.IImage;
-import com.android.camera.gallery.IImageList;
-
-import android.app.WallpaperManager;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Matrix;
-import android.graphics.Path;
-import android.graphics.PointF;
-import android.graphics.PorterDuff;
-import android.graphics.Rect;
-import android.graphics.RectF;
-import android.graphics.Region;
-import android.media.FaceDetector;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Handler;
-import android.provider.MediaStore;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.Window;
-import android.view.WindowManager;
-import android.widget.Toast;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.concurrent.CountDownLatch;
-
-/**
- * The activity can crop specific region of interest from an image.
- */
-public class CropImage extends MonitoredActivity {
-    private static final String TAG = "CropImage";
-
-    // These are various options can be specified in the intent.
-    private Bitmap.CompressFormat mOutputFormat =
-            Bitmap.CompressFormat.JPEG; // only used with mSaveUri
-    private Uri mSaveUri = null;
-    private boolean mSetWallpaper = false;
-    private int mAspectX, mAspectY;
-    private boolean mDoFaceDetection = true;
-    private boolean mCircleCrop = false;
-    private final Handler mHandler = new Handler();
-
-    // These options specifiy the output image size and whether we should
-    // scale the output to fit it (or just crop it).
-    private int mOutputX, mOutputY;
-    private boolean mScale;
-    private boolean mScaleUp = true;
-
-    boolean mWaitingToPick; // Whether we are wait the user to pick a face.
-    boolean mSaving;  // Whether the "save" button is already clicked.
-
-    private CropImageView mImageView;
-    private ContentResolver mContentResolver;
-
-    private Bitmap mBitmap;
-    HighlightView mCrop;
-
-    private IImageList mAllImages;
-    private IImage mImage;
-
-    @Override
-    public void onCreate(Bundle icicle) {
-        super.onCreate(icicle);
-        mContentResolver = getContentResolver();
-
-        requestWindowFeature(Window.FEATURE_NO_TITLE);
-        setContentView(R.layout.cropimage);
-
-        mImageView = (CropImageView) findViewById(R.id.image);
-
-        MenuHelper.showStorageToast(this);
-
-        Intent intent = getIntent();
-        Bundle extras = intent.getExtras();
-
-        if (extras != null) {
-            if (extras.getString("circleCrop") != null) {
-                mCircleCrop = true;
-                mAspectX = 1;
-                mAspectY = 1;
-            }
-            mSaveUri = (Uri) extras.getParcelable(MediaStore.EXTRA_OUTPUT);
-            if (mSaveUri != null) {
-                String outputFormatString = extras.getString("outputFormat");
-                if (outputFormatString != null) {
-                    mOutputFormat = Bitmap.CompressFormat.valueOf(
-                            outputFormatString);
-                }
-            } else {
-                mSetWallpaper = extras.getBoolean("setWallpaper");
-            }
-            mBitmap = (Bitmap) extras.getParcelable("data");
-            mAspectX = extras.getInt("aspectX");
-            mAspectY = extras.getInt("aspectY");
-            mOutputX = extras.getInt("outputX");
-            mOutputY = extras.getInt("outputY");
-            mScale = extras.getBoolean("scale", true);
-            mScaleUp = extras.getBoolean("scaleUpIfNeeded", true);
-            mDoFaceDetection = extras.containsKey("noFaceDetection")
-                    ? !extras.getBoolean("noFaceDetection")
-                    : true;
-        }
-
-        if (mBitmap == null) {
-            Uri target = intent.getData();
-            mAllImages = ImageManager.makeImageList(mContentResolver, target,
-                    ImageManager.SORT_ASCENDING);
-            mImage = mAllImages.getImageForUri(target);
-            if (mImage != null) {
-                // Don't read in really large bitmaps. Use the (big) thumbnail
-                // instead.
-                // TODO when saving the resulting bitmap use the
-                // decode/crop/encode api so we don't lose any resolution.
-                mBitmap = mImage.thumbBitmap(IImage.ROTATE_AS_NEEDED);
-            }
-        }
-
-        if (mBitmap == null) {
-            finish();
-            return;
-        }
-
-        // Make UI fullscreen.
-        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
-
-        findViewById(R.id.discard).setOnClickListener(
-                new View.OnClickListener() {
-                    public void onClick(View v) {
-                        setResult(RESULT_CANCELED);
-                        finish();
-                    }
-                });
-
-        findViewById(R.id.save).setOnClickListener(
-                new View.OnClickListener() {
-                    public void onClick(View v) {
-                        onSaveClicked();
-                    }
-                });
-
-        startFaceDetection();
-    }
-
-    private void startFaceDetection() {
-        if (isFinishing()) {
-            return;
-        }
-
-        mImageView.setImageBitmapResetBase(mBitmap, true);
-
-        Util.startBackgroundJob(this, null,
-                getResources().getString(R.string.runningFaceDetection),
-                new Runnable() {
-            public void run() {
-                final CountDownLatch latch = new CountDownLatch(1);
-                final Bitmap b = (mImage != null)
-                        ? mImage.fullSizeBitmap(IImage.UNCONSTRAINED,
-                        1024 * 1024)
-                        : mBitmap;
-                mHandler.post(new Runnable() {
-                    public void run() {
-                        if (b != mBitmap && b != null) {
-                            mImageView.setImageBitmapResetBase(b, true);
-                            mBitmap.recycle();
-                            mBitmap = b;
-                        }
-                        if (mImageView.getScale() == 1F) {
-                            mImageView.center(true, true);
-                        }
-                        latch.countDown();
-                    }
-                });
-                try {
-                    latch.await();
-                } catch (InterruptedException e) {
-                    throw new RuntimeException(e);
-                }
-                mRunFaceDetection.run();
-            }
-        }, mHandler);
-    }
-
-    private void onSaveClicked() {
-        // TODO this code needs to change to use the decode/crop/encode single
-        // step api so that we don't require that the whole (possibly large)
-        // bitmap doesn't have to be read into memory
-        if (mCrop == null) {
-            return;
-        }
-
-        if (mSaving) return;
-        mSaving = true;
-
-        Bitmap croppedImage;
-
-        // If the output is required to a specific size, create an new image
-        // with the cropped image in the center and the extra space filled.
-        if (mOutputX != 0 && mOutputY != 0 && !mScale) {
-            // Don't scale the image but instead fill it so it's the
-            // required dimension
-            croppedImage = Bitmap.createBitmap(mOutputX, mOutputY,
-                    Bitmap.Config.RGB_565);
-            Canvas canvas = new Canvas(croppedImage);
-
-            Rect srcRect = mCrop.getCropRect();
-            Rect dstRect = new Rect(0, 0, mOutputX, mOutputY);
-
-            int dx = (srcRect.width() - dstRect.width()) / 2;
-            int dy = (srcRect.height() - dstRect.height()) / 2;
-
-            // If the srcRect is too big, use the center part of it.
-            srcRect.inset(Math.max(0, dx), Math.max(0, dy));
-
-            // If the dstRect is too big, use the center part of it.
-            dstRect.inset(Math.max(0, -dx), Math.max(0, -dy));
-
-            // Draw the cropped bitmap in the center
-            canvas.drawBitmap(mBitmap, srcRect, dstRect, null);
-
-            // Release bitmap memory as soon as possible
-            mImageView.clear();
-            mBitmap.recycle();
-        } else {
-            Rect r = mCrop.getCropRect();
-
-            int width = r.width();
-            int height = r.height();
-
-            // If we are circle cropping, we want alpha channel, which is the
-            // third param here.
-            croppedImage = Bitmap.createBitmap(width, height,
-                    mCircleCrop
-                    ? Bitmap.Config.ARGB_8888
-                    : Bitmap.Config.RGB_565);
-
-            Canvas canvas = new Canvas(croppedImage);
-            Rect dstRect = new Rect(0, 0, width, height);
-            canvas.drawBitmap(mBitmap, r, dstRect, null);
-
-            // Release bitmap memory as soon as possible
-            mImageView.clear();
-            mBitmap.recycle();
-
-            if (mCircleCrop) {
-                // OK, so what's all this about?
-                // Bitmaps are inherently rectangular but we want to return
-                // something that's basically a circle.  So we fill in the
-                // area around the circle with alpha.  Note the all important
-                // PortDuff.Mode.CLEAR.
-                Canvas c = new Canvas(croppedImage);
-                Path p = new Path();
-                p.addCircle(width / 2F, height / 2F, width / 2F,
-                        Path.Direction.CW);
-                c.clipPath(p, Region.Op.DIFFERENCE);
-                c.drawColor(0x00000000, PorterDuff.Mode.CLEAR);
-            }
-
-            // If the required dimension is specified, scale the image.
-            if (mOutputX != 0 && mOutputY != 0 && mScale) {
-                croppedImage = Util.transform(new Matrix(), croppedImage,
-                        mOutputX, mOutputY, mScaleUp, Util.RECYCLE_INPUT);
-            }
-        }
-
-        mImageView.setImageBitmapResetBase(croppedImage, true);
-        mImageView.center(true, true);
-        mImageView.mHighlightViews.clear();
-
-        // Return the cropped image directly or save it to the specified URI.
-        Bundle myExtras = getIntent().getExtras();
-        if (myExtras != null && (myExtras.getParcelable("data") != null
-                || myExtras.getBoolean("return-data"))) {
-            Bundle extras = new Bundle();
-            extras.putParcelable("data", croppedImage);
-            setResult(RESULT_OK,
-                    (new Intent()).setAction("inline-data").putExtras(extras));
-            finish();
-        } else {
-            final Bitmap b = croppedImage;
-            final int msdId = mSetWallpaper
-                    ? R.string.wallpaper
-                    : R.string.savingImage;
-            Util.startBackgroundJob(this, null,
-                    getResources().getString(msdId),
-                    new Runnable() {
-                public void run() {
-                    saveOutput(b);
-                }
-            }, mHandler);
-        }
-    }
-
-    private void saveOutput(Bitmap croppedImage) {
-        if (mSaveUri != null) {
-            OutputStream outputStream = null;
-            try {
-                outputStream = mContentResolver.openOutputStream(mSaveUri);
-                if (outputStream != null) {
-                    croppedImage.compress(mOutputFormat, 75, outputStream);
-                }
-            } catch (IOException ex) {
-                // TODO: report error to caller
-                Log.e(TAG, "Cannot open file: " + mSaveUri, ex);
-            } finally {
-                Util.closeSilently(outputStream);
-            }
-            Bundle extras = new Bundle();
-            setResult(RESULT_OK, new Intent(mSaveUri.toString())
-                    .putExtras(extras));
-        } else if (mSetWallpaper) {
-            try {
-                WallpaperManager.getInstance(this).setBitmap(croppedImage);
-                setResult(RESULT_OK);
-            } catch (IOException e) {
-                Log.e(TAG, "Failed to set wallpaper.", e);
-                setResult(RESULT_CANCELED);
-            }
-        } else {
-            Bundle extras = new Bundle();
-            extras.putString("rect", mCrop.getCropRect().toString());
-
-            File oldPath = new File(mImage.getDataPath());
-            File directory = new File(oldPath.getParent());
-
-            int x = 0;
-            String fileName = oldPath.getName();
-            fileName = fileName.substring(0, fileName.lastIndexOf("."));
-
-            // Try file-1.jpg, file-2.jpg, ... until we find a filename which
-            // does not exist yet.
-            while (true) {
-                x += 1;
-                String candidate = directory.toString()
-                        + "/" + fileName + "-" + x + ".jpg";
-                boolean exists = (new File(candidate)).exists();
-                if (!exists) {
-                    break;
-                }
-            }
-
-            try {
-                int[] degree = new int[1];
-                Uri newUri = ImageManager.addImage(
-                        mContentResolver,
-                        mImage.getTitle(),
-                        mImage.getDateTaken(),
-                        null,    // TODO this null is going to cause us to lose
-                                 // the location (gps).
-                        directory.toString(), fileName + "-" + x + ".jpg",
-                        croppedImage, null,
-                        degree);
-
-                setResult(RESULT_OK, new Intent()
-                        .setAction(newUri.toString())
-                        .putExtras(extras));
-            } catch (Exception ex) {
-                // basically ignore this or put up
-                // some ui saying we failed
-                Log.e(TAG, "store image fail, continue anyway", ex);
-            }
-        }
-
-        final Bitmap b = croppedImage;
-        mHandler.post(new Runnable() {
-            public void run() {
-                mImageView.clear();
-                b.recycle();
-            }
-        });
-
-        finish();
-    }
-
-    @Override
-    protected void onPause() {
-        super.onPause();
-    }
-
-    @Override
-    protected void onDestroy() {
-        if (mAllImages != null) {
-            mAllImages.close();
-        }
-        super.onDestroy();
-    }
-
-    Runnable mRunFaceDetection = new Runnable() {
-        @SuppressWarnings("hiding")
-        float mScale = 1F;
-        Matrix mImageMatrix;
-        FaceDetector.Face[] mFaces = new FaceDetector.Face[3];
-        int mNumFaces;
-
-        // For each face, we create a HightlightView for it.
-        private void handleFace(FaceDetector.Face f) {
-            PointF midPoint = new PointF();
-
-            int r = ((int) (f.eyesDistance() * mScale)) * 2;
-            f.getMidPoint(midPoint);
-            midPoint.x *= mScale;
-            midPoint.y *= mScale;
-
-            int midX = (int) midPoint.x;
-            int midY = (int) midPoint.y;
-
-            HighlightView hv = new HighlightView(mImageView);
-
-            int width = mBitmap.getWidth();
-            int height = mBitmap.getHeight();
-
-            Rect imageRect = new Rect(0, 0, width, height);
-
-            RectF faceRect = new RectF(midX, midY, midX, midY);
-            faceRect.inset(-r, -r);
-            if (faceRect.left < 0) {
-                faceRect.inset(-faceRect.left, -faceRect.left);
-            }
-
-            if (faceRect.top < 0) {
-                faceRect.inset(-faceRect.top, -faceRect.top);
-            }
-
-            if (faceRect.right > imageRect.right) {
-                faceRect.inset(faceRect.right - imageRect.right,
-                               faceRect.right - imageRect.right);
-            }
-
-            if (faceRect.bottom > imageRect.bottom) {
-                faceRect.inset(faceRect.bottom - imageRect.bottom,
-                               faceRect.bottom - imageRect.bottom);
-            }
-
-            hv.setup(mImageMatrix, imageRect, faceRect, mCircleCrop,
-                     mAspectX != 0 && mAspectY != 0);
-
-            mImageView.add(hv);
-        }
-
-        // Create a default HightlightView if we found no face in the picture.
-        private void makeDefault() {
-            HighlightView hv = new HighlightView(mImageView);
-
-            int width = mBitmap.getWidth();
-            int height = mBitmap.getHeight();
-
-            Rect imageRect = new Rect(0, 0, width, height);
-
-            // make the default size about 4/5 of the width or height
-            int cropWidth = Math.min(width, height) * 4 / 5;
-            int cropHeight = cropWidth;
-
-            if (mAspectX != 0 && mAspectY != 0) {
-                if (mAspectX > mAspectY) {
-                    cropHeight = cropWidth * mAspectY / mAspectX;
-                } else {
-                    cropWidth = cropHeight * mAspectX / mAspectY;
-                }
-            }
-
-            int x = (width - cropWidth) / 2;
-            int y = (height - cropHeight) / 2;
-
-            RectF cropRect = new RectF(x, y, x + cropWidth, y + cropHeight);
-            hv.setup(mImageMatrix, imageRect, cropRect, mCircleCrop,
-                     mAspectX != 0 && mAspectY != 0);
-            mImageView.add(hv);
-        }
-
-        // Scale the image down for faster face detection.
-        private Bitmap prepareBitmap() {
-            if (mBitmap == null) {
-                return null;
-            }
-
-            // 256 pixels wide is enough.
-            if (mBitmap.getWidth() > 256) {
-                mScale = 256.0F / mBitmap.getWidth();
-            }
-            Matrix matrix = new Matrix();
-            matrix.setScale(mScale, mScale);
-            Bitmap faceBitmap = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap
-                    .getWidth(), mBitmap.getHeight(), matrix, true);
-            return faceBitmap;
-        }
-
-        public void run() {
-            mImageMatrix = mImageView.getImageMatrix();
-            Bitmap faceBitmap = prepareBitmap();
-
-            mScale = 1.0F / mScale;
-            if (faceBitmap != null && mDoFaceDetection) {
-                FaceDetector detector = new FaceDetector(faceBitmap.getWidth(),
-                        faceBitmap.getHeight(), mFaces.length);
-                mNumFaces = detector.findFaces(faceBitmap, mFaces);
-            }
-
-            if (faceBitmap != null && faceBitmap != mBitmap) {
-                faceBitmap.recycle();
-            }
-
-            mHandler.post(new Runnable() {
-                public void run() {
-                    mWaitingToPick = mNumFaces > 1;
-                    if (mNumFaces > 0) {
-                        for (int i = 0; i < mNumFaces; i++) {
-                            handleFace(mFaces[i]);
-                        }
-                    } else {
-                        makeDefault();
-                    }
-                    mImageView.invalidate();
-                    if (mImageView.mHighlightViews.size() == 1) {
-                        mCrop = mImageView.mHighlightViews.get(0);
-                        mCrop.setFocus(true);
-                    }
-
-                    if (mNumFaces > 1) {
-                        Toast t = Toast.makeText(CropImage.this,
-                                R.string.multiface_crop_help,
-                                Toast.LENGTH_SHORT);
-                        t.show();
-                    }
-                }
-            });
-        }
-    };
-}
-
-class CropImageView extends ImageViewTouchBase {
-    ArrayList<HighlightView> mHighlightViews = new ArrayList<HighlightView>();
-    HighlightView mMotionHighlightView = null;
-    float mLastX, mLastY;
-    int mMotionEdge;
-
-    @Override
-    protected void onLayout(boolean changed, int left, int top,
-                            int right, int bottom) {
-        super.onLayout(changed, left, top, right, bottom);
-        if (mBitmapDisplayed.getBitmap() != null) {
-            for (HighlightView hv : mHighlightViews) {
-                hv.mMatrix.set(getImageMatrix());
-                hv.invalidate();
-                if (hv.mIsFocused) {
-                    centerBasedOnHighlightView(hv);
-                }
-            }
-        }
-    }
-
-    public CropImageView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    protected void zoomTo(float scale, float centerX, float centerY) {
-        super.zoomTo(scale, centerX, centerY);
-        for (HighlightView hv : mHighlightViews) {
-            hv.mMatrix.set(getImageMatrix());
-            hv.invalidate();
-        }
-    }
-
-    @Override
-    protected void zoomIn() {
-        super.zoomIn();
-        for (HighlightView hv : mHighlightViews) {
-            hv.mMatrix.set(getImageMatrix());
-            hv.invalidate();
-        }
-    }
-
-    @Override
-    protected void zoomOut() {
-        super.zoomOut();
-        for (HighlightView hv : mHighlightViews) {
-            hv.mMatrix.set(getImageMatrix());
-            hv.invalidate();
-        }
-    }
-
-    @Override
-    protected void postTranslate(float deltaX, float deltaY) {
-        super.postTranslate(deltaX, deltaY);
-        for (int i = 0; i < mHighlightViews.size(); i++) {
-            HighlightView hv = mHighlightViews.get(i);
-            hv.mMatrix.postTranslate(deltaX, deltaY);
-            hv.invalidate();
-        }
-    }
-
-    // According to the event's position, change the focus to the first
-    // hitting cropping rectangle.
-    private void recomputeFocus(MotionEvent event) {
-        for (int i = 0; i < mHighlightViews.size(); i++) {
-            HighlightView hv = mHighlightViews.get(i);
-            hv.setFocus(false);
-            hv.invalidate();
-        }
-
-        for (int i = 0; i < mHighlightViews.size(); i++) {
-            HighlightView hv = mHighlightViews.get(i);
-            int edge = hv.getHit(event.getX(), event.getY());
-            if (edge != HighlightView.GROW_NONE) {
-                if (!hv.hasFocus()) {
-                    hv.setFocus(true);
-                    hv.invalidate();
-                }
-                break;
-            }
-        }
-        invalidate();
-    }
-
-    @Override
-    public boolean onTouchEvent(MotionEvent event) {
-        CropImage cropImage = (CropImage) mContext;
-        if (cropImage.mSaving) {
-            return false;
-        }
-
-        switch (event.getAction()) {
-            case MotionEvent.ACTION_DOWN:
-                if (cropImage.mWaitingToPick) {
-                    recomputeFocus(event);
-                } else {
-                    for (int i = 0; i < mHighlightViews.size(); i++) {
-                        HighlightView hv = mHighlightViews.get(i);
-                        int edge = hv.getHit(event.getX(), event.getY());
-                        if (edge != HighlightView.GROW_NONE) {
-                            mMotionEdge = edge;
-                            mMotionHighlightView = hv;
-                            mLastX = event.getX();
-                            mLastY = event.getY();
-                            mMotionHighlightView.setMode(
-                                    (edge == HighlightView.MOVE)
-                                    ? HighlightView.ModifyMode.Move
-                                    : HighlightView.ModifyMode.Grow);
-                            break;
-                        }
-                    }
-                }
-                break;
-            case MotionEvent.ACTION_UP:
-                if (cropImage.mWaitingToPick) {
-                    for (int i = 0; i < mHighlightViews.size(); i++) {
-                        HighlightView hv = mHighlightViews.get(i);
-                        if (hv.hasFocus()) {
-                            cropImage.mCrop = hv;
-                            for (int j = 0; j < mHighlightViews.size(); j++) {
-                                if (j == i) {
-                                    continue;
-                                }
-                                mHighlightViews.get(j).setHidden(true);
-                            }
-                            centerBasedOnHighlightView(hv);
-                            ((CropImage) mContext).mWaitingToPick = false;
-                            return true;
-                        }
-                    }
-                } else if (mMotionHighlightView != null) {
-                    centerBasedOnHighlightView(mMotionHighlightView);
-                    mMotionHighlightView.setMode(
-                            HighlightView.ModifyMode.None);
-                }
-                mMotionHighlightView = null;
-                break;
-            case MotionEvent.ACTION_MOVE:
-                if (cropImage.mWaitingToPick) {
-                    recomputeFocus(event);
-                } else if (mMotionHighlightView != null) {
-                    mMotionHighlightView.handleMotion(mMotionEdge,
-                            event.getX() - mLastX,
-                            event.getY() - mLastY);
-                    mLastX = event.getX();
-                    mLastY = event.getY();
-
-                    if (true) {
-                        // This section of code is optional. It has some user
-                        // benefit in that moving the crop rectangle against
-                        // the edge of the screen causes scrolling but it means
-                        // that the crop rectangle is no longer fixed under
-                        // the user's finger.
-                        ensureVisible(mMotionHighlightView);
-                    }
-                }
-                break;
-        }
-
-        switch (event.getAction()) {
-            case MotionEvent.ACTION_UP:
-                center(true, true);
-                break;
-            case MotionEvent.ACTION_MOVE:
-                // if we're not zoomed then there's no point in even allowing
-                // the user to move the image around.  This call to center puts
-                // it back to the normalized location (with false meaning don't
-                // animate).
-                if (getScale() == 1F) {
-                    center(true, true);
-                }
-                break;
-        }
-
-        return true;
-    }
-
-    // Pan the displayed image to make sure the cropping rectangle is visible.
-    private void ensureVisible(HighlightView hv) {
-        Rect r = hv.mDrawRect;
-
-        int panDeltaX1 = Math.max(0, mLeft - r.left);
-        int panDeltaX2 = Math.min(0, mRight - r.right);
-
-        int panDeltaY1 = Math.max(0, mTop - r.top);
-        int panDeltaY2 = Math.min(0, mBottom - r.bottom);
-
-        int panDeltaX = panDeltaX1 != 0 ? panDeltaX1 : panDeltaX2;
-        int panDeltaY = panDeltaY1 != 0 ? panDeltaY1 : panDeltaY2;
-
-        if (panDeltaX != 0 || panDeltaY != 0) {
-            panBy(panDeltaX, panDeltaY);
-        }
-    }
-
-    // If the cropping rectangle's size changed significantly, change the
-    // view's center and scale according to the cropping rectangle.
-    private void centerBasedOnHighlightView(HighlightView hv) {
-        Rect drawRect = hv.mDrawRect;
-
-        float width = drawRect.width();
-        float height = drawRect.height();
-
-        float thisWidth = getWidth();
-        float thisHeight = getHeight();
-
-        float z1 = thisWidth / width * .6F;
-        float z2 = thisHeight / height * .6F;
-
-        float zoom = Math.min(z1, z2);
-        zoom = zoom * this.getScale();
-        zoom = Math.max(1F, zoom);
-
-        if ((Math.abs(zoom - getScale()) / zoom) > .1) {
-            float [] coordinates = new float[] {hv.mCropRect.centerX(),
-                                                hv.mCropRect.centerY()};
-            getImageMatrix().mapPoints(coordinates);
-            zoomTo(zoom, coordinates[0], coordinates[1], 300F);
-        }
-
-        ensureVisible(hv);
-    }
-
-    @Override
-    protected void onDraw(Canvas canvas) {
-        super.onDraw(canvas);
-        for (int i = 0; i < mHighlightViews.size(); i++) {
-            mHighlightViews.get(i).draw(canvas);
-        }
-    }
-
-    public void add(HighlightView hv) {
-        mHighlightViews.add(hv);
-        invalidate();
-    }
-}
diff --git a/src/com/android/camera/DeleteImage.java b/src/com/android/camera/DeleteImage.java
deleted file mode 100644
index 3a13466..0000000
--- a/src/com/android/camera/DeleteImage.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * 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;
-
-import android.app.Activity;
-import android.content.ContentResolver;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Handler;
-import android.widget.ProgressBar;
-
-import java.util.ArrayList;
-
-public class DeleteImage extends Activity {
-
-    @SuppressWarnings("unused")
-    private static final String TAG = "DeleteImage";
-    private ProgressBar mProgressBar;
-    private ArrayList<Uri> mUriList;  // a list of image uri
-    private int mIndex = 0;  // next image to delete
-    private final Handler mHandler = new Handler();
-    private final Runnable mDeleteNextRunnable = new Runnable() {
-        public void run() {
-            deleteNext();
-        }
-    };
-    private ContentResolver mContentResolver;
-    private boolean mPausing;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        Intent intent = getIntent();
-        mUriList = intent.getParcelableArrayListExtra("delete-uris");
-        if (mUriList == null) {
-            finish();
-        }
-        setContentView(R.layout.delete_image);
-        mProgressBar = (ProgressBar) findViewById(R.id.delete_progress);
-        mContentResolver = getContentResolver();
-    }
-
-    @Override
-    protected void onResume() {
-        super.onResume();
-        mPausing = false;
-        mHandler.post(mDeleteNextRunnable);
-    }
-
-    private void deleteNext() {
-        if (mPausing) return;
-        if (mIndex >= mUriList.size()) {
-            finish();
-            return;
-        }
-        Uri uri = mUriList.get(mIndex++);
-        // The max progress value of the bar is set to 10000 in the xml file.
-        mProgressBar.setProgress(mIndex * 10000 / mUriList.size());
-        mContentResolver.delete(uri, null, null);
-        mHandler.post(mDeleteNextRunnable);
-    }
-
-    @Override
-    protected void onPause() {
-        super.onPause();
-        mPausing = true;
-    }
-}
diff --git a/src/com/android/camera/EvenlySpacedLayout.java b/src/com/android/camera/EvenlySpacedLayout.java
index d994fe4..ec0f495 100644
--- a/src/com/android/camera/EvenlySpacedLayout.java
+++ b/src/com/android/camera/EvenlySpacedLayout.java
@@ -22,10 +22,11 @@
 import android.view.View;
 import android.view.ViewGroup;
 
-//
-// This is a layout which makes the children even spaced.
-// Currently it does not consider the padding parameters.
-//
+/**
+ * A layout which makes the children evenly spaced (horizontally or vertically).
+ *
+ * <p>Currently it does not consider the padding parameters.
+ */
 public class EvenlySpacedLayout extends ViewGroup {
     private boolean mHorizontal;
 
diff --git a/src/com/android/camera/GalleryPicker.java b/src/com/android/camera/GalleryPicker.java
deleted file mode 100644
index 39d1d1e..0000000
--- a/src/com/android/camera/GalleryPicker.java
+++ /dev/null
@@ -1,943 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.camera;
-
-import com.android.camera.gallery.IImage;
-import com.android.camera.gallery.IImageList;
-
-import android.app.Activity;
-import android.app.Dialog;
-import android.app.ProgressDialog;
-import android.content.BroadcastReceiver;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.res.Resources;
-import android.database.ContentObserver;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Matrix;
-import android.graphics.Paint;
-import android.graphics.PorterDuff;
-import android.graphics.PorterDuffXfermode;
-import android.graphics.Rect;
-import android.graphics.drawable.Drawable;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Environment;
-import android.os.Handler;
-import android.os.StatFs;
-import android.provider.MediaStore;
-import android.provider.MediaStore.Images;
-import android.util.Log;
-import android.view.ContextMenu;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.ContextMenu.ContextMenuInfo;
-import android.view.MenuItem.OnMenuItemClickListener;
-import android.widget.AdapterView;
-import android.widget.BaseAdapter;
-import android.widget.GridView;
-import android.widget.TextView;
-import android.widget.Toast;
-import android.widget.AdapterView.AdapterContextMenuInfo;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * The GalleryPicker activity.
- */
-public class GalleryPicker extends Activity {
-    private static final String TAG = "GalleryPicker";
-
-    Handler mHandler = new Handler();  // handler for the main thread
-    Thread mWorkerThread;
-    BroadcastReceiver mReceiver;
-    ContentObserver mDbObserver;
-    GridView mGridView;
-    GalleryPickerAdapter mAdapter;  // mAdapter is only accessed in main thread.
-    boolean mScanning;
-    boolean mUnmounted;
-
-    @Override
-    public void onCreate(Bundle icicle) {
-        super.onCreate(icicle);
-
-        setContentView(R.layout.gallerypicker);
-
-        mGridView = (GridView) findViewById(R.id.albums);
-
-        mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
-            public void onItemClick(AdapterView<?> parent, View view,
-                                    int position, long id) {
-                launchFolderGallery(position);
-            }
-        });
-
-        mGridView.setOnCreateContextMenuListener(
-                new View.OnCreateContextMenuListener() {
-                    public void onCreateContextMenu(ContextMenu menu, View v,
-                        final ContextMenuInfo menuInfo) {
-                            onCreateGalleryPickerContextMenu(menu, menuInfo);
-                    }
-                });
-
-        mReceiver = new BroadcastReceiver() {
-            @Override
-            public void onReceive(Context context, Intent intent) {
-                onReceiveMediaBroadcast(intent);
-            }
-        };
-
-        mDbObserver = new ContentObserver(mHandler) {
-            @Override
-            public void onChange(boolean selfChange) {
-                rebake(false, ImageManager.isMediaScannerScanning(
-                        getContentResolver()));
-            }
-        };
-
-        ImageManager.ensureOSXCompatibleFolder();
-    }
-
-    Dialog mMediaScanningDialog;
-
-    // Display a dialog if the storage is being scanned now.
-    public void updateScanningDialog(boolean scanning) {
-        boolean prevScanning = (mMediaScanningDialog != null);
-        if (prevScanning == scanning && mAdapter.mItems.size() == 0) return;
-        // Now we are certain the state is changed.
-        if (prevScanning) {
-            mMediaScanningDialog.cancel();
-            mMediaScanningDialog = null;
-        } else if (scanning && mAdapter.mItems.size() == 0) {
-            mMediaScanningDialog = ProgressDialog.show(
-                    this,
-                    null,
-                    getResources().getString(R.string.wait),
-                    true,
-                    true);
-        }
-    }
-
-    private View mNoImagesView;
-
-    // Show/Hide the "no images" icon and text. Load resources on demand.
-    private void showNoImagesView() {
-        if (mNoImagesView == null) {
-            ViewGroup root  = (ViewGroup) findViewById(R.id.root);
-            getLayoutInflater().inflate(R.layout.gallerypicker_no_images, root);
-            mNoImagesView = findViewById(R.id.no_images);
-        }
-        mNoImagesView.setVisibility(View.VISIBLE);
-    }
-
-    private void hideNoImagesView() {
-        if (mNoImagesView != null) {
-            mNoImagesView.setVisibility(View.GONE);
-        }
-    }
-
-    // The storage status is changed, restart the worker or show "no images".
-    private void rebake(boolean unmounted, boolean scanning) {
-        if (unmounted == mUnmounted && scanning == mScanning) return;
-        abortWorker();
-        mUnmounted = unmounted;
-        mScanning = scanning;
-        updateScanningDialog(mScanning);
-        if (mUnmounted) {
-            showNoImagesView();
-        } else {
-            hideNoImagesView();
-            startWorker();
-        }
-    }
-
-    // This is called when we receive media-related broadcast.
-    private void onReceiveMediaBroadcast(Intent intent) {
-        String action = intent.getAction();
-        if (action.equals(Intent.ACTION_MEDIA_MOUNTED)) {
-            // SD card available
-            // TODO put up a "please wait" message
-        } else if (action.equals(Intent.ACTION_MEDIA_UNMOUNTED)) {
-            // SD card unavailable
-            rebake(true, false);
-        } else if (action.equals(Intent.ACTION_MEDIA_SCANNER_STARTED)) {
-            rebake(false, true);
-        } else if (action.equals(
-                Intent.ACTION_MEDIA_SCANNER_FINISHED)) {
-            rebake(false, false);
-        } else if (action.equals(Intent.ACTION_MEDIA_EJECT)) {
-            rebake(true, false);
-        }
-    }
-
-    private void launchFolderGallery(int position) {
-        mAdapter.mItems.get(position).launch(this);
-    }
-
-    private void onCreateGalleryPickerContextMenu(ContextMenu menu,
-            final ContextMenuInfo menuInfo) {
-        int position = ((AdapterContextMenuInfo) menuInfo).position;
-        menu.setHeaderTitle(mAdapter.baseTitleForPosition(position));
-        // "Slide Show"
-        if ((mAdapter.getIncludeMediaTypes(position)
-                & ImageManager.INCLUDE_IMAGES) != 0) {
-            menu.add(R.string.slide_show)
-                    .setOnMenuItemClickListener(new OnMenuItemClickListener() {
-                        public boolean onMenuItemClick(MenuItem item) {
-                            return onSlideShowClicked(menuInfo);
-                        }
-                    });
-        }
-        // "View"
-        menu.add(R.string.view)
-                .setOnMenuItemClickListener(new OnMenuItemClickListener() {
-                    public boolean onMenuItemClick(MenuItem item) {
-                            return onViewClicked(menuInfo);
-                    }
-                });
-    }
-
-    // This is called when the user clicks "Slideshow" from the context menu.
-    private boolean onSlideShowClicked(ContextMenuInfo menuInfo) {
-        AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
-        int position = info.position;
-
-        if (position < 0 || position >= mAdapter.mItems.size()) {
-            return true;
-        }
-        // Slide show starts from the first image on the list.
-        Item item = mAdapter.mItems.get(position);
-        Uri targetUri = item.mFirstImageUri;
-
-        if (targetUri != null && item.mBucketId != null) {
-            targetUri = targetUri.buildUpon()
-                    .appendQueryParameter("bucketId", item.mBucketId)
-                    .build();
-        }
-        Intent intent = new Intent(Intent.ACTION_VIEW, targetUri);
-        intent.putExtra("slideshow", true);
-        startActivity(intent);
-        return true;
-    }
-
-    // This is called when the user clicks "View" from the context menu.
-    private boolean onViewClicked(ContextMenuInfo menuInfo) {
-        AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
-        launchFolderGallery(info.position);
-        return true;
-    }
-
-    @Override
-    public void onStop() {
-        super.onStop();
-
-        abortWorker();
-
-        unregisterReceiver(mReceiver);
-        getContentResolver().unregisterContentObserver(mDbObserver);
-
-        // free up some ram
-        mAdapter = null;
-        mGridView.setAdapter(null);
-        unloadDrawable();
-    }
-
-    @Override
-    public void onStart() {
-        super.onStart();
-
-        mAdapter = new GalleryPickerAdapter(getLayoutInflater());
-        mGridView.setAdapter(mAdapter);
-
-        // install an intent filter to receive SD card related events.
-        IntentFilter intentFilter = new IntentFilter();
-        intentFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);
-        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_EJECT);
-        intentFilter.addDataScheme("file");
-
-        registerReceiver(mReceiver, intentFilter);
-
-        getContentResolver().registerContentObserver(
-                MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
-                true, mDbObserver);
-
-        // Assume the storage is mounted and not scanning.
-        mUnmounted = false;
-        mScanning = false;
-        startWorker();
-    }
-
-    // This is used to stop the worker thread.
-    volatile boolean mAbort = false;
-
-    // Create the worker thread.
-    private void startWorker() {
-        mAbort = false;
-        mWorkerThread = new Thread("GalleryPicker Worker") {
-            @Override
-            public void run() {
-                workerRun();
-            }
-        };
-        BitmapManager.instance().allowThreadDecoding(mWorkerThread);
-        mWorkerThread.start();
-    }
-
-    private void abortWorker() {
-        if (mWorkerThread != null) {
-            BitmapManager.instance().cancelThreadDecoding(mWorkerThread);
-            MediaStore.Images.Thumbnails.cancelThumbnailRequest(getContentResolver(), -1);
-            mAbort = true;
-            try {
-                mWorkerThread.join();
-            } catch (InterruptedException ex) {
-                Log.e(TAG, "join interrupted");
-            }
-            mWorkerThread = null;
-            // Remove all runnables in mHandler.
-            // (We assume that the "what" field in the messages are 0
-            // for runnables).
-            mHandler.removeMessages(0);
-            mAdapter.clear();
-            mAdapter.updateDisplay();
-            clearImageLists();
-        }
-    }
-
-    // This is run in the worker thread.
-    private void workerRun() {
-
-        // We collect items from checkImageList() and checkBucketIds() and
-        // put them in allItems. Later we give allItems to checkThumbBitmap()
-        // and generated thumbnail bitmaps for each item. We do this instead of
-        // generating thumbnail bitmaps in checkImageList() and checkBucketIds()
-        // because we want to show all the folders first, then update them with
-        // the thumb bitmaps. (Generating thumbnail bitmaps takes some time.)
-        ArrayList<Item> allItems = new ArrayList<Item>();
-
-        checkScanning();
-        if (mAbort) return;
-
-        checkImageList(allItems);
-        if (mAbort) return;
-
-        checkBucketIds(allItems);
-        if (mAbort) return;
-
-        checkThumbBitmap(allItems);
-        if (mAbort) return;
-
-        checkLowStorage();
-    }
-
-    // This is run in the worker thread.
-    private void checkScanning() {
-        ContentResolver cr = getContentResolver();
-        final boolean scanning =
-                ImageManager.isMediaScannerScanning(cr);
-        mHandler.post(new Runnable() {
-                    public void run() {
-                        checkScanningFinished(scanning);
-                    }
-                });
-    }
-
-    // This is run in the main thread.
-    private void checkScanningFinished(boolean scanning) {
-        updateScanningDialog(scanning);
-    }
-
-    // This is run in the worker thread.
-    private void checkImageList(ArrayList<Item> allItems) {
-        int length = IMAGE_LIST_DATA.length;
-        IImageList[] lists = new IImageList[length];
-        for (int i = 0; i < length; i++) {
-            ImageListData data = IMAGE_LIST_DATA[i];
-            lists[i] = createImageList(data.mInclude, data.mBucketId,
-                    getContentResolver());
-            if (mAbort) return;
-            Item item = null;
-
-            if (lists[i].isEmpty()) continue;
-
-            // i >= 3 means we are looking at All Images/All Videos.
-            // lists[i-3] is the corresponding Camera Images/Camera Videos.
-            // We want to add the "All" list only if it's different from
-            // the "Camera" list.
-            if (i >= 3 && lists[i].getCount() == lists[i - 3].getCount()) {
-                continue;
-            }
-
-            item = new Item(data.mType,
-                            data.mBucketId,
-                            getResources().getString(data.mStringId),
-                            lists[i]);
-
-            allItems.add(item);
-
-            final Item finalItem = item;
-            mHandler.post(new Runnable() {
-                        public void run() {
-                            updateItem(finalItem);
-                        }
-                    });
-        }
-    }
-
-    // This is run in the main thread.
-    private void updateItem(Item item) {
-        // Hide NoImageView if we are going to add the first item
-        if (mAdapter.getCount() == 0) {
-            hideNoImagesView();
-        }
-        mAdapter.addItem(item);
-        mAdapter.updateDisplay();
-    }
-
-    private static final String CAMERA_BUCKET =
-            ImageManager.CAMERA_IMAGE_BUCKET_ID;
-
-    // This is run in the worker thread.
-    private void checkBucketIds(ArrayList<Item> allItems) {
-        final IImageList allImages;
-        if (!mScanning && !mUnmounted) {
-            allImages = ImageManager.makeImageList(
-                    getContentResolver(),
-                    ImageManager.DataLocation.ALL,
-                    ImageManager.INCLUDE_IMAGES | ImageManager.INCLUDE_VIDEOS,
-                    ImageManager.SORT_DESCENDING,
-                    null);
-        } else {
-            allImages = ImageManager.makeEmptyImageList();
-        }
-
-        if (mAbort) {
-            allImages.close();
-            return;
-        }
-
-        HashMap<String, String> hashMap = allImages.getBucketIds();
-        allImages.close();
-        if (mAbort) return;
-
-        for (Map.Entry<String, String> entry : hashMap.entrySet()) {
-            String key = entry.getKey();
-            if (key == null) {
-                continue;
-            }
-            if (!key.equals(CAMERA_BUCKET)) {
-                IImageList list = createImageList(
-                        ImageManager.INCLUDE_IMAGES
-                        | ImageManager.INCLUDE_VIDEOS, key,
-                        getContentResolver());
-                if (mAbort) return;
-
-                Item item = new Item(Item.TYPE_NORMAL_FOLDERS, key,
-                        entry.getValue(), list);
-
-                allItems.add(item);
-
-                final Item finalItem = item;
-                mHandler.post(new Runnable() {
-                            public void run() {
-                                updateItem(finalItem);
-                            }
-                        });
-            }
-        }
-
-        mHandler.post(new Runnable() {
-                    public void run() {
-                        checkBucketIdsFinished();
-                    }
-                });
-    }
-
-    // This is run in the main thread.
-    private void checkBucketIdsFinished() {
-
-        // If we just have one folder, open it.
-        // If we have zero folder, show the "no images" icon.
-        if (!mScanning) {
-            int numItems = mAdapter.mItems.size();
-            if (numItems == 0) {
-                showNoImagesView();
-            } else if (numItems == 1) {
-                mAdapter.mItems.get(0).launch(this);
-                finish();
-                return;
-            }
-        }
-    }
-
-    private static final int THUMB_SIZE = 142;
-    // This is run in the worker thread.
-    private void checkThumbBitmap(ArrayList<Item> allItems) {
-        for (Item item : allItems) {
-            final Bitmap b = makeMiniThumbBitmap(THUMB_SIZE, THUMB_SIZE,
-                    item.mImageList);
-            if (mAbort) {
-                if (b != null) b.recycle();
-                return;
-            }
-
-            final Item finalItem = item;
-            mHandler.post(new Runnable() {
-                        public void run() {
-                            updateThumbBitmap(finalItem, b);
-                        }
-                    });
-        }
-    }
-
-    // This is run in the main thread.
-    private void updateThumbBitmap(Item item, Bitmap b) {
-        item.setThumbBitmap(b);
-        mAdapter.updateDisplay();
-    }
-
-    private static final long LOW_STORAGE_THRESHOLD = 1024 * 1024 * 2;
-
-    // This is run in the worker thread.
-    private void checkLowStorage() {
-        // 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() {
-                        checkLowStorageFinished();
-                    }
-                });
-            }
-        }
-    }
-
-    // This is run in the main thread.
-    // This is called only if the storage is low.
-    private void checkLowStorageFinished() {
-        Toast.makeText(GalleryPicker.this, R.string.not_enough_space, 5000)
-                .show();
-    }
-
-    // IMAGE_LIST_DATA stores the parameters for the four image lists
-    // we are interested in. The order of the IMAGE_LIST_DATA array is
-    // significant (See the implementation of GalleryPickerAdapter.init).
-    private static final class ImageListData {
-        ImageListData(int type, int include, String bucketId, int stringId) {
-            mType = type;
-            mInclude = include;
-            mBucketId = bucketId;
-            mStringId = stringId;
-        }
-        int mType;
-        int mInclude;
-        String mBucketId;
-        int mStringId;
-    }
-
-    private static final ImageListData[] IMAGE_LIST_DATA = {
-        // Camera Images
-        new ImageListData(Item.TYPE_CAMERA_IMAGES,
-                          ImageManager.INCLUDE_IMAGES,
-                          ImageManager.CAMERA_IMAGE_BUCKET_ID,
-                          R.string.gallery_camera_bucket_name),
-        // Camera Videos
-        new ImageListData(Item.TYPE_CAMERA_VIDEOS,
-                          ImageManager.INCLUDE_VIDEOS,
-                          ImageManager.CAMERA_IMAGE_BUCKET_ID,
-                          R.string.gallery_camera_videos_bucket_name),
-
-        // Camera Medias
-        new ImageListData(Item.TYPE_CAMERA_MEDIAS,
-                ImageManager.INCLUDE_VIDEOS | ImageManager.INCLUDE_IMAGES,
-                ImageManager.CAMERA_IMAGE_BUCKET_ID,
-                R.string.gallery_camera_media_bucket_name),
-
-        // All Images
-        new ImageListData(Item.TYPE_ALL_IMAGES,
-                          ImageManager.INCLUDE_IMAGES,
-                          null,
-                          R.string.all_images),
-
-        // All Videos
-        new ImageListData(Item.TYPE_ALL_VIDEOS,
-                          ImageManager.INCLUDE_VIDEOS,
-                          null,
-                          R.string.all_videos),
-    };
-
-
-    // These drawables are loaded on-demand.
-    Drawable mFrameGalleryMask;
-    Drawable mCellOutline;
-    Drawable mVideoOverlay;
-
-    private void loadDrawableIfNeeded() {
-        if (mFrameGalleryMask != null) return;  // already loaded
-        Resources r = getResources();
-        mFrameGalleryMask = r.getDrawable(
-                R.drawable.frame_gallery_preview_album_mask);
-        mCellOutline = r.getDrawable(android.R.drawable.gallery_thumb);
-        mVideoOverlay = r.getDrawable(R.drawable.ic_gallery_video_overlay);
-    }
-
-    private void unloadDrawable() {
-        mFrameGalleryMask = null;
-        mCellOutline = null;
-        mVideoOverlay = null;
-    }
-
-    private static void placeImage(Bitmap image, Canvas c, Paint paint,
-            int imageWidth, int widthPadding, int imageHeight,
-            int heightPadding, int offsetX, int offsetY,
-            int pos) {
-        int row = pos / 2;
-        int col = pos - (row * 2);
-
-        int xPos = (col * (imageWidth + widthPadding)) - offsetX;
-        int yPos = (row * (imageHeight + heightPadding)) - offsetY;
-
-        c.drawBitmap(image, xPos, yPos, paint);
-    }
-
-    // This is run in worker thread.
-    private Bitmap makeMiniThumbBitmap(int width, int height,
-            IImageList images) {
-        int count = images.getCount();
-        // We draw three different version of the folder image depending on the
-        // number of images in the folder.
-        //    For a single image, that image draws over the whole folder.
-        //    For two or three images, we draw the two most recent photos.
-        //    For four or more images, we draw four photos.
-        final int padding = 4;
-        int imageWidth = width;
-        int imageHeight = height;
-        int offsetWidth = 0;
-        int offsetHeight = 0;
-
-        imageWidth = (imageWidth - padding) / 2;  // 2 here because we show two
-                                                  // images
-        imageHeight = (imageHeight - padding) / 2;  // per row and column
-
-        final Paint p = new Paint();
-        final Bitmap b = Bitmap.createBitmap(width, height,
-                Bitmap.Config.ARGB_8888);
-        final Canvas c = new Canvas(b);
-        final Matrix m = new Matrix();
-
-        // draw the whole canvas as transparent
-        p.setColor(0x00000000);
-        c.drawPaint(p);
-
-        // load the drawables
-        loadDrawableIfNeeded();
-
-        // draw the mask normally
-        p.setColor(0xFFFFFFFF);
-        mFrameGalleryMask.setBounds(0, 0, width, height);
-        mFrameGalleryMask.draw(c);
-
-        Paint pdpaint = new Paint();
-        pdpaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
-
-        pdpaint.setStyle(Paint.Style.FILL);
-        c.drawRect(0, 0, width, height, pdpaint);
-
-        for (int i = 0; i < 4; i++) {
-            if (mAbort) {
-                return null;
-            }
-
-            Bitmap temp = null;
-            IImage image = i < count ? images.getImageAt(i) : null;
-
-            if (image != null) {
-                temp = image.miniThumbBitmap();
-            }
-
-            if (temp != null) {
-                if (ImageManager.isVideo(image)) {
-                    Bitmap newMap = temp.copy(temp.getConfig(), true);
-                    Canvas overlayCanvas = new Canvas(newMap);
-                    int overlayWidth = mVideoOverlay.getIntrinsicWidth();
-                    int overlayHeight = mVideoOverlay.getIntrinsicHeight();
-                    int left = (newMap.getWidth() - overlayWidth) / 2;
-                    int top = (newMap.getHeight() - overlayHeight) / 2;
-                    Rect newBounds = new Rect(left, top, left + overlayWidth,
-                            top + overlayHeight);
-                    mVideoOverlay.setBounds(newBounds);
-                    mVideoOverlay.draw(overlayCanvas);
-                    temp.recycle();
-                    temp = newMap;
-                }
-
-                temp = Util.transform(m, temp, imageWidth,
-                        imageHeight, true, Util.RECYCLE_INPUT);
-            }
-
-            Bitmap thumb = Bitmap.createBitmap(imageWidth, imageHeight,
-                                               Bitmap.Config.ARGB_8888);
-            Canvas tempCanvas = new Canvas(thumb);
-            if (temp != null) {
-                tempCanvas.drawBitmap(temp, new Matrix(), new Paint());
-            }
-            mCellOutline.setBounds(0, 0, imageWidth, imageHeight);
-            mCellOutline.draw(tempCanvas);
-
-            placeImage(thumb, c, pdpaint, imageWidth, padding, imageHeight,
-                       padding, offsetWidth, offsetHeight, i);
-
-            thumb.recycle();
-
-            if (temp != null) {
-                temp.recycle();
-            }
-        }
-
-        return b;
-    }
-
-    @Override
-    public boolean onCreateOptionsMenu(Menu menu) {
-        super.onCreateOptionsMenu(menu);
-
-        MenuHelper.addCaptureMenuItems(menu, this);
-
-        menu.add(Menu.NONE, Menu.NONE, MenuHelper.POSITION_GALLERY_SETTING,
-                R.string.camerasettings)
-                .setOnMenuItemClickListener(new OnMenuItemClickListener() {
-                    public boolean onMenuItemClick(MenuItem item) {
-                        Intent preferences = new Intent();
-                        preferences.setClass(GalleryPicker.this,
-                                             GallerySettings.class);
-                        startActivity(preferences);
-                        return true;
-                    }
-                })
-                .setAlphabeticShortcut('p')
-                .setIcon(android.R.drawable.ic_menu_preferences);
-
-        return true;
-    }
-
-    // image lists created by createImageList() are collected in mAllLists.
-    // They will be closed in clearImageList, so they don't hold open files
-    // on SD card. We will be killed if we don't close files when the SD card
-    // is unmounted.
-    ArrayList<IImageList> mAllLists = new ArrayList<IImageList>();
-
-    private IImageList createImageList(int mediaTypes, String bucketId,
-            ContentResolver cr) {
-        IImageList list = ImageManager.makeImageList(
-                cr,
-                ImageManager.DataLocation.ALL,
-                mediaTypes,
-                ImageManager.SORT_DESCENDING,
-                bucketId);
-        mAllLists.add(list);
-        return list;
-    }
-
-    private void clearImageLists() {
-        for (IImageList list : mAllLists) {
-            list.close();
-        }
-        mAllLists.clear();
-    }
-}
-
-// Item is the underlying data for GalleryPickerAdapter.
-// It is passed from the activity to the adapter.
-class Item {
-    public static final int TYPE_NONE = -1;
-    public static final int TYPE_ALL_IMAGES = 0;
-    public static final int TYPE_ALL_VIDEOS = 1;
-    public static final int TYPE_CAMERA_IMAGES = 2;
-    public static final int TYPE_CAMERA_VIDEOS = 3;
-    public static final int TYPE_CAMERA_MEDIAS = 4;
-    public static final int TYPE_NORMAL_FOLDERS = 5;
-
-    public final int mType;
-    public final String mBucketId;
-    public final String mName;
-    public final IImageList mImageList;
-    public final int mCount;
-    public final Uri mFirstImageUri;  // could be null if the list is empty
-
-    // The thumbnail bitmap is set by setThumbBitmap() later because we want
-    // to let the user sees the folder icon as soon as possible (and possibly
-    // select them), then present more detailed information when we have it.
-    public Bitmap mThumbBitmap;  // the thumbnail bitmap for the image list
-
-    public Item(int type, String bucketId, String name, IImageList list) {
-        mType = type;
-        mBucketId = bucketId;
-        mName = name;
-        mImageList = list;
-        mCount = list.getCount();
-        if (mCount > 0) {
-            mFirstImageUri = list.getImageAt(0).fullSizeImageUri();
-        } else {
-            mFirstImageUri = null;
-        }
-    }
-
-    public void setThumbBitmap(Bitmap thumbBitmap) {
-        mThumbBitmap = thumbBitmap;
-    }
-
-    public boolean needsBucketId() {
-        return mType >= TYPE_CAMERA_IMAGES;
-    }
-
-    public void launch(Activity activity) {
-        Uri uri = Images.Media.INTERNAL_CONTENT_URI;
-        if (needsBucketId()) {
-            uri = uri.buildUpon()
-                    .appendQueryParameter("bucketId", mBucketId).build();
-        }
-        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
-        intent.putExtra("windowTitle", mName);
-        intent.putExtra("mediaTypes", getIncludeMediaTypes());
-        activity.startActivity(intent);
-    }
-
-    public int getIncludeMediaTypes() {
-        return convertItemTypeToIncludedMediaType(mType);
-    }
-
-    public static int convertItemTypeToIncludedMediaType(int itemType) {
-        switch (itemType) {
-        case TYPE_ALL_IMAGES:
-        case TYPE_CAMERA_IMAGES:
-            return ImageManager.INCLUDE_IMAGES;
-        case TYPE_ALL_VIDEOS:
-        case TYPE_CAMERA_VIDEOS:
-            return ImageManager.INCLUDE_VIDEOS;
-        case TYPE_NORMAL_FOLDERS:
-        case TYPE_CAMERA_MEDIAS:
-        default:
-            return ImageManager.INCLUDE_IMAGES
-                    | ImageManager.INCLUDE_VIDEOS;
-        }
-    }
-
-    public int getOverlay() {
-        switch (mType) {
-            case TYPE_ALL_IMAGES:
-            case TYPE_CAMERA_IMAGES:
-                return R.drawable.frame_overlay_gallery_camera;
-            case TYPE_ALL_VIDEOS:
-            case TYPE_CAMERA_VIDEOS:
-            case TYPE_CAMERA_MEDIAS:
-                return R.drawable.frame_overlay_gallery_video;
-            case TYPE_NORMAL_FOLDERS:
-            default:
-                return R.drawable.frame_overlay_gallery_folder;
-        }
-    }
-}
-
-class GalleryPickerAdapter extends BaseAdapter {
-    ArrayList<Item> mItems = new ArrayList<Item>();
-    LayoutInflater mInflater;
-
-    GalleryPickerAdapter(LayoutInflater inflater) {
-        mInflater = inflater;
-    }
-
-    public void addItem(Item item) {
-        mItems.add(item);
-    }
-
-    public void updateDisplay() {
-        notifyDataSetChanged();
-    }
-
-    public void clear() {
-        mItems.clear();
-    }
-
-    public int getCount() {
-        return mItems.size();
-    }
-
-    public Object getItem(int position) {
-        return null;
-    }
-
-    public long getItemId(int position) {
-        return position;
-    }
-
-    public String baseTitleForPosition(int position) {
-        return mItems.get(position).mName;
-    }
-
-    public int getIncludeMediaTypes(int position) {
-        return mItems.get(position).getIncludeMediaTypes();
-    }
-
-    public View getView(final int position, View convertView,
-                        ViewGroup parent) {
-        View v;
-
-        if (convertView == null) {
-            v = mInflater.inflate(R.layout.gallery_picker_item, null);
-        } else {
-            v = convertView;
-        }
-
-        TextView titleView = (TextView) v.findViewById(R.id.title);
-
-        GalleryPickerItem iv =
-                (GalleryPickerItem) v.findViewById(R.id.thumbnail);
-        Item item = mItems.get(position);
-        iv.setOverlay(item.getOverlay());
-        if (item.mThumbBitmap != null) {
-            iv.setImageBitmap(item.mThumbBitmap);
-            String title = item.mName + " (" + item.mCount + ")";
-            titleView.setText(title);
-        } else {
-            iv.setImageResource(android.R.color.transparent);
-            titleView.setText(item.mName);
-        }
-
-        // An workaround due to a bug in TextView. If the length of text is
-        // different from the previous in convertView, the layout would be
-        // wrong.
-        titleView.requestLayout();
-
-        return v;
-    }
-}
diff --git a/src/com/android/camera/GalleryPickerItem.java b/src/com/android/camera/GalleryPickerItem.java
deleted file mode 100644
index 99e4a58..0000000
--- a/src/com/android/camera/GalleryPickerItem.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.camera;
-
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.Rect;
-import android.graphics.drawable.Drawable;
-import android.util.AttributeSet;
-import android.widget.ImageView;
-
-class GalleryPickerItem extends ImageView {
-    private Drawable mFrame;
-    private Rect mFrameBounds = new Rect();
-    private Drawable mOverlay;
-
-    public GalleryPickerItem(Context context) {
-        this(context, null);
-    }
-
-    public GalleryPickerItem(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public GalleryPickerItem(Context context,
-                             AttributeSet attrs,
-                             int defStyle) {
-        super(context, attrs, defStyle);
-
-        mFrame = getResources().getDrawable(R.drawable.frame_gallery_preview);
-        mFrame.setCallback(this);
-    }
-
-    @Override
-    protected boolean verifyDrawable(Drawable who) {
-        return super.verifyDrawable(who) || (who == mFrame)
-                || (who == mOverlay);
-    }
-
-    @Override
-    protected void drawableStateChanged() {
-        super.drawableStateChanged();
-        if (mFrame != null) {
-            int[] drawableState = getDrawableState();
-            mFrame.setState(drawableState);
-        }
-    }
-
-    @Override
-    protected void onDraw(Canvas canvas) {
-        super.onDraw(canvas);
-        final Rect frameBounds = mFrameBounds;
-        if (frameBounds.isEmpty()) {
-            final int w = getWidth();
-            final int h = getHeight();
-
-            frameBounds.set(0, 0, w, h);
-            mFrame.setBounds(frameBounds);
-            if (mOverlay != null) {
-                mOverlay.setBounds(w - mOverlay.getIntrinsicWidth(),
-                        h - mOverlay.getIntrinsicHeight(), w, h);
-            }
-        }
-
-        mFrame.draw(canvas);
-        if (mOverlay != null) {
-            mOverlay.draw(canvas);
-        }
-    }
-
-
-    @Override
-    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
-        super.onSizeChanged(w, h, oldw, oldh);
-
-        mFrameBounds.setEmpty();
-    }
-
-    public void setOverlay(int overlayId) {
-        if (overlayId >= 0) {
-            mOverlay = getResources().getDrawable(overlayId);
-            mFrameBounds.setEmpty();
-        } else {
-            mOverlay = null;
-        }
-    }
-}
diff --git a/src/com/android/camera/GallerySettings.java b/src/com/android/camera/GallerySettings.java
deleted file mode 100644
index 32c806c..0000000
--- a/src/com/android/camera/GallerySettings.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.camera;
-
-import android.os.Bundle;
-import android.preference.PreferenceActivity;
-
-// GallerySettings
-//
-// This is the setting screen for Gallery.
-// It reads the available settings from an XML resource.
-public class GallerySettings extends PreferenceActivity {
-    @Override
-    public void onCreate(Bundle icicle) {
-        super.onCreate(icicle);
-        addPreferencesFromResource(R.xml.gallery_preferences);
-    }
-}
diff --git a/src/com/android/camera/GridViewSpecial.java b/src/com/android/camera/GridViewSpecial.java
deleted file mode 100644
index 5326ebb..0000000
--- a/src/com/android/camera/GridViewSpecial.java
+++ /dev/null
@@ -1,1169 +0,0 @@
-/*
- * 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;
-
-import static com.android.camera.Util.Assert;
-
-import android.app.Activity;
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.graphics.Rect;
-import android.graphics.drawable.Drawable;
-import android.media.AudioManager;
-import android.os.Handler;
-import android.util.AttributeSet;
-import android.util.DisplayMetrics;
-import android.view.GestureDetector;
-import android.view.KeyEvent;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewConfiguration;
-import android.view.GestureDetector.SimpleOnGestureListener;
-import android.widget.Scroller;
-
-import com.android.camera.gallery.IImage;
-import com.android.camera.gallery.IImageList;
-
-import java.util.HashMap;
-
-class GridViewSpecial extends View {
-    @SuppressWarnings("unused")
-    private static final String TAG = "GridViewSpecial";
-    private static final float MAX_FLING_VELOCITY = 2500;
-
-    public static interface Listener {
-        public void onImageClicked(int index);
-        public void onImageTapped(int index);
-        public void onLayoutComplete(boolean changed);
-
-        /**
-         * Invoked when the <code>GridViewSpecial</code> scrolls.
-         *
-         * @param scrollPosition the position of the scroller in the range
-         *         [0, 1], when 0 means on the top and 1 means on the buttom
-         */
-        public void onScroll(float scrollPosition);
-    }
-
-    public static interface DrawAdapter {
-        public void drawImage(Canvas canvas, IImage image,
-                Bitmap b, int xPos, int yPos, int w, int h);
-        public void drawDecoration(Canvas canvas, IImage image,
-                int xPos, int yPos, int w, int h);
-        public boolean needsDecoration();
-    }
-
-    public static final int INDEX_NONE = -1;
-
-    // There are two cell size we will use. It can be set by setSizeChoice().
-    // The mLeftEdgePadding fields is filled in onLayout(). See the comments
-    // in onLayout() for details.
-    static class LayoutSpec {
-        LayoutSpec(int w, int h, int intercellSpacing, int leftEdgePadding,
-                DisplayMetrics metrics) {
-            mCellWidth = dpToPx(w, metrics);
-            mCellHeight = dpToPx(h, metrics);
-            mCellSpacing = dpToPx(intercellSpacing, metrics);
-            mLeftEdgePadding = dpToPx(leftEdgePadding, metrics);
-        }
-        int mCellWidth, mCellHeight;
-        int mCellSpacing;
-        int mLeftEdgePadding;
-    }
-
-    private LayoutSpec [] mCellSizeChoices;
-
-    private void initCellSize() {
-        Activity a = (Activity) getContext();
-        DisplayMetrics metrics = new DisplayMetrics();
-        a.getWindowManager().getDefaultDisplay().getMetrics(metrics);
-        mCellSizeChoices = new LayoutSpec[] {
-            new LayoutSpec(67, 67, 8, 0, metrics),
-            new LayoutSpec(92, 92, 8, 0, metrics),
-        };
-    }
-
-    // Converts dp to pixel.
-    private static int dpToPx(int dp, DisplayMetrics metrics) {
-        return (int) (metrics.density * dp);
-    }
-
-    // These are set in init().
-    private final Handler mHandler = new Handler();
-    private GestureDetector mGestureDetector;
-    private ImageBlockManager mImageBlockManager;
-
-    // These are set in set*() functions.
-    private ImageLoader mLoader;
-    private Listener mListener = null;
-    private DrawAdapter mDrawAdapter = null;
-    private IImageList mAllImages = ImageManager.makeEmptyImageList();
-    private int mSizeChoice = 1;  // default is big cell size
-
-    // These are set in onLayout().
-    private LayoutSpec mSpec;
-    private int mColumns;
-    private int mMaxScrollY;
-
-    // We can handle events only if onLayout() is completed.
-    private boolean mLayoutComplete = false;
-
-    // Selection state
-    private int mCurrentSelection = INDEX_NONE;
-    private int mCurrentPressState = 0;
-    private static final int TAPPING_FLAG = 1;
-    private static final int CLICKING_FLAG = 2;
-
-    // These are cached derived information.
-    private int mCount;  // Cache mImageList.getCount();
-    private int mRows;  // Cache (mCount + mColumns - 1) / mColumns
-    private int mBlockHeight; // Cache mSpec.mCellSpacing + mSpec.mCellHeight
-
-    private boolean mRunning = false;
-    private Scroller mScroller = null;
-
-    public GridViewSpecial(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        init(context);
-    }
-
-    private void init(Context context) {
-        setVerticalScrollBarEnabled(true);
-        initializeScrollbars(context.obtainStyledAttributes(
-                android.R.styleable.View));
-        mGestureDetector = new GestureDetector(context,
-                new MyGestureDetector());
-        setFocusableInTouchMode(true);
-        initCellSize();
-    }
-
-    private final Runnable mRedrawCallback = new Runnable() {
-                public void run() {
-                    invalidate();
-                }
-            };
-
-    public void setLoader(ImageLoader loader) {
-        Assert(mRunning == false);
-        mLoader = loader;
-    }
-
-    public void setListener(Listener listener) {
-        Assert(mRunning == false);
-        mListener = listener;
-    }
-
-    public void setDrawAdapter(DrawAdapter adapter) {
-        Assert(mRunning == false);
-        mDrawAdapter = adapter;
-    }
-
-    public void setImageList(IImageList list) {
-        Assert(mRunning == false);
-        mAllImages = list;
-        mCount = mAllImages.getCount();
-    }
-
-    public void setSizeChoice(int choice) {
-        Assert(mRunning == false);
-        if (mSizeChoice == choice) return;
-        mSizeChoice = choice;
-    }
-
-    @Override
-    public void onLayout(boolean changed, int left, int top,
-                         int right, int bottom) {
-        super.onLayout(changed, left, top, right, bottom);
-
-        if (!mRunning) {
-            return;
-        }
-
-        mSpec = mCellSizeChoices[mSizeChoice];
-
-        int width = right - left;
-
-        // The width is divided into following parts:
-        //
-        // LeftEdgePadding CellWidth (CellSpacing CellWidth)* RightEdgePadding
-        //
-        // We determine number of cells (columns) first, then the left and right
-        // padding are derived. We make left and right paddings the same size.
-        //
-        // The height is divided into following parts:
-        //
-        // CellSpacing (CellHeight CellSpacing)+
-
-        mColumns = 1 + (width - mSpec.mCellWidth)
-                / (mSpec.mCellWidth + mSpec.mCellSpacing);
-
-        mSpec.mLeftEdgePadding = (width
-                - ((mColumns - 1) * mSpec.mCellSpacing)
-                - (mColumns * mSpec.mCellWidth)) / 2;
-
-        mRows = (mCount + mColumns - 1) / mColumns;
-        mBlockHeight = mSpec.mCellSpacing + mSpec.mCellHeight;
-        mMaxScrollY = mSpec.mCellSpacing + (mRows * mBlockHeight)
-                - (bottom - top);
-
-        // Put mScrollY in the valid range. This matters if mMaxScrollY is
-        // changed. For example, orientation changed from portrait to landscape.
-        mScrollY = Math.max(0, Math.min(mMaxScrollY, mScrollY));
-
-        generateOutlineBitmap();
-
-        if (mImageBlockManager != null) {
-            mImageBlockManager.recycle();
-        }
-
-        mImageBlockManager = new ImageBlockManager(mHandler, mRedrawCallback,
-                mAllImages, mLoader, mDrawAdapter, mSpec, mColumns, width,
-                mOutline[OUTLINE_EMPTY]);
-
-        mListener.onLayoutComplete(changed);
-
-        moveDataWindow();
-
-        mLayoutComplete = true;
-    }
-
-    @Override
-    protected int computeVerticalScrollRange() {
-        return mMaxScrollY + getHeight();
-    }
-
-    // We cache the three outlines from NinePatch to Bitmap to speed up
-    // drawing. The cache must be updated if the cell size is changed.
-    public static final int OUTLINE_EMPTY = 0;
-    public static final int OUTLINE_PRESSED = 1;
-    public static final int OUTLINE_SELECTED = 2;
-
-    public Bitmap mOutline[] = new Bitmap[3];
-
-    private void generateOutlineBitmap() {
-        int w = mSpec.mCellWidth;
-        int h = mSpec.mCellHeight;
-
-        for (int i = 0; i < mOutline.length; i++) {
-            mOutline[i] = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
-        }
-
-        Drawable cellOutline;
-        cellOutline = GridViewSpecial.this.getResources()
-                .getDrawable(android.R.drawable.gallery_thumb);
-        cellOutline.setBounds(0, 0, w, h);
-        Canvas canvas = new Canvas();
-
-        canvas.setBitmap(mOutline[OUTLINE_EMPTY]);
-        cellOutline.setState(EMPTY_STATE_SET);
-        cellOutline.draw(canvas);
-
-        canvas.setBitmap(mOutline[OUTLINE_PRESSED]);
-        cellOutline.setState(
-                PRESSED_ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET);
-        cellOutline.draw(canvas);
-
-        canvas.setBitmap(mOutline[OUTLINE_SELECTED]);
-        cellOutline.setState(ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET);
-        cellOutline.draw(canvas);
-    }
-
-    private void moveDataWindow() {
-        // Calculate visible region according to scroll position.
-        int startRow = (mScrollY - mSpec.mCellSpacing) / mBlockHeight;
-        int endRow = (mScrollY + getHeight() - mSpec.mCellSpacing - 1)
-                / mBlockHeight + 1;
-
-        // Limit startRow and endRow to the valid range.
-        // Make sure we handle the mRows == 0 case right.
-        startRow = Math.max(Math.min(startRow, mRows - 1), 0);
-        endRow = Math.max(Math.min(endRow, mRows), 0);
-        mImageBlockManager.setVisibleRows(startRow, endRow);
-    }
-
-    // In MyGestureDetector we have to check canHandleEvent() because
-    // GestureDetector could queue events and fire them later. At that time
-    // stop() may have already been called and we can't handle the events.
-    private class MyGestureDetector extends SimpleOnGestureListener {
-        private AudioManager mAudioManager;
-
-        @Override
-        public boolean onDown(MotionEvent e) {
-            if (!canHandleEvent()) return false;
-            if (mScroller != null && !mScroller.isFinished()) {
-                mScroller.forceFinished(true);
-                return false;
-            }
-            int index = computeSelectedIndex(e.getX(), e.getY());
-            if (index >= 0 && index < mCount) {
-                setSelectedIndex(index);
-            } else {
-                setSelectedIndex(INDEX_NONE);
-            }
-            return true;
-        }
-
-        @Override
-        public boolean onFling(MotionEvent e1, MotionEvent e2,
-                float velocityX, float velocityY) {
-            if (!canHandleEvent()) return false;
-            if (velocityY > MAX_FLING_VELOCITY) {
-                velocityY = MAX_FLING_VELOCITY;
-            } else if (velocityY < -MAX_FLING_VELOCITY) {
-                velocityY = -MAX_FLING_VELOCITY;
-            }
-
-            setSelectedIndex(INDEX_NONE);
-            mScroller = new Scroller(getContext());
-            mScroller.fling(0, mScrollY, 0, -(int) velocityY, 0, 0, 0,
-                    mMaxScrollY);
-            computeScroll();
-
-            return true;
-        }
-
-        @Override
-        public void onLongPress(MotionEvent e) {
-            if (!canHandleEvent()) return;
-            performLongClick();
-        }
-
-        @Override
-        public boolean onScroll(MotionEvent e1, MotionEvent e2,
-                                float distanceX, float distanceY) {
-            if (!canHandleEvent()) return false;
-            setSelectedIndex(INDEX_NONE);
-            scrollBy(0, (int) distanceY);
-            invalidate();
-            return true;
-        }
-
-        @Override
-        public boolean onSingleTapConfirmed(MotionEvent e) {
-            if (!canHandleEvent()) return false;
-            int index = computeSelectedIndex(e.getX(), e.getY());
-            if (index >= 0 && index < mCount) {
-                // Play click sound.
-                if (mAudioManager == null) {
-                    mAudioManager = (AudioManager) getContext()
-                            .getSystemService(Context.AUDIO_SERVICE);
-                }
-                mAudioManager.playSoundEffect(AudioManager.FX_KEY_CLICK);
-
-                mListener.onImageTapped(index);
-                return true;
-            }
-            return false;
-        }
-    }
-
-    public int getCurrentSelection() {
-        return mCurrentSelection;
-    }
-
-    public void invalidateImage(int index) {
-        if (index != INDEX_NONE) {
-            mImageBlockManager.invalidateImage(index);
-        }
-    }
-
-    /**
-     *
-     * @param index <code>INDEX_NONE</code> (-1) means remove selection.
-     */
-    public void setSelectedIndex(int index) {
-        // A selection box will be shown for the image that being selected,
-        // (by finger or by the dpad center key). The selection box can be drawn
-        // in two colors. One color (yellow) is used when the the image is
-        // still being tapped or clicked (the finger is still on the touch
-        // screen or the dpad center key is not released). Another color
-        // (orange) is used after the finger leaves touch screen or the dpad
-        // center key is released.
-
-        if (mCurrentSelection == index) {
-            return;
-        }
-        // This happens when the last picture is deleted.
-        mCurrentSelection = Math.min(index, mCount - 1);
-
-        if (mCurrentSelection != INDEX_NONE) {
-            ensureVisible(mCurrentSelection);
-        }
-        invalidate();
-    }
-
-    public void scrollToImage(int index) {
-        Rect r = getRectForPosition(index);
-        scrollTo(0, r.top);
-    }
-
-    public void scrollToVisible(int index) {
-        Rect r = getRectForPosition(index);
-        int top = getScrollY();
-        int bottom = getScrollY() + getHeight();
-        if (r.bottom > bottom) {
-            scrollTo(0, r.bottom - getHeight());
-        } else if (r.top < top) {
-            scrollTo(0, r.top);
-        }
-    }
-
-    private void ensureVisible(int pos) {
-        Rect r = getRectForPosition(pos);
-        int top = getScrollY();
-        int bot = top + getHeight();
-
-        if (r.bottom > bot) {
-            mScroller = new Scroller(getContext());
-            mScroller.startScroll(mScrollX, mScrollY, 0,
-                    r.bottom - getHeight() - mScrollY, 200);
-            computeScroll();
-        } else if (r.top < top) {
-            mScroller = new Scroller(getContext());
-            mScroller.startScroll(mScrollX, mScrollY, 0, r.top - mScrollY, 200);
-            computeScroll();
-        }
-    }
-
-    public void start() {
-        // These must be set before start().
-        Assert(mLoader != null);
-        Assert(mListener != null);
-        Assert(mDrawAdapter != null);
-        mRunning = true;
-        requestLayout();
-    }
-
-    // If the the underlying data is changed, for example,
-    // an image is deleted, or the size choice is changed,
-    // The following sequence is needed:
-    //
-    // mGvs.stop();
-    // mGvs.set...(...);
-    // mGvs.set...(...);
-    // mGvs.start();
-    public void stop() {
-        // Remove the long press callback from the queue if we are going to
-        // stop.
-        mHandler.removeCallbacks(mLongPressCallback);
-        mScroller = null;
-        if (mImageBlockManager != null) {
-            mImageBlockManager.recycle();
-            mImageBlockManager = null;
-        }
-        mRunning = false;
-        mCurrentSelection = INDEX_NONE;
-    }
-
-    @Override
-    public void onDraw(Canvas canvas) {
-        super.onDraw(canvas);
-        if (!canHandleEvent()) return;
-        mImageBlockManager.doDraw(canvas, getWidth(), getHeight(), mScrollY);
-        paintDecoration(canvas);
-        paintSelection(canvas);
-        moveDataWindow();
-    }
-
-    @Override
-    public void computeScroll() {
-        if (mScroller != null) {
-            boolean more = mScroller.computeScrollOffset();
-            scrollTo(0, mScroller.getCurrY());
-            if (more) {
-                invalidate();  // So we draw again
-            } else {
-                mScroller = null;
-            }
-        } else {
-            super.computeScroll();
-        }
-    }
-
-    // Return the rectange for the thumbnail in the given position.
-    Rect getRectForPosition(int pos) {
-        int row = pos / mColumns;
-        int col = pos - (row * mColumns);
-
-        int left = mSpec.mLeftEdgePadding
-                + (col * (mSpec.mCellWidth + mSpec.mCellSpacing));
-        int top = row * mBlockHeight;
-
-        return new Rect(left, top,
-                left + mSpec.mCellWidth + mSpec.mCellSpacing,
-                top + mSpec.mCellHeight + mSpec.mCellSpacing);
-    }
-
-    // Inverse of getRectForPosition: from screen coordinate to image position.
-    int computeSelectedIndex(float xFloat, float yFloat) {
-        int x = (int) xFloat;
-        int y = (int) yFloat;
-
-        int spacing = mSpec.mCellSpacing;
-        int leftSpacing = mSpec.mLeftEdgePadding;
-
-        int row = (mScrollY + y - spacing) / (mSpec.mCellHeight + spacing);
-        int col = Math.min(mColumns - 1,
-                (x - leftSpacing) / (mSpec.mCellWidth + spacing));
-        return (row * mColumns) + col;
-    }
-
-    @Override
-    public boolean onTouchEvent(MotionEvent ev) {
-        if (!canHandleEvent()) {
-            return false;
-        }
-        switch (ev.getAction()) {
-            case MotionEvent.ACTION_DOWN:
-                mCurrentPressState |= TAPPING_FLAG;
-                invalidate();
-                break;
-            case MotionEvent.ACTION_UP:
-                mCurrentPressState &= ~TAPPING_FLAG;
-                invalidate();
-                break;
-        }
-        mGestureDetector.onTouchEvent(ev);
-        // Consume all events
-        return true;
-    }
-
-    @Override
-    public void scrollBy(int x, int y) {
-        scrollTo(mScrollX + x, mScrollY + y);
-    }
-
-    public void scrollTo(float scrollPosition) {
-        scrollTo(0, Math.round(scrollPosition * mMaxScrollY));
-    }
-
-    @Override
-    public void scrollTo(int x, int y) {
-        y = Math.max(0, Math.min(mMaxScrollY, y));
-        if (mSpec != null) {
-            mListener.onScroll((float) mScrollY / mMaxScrollY);
-        }
-        super.scrollTo(x, y);
-    }
-
-    private boolean canHandleEvent() {
-        return mRunning && mLayoutComplete;
-    }
-
-    private final Runnable mLongPressCallback = new Runnable() {
-        public void run() {
-            mCurrentPressState &= ~CLICKING_FLAG;
-            showContextMenu();
-        }
-    };
-
-    @Override
-    public boolean onKeyDown(int keyCode, KeyEvent event) {
-        if (!canHandleEvent()) return false;
-        int sel = mCurrentSelection;
-        if (sel != INDEX_NONE) {
-            switch (keyCode) {
-                case KeyEvent.KEYCODE_DPAD_RIGHT:
-                    if (sel != mCount - 1 && (sel % mColumns < mColumns - 1)) {
-                        sel += 1;
-                    }
-                    break;
-                case KeyEvent.KEYCODE_DPAD_LEFT:
-                    if (sel > 0 && (sel % mColumns != 0)) {
-                        sel -= 1;
-                    }
-                    break;
-                case KeyEvent.KEYCODE_DPAD_UP:
-                    if (sel >= mColumns) {
-                        sel -= mColumns;
-                    }
-                    break;
-                case KeyEvent.KEYCODE_DPAD_DOWN:
-                    sel = Math.min(mCount - 1, sel + mColumns);
-                    break;
-                case KeyEvent.KEYCODE_DPAD_CENTER:
-                    if (event.getRepeatCount() == 0) {
-                        mCurrentPressState |= CLICKING_FLAG;
-                        mHandler.postDelayed(mLongPressCallback,
-                                ViewConfiguration.getLongPressTimeout());
-                    }
-                    break;
-                default:
-                    return super.onKeyDown(keyCode, event);
-            }
-        } else {
-            switch (keyCode) {
-                case KeyEvent.KEYCODE_DPAD_RIGHT:
-                case KeyEvent.KEYCODE_DPAD_LEFT:
-                case KeyEvent.KEYCODE_DPAD_UP:
-                case KeyEvent.KEYCODE_DPAD_DOWN:
-                        int startRow =
-                                (mScrollY - mSpec.mCellSpacing) / mBlockHeight;
-                        int topPos = startRow * mColumns;
-                        Rect r = getRectForPosition(topPos);
-                        if (r.top < getScrollY()) {
-                            topPos += mColumns;
-                        }
-                        topPos = Math.min(mCount - 1, topPos);
-                        sel = topPos;
-                    break;
-                default:
-                    return super.onKeyDown(keyCode, event);
-            }
-        }
-        setSelectedIndex(sel);
-        return true;
-    }
-
-    @Override
-    public boolean onKeyUp(int keyCode, KeyEvent event) {
-        if (!canHandleEvent()) return false;
-
-        if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
-            mCurrentPressState &= ~CLICKING_FLAG;
-            invalidate();
-
-            // The keyUp doesn't get called when the longpress menu comes up. We
-            // only get here when the user lets go of the center key before the
-            // longpress menu comes up.
-            mHandler.removeCallbacks(mLongPressCallback);
-
-            // open the photo
-            mListener.onImageClicked(mCurrentSelection);
-            return true;
-        }
-        return super.onKeyUp(keyCode, event);
-    }
-
-    private void paintDecoration(Canvas canvas) {
-        if (!mDrawAdapter.needsDecoration()) return;
-
-        // Calculate visible region according to scroll position.
-        int startRow = (mScrollY - mSpec.mCellSpacing) / mBlockHeight;
-        int endRow = (mScrollY + getHeight() - mSpec.mCellSpacing - 1)
-                / mBlockHeight + 1;
-
-        // Limit startRow and endRow to the valid range.
-        // Make sure we handle the mRows == 0 case right.
-        startRow = Math.max(Math.min(startRow, mRows - 1), 0);
-        endRow = Math.max(Math.min(endRow, mRows), 0);
-
-        int startIndex = startRow * mColumns;
-        int endIndex = Math.min(endRow * mColumns, mCount);
-
-        int xPos = mSpec.mLeftEdgePadding;
-        int yPos = mSpec.mCellSpacing + startRow * mBlockHeight;
-        int off = 0;
-        for (int i = startIndex; i < endIndex; i++) {
-            IImage image = mAllImages.getImageAt(i);
-
-            mDrawAdapter.drawDecoration(canvas, image, xPos, yPos,
-                    mSpec.mCellWidth, mSpec.mCellHeight);
-
-            // Calculate next position
-            off += 1;
-            if (off == mColumns) {
-                xPos = mSpec.mLeftEdgePadding;
-                yPos += mBlockHeight;
-                off = 0;
-            } else {
-                xPos += mSpec.mCellWidth + mSpec.mCellSpacing;
-            }
-        }
-    }
-
-    private void paintSelection(Canvas canvas) {
-        if (mCurrentSelection == INDEX_NONE) return;
-
-        int row = mCurrentSelection / mColumns;
-        int col = mCurrentSelection - (row * mColumns);
-
-        int spacing = mSpec.mCellSpacing;
-        int leftSpacing = mSpec.mLeftEdgePadding;
-        int xPos = leftSpacing + (col * (mSpec.mCellWidth + spacing));
-        int yTop = spacing + (row * mBlockHeight);
-
-        int type = OUTLINE_SELECTED;
-        if (mCurrentPressState != 0) {
-            type = OUTLINE_PRESSED;
-        }
-        canvas.drawBitmap(mOutline[type], xPos, yTop, null);
-    }
-}
-
-class ImageBlockManager {
-    @SuppressWarnings("unused")
-    private static final String TAG = "ImageBlockManager";
-
-    // Number of rows we want to cache.
-    // Assume there are 6 rows per page, this caches 5 pages.
-    private static final int CACHE_ROWS = 30;
-
-    // mCache maps from row number to the ImageBlock.
-    private final HashMap<Integer, ImageBlock> mCache;
-
-    // These are parameters set in the constructor.
-    private final Handler mHandler;
-    private final Runnable mRedrawCallback;  // Called after a row is loaded,
-                                             // so GridViewSpecial can draw
-                                             // again using the new images.
-    private final IImageList mImageList;
-    private final ImageLoader mLoader;
-    private final GridViewSpecial.DrawAdapter mDrawAdapter;
-    private final GridViewSpecial.LayoutSpec mSpec;
-    private final int mColumns;  // Columns per row.
-    private final int mBlockWidth;  // The width of an ImageBlock.
-    private final Bitmap mOutline;  // The outline bitmap put on top of each
-                                    // image.
-    private final int mCount;  // Cache mImageList.getCount().
-    private final int mRows;  // Cache (mCount + mColumns - 1) / mColumns
-    private final int mBlockHeight;  // The height of an ImageBlock.
-
-    // Visible row range: [mStartRow, mEndRow). Set by setVisibleRows().
-    private int mStartRow = 0;
-    private int mEndRow = 0;
-
-    ImageBlockManager(Handler handler, Runnable redrawCallback,
-            IImageList imageList, ImageLoader loader,
-            GridViewSpecial.DrawAdapter adapter,
-            GridViewSpecial.LayoutSpec spec,
-            int columns, int blockWidth, Bitmap outline) {
-        mHandler = handler;
-        mRedrawCallback = redrawCallback;
-        mImageList = imageList;
-        mLoader = loader;
-        mDrawAdapter = adapter;
-        mSpec = spec;
-        mColumns = columns;
-        mBlockWidth = blockWidth;
-        mOutline = outline;
-        mBlockHeight = mSpec.mCellSpacing + mSpec.mCellHeight;
-        mCount = imageList.getCount();
-        mRows = (mCount + mColumns - 1) / mColumns;
-        mCache = new HashMap<Integer, ImageBlock>();
-        mPendingRequest = 0;
-        initGraphics();
-    }
-
-    // Set the window of visible rows. Once set we will start to load them as
-    // soon as possible (if they are not already in cache).
-    public void setVisibleRows(int startRow, int endRow) {
-        if (startRow != mStartRow || endRow != mEndRow) {
-            mStartRow = startRow;
-            mEndRow = endRow;
-            startLoading();
-        }
-    }
-
-    int mPendingRequest;  // Number of pending requests (sent to ImageLoader).
-    // We want to keep enough requests in ImageLoader's queue, but not too
-    // many.
-    static final int REQUESTS_LOW = 3;
-    static final int REQUESTS_HIGH = 6;
-
-    // After clear requests currently in queue, start loading the thumbnails.
-    // We need to clear the queue first because the proper order of loading
-    // may have changed (because the visible region changed, or some images
-    // have been invalidated).
-    private void startLoading() {
-        clearLoaderQueue();
-        continueLoading();
-    }
-
-    private void clearLoaderQueue() {
-        int[] tags = mLoader.clearQueue();
-        for (int pos : tags) {
-            int row = pos / mColumns;
-            int col = pos - row * mColumns;
-            ImageBlock blk = mCache.get(row);
-            Assert(blk != null);  // We won't reuse the block if it has pending
-                                  // requests. See getEmptyBlock().
-            blk.cancelRequest(col);
-        }
-    }
-
-    // Scan the cache and send requests to ImageLoader if needed.
-    private void continueLoading() {
-        // Check if we still have enough requests in the queue.
-        if (mPendingRequest >= REQUESTS_LOW) return;
-
-        // Scan the visible rows.
-        for (int i = mStartRow; i < mEndRow; i++) {
-            if (scanOne(i)) return;
-        }
-
-        int range = (CACHE_ROWS - (mEndRow - mStartRow)) / 2;
-        // Scan other rows.
-        // d is the distance between the row and visible region.
-        for (int d = 1; d <= range; d++) {
-            int after = mEndRow - 1 + d;
-            int before = mStartRow - d;
-            if (after >= mRows && before < 0) {
-                break;  // Nothing more the scan.
-            }
-            if (after < mRows && scanOne(after)) return;
-            if (before >= 0 && scanOne(before)) return;
-        }
-    }
-
-    // Returns true if we can stop scanning.
-    private boolean scanOne(int i) {
-        mPendingRequest += tryToLoad(i);
-        return mPendingRequest >= REQUESTS_HIGH;
-    }
-
-    // Returns number of requests we issued for this row.
-    private int tryToLoad(int row) {
-        Assert(row >= 0 && row < mRows);
-        ImageBlock blk = mCache.get(row);
-        if (blk == null) {
-            // Find an empty block
-            blk = getEmptyBlock();
-            blk.setRow(row);
-            blk.invalidate();
-            mCache.put(row, blk);
-        }
-        return blk.loadImages();
-    }
-
-    // Get an empty block for the cache.
-    private ImageBlock getEmptyBlock() {
-        // See if we can allocate a new block.
-        if (mCache.size() < CACHE_ROWS) {
-            return new ImageBlock();
-        }
-        // Reclaim the old block with largest distance from the visible region.
-        int bestDistance = -1;
-        int bestIndex = -1;
-        for (int index : mCache.keySet()) {
-            // Make sure we don't reclaim a block which still has pending
-            // request.
-            if (mCache.get(index).hasPendingRequests()) {
-                continue;
-            }
-            int dist = 0;
-            if (index >= mEndRow) {
-                dist = index - mEndRow + 1;
-            } else if (index < mStartRow) {
-                dist = mStartRow - index;
-            } else {
-                // Inside the visible region.
-                continue;
-            }
-            if (dist > bestDistance) {
-                bestDistance = dist;
-                bestIndex = index;
-            }
-        }
-        return mCache.remove(bestIndex);
-    }
-
-    public void invalidateImage(int index) {
-        int row = index / mColumns;
-        int col = index - (row * mColumns);
-        ImageBlock blk = mCache.get(row);
-        if (blk == null) return;
-        if ((blk.mCompletedMask & (1 << col)) != 0) {
-            blk.mCompletedMask &= ~(1 << col);
-        }
-        startLoading();
-    }
-
-    // After calling recycle(), the instance should not be used anymore.
-    public void recycle() {
-        for (ImageBlock blk : mCache.values()) {
-            blk.recycle();
-        }
-        mCache.clear();
-        mEmptyBitmap.recycle();
-    }
-
-    // Draw the images to the given canvas.
-    public void doDraw(Canvas canvas, int thisWidth, int thisHeight,
-            int scrollPos) {
-        final int height = mBlockHeight;
-
-        // Note that currentBlock could be negative.
-        int currentBlock = (scrollPos < 0)
-                ? ((scrollPos - height + 1) / height)
-                : (scrollPos / height);
-
-        while (true) {
-            final int yPos = currentBlock * height;
-            if (yPos >= scrollPos + thisHeight) {
-                break;
-            }
-
-            ImageBlock blk = mCache.get(currentBlock);
-            if (blk != null) {
-                blk.doDraw(canvas, 0, yPos);
-            } else {
-                drawEmptyBlock(canvas, 0, yPos, currentBlock);
-            }
-
-            currentBlock += 1;
-        }
-    }
-
-    // Return number of columns in the given row. (This could be less than
-    // mColumns for the last row).
-    private int numColumns(int row) {
-        return Math.min(mColumns, mCount - row * mColumns);
-    }
-
-    // Draw a block which has not been loaded.
-    private void drawEmptyBlock(Canvas canvas, int xPos, int yPos, int row) {
-        // Draw the background.
-        canvas.drawRect(xPos, yPos, xPos + mBlockWidth, yPos + mBlockHeight,
-                mBackgroundPaint);
-
-        // Draw the empty images.
-        int x = xPos + mSpec.mLeftEdgePadding;
-        int y = yPos + mSpec.mCellSpacing;
-        int cols = numColumns(row);
-
-        for (int i = 0; i < cols; i++) {
-            canvas.drawBitmap(mEmptyBitmap, x, y, null);
-            x += (mSpec.mCellWidth + mSpec.mCellSpacing);
-        }
-    }
-
-    // mEmptyBitmap is what we draw if we the wanted block hasn't been loaded.
-    // (If the user scrolls too fast). It is a gray image with normal outline.
-    // mBackgroundPaint is used to draw the (black) background outside
-    // mEmptyBitmap.
-    Paint mBackgroundPaint;
-    private Bitmap mEmptyBitmap;
-
-    private void initGraphics() {
-        mBackgroundPaint = new Paint();
-        mBackgroundPaint.setStyle(Paint.Style.FILL);
-        mBackgroundPaint.setColor(0xFF000000);  // black
-        mEmptyBitmap = Bitmap.createBitmap(mSpec.mCellWidth, mSpec.mCellHeight,
-                Bitmap.Config.RGB_565);
-        Canvas canvas = new Canvas(mEmptyBitmap);
-        canvas.drawRGB(0xDD, 0xDD, 0xDD);
-        canvas.drawBitmap(mOutline, 0, 0, null);
-    }
-
-    // ImageBlock stores bitmap for one row. The loaded thumbnail images are
-    // drawn to mBitmap. mBitmap is later used in onDraw() of GridViewSpecial.
-    private class ImageBlock {
-        private Bitmap mBitmap;
-        private final Canvas mCanvas;
-
-        // Columns which have been requested to the loader
-        private int mRequestedMask;
-
-        // Columns which have been completed from the loader
-        private int mCompletedMask;
-
-        // The row number this block represents.
-        private int mRow;
-
-        public ImageBlock() {
-            mBitmap = Bitmap.createBitmap(mBlockWidth, mBlockHeight,
-                    Bitmap.Config.RGB_565);
-            mCanvas = new Canvas(mBitmap);
-            mRow = -1;
-        }
-
-        public void setRow(int row) {
-            mRow = row;
-        }
-
-        public void invalidate() {
-            // We do not change mRequestedMask or do cancelAllRequests()
-            // because the data coming from pending requests are valid. (We only
-            // invalidate data which has been drawn to the bitmap).
-            mCompletedMask = 0;
-        }
-
-        // After recycle, the ImageBlock instance should not be accessed.
-        public void recycle() {
-            cancelAllRequests();
-            mBitmap.recycle();
-            mBitmap = null;
-        }
-
-        private boolean isVisible() {
-            return mRow >= mStartRow && mRow < mEndRow;
-        }
-
-        // Returns number of requests submitted to ImageLoader.
-        public int loadImages() {
-            Assert(mRow != -1);
-
-            int columns = numColumns(mRow);
-
-            // Calculate what we need.
-            int needMask = ((1 << columns) - 1)
-                    & ~(mCompletedMask | mRequestedMask);
-
-            if (needMask == 0) {
-                return 0;
-            }
-
-            int retVal = 0;
-            int base = mRow * mColumns;
-
-            for (int col = 0; col < columns; col++) {
-                if ((needMask & (1 << col)) == 0) {
-                    continue;
-                }
-
-                int pos = base + col;
-
-                final IImage image = mImageList.getImageAt(pos);
-                if (image != null) {
-                    // This callback is passed to ImageLoader. It will invoke
-                    // loadImageDone() in the main thread. We limit the callback
-                    // thread to be in this very short function. All other
-                    // processing is done in the main thread.
-                    final int colFinal = col;
-                    ImageLoader.LoadedCallback cb =
-                            new ImageLoader.LoadedCallback() {
-                                    public void run(final Bitmap b) {
-                                        mHandler.post(new Runnable() {
-                                            public void run() {
-                                                loadImageDone(image, b,
-                                                        colFinal);
-                                            }
-                                        });
-                                    }
-                                };
-                    // Load Image
-                    mLoader.getBitmap(image, cb, pos);
-                    mRequestedMask |= (1 << col);
-                    retVal += 1;
-                }
-            }
-
-            return retVal;
-        }
-
-        // Whether this block has pending requests.
-        public boolean hasPendingRequests() {
-            return mRequestedMask != 0;
-        }
-
-        // Called when an image is loaded.
-        private void loadImageDone(IImage image, Bitmap b,
-                int col) {
-            if (mBitmap == null) return;  // This block has been recycled.
-
-            int spacing = mSpec.mCellSpacing;
-            int leftSpacing = mSpec.mLeftEdgePadding;
-            final int yPos = spacing;
-            final int xPos = leftSpacing
-                    + (col * (mSpec.mCellWidth + spacing));
-
-            drawBitmap(image, b, xPos, yPos);
-
-            if (b != null) {
-                b.recycle();
-            }
-
-            int mask = (1 << col);
-            Assert((mCompletedMask & mask) == 0);
-            Assert((mRequestedMask & mask) != 0);
-            mRequestedMask &= ~mask;
-            mCompletedMask |= mask;
-            mPendingRequest--;
-
-            if (isVisible()) {
-                mRedrawCallback.run();
-            }
-
-            // Kick start next block loading.
-            continueLoading();
-        }
-
-        // Draw the loaded bitmap to the block bitmap.
-        private void drawBitmap(
-                IImage image, Bitmap b, int xPos, int yPos) {
-            mDrawAdapter.drawImage(mCanvas, image, b, xPos, yPos,
-                    mSpec.mCellWidth, mSpec.mCellHeight);
-            mCanvas.drawBitmap(mOutline, xPos, yPos, null);
-        }
-
-        // Draw the block bitmap to the specified canvas.
-        public void doDraw(Canvas canvas, int xPos, int yPos) {
-            int cols = numColumns(mRow);
-
-            if (cols == mColumns) {
-                canvas.drawBitmap(mBitmap, xPos, yPos, null);
-            } else {
-
-                // This must be the last row -- we draw only part of the block.
-                // Draw the background.
-                canvas.drawRect(xPos, yPos, xPos + mBlockWidth,
-                        yPos + mBlockHeight, mBackgroundPaint);
-                // Draw part of the block.
-                int w = mSpec.mLeftEdgePadding
-                        + cols * (mSpec.mCellWidth + mSpec.mCellSpacing);
-                Rect srcRect = new Rect(0, 0, w, mBlockHeight);
-                Rect dstRect = new Rect(srcRect);
-                dstRect.offset(xPos, yPos);
-                canvas.drawBitmap(mBitmap, srcRect, dstRect, null);
-            }
-
-            // Draw the part which has not been loaded.
-            int isEmpty = ((1 << cols) - 1) & ~mCompletedMask;
-
-            if (isEmpty != 0) {
-                int x = xPos + mSpec.mLeftEdgePadding;
-                int y = yPos + mSpec.mCellSpacing;
-
-                for (int i = 0; i < cols; i++) {
-                    if ((isEmpty & (1 << i)) != 0) {
-                        canvas.drawBitmap(mEmptyBitmap, x, y, null);
-                    }
-                    x += (mSpec.mCellWidth + mSpec.mCellSpacing);
-                }
-            }
-        }
-
-        // Mark a request as cancelled. The request has already been removed
-        // from the queue of ImageLoader, so we only need to mark the fact.
-        public void cancelRequest(int col) {
-            int mask = (1 << col);
-            Assert((mRequestedMask & mask) != 0);
-            mRequestedMask &= ~mask;
-            mPendingRequest--;
-        }
-
-        // Try to cancel all pending requests for this block. After this
-        // completes there could still be requests not cancelled (because it is
-        // already in progress). We deal with that situation by setting mBitmap
-        // to null in recycle() and check this in loadImageDone().
-        private void cancelAllRequests() {
-            for (int i = 0; i < mColumns; i++) {
-                int mask = (1 << i);
-                if ((mRequestedMask & mask) != 0) {
-                    int pos = (mRow * mColumns) + i;
-                    if (mLoader.cancel(mImageList.getImageAt(pos))) {
-                        mRequestedMask &= ~mask;
-                        mPendingRequest--;
-                    }
-                }
-            }
-        }
-    }
-}
diff --git a/src/com/android/camera/HighlightView.java b/src/com/android/camera/HighlightView.java
deleted file mode 100644
index c05a4b2..0000000
--- a/src/com/android/camera/HighlightView.java
+++ /dev/null
@@ -1,410 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.camera;
-
-import android.graphics.Canvas;
-import android.graphics.Matrix;
-import android.graphics.Paint;
-import android.graphics.Path;
-import android.graphics.Rect;
-import android.graphics.RectF;
-import android.graphics.Region;
-import android.graphics.drawable.Drawable;
-import android.view.View;
-
-// This class is used by CropImage to display a highlighted cropping rectangle
-// overlayed with the image. There are two coordinate spaces in use. One is
-// image, another is screen. computeLayout() uses mMatrix to map from image
-// space to screen space.
-class HighlightView {
-
-    @SuppressWarnings("unused")
-    private static final String TAG = "HighlightView";
-    View mContext;  // The View displaying the image.
-
-    public static final int GROW_NONE        = (1 << 0);
-    public static final int GROW_LEFT_EDGE   = (1 << 1);
-    public static final int GROW_RIGHT_EDGE  = (1 << 2);
-    public static final int GROW_TOP_EDGE    = (1 << 3);
-    public static final int GROW_BOTTOM_EDGE = (1 << 4);
-    public static final int MOVE             = (1 << 5);
-
-    public HighlightView(View ctx) {
-        mContext = ctx;
-    }
-
-    private void init() {
-        android.content.res.Resources resources = mContext.getResources();
-        mResizeDrawableWidth =
-                resources.getDrawable(R.drawable.camera_crop_width);
-        mResizeDrawableHeight =
-                resources.getDrawable(R.drawable.camera_crop_height);
-        mResizeDrawableDiagonal =
-                resources.getDrawable(R.drawable.indicator_autocrop);
-    }
-
-    boolean mIsFocused;
-    boolean mHidden;
-
-    public boolean hasFocus() {
-        return mIsFocused;
-    }
-
-    public void setFocus(boolean f) {
-        mIsFocused = f;
-    }
-
-    public void setHidden(boolean hidden) {
-        mHidden = hidden;
-    }
-
-    protected void draw(Canvas canvas) {
-        if (mHidden) {
-            return;
-        }
-        canvas.save();
-        Path path = new Path();
-        if (!hasFocus()) {
-            mOutlinePaint.setColor(0xFF000000);
-            canvas.drawRect(mDrawRect, mOutlinePaint);
-        } else {
-            Rect viewDrawingRect = new Rect();
-            mContext.getDrawingRect(viewDrawingRect);
-            if (mCircle) {
-                float width  = mDrawRect.width();
-                float height = mDrawRect.height();
-                path.addCircle(mDrawRect.left + (width  / 2),
-                               mDrawRect.top + (height / 2),
-                               width / 2,
-                               Path.Direction.CW);
-                mOutlinePaint.setColor(0xFFEF04D6);
-            } else {
-                path.addRect(new RectF(mDrawRect), Path.Direction.CW);
-                mOutlinePaint.setColor(0xFFFF8A00);
-            }
-            canvas.clipPath(path, Region.Op.DIFFERENCE);
-            canvas.drawRect(viewDrawingRect,
-                    hasFocus() ? mFocusPaint : mNoFocusPaint);
-
-            canvas.restore();
-            canvas.drawPath(path, mOutlinePaint);
-
-            if (mMode == ModifyMode.Grow) {
-                if (mCircle) {
-                    int width  = mResizeDrawableDiagonal.getIntrinsicWidth();
-                    int height = mResizeDrawableDiagonal.getIntrinsicHeight();
-
-                    int d  = (int) Math.round(Math.cos(/*45deg*/Math.PI / 4D)
-                            * (mDrawRect.width() / 2D));
-                    int x  = mDrawRect.left
-                            + (mDrawRect.width() / 2) + d - width / 2;
-                    int y  = mDrawRect.top
-                            + (mDrawRect.height() / 2) - d - height / 2;
-                    mResizeDrawableDiagonal.setBounds(x, y,
-                            x + mResizeDrawableDiagonal.getIntrinsicWidth(),
-                            y + mResizeDrawableDiagonal.getIntrinsicHeight());
-                    mResizeDrawableDiagonal.draw(canvas);
-                } else {
-                    int left    = mDrawRect.left   + 1;
-                    int right   = mDrawRect.right  + 1;
-                    int top     = mDrawRect.top    + 4;
-                    int bottom  = mDrawRect.bottom + 3;
-
-                    int widthWidth   =
-                            mResizeDrawableWidth.getIntrinsicWidth() / 2;
-                    int widthHeight  =
-                            mResizeDrawableWidth.getIntrinsicHeight() / 2;
-                    int heightHeight =
-                            mResizeDrawableHeight.getIntrinsicHeight() / 2;
-                    int heightWidth  =
-                            mResizeDrawableHeight.getIntrinsicWidth() / 2;
-
-                    int xMiddle = mDrawRect.left
-                            + ((mDrawRect.right  - mDrawRect.left) / 2);
-                    int yMiddle = mDrawRect.top
-                            + ((mDrawRect.bottom - mDrawRect.top) / 2);
-
-                    mResizeDrawableWidth.setBounds(left - widthWidth,
-                                                   yMiddle - widthHeight,
-                                                   left + widthWidth,
-                                                   yMiddle + widthHeight);
-                    mResizeDrawableWidth.draw(canvas);
-
-                    mResizeDrawableWidth.setBounds(right - widthWidth,
-                                                   yMiddle - widthHeight,
-                                                   right + widthWidth,
-                                                   yMiddle + widthHeight);
-                    mResizeDrawableWidth.draw(canvas);
-
-                    mResizeDrawableHeight.setBounds(xMiddle - heightWidth,
-                                                    top - heightHeight,
-                                                    xMiddle + heightWidth,
-                                                    top + heightHeight);
-                    mResizeDrawableHeight.draw(canvas);
-
-                    mResizeDrawableHeight.setBounds(xMiddle - heightWidth,
-                                                    bottom - heightHeight,
-                                                    xMiddle + heightWidth,
-                                                    bottom + heightHeight);
-                    mResizeDrawableHeight.draw(canvas);
-                }
-            }
-        }
-    }
-
-    public void setMode(ModifyMode mode) {
-        if (mode != mMode) {
-            mMode = mode;
-            mContext.invalidate();
-        }
-    }
-
-    // Determines which edges are hit by touching at (x, y).
-    public int getHit(float x, float y) {
-        Rect r = computeLayout();
-        final float hysteresis = 20F;
-        int retval = GROW_NONE;
-
-        if (mCircle) {
-            float distX = x - r.centerX();
-            float distY = y - r.centerY();
-            int distanceFromCenter =
-                    (int) Math.sqrt(distX * distX + distY * distY);
-            int radius  = mDrawRect.width() / 2;
-            int delta = distanceFromCenter - radius;
-            if (Math.abs(delta) <= hysteresis) {
-                if (Math.abs(distY) > Math.abs(distX)) {
-                    if (distY < 0) {
-                        retval = GROW_TOP_EDGE;
-                    } else {
-                        retval = GROW_BOTTOM_EDGE;
-                    }
-                } else {
-                    if (distX < 0) {
-                        retval = GROW_LEFT_EDGE;
-                    } else {
-                        retval = GROW_RIGHT_EDGE;
-                    }
-                }
-            } else if (distanceFromCenter < radius) {
-                retval = MOVE;
-            } else {
-                retval = GROW_NONE;
-            }
-        } else {
-            // verticalCheck makes sure the position is between the top and
-            // the bottom edge (with some tolerance). Similar for horizCheck.
-            boolean verticalCheck = (y >= r.top - hysteresis)
-                    && (y < r.bottom + hysteresis);
-            boolean horizCheck = (x >= r.left - hysteresis)
-                    && (x < r.right + hysteresis);
-
-            // Check whether the position is near some edge(s).
-            if ((Math.abs(r.left - x)     < hysteresis)  &&  verticalCheck) {
-                retval |= GROW_LEFT_EDGE;
-            }
-            if ((Math.abs(r.right - x)    < hysteresis)  &&  verticalCheck) {
-                retval |= GROW_RIGHT_EDGE;
-            }
-            if ((Math.abs(r.top - y)      < hysteresis)  &&  horizCheck) {
-                retval |= GROW_TOP_EDGE;
-            }
-            if ((Math.abs(r.bottom - y)   < hysteresis)  &&  horizCheck) {
-                retval |= GROW_BOTTOM_EDGE;
-            }
-
-            // Not near any edge but inside the rectangle: move.
-            if (retval == GROW_NONE && r.contains((int) x, (int) y)) {
-                retval = MOVE;
-            }
-        }
-        return retval;
-    }
-
-    // Handles motion (dx, dy) in screen space.
-    // The "edge" parameter specifies which edges the user is dragging.
-    void handleMotion(int edge, float dx, float dy) {
-        Rect r = computeLayout();
-        if (edge == GROW_NONE) {
-            return;
-        } else if (edge == MOVE) {
-            // Convert to image space before sending to moveBy().
-            moveBy(dx * (mCropRect.width() / r.width()),
-                   dy * (mCropRect.height() / r.height()));
-        } else {
-            if (((GROW_LEFT_EDGE | GROW_RIGHT_EDGE) & edge) == 0) {
-                dx = 0;
-            }
-
-            if (((GROW_TOP_EDGE | GROW_BOTTOM_EDGE) & edge) == 0) {
-                dy = 0;
-            }
-
-            // Convert to image space before sending to growBy().
-            float xDelta = dx * (mCropRect.width() / r.width());
-            float yDelta = dy * (mCropRect.height() / r.height());
-            growBy((((edge & GROW_LEFT_EDGE) != 0) ? -1 : 1) * xDelta,
-                    (((edge & GROW_TOP_EDGE) != 0) ? -1 : 1) * yDelta);
-        }
-    }
-
-    // Grows the cropping rectange by (dx, dy) in image space.
-    void moveBy(float dx, float dy) {
-        Rect invalRect = new Rect(mDrawRect);
-
-        mCropRect.offset(dx, dy);
-
-        // Put the cropping rectangle inside image rectangle.
-        mCropRect.offset(
-                Math.max(0, mImageRect.left - mCropRect.left),
-                Math.max(0, mImageRect.top  - mCropRect.top));
-
-        mCropRect.offset(
-                Math.min(0, mImageRect.right  - mCropRect.right),
-                Math.min(0, mImageRect.bottom - mCropRect.bottom));
-
-        mDrawRect = computeLayout();
-        invalRect.union(mDrawRect);
-        invalRect.inset(-10, -10);
-        mContext.invalidate(invalRect);
-    }
-
-    // Grows the cropping rectange by (dx, dy) in image space.
-    void growBy(float dx, float dy) {
-        if (mMaintainAspectRatio) {
-            if (dx != 0) {
-                dy = dx / mInitialAspectRatio;
-            } else if (dy != 0) {
-                dx = dy * mInitialAspectRatio;
-            }
-        }
-
-        // Don't let the cropping rectangle grow too fast.
-        // Grow at most half of the difference between the image rectangle and
-        // the cropping rectangle.
-        RectF r = new RectF(mCropRect);
-        if (dx > 0F && r.width() + 2 * dx > mImageRect.width()) {
-            float adjustment = (mImageRect.width() - r.width()) / 2F;
-            dx = adjustment;
-            if (mMaintainAspectRatio) {
-                dy = dx / mInitialAspectRatio;
-            }
-        }
-        if (dy > 0F && r.height() + 2 * dy > mImageRect.height()) {
-            float adjustment = (mImageRect.height() - r.height()) / 2F;
-            dy = adjustment;
-            if (mMaintainAspectRatio) {
-                dx = dy * mInitialAspectRatio;
-            }
-        }
-
-        r.inset(-dx, -dy);
-
-        // Don't let the cropping rectangle shrink too fast.
-        final float widthCap = 25F;
-        if (r.width() < widthCap) {
-            r.inset(-(widthCap - r.width()) / 2F, 0F);
-        }
-        float heightCap = mMaintainAspectRatio
-                ? (widthCap / mInitialAspectRatio)
-                : widthCap;
-        if (r.height() < heightCap) {
-            r.inset(0F, -(heightCap - r.height()) / 2F);
-        }
-
-        // Put the cropping rectangle inside the image rectangle.
-        if (r.left < mImageRect.left) {
-            r.offset(mImageRect.left - r.left, 0F);
-        } else if (r.right > mImageRect.right) {
-            r.offset(-(r.right - mImageRect.right), 0);
-        }
-        if (r.top < mImageRect.top) {
-            r.offset(0F, mImageRect.top - r.top);
-        } else if (r.bottom > mImageRect.bottom) {
-            r.offset(0F, -(r.bottom - mImageRect.bottom));
-        }
-
-        mCropRect.set(r);
-        mDrawRect = computeLayout();
-        mContext.invalidate();
-    }
-
-    // Returns the cropping rectangle in image space.
-    public Rect getCropRect() {
-        return new Rect((int) mCropRect.left, (int) mCropRect.top,
-                        (int) mCropRect.right, (int) mCropRect.bottom);
-    }
-
-    // Maps the cropping rectangle from image space to screen space.
-    private Rect computeLayout() {
-        RectF r = new RectF(mCropRect.left, mCropRect.top,
-                            mCropRect.right, mCropRect.bottom);
-        mMatrix.mapRect(r);
-        return new Rect(Math.round(r.left), Math.round(r.top),
-                        Math.round(r.right), Math.round(r.bottom));
-    }
-
-    public void invalidate() {
-        mDrawRect = computeLayout();
-    }
-
-    public void setup(Matrix m, Rect imageRect, RectF cropRect, boolean circle,
-                      boolean maintainAspectRatio) {
-        if (circle) {
-            maintainAspectRatio = true;
-        }
-        mMatrix = new Matrix(m);
-
-        mCropRect = cropRect;
-        mImageRect = new RectF(imageRect);
-        mMaintainAspectRatio = maintainAspectRatio;
-        mCircle = circle;
-
-        mInitialAspectRatio = mCropRect.width() / mCropRect.height();
-        mDrawRect = computeLayout();
-
-        mFocusPaint.setARGB(125, 50, 50, 50);
-        mNoFocusPaint.setARGB(125, 50, 50, 50);
-        mOutlinePaint.setStrokeWidth(3F);
-        mOutlinePaint.setStyle(Paint.Style.STROKE);
-        mOutlinePaint.setAntiAlias(true);
-
-        mMode = ModifyMode.None;
-        init();
-    }
-
-    enum ModifyMode { None, Move, Grow }
-
-    private ModifyMode mMode = ModifyMode.None;
-
-    Rect mDrawRect;  // in screen space
-    private RectF mImageRect;  // in image space
-    RectF mCropRect;  // in image space
-    Matrix mMatrix;
-
-    private boolean mMaintainAspectRatio = false;
-    private float mInitialAspectRatio;
-    private boolean mCircle = false;
-
-    private Drawable mResizeDrawableWidth;
-    private Drawable mResizeDrawableHeight;
-    private Drawable mResizeDrawableDiagonal;
-
-    private final Paint mFocusPaint = new Paint();
-    private final Paint mNoFocusPaint = new Paint();
-    private final Paint mOutlinePaint = new Paint();
-}
diff --git a/src/com/android/camera/IconIndicator.java b/src/com/android/camera/IconIndicator.java
index c3f0392..cfb0a26 100644
--- a/src/com/android/camera/IconIndicator.java
+++ b/src/com/android/camera/IconIndicator.java
@@ -23,6 +23,11 @@
 import android.util.AttributeSet;
 import android.widget.ImageView;
 
+/**
+ * This class draws an icon which changes according to the mode. For example,
+ * The flash icon can have on, off, and auto modes. The user can use
+ * {@link #setMode(String)} to change the mode (and the icon).
+ */
 public class IconIndicator extends ImageView {
 
     private Drawable[] mIcons;
diff --git a/src/com/android/camera/IconListPreference.java b/src/com/android/camera/IconListPreference.java
index 314b7a9..9e8109e 100644
--- a/src/com/android/camera/IconListPreference.java
+++ b/src/com/android/camera/IconListPreference.java
@@ -23,6 +23,7 @@
 import android.preference.ListPreference;
 import android.util.AttributeSet;
 
+/** A {@code ListPreference} where each entry has a corresponding icon. */
 public class IconListPreference extends ListPreference {
     private Drawable mIcons[];
     private Resources mResources;
diff --git a/src/com/android/camera/ImageGallery.java b/src/com/android/camera/ImageGallery.java
deleted file mode 100644
index 680d186..0000000
--- a/src/com/android/camera/ImageGallery.java
+++ /dev/null
@@ -1,1018 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.camera;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.ProgressDialog;
-import android.content.ActivityNotFoundException;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.SharedPreferences;
-import android.content.pm.ActivityInfo;
-import android.content.res.Configuration;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.graphics.Rect;
-import android.graphics.drawable.Drawable;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Parcelable;
-import android.preference.PreferenceManager;
-import android.provider.MediaStore;
-import android.util.Log;
-import android.view.ContextMenu;
-import android.view.KeyEvent;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.Window;
-import android.view.View.OnClickListener;
-import android.view.animation.Animation;
-import android.view.animation.AnimationUtils;
-import android.widget.Button;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.android.camera.gallery.IImage;
-import com.android.camera.gallery.IImageList;
-import com.android.camera.gallery.VideoObject;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-
-public class ImageGallery extends Activity implements
-        GridViewSpecial.Listener, GridViewSpecial.DrawAdapter {
-    private static final String STATE_SCROLL_POSITION = "scroll_position";
-    private static final String STATE_SELECTED_INDEX = "first_index";
-
-    private static final String TAG = "ImageGallery";
-    private static final float INVALID_POSITION = -1f;
-    private ImageManager.ImageListParam mParam;
-    private IImageList mAllImages;
-    private int mInclusion;
-    boolean mSortAscending = false;
-    private View mNoImagesView;
-    public static final int CROP_MSG = 2;
-
-    private Dialog mMediaScanningDialog;
-    private MenuItem mSlideShowItem;
-    private SharedPreferences mPrefs;
-    private long mVideoSizeLimit = Long.MAX_VALUE;
-    private View mFooterOrganizeView;
-
-    private BroadcastReceiver mReceiver = null;
-
-    private final Handler mHandler = new Handler();
-    private boolean mLayoutComplete;
-    private boolean mPausing = true;
-    private ImageLoader mLoader;
-    private GridViewSpecial mGvs;
-
-    private Uri mCropResultUri;
-
-    // The index of the first picture in GridViewSpecial.
-    private int mSelectedIndex = GridViewSpecial.INDEX_NONE;
-    private float mScrollPosition = INVALID_POSITION;
-    private boolean mConfigurationChanged = false;
-
-    private HashSet<IImage> mMultiSelected = null;
-
-    @Override
-    public void onCreate(Bundle icicle) {
-        super.onCreate(icicle);
-
-        mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
-
-        // Must be called before setContentView().
-        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
-
-        setContentView(R.layout.image_gallery);
-
-        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,
-                R.layout.custom_gallery_title);
-
-        mNoImagesView = findViewById(R.id.no_images);
-
-        mGvs = (GridViewSpecial) findViewById(R.id.grid);
-        mGvs.setListener(this);
-
-        mFooterOrganizeView = findViewById(R.id.footer_organize);
-
-        // consume all click events on the footer view
-        mFooterOrganizeView.setOnClickListener(Util.getNullOnClickListener());
-        initializeFooterButtons();
-
-        if (isPickIntent()) {
-            mVideoSizeLimit = getIntent().getLongExtra(
-                    MediaStore.EXTRA_SIZE_LIMIT, Long.MAX_VALUE);
-        } else {
-            mVideoSizeLimit = Long.MAX_VALUE;
-            mGvs.setOnCreateContextMenuListener(
-                    new CreateContextMenuListener());
-        }
-
-        setupInclusion();
-
-        mLoader = new ImageLoader(getContentResolver(), mHandler);
-    }
-
-    private void initializeFooterButtons() {
-        Button deleteButton = (Button) findViewById(R.id.button_delete);
-        deleteButton.setOnClickListener(new OnClickListener() {
-            public void onClick(View v) {
-                onDeleteMultipleClicked();
-            }
-        });
-
-        Button shareButton = (Button) findViewById(R.id.button_share);
-        shareButton.setOnClickListener(new OnClickListener() {
-            public void onClick(View v) {
-                onShareMultipleClicked();
-            }
-        });
-
-        Button closeButton = (Button) findViewById(R.id.button_close);
-        closeButton.setOnClickListener(new OnClickListener() {
-            public void onClick(View v) {
-                closeMultiSelectMode();
-            }
-        });
-    }
-
-    private MenuItem addSlideShowMenu(Menu menu) {
-        return menu.add(Menu.NONE, Menu.NONE, MenuHelper.POSITION_SLIDESHOW,
-                R.string.slide_show)
-                .setOnMenuItemClickListener(
-                new MenuItem.OnMenuItemClickListener() {
-                    public boolean onMenuItemClick(MenuItem item) {
-                        return onSlideShowClicked();
-                    }
-                }).setIcon(android.R.drawable.ic_menu_slideshow);
-    }
-
-    public boolean onSlideShowClicked() {
-        if (!canHandleEvent()) {
-            return false;
-        }
-        IImage img = getCurrentImage();
-        if (img == null) {
-            img = mAllImages.getImageAt(0);
-            if (img == null) {
-                return true;
-            }
-        }
-        Uri targetUri = img.fullSizeImageUri();
-        Uri thisUri = getIntent().getData();
-        if (thisUri != null) {
-            String bucket = thisUri.getQueryParameter("bucketId");
-            if (bucket != null) {
-                targetUri = targetUri.buildUpon()
-                        .appendQueryParameter("bucketId", bucket)
-                        .build();
-            }
-        }
-        Intent intent = new Intent(Intent.ACTION_VIEW, targetUri);
-        intent.putExtra("slideshow", true);
-        startActivity(intent);
-        return true;
-    }
-
-    private final Runnable mDeletePhotoRunnable = new Runnable() {
-        public void run() {
-            if (!canHandleEvent()) return;
-
-            IImage currentImage = getCurrentImage();
-
-            // The selection will be cleared when mGvs.stop() is called, so
-            // we need to call getCurrentImage() before mGvs.stop().
-            mGvs.stop();
-
-            if (currentImage != null) {
-                mAllImages.removeImage(currentImage);
-            }
-            mGvs.setImageList(mAllImages);
-            mGvs.start();
-
-            mNoImagesView.setVisibility(mAllImages.isEmpty()
-                    ? View.VISIBLE
-                    : View.GONE);
-        }
-    };
-
-    private Uri getCurrentImageUri() {
-        IImage image = getCurrentImage();
-        if (image != null) {
-            return image.fullSizeImageUri();
-        } else {
-            return null;
-        }
-    }
-
-    private IImage getCurrentImage() {
-        int currentSelection = mGvs.getCurrentSelection();
-        if (currentSelection < 0
-                || currentSelection >= mAllImages.getCount()) {
-            return null;
-        } else {
-            return mAllImages.getImageAt(currentSelection);
-        }
-    }
-
-    @Override
-    public void onConfigurationChanged(Configuration newConfig) {
-        super.onConfigurationChanged(newConfig);
-        mConfigurationChanged = true;
-    }
-
-    boolean canHandleEvent() {
-        // Don't process event in pause state.
-        return (!mPausing) && (mLayoutComplete);
-    }
-
-    @Override
-    public boolean onKeyDown(int keyCode, KeyEvent event) {
-        if (!canHandleEvent()) return false;
-        switch (keyCode) {
-            case KeyEvent.KEYCODE_DEL:
-                IImage image = getCurrentImage();
-                if (image != null) {
-                    MenuHelper.deleteImage(
-                            this, mDeletePhotoRunnable, getCurrentImage());
-                }
-                return true;
-        }
-        return super.onKeyDown(keyCode, event);
-    }
-
-    private boolean isPickIntent() {
-        String action = getIntent().getAction();
-        return (Intent.ACTION_PICK.equals(action)
-                || Intent.ACTION_GET_CONTENT.equals(action));
-    }
-
-    private void launchCropperOrFinish(IImage img) {
-        Bundle myExtras = getIntent().getExtras();
-
-        long size = MenuHelper.getImageFileSize(img);
-        if (size < 0) {
-            // Return if the image file is not available.
-            return;
-        }
-
-        if (size > mVideoSizeLimit) {
-            DialogInterface.OnClickListener buttonListener =
-                    new DialogInterface.OnClickListener() {
-                public void onClick(DialogInterface dialog, int which) {
-                    dialog.dismiss();
-                }
-            };
-            new AlertDialog.Builder(this)
-                    .setIcon(android.R.drawable.ic_dialog_info)
-                    .setTitle(R.string.file_info_title)
-                    .setMessage(R.string.video_exceed_mms_limit)
-                    .setNeutralButton(R.string.details_ok, buttonListener)
-                    .show();
-            return;
-        }
-
-        String cropValue = myExtras != null ? myExtras.getString("crop") : null;
-        if (cropValue != null) {
-            Bundle newExtras = new Bundle();
-            if (cropValue.equals("circle")) {
-                newExtras.putString("circleCrop", "true");
-            }
-
-            Intent cropIntent = new Intent();
-            cropIntent.setData(img.fullSizeImageUri());
-            cropIntent.setClass(this, CropImage.class);
-            cropIntent.putExtras(newExtras);
-
-            /* pass through any extras that were passed in */
-            cropIntent.putExtras(myExtras);
-            startActivityForResult(cropIntent, CROP_MSG);
-        } else {
-            Intent result = new Intent(null, img.fullSizeImageUri());
-            if (myExtras != null && myExtras.getBoolean("return-data")) {
-                // The size of a transaction should be below 100K.
-                Bitmap bitmap = img.fullSizeBitmap(
-                        IImage.UNCONSTRAINED, 100 * 1024);
-                if (bitmap != null) {
-                    result.putExtra("data", bitmap);
-                }
-            }
-            setResult(RESULT_OK, result);
-            finish();
-        }
-    }
-
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode,
-            Intent data) {
-        switch (requestCode) {
-            case MenuHelper.RESULT_COMMON_MENU_CROP: {
-                if (resultCode == RESULT_OK) {
-
-                    // The CropImage activity passes back the Uri of the cropped
-                    // image as the Action rather than the Data.
-                    // We store this URI so we can move the selection box to it
-                    // later.
-                    mCropResultUri = Uri.parse(data.getAction());
-                }
-                break;
-            }
-            case CROP_MSG: {
-                if (resultCode == RESULT_OK) {
-                    setResult(resultCode, data);
-                    finish();
-                }
-                break;
-            }
-        }
-    }
-
-    @Override
-    public void onPause() {
-        super.onPause();
-        mPausing = true;
-
-        mLoader.stop();
-
-        mGvs.stop();
-
-        if (mReceiver != null) {
-            unregisterReceiver(mReceiver);
-            mReceiver = null;
-        }
-
-        // Now that we've paused the threads that are using the cursor it is
-        // safe to close it.
-        mAllImages.close();
-        mAllImages = null;
-    }
-
-    private void rebake(boolean unmounted, boolean scanning) {
-        mGvs.stop();
-        if (mAllImages != null) {
-            mAllImages.close();
-            mAllImages = null;
-        }
-
-        if (mMediaScanningDialog != null) {
-            mMediaScanningDialog.cancel();
-            mMediaScanningDialog = null;
-        }
-
-        if (scanning) {
-            mMediaScanningDialog = ProgressDialog.show(
-                    this,
-                    null,
-                    getResources().getString(R.string.wait),
-                    true,
-                    true);
-        }
-
-        mParam = allImages(!unmounted && !scanning);
-        mAllImages = ImageManager.makeImageList(getContentResolver(), mParam);
-
-        mGvs.setImageList(mAllImages);
-        mGvs.setDrawAdapter(this);
-        mGvs.setLoader(mLoader);
-        mGvs.start();
-        mNoImagesView.setVisibility(mAllImages.getCount() > 0
-                ? View.GONE
-                : View.VISIBLE);
-    }
-
-    @Override
-    protected void onSaveInstanceState(Bundle state) {
-        super.onSaveInstanceState(state);
-        state.putFloat(STATE_SCROLL_POSITION, mScrollPosition);
-        state.putInt(STATE_SELECTED_INDEX, mSelectedIndex);
-    }
-
-    @Override
-    protected void onRestoreInstanceState(Bundle state) {
-        super.onRestoreInstanceState(state);
-        mScrollPosition = state.getFloat(
-                STATE_SCROLL_POSITION, INVALID_POSITION);
-        mSelectedIndex = state.getInt(STATE_SELECTED_INDEX, 0);
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-
-        mGvs.setSizeChoice(Integer.parseInt(
-                mPrefs.getString("pref_gallery_size_key", "1")));
-        mGvs.requestFocus();
-
-        String sortOrder = mPrefs.getString("pref_gallery_sort_key", null);
-        if (sortOrder != null) {
-            mSortAscending = sortOrder.equals("ascending");
-        }
-
-        mPausing = false;
-
-        // install an intent filter to receive SD card related events.
-        IntentFilter intentFilter =
-                new IntentFilter(Intent.ACTION_MEDIA_MOUNTED);
-        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_EJECT);
-        intentFilter.addDataScheme("file");
-
-        mReceiver = new BroadcastReceiver() {
-            @Override
-            public void onReceive(Context context, Intent intent) {
-                String action = intent.getAction();
-                if (action.equals(Intent.ACTION_MEDIA_MOUNTED)) {
-                    // SD card available
-                    // TODO put up a "please wait" message
-                    // TODO also listen for the media scanner finished message
-                } else if (action.equals(Intent.ACTION_MEDIA_UNMOUNTED)) {
-                    // SD card unavailable
-                    rebake(true, false);
-                } else if (action.equals(Intent.ACTION_MEDIA_SCANNER_STARTED)) {
-                    rebake(false, true);
-                } else if (action.equals(
-                        Intent.ACTION_MEDIA_SCANNER_FINISHED)) {
-                    rebake(false, false);
-                } else if (action.equals(Intent.ACTION_MEDIA_EJECT)) {
-                    rebake(true, false);
-                }
-            }
-        };
-        registerReceiver(mReceiver, intentFilter);
-        rebake(false, ImageManager.isMediaScannerScanning(
-                getContentResolver()));
-    }
-
-    @Override
-    public boolean onCreateOptionsMenu(Menu menu) {
-        if (isPickIntent()) {
-            String type = getIntent().resolveType(this);
-            if (type != null) {
-                if (isImageType(type)) {
-                    MenuHelper.addCapturePictureMenuItems(menu, this);
-                } else if (isVideoType(type)) {
-                    MenuHelper.addCaptureVideoMenuItems(menu, this);
-                }
-            }
-        } else {
-            MenuHelper.addCaptureMenuItems(menu, this);
-            if ((mInclusion & ImageManager.INCLUDE_IMAGES) != 0) {
-                mSlideShowItem = addSlideShowMenu(menu);
-            }
-
-            MenuItem item = menu.add(Menu.NONE, Menu.NONE,
-                    MenuHelper.POSITION_GALLERY_SETTING,
-                    R.string.camerasettings);
-            item.setOnMenuItemClickListener(
-                    new MenuItem.OnMenuItemClickListener() {
-                public boolean onMenuItemClick(MenuItem item) {
-                    Intent preferences = new Intent();
-                    preferences.setClass(ImageGallery.this,
-                            GallerySettings.class);
-                    startActivity(preferences);
-                    return true;
-                }
-            });
-            item.setAlphabeticShortcut('p');
-            item.setIcon(android.R.drawable.ic_menu_preferences);
-
-            item = menu.add(Menu.NONE, Menu.NONE,
-                    MenuHelper.POSITION_MULTISELECT,
-                    R.string.multiselect);
-            item.setOnMenuItemClickListener(
-                    new MenuItem.OnMenuItemClickListener() {
-                public boolean onMenuItemClick(MenuItem item) {
-                    if (isInMultiSelectMode()) {
-                        closeMultiSelectMode();
-                    } else {
-                        openMultiSelectMode();
-                    }
-                    return true;
-                }
-            });
-            item.setIcon(R.drawable.ic_menu_multiselect_gallery);
-        }
-        return true;
-    }
-
-    @Override
-    public boolean onPrepareOptionsMenu(Menu menu) {
-        if (!canHandleEvent()) return false;
-        if ((mInclusion & ImageManager.INCLUDE_IMAGES) != 0) {
-            boolean videoSelected = isVideoSelected();
-            // TODO: Only enable slide show if there is at least one image in
-            // the folder.
-            if (mSlideShowItem != null) {
-                mSlideShowItem.setEnabled(!videoSelected);
-            }
-        }
-
-        return true;
-    }
-
-    private boolean isVideoSelected() {
-        IImage image = getCurrentImage();
-        return (image != null) && ImageManager.isVideo(image);
-    }
-
-    private boolean isImageType(String type) {
-        return type.equals("vnd.android.cursor.dir/image")
-                || type.equals("image/*");
-    }
-
-    private boolean isVideoType(String type) {
-        return type.equals("vnd.android.cursor.dir/video")
-                || type.equals("video/*");
-    }
-
-    // According to the intent, setup what we include (image/video) in the
-    // gallery and the title of the gallery.
-    private void setupInclusion() {
-        mInclusion = ImageManager.INCLUDE_IMAGES | ImageManager.INCLUDE_VIDEOS;
-
-        Intent intent = getIntent();
-        if (intent != null) {
-            String type = intent.resolveType(this);
-            TextView leftText = (TextView) findViewById(R.id.left_text);
-            if (type != null) {
-                if (isImageType(type)) {
-                    mInclusion = ImageManager.INCLUDE_IMAGES;
-                    if (isPickIntent()) {
-                        leftText.setText(R.string.pick_photos_gallery_title);
-                    } else {
-                        leftText.setText(R.string.photos_gallery_title);
-                    }
-                }
-                if (isVideoType(type)) {
-                    mInclusion = ImageManager.INCLUDE_VIDEOS;
-                    if (isPickIntent()) {
-                        leftText.setText(R.string.pick_videos_gallery_title);
-                    } else {
-                        leftText.setText(R.string.videos_gallery_title);
-                    }
-                }
-            }
-            Bundle extras = intent.getExtras();
-            String title = (extras != null)
-                    ? extras.getString("windowTitle")
-                    : null;
-            if (title != null && title.length() > 0) {
-                leftText.setText(title);
-            }
-
-            if (extras != null) {
-                mInclusion = (ImageManager.INCLUDE_IMAGES
-                        | ImageManager.INCLUDE_VIDEOS)
-                        & extras.getInt("mediaTypes", mInclusion);
-            }
-
-            if (extras != null && extras.getBoolean("pick-drm")) {
-                Log.d(TAG, "pick-drm is true");
-                mInclusion = ImageManager.INCLUDE_DRM_IMAGES;
-            }
-        }
-    }
-
-    // Returns the image list parameter which contains the subset of image/video
-    // we want.
-    private ImageManager.ImageListParam allImages(boolean storageAvailable) {
-        if (!storageAvailable) {
-            return ImageManager.getEmptyImageListParam();
-        } else {
-            Uri uri = getIntent().getData();
-            return ImageManager.getImageListParam(
-                    ImageManager.DataLocation.EXTERNAL,
-                    mInclusion,
-                    mSortAscending
-                    ? ImageManager.SORT_ASCENDING
-                    : ImageManager.SORT_DESCENDING,
-                    (uri != null)
-                    ? uri.getQueryParameter("bucketId")
-                    : null);
-        }
-    }
-
-    private void toggleMultiSelected(IImage image) {
-        int original = mMultiSelected.size();
-        if (!mMultiSelected.add(image)) {
-            mMultiSelected.remove(image);
-        }
-        mGvs.invalidate();
-        if (original == 0) showFooter();
-        if (mMultiSelected.size() == 0) hideFooter();
-    }
-
-    public void onImageClicked(int index) {
-        if (index < 0 || index >= mAllImages.getCount()) {
-            return;
-        }
-        mSelectedIndex = index;
-        mGvs.setSelectedIndex(index);
-
-        IImage image = mAllImages.getImageAt(index);
-
-        if (isInMultiSelectMode()) {
-            toggleMultiSelected(image);
-            return;
-        }
-
-        if (isPickIntent()) {
-            launchCropperOrFinish(image);
-        } else {
-            Intent intent;
-            if (image instanceof VideoObject) {
-                intent = new Intent(
-                        Intent.ACTION_VIEW, image.fullSizeImageUri());
-                intent.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION,
-                        ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
-            } else {
-                intent = new Intent(this, ViewImage.class);
-                intent.putExtra(ViewImage.KEY_IMAGE_LIST, mParam);
-                intent.setData(image.fullSizeImageUri());
-            }
-            startActivity(intent);
-        }
-    }
-
-    public void onImageTapped(int index) {
-        // In the multiselect mode, once the finger finishes tapping, we hide
-        // the selection box by setting the selected index to none. However, if
-        // we use the dpad center key, we will keep the selected index in order
-        // to show the the selection box. We do this because we have the
-        // multiselect marker on the images to indicate which of them are
-        // selected, so we don't need the selection box, but in the dpad case
-        // we still need the selection box to show as a "cursor".
-
-        if (isInMultiSelectMode()) {
-            mGvs.setSelectedIndex(GridViewSpecial.INDEX_NONE);
-            toggleMultiSelected(mAllImages.getImageAt(index));
-        } else {
-            onImageClicked(index);
-        }
-    }
-
-    private class CreateContextMenuListener implements
-            View.OnCreateContextMenuListener {
-        public void onCreateContextMenu(ContextMenu menu, View v,
-                ContextMenu.ContextMenuInfo menuInfo) {
-            if (!canHandleEvent()) return;
-
-            IImage image = getCurrentImage();
-
-            if (image == null) {
-                return;
-            }
-
-            boolean isImage = ImageManager.isImage(image);
-            if (isImage) {
-                menu.add(R.string.view)
-                        .setOnMenuItemClickListener(
-                        new MenuItem.OnMenuItemClickListener() {
-                            public boolean onMenuItemClick(MenuItem item) {
-                                if (!canHandleEvent()) return false;
-                                onImageClicked(mGvs.getCurrentSelection());
-                                return true;
-                            }
-                        });
-            }
-
-            menu.setHeaderTitle(isImage
-                    ? R.string.context_menu_header
-                    : R.string.video_context_menu_header);
-            if ((mInclusion & (ImageManager.INCLUDE_IMAGES
-                    | ImageManager.INCLUDE_VIDEOS)) != 0) {
-                MenuHelper.MenuItemsResult r = MenuHelper.addImageMenuItems(
-                        menu,
-                        MenuHelper.INCLUDE_ALL,
-                        ImageGallery.this,
-                        mHandler,
-                        mDeletePhotoRunnable,
-                        new MenuHelper.MenuInvoker() {
-                            public void run(MenuHelper.MenuCallback cb) {
-                                if (!canHandleEvent()) {
-                                    return;
-                                }
-                                cb.run(getCurrentImageUri(), getCurrentImage());
-                                mGvs.invalidateImage(mGvs.getCurrentSelection());
-                            }
-                        });
-
-                if (r != null) {
-                    r.gettingReadyToOpen(menu, image);
-                }
-
-                if (isImage) {
-                    MenuHelper.enableShowOnMapMenuItem(
-                            menu, MenuHelper.hasLatLngData(image));
-                    addSlideShowMenu(menu);
-                }
-            }
-        }
-    }
-
-    public void onLayoutComplete(boolean changed) {
-        mLayoutComplete = true;
-        if (mCropResultUri != null) {
-            IImage image = mAllImages.getImageForUri(mCropResultUri);
-            mCropResultUri = null;
-            if (image != null) {
-                mSelectedIndex = mAllImages.getImageIndex(image);
-            }
-        }
-        mGvs.setSelectedIndex(mSelectedIndex);
-        if (mScrollPosition == INVALID_POSITION) {
-            if (mSortAscending) {
-                mGvs.scrollTo(0, mGvs.getHeight());
-            } else {
-                mGvs.scrollToImage(0);
-            }
-        } else if (mConfigurationChanged) {
-            mConfigurationChanged = false;
-            mGvs.scrollTo(mScrollPosition);
-            if (mGvs.getCurrentSelection() != GridViewSpecial.INDEX_NONE) {
-                mGvs.scrollToVisible(mSelectedIndex);
-            }
-        } else {
-            mGvs.scrollTo(mScrollPosition);
-        }
-    }
-
-    public void onScroll(float scrollPosition) {
-        mScrollPosition = scrollPosition;
-    }
-
-    private Drawable mVideoOverlay;
-    private Drawable mVideoMmsErrorOverlay;
-    private Drawable mMultiSelectTrue;
-    private Drawable mMultiSelectFalse;
-
-    // mSrcRect and mDstRect are only used in drawImage, but we put them as
-    // instance variables to reduce the memory allocation overhead because
-    // drawImage() is called a lot.
-    private final Rect mSrcRect = new Rect();
-    private final Rect mDstRect = new Rect();
-
-    private final Paint mPaint = new Paint(Paint.FILTER_BITMAP_FLAG);
-
-    public void drawImage(Canvas canvas, IImage image,
-            Bitmap b, int xPos, int yPos, int w, int h) {
-        if (b != null) {
-            // if the image is close to the target size then crop,
-            // otherwise scale both the bitmap and the view should be
-            // square but I suppose that could change in the future.
-
-            int bw = b.getWidth();
-            int bh = b.getHeight();
-
-            int deltaW = bw - w;
-            int deltaH = bh - h;
-
-            if (deltaW >= 0 && deltaW < 10 &&
-                deltaH >= 0 && deltaH < 10) {
-                int halfDeltaW = deltaW / 2;
-                int halfDeltaH = deltaH / 2;
-                mSrcRect.set(0 + halfDeltaW, 0 + halfDeltaH,
-                        bw - halfDeltaW, bh - halfDeltaH);
-                mDstRect.set(xPos, yPos, xPos + w, yPos + h);
-                canvas.drawBitmap(b, mSrcRect, mDstRect, null);
-            } else {
-                mSrcRect.set(0, 0, bw, bh);
-                mDstRect.set(xPos, yPos, xPos + w, yPos + h);
-                canvas.drawBitmap(b, mSrcRect, mDstRect, mPaint);
-            }
-        } else {
-            // If the thumbnail cannot be drawn, put up an error icon
-            // instead
-            Bitmap error = getErrorBitmap(image);
-            int width = error.getWidth();
-            int height = error.getHeight();
-            mSrcRect.set(0, 0, width, height);
-            int left = (w - width) / 2 + xPos;
-            int top = (w - height) / 2 + yPos;
-            mDstRect.set(left, top, left + width, top + height);
-            canvas.drawBitmap(error, mSrcRect, mDstRect, null);
-        }
-
-        if (ImageManager.isVideo(image)) {
-            Drawable overlay = null;
-            long size = MenuHelper.getImageFileSize(image);
-            if (size >= 0 && size <= mVideoSizeLimit) {
-                if (mVideoOverlay == null) {
-                    mVideoOverlay = getResources().getDrawable(
-                            R.drawable.ic_gallery_video_overlay);
-                }
-                overlay = mVideoOverlay;
-            } else {
-                if (mVideoMmsErrorOverlay == null) {
-                    mVideoMmsErrorOverlay = getResources().getDrawable(
-                            R.drawable.ic_error_mms_video_overlay);
-                }
-                overlay = mVideoMmsErrorOverlay;
-                Paint paint = new Paint();
-                paint.setARGB(0x80, 0x00, 0x00, 0x00);
-                canvas.drawRect(xPos, yPos, xPos + w, yPos + h, paint);
-            }
-            int width = overlay.getIntrinsicWidth();
-            int height = overlay.getIntrinsicHeight();
-            int left = (w - width) / 2 + xPos;
-            int top = (h - height) / 2 + yPos;
-            mSrcRect.set(left, top, left + width, top + height);
-            overlay.setBounds(mSrcRect);
-            overlay.draw(canvas);
-        }
-    }
-
-    public boolean needsDecoration() {
-        return (mMultiSelected != null);
-    }
-
-    public void drawDecoration(Canvas canvas, IImage image,
-            int xPos, int yPos, int w, int h) {
-        if (mMultiSelected != null) {
-            initializeMultiSelectDrawables();
-
-            Drawable checkBox = mMultiSelected.contains(image)
-                    ? mMultiSelectTrue
-                    : mMultiSelectFalse;
-            int width = checkBox.getIntrinsicWidth();
-            int height = checkBox.getIntrinsicHeight();
-            int left = 5 + xPos;
-            int top = h - height - 5 + yPos;
-            mSrcRect.set(left, top, left + width, top + height);
-            checkBox.setBounds(mSrcRect);
-            checkBox.draw(canvas);
-        }
-    }
-
-    private void initializeMultiSelectDrawables() {
-        if (mMultiSelectTrue == null) {
-            mMultiSelectTrue = getResources()
-                    .getDrawable(R.drawable.btn_check_buttonless_on);
-        }
-        if (mMultiSelectFalse == null) {
-            mMultiSelectFalse = getResources()
-                    .getDrawable(R.drawable.btn_check_buttonless_off);
-        }
-    }
-
-    private Bitmap mMissingImageThumbnailBitmap;
-    private Bitmap mMissingVideoThumbnailBitmap;
-
-    // Create this bitmap lazily, and only once for all the ImageBlocks to
-    // use
-    public Bitmap getErrorBitmap(IImage image) {
-        if (ImageManager.isImage(image)) {
-            if (mMissingImageThumbnailBitmap == null) {
-                mMissingImageThumbnailBitmap = BitmapFactory.decodeResource(
-                        getResources(),
-                        R.drawable.ic_missing_thumbnail_picture);
-            }
-            return mMissingImageThumbnailBitmap;
-        } else {
-            if (mMissingVideoThumbnailBitmap == null) {
-                mMissingVideoThumbnailBitmap = BitmapFactory.decodeResource(
-                        getResources(), R.drawable.ic_missing_thumbnail_video);
-            }
-            return mMissingVideoThumbnailBitmap;
-        }
-    }
-
-    private Animation mFooterAppear;
-    private Animation mFooterDisappear;
-
-    private void showFooter() {
-        mFooterOrganizeView.setVisibility(View.VISIBLE);
-        if (mFooterAppear == null) {
-            mFooterAppear = AnimationUtils.loadAnimation(
-                    this, R.anim.footer_appear);
-        }
-        mFooterOrganizeView.startAnimation(mFooterAppear);
-    }
-
-    private void hideFooter() {
-        if (mFooterOrganizeView.getVisibility() != View.GONE) {
-            mFooterOrganizeView.setVisibility(View.GONE);
-            if (mFooterDisappear == null) {
-                mFooterDisappear = AnimationUtils.loadAnimation(
-                        this, R.anim.footer_disappear);
-            }
-            mFooterOrganizeView.startAnimation(mFooterDisappear);
-        }
-    }
-
-    private String getShareMultipleMimeType() {
-        final int FLAG_IMAGE = 1, FLAG_VIDEO = 2;
-        int flag = 0;
-        for (IImage image : mMultiSelected) {
-            flag |= ImageManager.isImage(image) ? FLAG_IMAGE : FLAG_VIDEO;
-        }
-        return flag == FLAG_IMAGE
-                ? "image/*"
-                : flag == FLAG_VIDEO ? "video/*" : "*/*";
-    }
-
-    private void onShareMultipleClicked() {
-        if (mMultiSelected.size() > 1) {
-            Intent intent = new Intent();
-            intent.setAction(Intent.ACTION_SEND_MULTIPLE);
-
-            String mimeType = getShareMultipleMimeType();
-            intent.setType(mimeType);
-            ArrayList<Parcelable> list = new ArrayList<Parcelable>();
-            for (IImage image : mMultiSelected) {
-                list.add(image.fullSizeImageUri());
-            }
-            intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, list);
-            try {
-                startActivity(Intent.createChooser(
-                        intent, getText(R.string.send_media_files)));
-            } catch (android.content.ActivityNotFoundException ex) {
-                Toast.makeText(this, R.string.no_way_to_share,
-                        Toast.LENGTH_SHORT).show();
-            }
-        } else if (mMultiSelected.size() == 1) {
-            IImage image = mMultiSelected.iterator().next();
-            Intent intent = new Intent();
-            intent.setAction(Intent.ACTION_SEND);
-            String mimeType = image.getMimeType();
-            intent.setType(mimeType);
-            intent.putExtra(Intent.EXTRA_STREAM, image.fullSizeImageUri());
-            boolean isImage = ImageManager.isImage(image);
-            try {
-                startActivity(Intent.createChooser(intent, getText(
-                        isImage ? R.string.sendImage : R.string.sendVideo)));
-            } catch (android.content.ActivityNotFoundException ex) {
-                Toast.makeText(this, isImage
-                        ? R.string.no_way_to_share_image
-                        : R.string.no_way_to_share_video,
-                        Toast.LENGTH_SHORT).show();
-            }
-        }
-    }
-
-    private void onDeleteMultipleClicked() {
-        Runnable action = new Runnable() {
-            public void run() {
-                ArrayList<Uri> uriList = new ArrayList<Uri>();
-                for (IImage image : mMultiSelected) {
-                    uriList.add(image.fullSizeImageUri());
-                }
-                closeMultiSelectMode();
-                Intent intent = new Intent(ImageGallery.this,
-                        DeleteImage.class);
-                intent.putExtra("delete-uris", uriList);
-                try {
-                    startActivity(intent);
-                } catch (ActivityNotFoundException ex) {
-                    Log.e(TAG, "Delete images fail", ex);
-                }
-            }
-        };
-        MenuHelper.deleteMultiple(this, action);
-    }
-
-    private boolean isInMultiSelectMode() {
-        return mMultiSelected != null;
-    }
-
-    private void closeMultiSelectMode() {
-        if (mMultiSelected == null) return;
-        mMultiSelected = null;
-        mGvs.invalidate();
-        hideFooter();
-    }
-
-    private void openMultiSelectMode() {
-        if (mMultiSelected != null) return;
-        mMultiSelected = new HashSet<IImage>();
-        mGvs.invalidate();
-    }
-
-}
diff --git a/src/com/android/camera/ImageGetter.java b/src/com/android/camera/ImageGetter.java
index 08c9370..76b60bf 100644
--- a/src/com/android/camera/ImageGetter.java
+++ b/src/com/android/camera/ImageGetter.java
@@ -25,7 +25,6 @@
 import android.os.Handler;
 import android.os.Message;
 import android.os.Process;
-import android.provider.MediaStore;
 
 /*
  * Here's the loading strategy.  For any given image, load the thumbnail
@@ -234,8 +233,7 @@
     public synchronized void cancelCurrent() {
         Util.Assert(mGetterThread != null);
         mCancel = true;
-        BitmapManager.instance().cancelThreadDecoding(mGetterThread);
-        MediaStore.Images.Thumbnails.cancelThumbnailRequest(mCr, -1);
+        BitmapManager.instance().cancelThreadDecoding(mGetterThread, mCr);
     }
 
     // Cancels current loading (with waiting).
diff --git a/src/com/android/camera/ImageLoader.java b/src/com/android/camera/ImageLoader.java
deleted file mode 100644
index c4d211f..0000000
--- a/src/com/android/camera/ImageLoader.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.camera;
-
-import com.android.camera.gallery.IImage;
-
-import android.content.ContentResolver;
-import android.graphics.Bitmap;
-import android.os.Handler;
-import android.provider.MediaStore;
-import android.util.Log;
-
-import java.util.ArrayList;
-
-/**
- * A dedicated decoding thread used by ImageGallery.
- */
-public class ImageLoader {
-    @SuppressWarnings("unused")
-    private static final String TAG = "ImageLoader";
-
-    // Queue of work to do in the worker thread. The work is done in order.
-    private final ArrayList<WorkItem> mQueue = new ArrayList<WorkItem>();
-
-    // the worker thread and a done flag so we know when to exit
-    private boolean mDone;
-    private Thread mDecodeThread;
-    private ContentResolver mCr;
-
-    public interface LoadedCallback {
-        public void run(Bitmap result);
-    }
-
-    public void getBitmap(IImage image,
-                          LoadedCallback imageLoadedRunnable,
-                          int tag) {
-        if (mDecodeThread == null) {
-            start();
-        }
-        synchronized (mQueue) {
-            WorkItem w = new WorkItem(image, imageLoadedRunnable, tag);
-            mQueue.add(w);
-            mQueue.notifyAll();
-        }
-    }
-
-    public boolean cancel(final IImage image) {
-        synchronized (mQueue) {
-            int index = findItem(image);
-            if (index >= 0) {
-                mQueue.remove(index);
-                return true;
-            } else {
-                return false;
-            }
-        }
-    }
-
-    // The caller should hold mQueue lock.
-    private int findItem(IImage image) {
-        for (int i = 0; i < mQueue.size(); i++) {
-            if (mQueue.get(i).mImage == image) {
-                return i;
-            }
-        }
-        return -1;
-    }
-
-    // Clear the queue. Returns an array of tags that were in the queue.
-    public int[] clearQueue() {
-        synchronized (mQueue) {
-            int n = mQueue.size();
-            int[] tags = new int[n];
-            for (int i = 0; i < n; i++) {
-                tags[i] = mQueue.get(i).mTag;
-            }
-            mQueue.clear();
-            return tags;
-        }
-    }
-
-    private static class WorkItem {
-        IImage mImage;
-        LoadedCallback mOnLoadedRunnable;
-        int mTag;
-
-        WorkItem(IImage image, LoadedCallback onLoadedRunnable, int tag) {
-            mImage = image;
-            mOnLoadedRunnable = onLoadedRunnable;
-            mTag = tag;
-        }
-    }
-
-    public ImageLoader(ContentResolver cr, Handler handler) {
-        mCr = cr;
-        start();
-    }
-
-    private class WorkerThread implements Runnable {
-
-        // Pick off items on the queue, one by one, and compute their bitmap.
-        // Place the resulting bitmap in the cache, then call back by executing
-        // the given runnable so things can get updated appropriately.
-        public void run() {
-            while (true) {
-                WorkItem workItem = null;
-                synchronized (mQueue) {
-                    if (mDone) {
-                        break;
-                    }
-                    if (!mQueue.isEmpty()) {
-                        workItem = mQueue.remove(0);
-                    } else {
-                        try {
-                            mQueue.wait();
-                        } catch (InterruptedException ex) {
-                            // ignore the exception
-                        }
-                        continue;
-                    }
-                }
-
-                final Bitmap b = workItem.mImage.miniThumbBitmap();
-
-                if (workItem.mOnLoadedRunnable != null) {
-                    workItem.mOnLoadedRunnable.run(b);
-                }
-            }
-        }
-    }
-
-    private void start() {
-        if (mDecodeThread != null) {
-            return;
-        }
-
-        mDone = false;
-        Thread t = new Thread(new WorkerThread());
-        t.setName("image-loader");
-        mDecodeThread = t;
-        t.start();
-    }
-
-    public void stop() {
-        synchronized (mQueue) {
-            mDone = true;
-            mQueue.notifyAll();
-        }
-        if (mDecodeThread != null) {
-            try {
-                Thread t = mDecodeThread;
-                BitmapManager.instance().cancelThreadDecoding(t);
-                MediaStore.Images.Thumbnails.cancelThumbnailRequest(mCr, -1);
-                t.join();
-                mDecodeThread = null;
-            } catch (InterruptedException ex) {
-                // so now what?
-            }
-        }
-    }
-}
diff --git a/src/com/android/camera/ImageManager.java b/src/com/android/camera/ImageManager.java
index f2c931d..25c8c29 100644
--- a/src/com/android/camera/ImageManager.java
+++ b/src/com/android/camera/ImageManager.java
@@ -48,11 +48,10 @@
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.Iterator;
 
 /**
- * ImageManager is used to retrieve and store images
+ * {@code ImageManager} is used to retrieve and store images
  * in the media content provider.
  */
 public class ImageManager {
@@ -65,8 +64,13 @@
     private static final Uri VIDEO_STORAGE_URI =
             Uri.parse("content://media/external/video/media");
 
-    // ImageListParam specifies all the parameters we need to create an image
-    // list (we also need a ContentResolver).
+    private ImageManager() {
+    }
+
+    /**
+     * {@code ImageListParam} specifies all the parameters we need to create an
+     * image list (we also need a ContentResolver).
+     */
     public static class ImageListParam implements Parcelable {
         public DataLocation mLocation;
         public int mInclusion;
@@ -79,7 +83,8 @@
         // This is only used if we are creating an empty image list.
         public boolean mIsEmptyImageList;
 
-        public ImageListParam() {}
+        public ImageListParam() {
+        }
 
         public void writeToParcel(Parcel out, int flags) {
             out.writeInt(mLocation.ordinal());
@@ -232,8 +237,8 @@
     public static Uri addImage(ContentResolver cr, String title, long dateTaken,
             Location location, String directory, String filename,
             Bitmap source, byte[] jpegData, int[] degree) {
-        // We should store image data earlier than insert it to ContentProvider, otherwise
-        // we may not be able to generate thumbnail in time.
+        // We should store image data earlier than insert it to ContentProvider,
+        // otherwise we may not be able to generate thumbnail in time.
         OutputStream outputStream = null;
         String filePath = directory + "/" + filename;
         try {
@@ -410,18 +415,10 @@
         public void close() {
         }
 
-        public HashMap<String, String> getBucketIds() {
-            return new HashMap<String, String>();
-        }
-
         public int getCount() {
             return 0;
         }
 
-        public boolean isEmpty() {
-            return true;
-        }
-
         public IImage getImageAt(int i) {
             return null;
         }
@@ -459,12 +456,6 @@
         return param;
     }
 
-    public static ImageListParam getEmptyImageListParam() {
-        ImageListParam param = new ImageListParam();
-        param.mIsEmptyImageList = true;
-        return param;
-    }
-
     public static IImageList makeImageList(ContentResolver cr,
             DataLocation location, int inclusion, int sort, String bucketId) {
         ImageListParam param = getImageListParam(location, inclusion, sort,
@@ -472,10 +463,6 @@
         return makeImageList(cr, param);
     }
 
-    public static IImageList makeEmptyImageList() {
-        return makeImageList(null, getEmptyImageListParam());
-    }
-
     public static IImageList  makeSingleImageList(ContentResolver cr, Uri uri) {
         return makeImageList(cr, getSingleImageListParam(uri));
     }
diff --git a/src/com/android/camera/ImageViewTouchBase.java b/src/com/android/camera/ImageViewTouchBase.java
index ef2edeb..dfd0932 100644
--- a/src/com/android/camera/ImageViewTouchBase.java
+++ b/src/com/android/camera/ImageViewTouchBase.java
@@ -116,9 +116,6 @@
 
     protected Handler mHandler = new Handler();
 
-    protected int mLastXTouchPos;
-    protected int mLastYTouchPos;
-
     @Override
     public void setImageBitmap(Bitmap bitmap) {
         setImageBitmap(bitmap, 0);
@@ -320,26 +317,6 @@
         center(true, true);
     }
 
-    protected void zoomTo(final float scale, final float centerX,
-                          final float centerY, final float durationMs) {
-        final float incrementPerMs = (scale - getScale()) / durationMs;
-        final float oldScale = getScale();
-        final long startTime = System.currentTimeMillis();
-
-        mHandler.post(new Runnable() {
-            public void run() {
-                long now = System.currentTimeMillis();
-                float currentMs = Math.min(durationMs, now - startTime);
-                float target = oldScale + (incrementPerMs * currentMs);
-                zoomTo(target, centerX, centerY);
-
-                if (currentMs < durationMs) {
-                    mHandler.post(this);
-                }
-            }
-        });
-    }
-
     protected void zoomTo(float scale) {
         float cx = getWidth() / 2F;
         float cy = getHeight() / 2F;
diff --git a/src/com/android/camera/MenuHelper.java b/src/com/android/camera/MenuHelper.java
index 0ab7612..d445e92 100644
--- a/src/com/android/camera/MenuHelper.java
+++ b/src/com/android/camera/MenuHelper.java
@@ -109,6 +109,7 @@
         public void run(MenuCallback r);
     }
 
+    /** A callback to be invoked when a menu item is clicked. */
     public interface MenuCallback {
         public void run(Uri uri, IImage image);
     }
@@ -342,11 +343,13 @@
     }
 
     /**
-     * Returns a human-readable string describing the white balance value. Returns empty
-     * string if there is no white balance value or it is not recognized.
+     * Returns a human-readable string describing the white balance value.
+     * Returns empty string if there is no white balance value or it is not
+     * recognized.
      */
     private static String getWhiteBalanceString(ExifInterface exif) {
-        int whitebalance = exif.getAttributeInt(ExifInterface.TAG_WHITE_BALANCE, -1);
+        int whitebalance = exif.getAttributeInt(
+                ExifInterface.TAG_WHITE_BALANCE, -1);
         if (whitebalance == -1) return "";
 
         switch (whitebalance) {
@@ -862,10 +865,6 @@
         deleteImpl(activity, onDelete, true);
     }
 
-    static void deleteVideo(Activity activity, Runnable onDelete) {
-        deleteImpl(activity, onDelete, false);
-    }
-
     static void deleteImage(
             Activity activity, Runnable onDelete, IImage image) {
         deleteImpl(activity, onDelete, ImageManager.isImage(image));
@@ -887,20 +886,6 @@
         }
     }
 
-    public static void deleteMultiple(Context context, Runnable action) {
-        boolean needConfirm = PreferenceManager
-            .getDefaultSharedPreferences(context)
-            .getBoolean("pref_gallery_confirm_delete_key", true);
-        if (!needConfirm) {
-            if (action != null) action.run();
-        } else {
-            String title = context.getString(R.string.confirm_delete_title);
-            String message = context.getString(
-                    R.string.confirm_delete_multiple_message);
-            confirmAction(context, title, message, action);
-        }
-    }
-
     public static void confirmAction(Context context, String title,
             String message, final Runnable action) {
         OnClickListener listener = new OnClickListener() {
@@ -969,55 +954,6 @@
         }
     }
 
-    static void addCapturePictureMenuItems(Menu menu, final Activity activity) {
-        menu.add(Menu.NONE, Menu.NONE, POSITION_CAPTURE_PICTURE,
-                R.string.capture_picture)
-                .setOnMenuItemClickListener(
-                new MenuItem.OnMenuItemClickListener() {
-                    public boolean onMenuItemClick(MenuItem item) {
-                        return onCapturePictureClicked(activity);
-                    }
-                }).setIcon(android.R.drawable.ic_menu_camera);
-    }
-
-    private static boolean onCapturePictureClicked(Activity activity) {
-        Intent intent = new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA);
-        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-        try {
-            activity.startActivity(intent);
-        } catch (android.content.ActivityNotFoundException e) {
-            // Ignore exception
-        }
-        return true;
-    }
-
-    static void addCaptureVideoMenuItems(Menu menu, final Activity activity) {
-        menu.add(Menu.NONE, Menu.NONE, POSITION_CAPTURE_VIDEO,
-                R.string.capture_video)
-                .setOnMenuItemClickListener(
-                new MenuItem.OnMenuItemClickListener() {
-                    public boolean onMenuItemClick(MenuItem item) {
-                        return onCaptureVideoClicked(activity);
-                    }
-                }).setIcon(R.drawable.ic_menu_camera_video_view);
-    }
-
-    private static boolean onCaptureVideoClicked(Activity activity) {
-        Intent intent = new Intent(MediaStore.INTENT_ACTION_VIDEO_CAMERA);
-        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-        try {
-            activity.startActivity(intent);
-        } catch (android.content.ActivityNotFoundException e) {
-            // Ignore exception
-        }
-        return true;
-    }
-
-    public static void addCaptureMenuItems(Menu menu, final Activity activity) {
-        addCapturePictureMenuItems(menu, activity);
-        addCaptureVideoMenuItems(menu, activity);
-    }
-
     public static String formatDuration(final Context context,
             int durationMs) {
         int duration = durationMs / 1000;
@@ -1035,29 +971,6 @@
         return durationValue;
     }
 
-    public static void showStorageToast(Activity activity) {
-        showStorageToast(activity, calculatePicturesRemaining());
-    }
-
-    public static void showStorageToast(Activity activity, int remaining) {
-        String noStorageText = null;
-
-        if (remaining == MenuHelper.NO_STORAGE_ERROR) {
-            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);
-        }
-
-        if (noStorageText != null) {
-            Toast.makeText(activity, noStorageText, 5000).show();
-        }
-    }
-
     public static int calculatePicturesRemaining() {
         try {
             if (!ImageManager.hasStorage()) {
diff --git a/src/com/android/camera/MonitoredActivity.java b/src/com/android/camera/MonitoredActivity.java
deleted file mode 100644
index 94c163f..0000000
--- a/src/com/android/camera/MonitoredActivity.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * 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;
-
-import android.app.Activity;
-import android.os.Bundle;
-
-import java.util.ArrayList;
-
-public class MonitoredActivity extends Activity {
-
-    private final ArrayList<LifeCycleListener> mListeners =
-            new ArrayList<LifeCycleListener>();
-
-    public static interface LifeCycleListener {
-        public void onActivityCreated(MonitoredActivity activity);
-        public void onActivityDestroyed(MonitoredActivity activity);
-        public void onActivityStarted(MonitoredActivity activity);
-        public void onActivityStopped(MonitoredActivity activity);
-    }
-
-    public static class LifeCycleAdapter implements LifeCycleListener {
-        public void onActivityCreated(MonitoredActivity activity) {
-        }
-
-        public void onActivityDestroyed(MonitoredActivity activity) {
-        }
-
-        public void onActivityStarted(MonitoredActivity activity) {
-        }
-
-        public void onActivityStopped(MonitoredActivity activity) {
-        }
-    }
-
-    public void addLifeCycleListener(LifeCycleListener listener) {
-        if (mListeners.contains(listener)) return;
-        mListeners.add(listener);
-    }
-
-    public void removeLifeCycleListener(LifeCycleListener listener) {
-        mListeners.remove(listener);
-    }
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        for (LifeCycleListener listener : mListeners) {
-            listener.onActivityCreated(this);
-        }
-    }
-
-    @Override
-    protected void onDestroy() {
-        super.onDestroy();
-        for (LifeCycleListener listener : mListeners) {
-            listener.onActivityDestroyed(this);
-        }
-    }
-
-    @Override
-    protected void onStart() {
-        super.onStart();
-        for (LifeCycleListener listener : mListeners) {
-            listener.onActivityStarted(this);
-        }
-    }
-
-    @Override
-    protected void onStop() {
-        super.onStop();
-        for (LifeCycleListener listener : mListeners) {
-            listener.onActivityStopped(this);
-        }
-    }
-}
diff --git a/src/com/android/camera/MovieView.java b/src/com/android/camera/MovieView.java
deleted file mode 100644
index 48001b8..0000000
--- a/src/com/android/camera/MovieView.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.camera;
-
-
-import android.app.Activity;
-import android.content.Intent;
-import android.content.pm.ActivityInfo;
-import android.os.Bundle;
-import android.provider.MediaStore;
-import android.util.Log;
-import android.view.View;
-
-/**
- * This activity plays a video from a specified URI.
- */
-public class MovieView extends Activity  {
-    private static final String TAG = "MovieView";
-
-    private MovieViewControl mControl;
-    private boolean mFinishOnCompletion;
-
-    @Override
-    public void onCreate(Bundle icicle) {
-        super.onCreate(icicle);
-        setContentView(R.layout.movie_view);
-        View rootView = findViewById(R.id.root);
-        Intent intent = getIntent();
-        mControl = new MovieViewControl(rootView, this, intent.getData()) {
-            @Override
-            public void onCompletion() {
-                if (mFinishOnCompletion) {
-                    finish();
-                }
-            }
-        };
-        if (intent.hasExtra(MediaStore.EXTRA_SCREEN_ORIENTATION)) {
-            int orientation = intent.getIntExtra(
-                    MediaStore.EXTRA_SCREEN_ORIENTATION,
-                    ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
-            if (orientation != getRequestedOrientation()) {
-                setRequestedOrientation(orientation);
-            }
-        }
-        mFinishOnCompletion = intent.getBooleanExtra(
-                MediaStore.EXTRA_FINISH_ON_COMPLETION, true);
-    }
-
-    @Override
-    public void onPause() {
-        mControl.onPause();
-        super.onPause();
-    }
-
-    @Override
-    public void onWindowFocusChanged(boolean hasFocus) {
-        if (hasFocus) {
-            Log.v(TAG, "hasFocus");
-            mControl.onResume();
-        }
-    }
-}
diff --git a/src/com/android/camera/MovieViewControl.java b/src/com/android/camera/MovieViewControl.java
deleted file mode 100644
index 737433b..0000000
--- a/src/com/android/camera/MovieViewControl.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * 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;
-
-import android.app.AlertDialog;
-import android.content.ContentResolver;
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.DialogInterface.OnCancelListener;
-import android.content.DialogInterface.OnClickListener;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteException;
-import android.media.MediaPlayer;
-import android.net.Uri;
-import android.os.Handler;
-import android.provider.MediaStore;
-import android.provider.MediaStore.Video;
-import android.view.View;
-import android.widget.MediaController;
-import android.widget.VideoView;
-
-public class MovieViewControl implements MediaPlayer.OnErrorListener,
-        MediaPlayer.OnCompletionListener {
-
-    @SuppressWarnings("unused")
-    private static final String TAG = "MovieViewControl";
-
-    private static final int ONE_MINUTE = 60 * 1000;
-    private static final int TWO_MINUTES = 2 * ONE_MINUTE;
-    private static final int FIVE_MINUTES = 5 * ONE_MINUTE;
-
-    // Copied from MediaPlaybackService in the Music Player app. Should be
-    // public, but isn't.
-    private static final String SERVICECMD =
-            "com.android.music.musicservicecommand";
-    private static final String CMDNAME = "command";
-    private static final String CMDPAUSE = "pause";
-
-    private final VideoView mVideoView;
-    private final View mProgressView;
-    private final Uri mUri;
-    private final ContentResolver mContentResolver;
-
-    // State maintained for proper onPause/OnResume behaviour.
-    private int mPositionWhenPaused = -1;
-    private boolean mWasPlayingWhenPaused = false;
-    private MediaController mMediaController;
-
-    Handler mHandler = new Handler();
-
-    Runnable mPlayingChecker = new Runnable() {
-        public void run() {
-            if (mVideoView.isPlaying()) {
-                mProgressView.setVisibility(View.GONE);
-            } else {
-                mHandler.postDelayed(mPlayingChecker, 250);
-            }
-        }
-    };
-
-    public MovieViewControl(View rootView, Context context, Uri videoUri) {
-        mContentResolver = context.getContentResolver();
-        mVideoView = (VideoView) rootView.findViewById(R.id.surface_view);
-        mProgressView = rootView.findViewById(R.id.progress_indicator);
-
-        mUri = videoUri;
-
-        // For streams that we expect to be slow to start up, show a
-        // progress spinner until playback starts.
-        String scheme = mUri.getScheme();
-        if ("http".equalsIgnoreCase(scheme)
-                || "rtsp".equalsIgnoreCase(scheme)) {
-            mHandler.postDelayed(mPlayingChecker, 250);
-        } else {
-            mProgressView.setVisibility(View.GONE);
-        }
-
-        mVideoView.setOnErrorListener(this);
-        mVideoView.setOnCompletionListener(this);
-        mVideoView.setVideoURI(mUri);
-        mMediaController = new MediaController(context);
-        mVideoView.setMediaController(mMediaController);
-
-        // make the video view handle keys for seeking and pausing
-        mVideoView.requestFocus();
-
-        Intent i = new Intent(SERVICECMD);
-        i.putExtra(CMDNAME, CMDPAUSE);
-        context.sendBroadcast(i);
-
-        final Integer bookmark = getBookmark();
-        if (bookmark != null) {
-            AlertDialog.Builder builder = new AlertDialog.Builder(context);
-            builder.setTitle(R.string.resume_playing_title);
-            builder.setMessage(String.format(
-                    context.getString(R.string.resume_playing_message),
-                    MenuHelper.formatDuration(context, bookmark)));
-            builder.setOnCancelListener(new OnCancelListener() {
-                public void onCancel(DialogInterface dialog) {
-                    onCompletion();
-                }});
-            builder.setPositiveButton(R.string.resume_playing_resume,
-                    new OnClickListener() {
-                public void onClick(DialogInterface dialog, int which) {
-                    mVideoView.seekTo(bookmark);
-                    mVideoView.start();
-                }});
-            builder.setNegativeButton(R.string.resume_playing_restart,
-                    new OnClickListener() {
-                public void onClick(DialogInterface dialog, int which) {
-                    mVideoView.start();
-                }});
-            builder.show();
-        } else {
-            mVideoView.start();
-        }
-    }
-
-    private static boolean uriSupportsBookmarks(Uri uri) {
-        String scheme = uri.getScheme();
-        String authority = uri.getAuthority();
-        return ("content".equalsIgnoreCase(scheme)
-                && MediaStore.AUTHORITY.equalsIgnoreCase(authority));
-    }
-
-    private Integer getBookmark() {
-        if (!uriSupportsBookmarks(mUri)) {
-            return null;
-        }
-
-        String[] projection = new String[] {
-                Video.VideoColumns.DURATION,
-                Video.VideoColumns.BOOKMARK};
-
-        try {
-            Cursor cursor = mContentResolver.query(
-                    mUri, projection, null, null, null);
-            if (cursor != null) {
-                try {
-                    if (cursor.moveToFirst()) {
-                        int duration = getCursorInteger(cursor, 0);
-                        int bookmark = getCursorInteger(cursor, 1);
-                        if ((bookmark < TWO_MINUTES)
-                                || (duration < FIVE_MINUTES)
-                                || (bookmark > (duration - ONE_MINUTE))) {
-                            return null;
-                        }
-                        return Integer.valueOf(bookmark);
-                    }
-                } finally {
-                    cursor.close();
-                }
-            }
-        } catch (SQLiteException e) {
-            // ignore
-        }
-
-        return null;
-    }
-
-    private static int getCursorInteger(Cursor cursor, int index) {
-        try {
-            return cursor.getInt(index);
-        } catch (SQLiteException e) {
-            return 0;
-        } catch (NumberFormatException e) {
-            return 0;
-        }
-
-    }
-
-    private void setBookmark(int bookmark) {
-        if (!uriSupportsBookmarks(mUri)) {
-            return;
-        }
-
-        ContentValues values = new ContentValues();
-        values.put(Video.VideoColumns.BOOKMARK, Integer.toString(bookmark));
-        try {
-            mContentResolver.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.
-        } catch (UnsupportedOperationException e) {
-            // ignore. can happen if the external volume is already detached.
-        }
-    }
-
-    public void onPause() {
-        mHandler.removeCallbacksAndMessages(null);
-        setBookmark(mVideoView.getCurrentPosition());
-
-        mPositionWhenPaused = mVideoView.getCurrentPosition();
-        mWasPlayingWhenPaused = mVideoView.isPlaying();
-        mVideoView.stopPlayback();
-    }
-
-    public void onResume() {
-        if (mPositionWhenPaused >= 0) {
-            mVideoView.setVideoURI(mUri);
-            mVideoView.seekTo(mPositionWhenPaused);
-            mPositionWhenPaused = -1;
-            if (mWasPlayingWhenPaused) {
-                mMediaController.show(0);
-            }
-        }
-    }
-
-    public boolean onError(MediaPlayer player, int arg1, int arg2) {
-        mHandler.removeCallbacksAndMessages(null);
-        mProgressView.setVisibility(View.GONE);
-        return false;
-    }
-
-    public void onCompletion(MediaPlayer mp) {
-        onCompletion();
-    }
-
-    public void onCompletion() {
-    }
-}
diff --git a/src/com/android/camera/DrmWallpaper.java b/src/com/android/camera/NoSearchActivity.java
similarity index 64%
rename from src/com/android/camera/DrmWallpaper.java
rename to src/com/android/camera/NoSearchActivity.java
index 643b876..6e8657a 100644
--- a/src/com/android/camera/DrmWallpaper.java
+++ b/src/com/android/camera/NoSearchActivity.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007 The Android Open Source Project
+ * 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.
@@ -16,17 +16,17 @@
 
 package com.android.camera;
 
-import android.content.Intent;
+import android.app.Activity;
 
 /**
- * Wallpaper picker for DRM images. This just redirects to the standard pick
- * action.
+ * An activity which disables the search key function.
+ *
+ * <p> To use it, just inherit from {@code NoSearchActivity} instead of
+ * {@code Activity}.
  */
-public class DrmWallpaper extends Wallpaper {
-
+public class NoSearchActivity extends Activity {
     @Override
-    protected void formatIntent(Intent intent) {
-        super.formatIntent(intent);
-        intent.putExtra("pick-drm", true);
+    public boolean onSearchRequested() {
+        return false;
     }
 }
diff --git a/src/com/android/camera/OnScreenHint.java b/src/com/android/camera/OnScreenHint.java
index 9918428..03056fa 100644
--- a/src/com/android/camera/OnScreenHint.java
+++ b/src/com/android/camera/OnScreenHint.java
@@ -35,7 +35,7 @@
  * application.
  * <p>
  * The easiest way to use this class is to call one of the static methods that
- * constructs everything you need and returns a new OnScreenHint object.
+ * constructs everything you need and returns a new {@code OnScreenHint} object.
  */
 public class OnScreenHint {
     static final String TAG = "OnScreenHint";
diff --git a/src/com/android/camera/OnScreenSettings.java b/src/com/android/camera/OnScreenSettings.java
index ffd309d..1547d03 100644
--- a/src/com/android/camera/OnScreenSettings.java
+++ b/src/com/android/camera/OnScreenSettings.java
@@ -1,3 +1,19 @@
+/*
+ * 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;
 
 import android.content.Context;
@@ -8,8 +24,6 @@
 import android.preference.Preference;
 import android.preference.PreferenceGroup;
 import android.preference.PreferenceScreen;
-import android.view.animation.Animation;
-import android.view.animation.Animation.AnimationListener;
 import android.view.Display;
 import android.view.Gravity;
 import android.view.KeyEvent;
@@ -31,13 +45,20 @@
 import java.util.ArrayList;
 import java.util.HashMap;
 
-// Please reference to {@link android.widget.ZoomButtonsController} for detail
-// information about adding window to WindowManager.
+/**
+ * The on-screen setting menu.
+ *
+ * <p>Please reference to {@code android.widget.ZoomButtonsController} for
+ * detail information about adding window to WindowManager.
+ */
 public class OnScreenSettings {
     @SuppressWarnings("unused")
     private static final String TAG = "OnScreenSettings";
     private static final int MSG_POST_SET_VISIBLE = 1;
 
+    /**
+     * A callback to be invoked when the on-screen menu's visibility changes.
+     */
     public interface OnVisibilityChangedListener {
         public void onVisibilityChanged(boolean visibility);
     }
@@ -400,7 +421,7 @@
                 if (mIconPreference != null) {
                     icon.setVisibility(View.VISIBLE);
                     icon.setImageDrawable(
-                            mIconPreference.getIcons()[position-1]);
+                            mIconPreference.getIcons()[position - 1]);
                 } else {
                     icon.setVisibility(View.GONE);
                 }
diff --git a/src/com/android/camera/PhotoAppWidgetBind.java b/src/com/android/camera/PhotoAppWidgetBind.java
deleted file mode 100644
index 628fdc6..0000000
--- a/src/com/android/camera/PhotoAppWidgetBind.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * 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;
-
-import com.android.camera.PhotoAppWidgetProvider.PhotoDatabaseHelper;
-
-import android.app.Activity;
-import android.appwidget.AppWidgetManager;
-import android.content.Intent;
-import android.graphics.Bitmap;
-import android.os.Bundle;
-import android.util.Log;
-import android.widget.RemoteViews;
-
-import java.util.ArrayList;
-
-class PhotoAppWidgetBind extends Activity {
-    private static final String TAG = "PhotoAppWidgetBind";
-    private static final String EXTRA_APPWIDGET_BITMAPS =
-            "com.android.camera.appwidgetbitmaps";
-
-    @Override
-    protected void onCreate(Bundle icicle) {
-        super.onCreate(icicle);
-        finish();
-
-        // The caller has requested that we bind a given bitmap to a specific
-        // appWidgetId, which probably is happening during a Launcher upgrade.
-        // This is dangerous because the caller could set bitmaps on
-        // appWidgetIds they don't own, so we guard this call at the manifest
-        // level by requiring the BIND_APPWIDGET permission.
-
-        final Intent intent = getIntent();
-        final Bundle extras = intent.getExtras();
-
-        final int[] appWidgetIds =
-                extras.getIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS);
-        final ArrayList<Bitmap> bitmaps =
-                extras.getParcelableArrayList(EXTRA_APPWIDGET_BITMAPS);
-
-        if (appWidgetIds == null || bitmaps == null
-                || appWidgetIds.length != bitmaps.size()) {
-            Log.e(TAG, "Problem parsing photo widget bind request");
-            return;
-        }
-
-        AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
-        PhotoDatabaseHelper helper = new PhotoDatabaseHelper(this);
-        for (int i = 0; i < appWidgetIds.length; i++) {
-            // Store the cropped photo in our database
-            int appWidgetId = appWidgetIds[i];
-            helper.setPhoto(appWidgetId, bitmaps.get(i));
-
-            // Push newly updated widget to surface
-            RemoteViews views =
-                    PhotoAppWidgetProvider.buildUpdate(this, appWidgetId,
-                    helper);
-            appWidgetManager.updateAppWidget(new int[] { appWidgetId }, views);
-        }
-        helper.close();
-    }
-}
diff --git a/src/com/android/camera/PhotoAppWidgetConfigure.java b/src/com/android/camera/PhotoAppWidgetConfigure.java
deleted file mode 100644
index 1755a71..0000000
--- a/src/com/android/camera/PhotoAppWidgetConfigure.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * 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;
-
-import com.android.camera.PhotoAppWidgetProvider.PhotoDatabaseHelper;
-
-import android.app.Activity;
-import android.appwidget.AppWidgetManager;
-import android.content.Intent;
-import android.graphics.Bitmap;
-import android.os.Bundle;
-import android.util.DisplayMetrics;
-import android.widget.RemoteViews;
-
-public class PhotoAppWidgetConfigure extends Activity {
-
-    @SuppressWarnings("unused")
-    private static final String TAG = "PhotoAppWidgetConfigure";
-    static final int REQUEST_GET_PHOTO = 2;
-
-    int mAppWidgetId = -1;
-
-    @Override
-    protected void onCreate(Bundle icicle) {
-        super.onCreate(icicle);
-
-        // Someone is requesting that we configure the given mAppWidgetId, which
-        // means we prompt the user to pick and crop a photo.
-
-        mAppWidgetId = getIntent().getIntExtra(
-                AppWidgetManager.EXTRA_APPWIDGET_ID, -1);
-        if (mAppWidgetId == -1) {
-            setResult(Activity.RESULT_CANCELED);
-            finish();
-        }
-
-        // Assume the widget will be 1/4 of the screen.
-        // This will be slightly too large, but there is not a good way to know the
-        // actual widget size from here. The image will be scaled to fit since the layout
-        // file specifies android:scaleType="centerCrop"
-        DisplayMetrics display = getResources().getDisplayMetrics();
-        int maxDimension = Math.max(display.heightPixels, display.widthPixels);
-        maxDimension /= 2;
-
-        // TODO: Adjust the PhotoFrame's image size to avoid on the fly scaling
-        Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
-        intent.setType("image/*");
-        intent.putExtra("crop", "true");
-        intent.putExtra("aspectX", 1);
-        intent.putExtra("aspectY", 1);
-        intent.putExtra("outputX", maxDimension);
-        intent.putExtra("outputY", maxDimension);
-        intent.putExtra("noFaceDetection", true);
-        intent.putExtra("return-data", true);
-
-        startActivityForResult(intent, REQUEST_GET_PHOTO);
-    }
-
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode,
-                                    Intent data) {
-        if (resultCode == RESULT_OK && mAppWidgetId != -1) {
-            // Store the cropped photo in our database
-            Bitmap bitmap = (Bitmap) data.getParcelableExtra("data");
-
-            PhotoDatabaseHelper helper = new PhotoDatabaseHelper(this);
-            if (helper.setPhoto(mAppWidgetId, bitmap)) {
-                resultCode = Activity.RESULT_OK;
-
-                // Push newly updated widget to surface
-                RemoteViews views = PhotoAppWidgetProvider.buildUpdate(this,
-                        mAppWidgetId, helper);
-                AppWidgetManager appWidgetManager =
-                        AppWidgetManager.getInstance(this);
-                appWidgetManager.updateAppWidget(new int[] {mAppWidgetId},
-                                                 views);
-            }
-            helper.close();
-        } else {
-            resultCode = Activity.RESULT_CANCELED;
-        }
-
-        // Make sure we pass back the original mAppWidgetId
-        Intent resultValue = new Intent();
-        resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
-        setResult(resultCode, resultValue);
-        finish();
-    }
-
-}
diff --git a/src/com/android/camera/PhotoAppWidgetProvider.java b/src/com/android/camera/PhotoAppWidgetProvider.java
deleted file mode 100644
index da680b4..0000000
--- a/src/com/android/camera/PhotoAppWidgetProvider.java
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * 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;
-
-import android.appwidget.AppWidgetManager;
-import android.appwidget.AppWidgetProvider;
-import android.content.ContentValues;
-import android.content.Context;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteException;
-import android.database.sqlite.SQLiteOpenHelper;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.util.Log;
-import android.widget.RemoteViews;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-
-/**
- * Simple widget to show a user-selected picture.
- */
-public class PhotoAppWidgetProvider extends AppWidgetProvider {
-    private static final String TAG = "PhotoAppWidgetProvider";
-    private static final boolean LOGD = true;
-
-    @Override
-    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
-                         int[] appWidgetIds) {
-        // Update each requested appWidgetId with its unique photo
-        PhotoDatabaseHelper helper = new PhotoDatabaseHelper(context);
-        for (int appWidgetId : appWidgetIds) {
-            int[] specificAppWidget = new int[] { appWidgetId };
-            RemoteViews views = buildUpdate(context, appWidgetId, helper);
-            if (LOGD) {
-                Log.d(TAG, "sending out views=" + views
-                        + " for id=" + appWidgetId);
-            }
-            appWidgetManager.updateAppWidget(specificAppWidget, views);
-        }
-        helper.close();
-    }
-
-    @Override
-    public void onDeleted(Context context, int[] appWidgetIds) {
-        // Clean deleted photos out of our database
-        PhotoDatabaseHelper helper = new PhotoDatabaseHelper(context);
-        for (int appWidgetId : appWidgetIds) {
-            helper.deletePhoto(appWidgetId);
-        }
-        helper.close();
-    }
-
-    /**
-     * Load photo for given widget and build {@link RemoteViews} for it.
-     */
-    static RemoteViews buildUpdate(Context context, int appWidgetId,
-                                   PhotoDatabaseHelper helper) {
-        RemoteViews views = null;
-        Bitmap bitmap = helper.getPhoto(appWidgetId);
-        if (bitmap != null) {
-            views = new RemoteViews(context.getPackageName(),
-                                    R.layout.photo_frame);
-            views.setImageViewBitmap(R.id.photo, bitmap);
-        }
-        return views;
-    }
-
-    static class PhotoDatabaseHelper extends SQLiteOpenHelper {
-        private static final String DATABASE_NAME = "launcher.db";
-
-        private static final int DATABASE_VERSION = 2;
-
-        static final String TABLE_PHOTOS = "photos";
-        static final String FIELD_APPWIDGET_ID = "appWidgetId";
-        static final String FIELD_PHOTO_BLOB = "photoBlob";
-
-        PhotoDatabaseHelper(Context context) {
-            super(context, DATABASE_NAME, null, DATABASE_VERSION);
-        }
-
-        @Override
-        public void onCreate(SQLiteDatabase db) {
-            db.execSQL("CREATE TABLE " + TABLE_PHOTOS + " (" +
-                    FIELD_APPWIDGET_ID + " INTEGER PRIMARY KEY," +
-                    FIELD_PHOTO_BLOB + " BLOB" +
-                    ");");
-        }
-
-        @Override
-        public void onUpgrade(SQLiteDatabase db, int oldVersion,
-                              int newVersion) {
-            int version = oldVersion;
-
-            if (version != DATABASE_VERSION) {
-                Log.w(TAG, "Destroying all old data.");
-                db.execSQL("DROP TABLE IF EXISTS " + TABLE_PHOTOS);
-                onCreate(db);
-            }
-        }
-
-        /**
-         * Store the given bitmap in this database for the given appWidgetId.
-         */
-        public boolean setPhoto(int appWidgetId, Bitmap bitmap) {
-            boolean success = false;
-            try {
-                // Try go guesstimate how much space the icon will take when
-                // serialized to avoid unnecessary allocations/copies during
-                // the write.
-                int size = bitmap.getWidth() * bitmap.getHeight() * 4;
-                ByteArrayOutputStream out = new ByteArrayOutputStream(size);
-                bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
-                out.flush();
-                out.close();
-
-                ContentValues values = new ContentValues();
-                values.put(PhotoDatabaseHelper.FIELD_APPWIDGET_ID, appWidgetId);
-                values.put(PhotoDatabaseHelper.FIELD_PHOTO_BLOB,
-                           out.toByteArray());
-
-                SQLiteDatabase db = getWritableDatabase();
-                db.insertOrThrow(PhotoDatabaseHelper.TABLE_PHOTOS, null,
-                                 values);
-
-                success = true;
-            } catch (SQLiteException e) {
-                Log.e(TAG, "Could not open database", e);
-            } catch (IOException e) {
-                Log.e(TAG, "Could not serialize photo", e);
-            }
-            if (LOGD) {
-                Log.d(TAG, "setPhoto success=" + success);
-            }
-            return success;
-        }
-
-        static final String[] PHOTOS_PROJECTION = {
-            FIELD_PHOTO_BLOB,
-        };
-
-        static final int INDEX_PHOTO_BLOB = 0;
-
-        /**
-         * Inflate and return a bitmap for the given appWidgetId.
-         */
-        public Bitmap getPhoto(int appWidgetId) {
-            Cursor c = null;
-            Bitmap bitmap = null;
-            try {
-                SQLiteDatabase db = getReadableDatabase();
-                String selection = String.format("%s=%d", FIELD_APPWIDGET_ID,
-                                                 appWidgetId);
-                c = db.query(TABLE_PHOTOS, PHOTOS_PROJECTION, selection, null,
-                        null, null, null, null);
-
-                if (c != null && LOGD) {
-                    Log.d(TAG, "getPhoto query count=" + c.getCount());
-                }
-
-                if (c != null && c.moveToFirst()) {
-                    byte[] data = c.getBlob(INDEX_PHOTO_BLOB);
-                    if (data != null) {
-                        bitmap = BitmapFactory.decodeByteArray(data, 0,
-                                data.length);
-                    }
-                }
-            } catch (SQLiteException e) {
-                Log.e(TAG, "Could not load photo from database", e);
-            } finally {
-                if (c != null) {
-                    c.close();
-                }
-            }
-            return bitmap;
-        }
-
-        /**
-         * Remove any bitmap associated with the given appWidgetId.
-         */
-        public void deletePhoto(int appWidgetId) {
-            try {
-                SQLiteDatabase db = getWritableDatabase();
-                String whereClause = String.format("%s=%d", FIELD_APPWIDGET_ID,
-                                                   appWidgetId);
-                db.delete(TABLE_PHOTOS, whereClause, null);
-            } catch (SQLiteException e) {
-                Log.e(TAG, "Could not delete photo from database", e);
-            }
-        }
-    }
-
-}
-
diff --git a/src/com/android/camera/PickWallpaper.java b/src/com/android/camera/PickWallpaper.java
deleted file mode 100644
index b9bff5a..0000000
--- a/src/com/android/camera/PickWallpaper.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2007 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;
-
-/**
- * Wallpaper picker for the camera application.
- * This just redirects to the standard pick action.
- */
-public class PickWallpaper extends Wallpaper {
-}
diff --git a/src/com/android/camera/PreviewFrameLayout.java b/src/com/android/camera/PreviewFrameLayout.java
index 7ef9206..b153052 100644
--- a/src/com/android/camera/PreviewFrameLayout.java
+++ b/src/com/android/camera/PreviewFrameLayout.java
@@ -25,9 +25,14 @@
 import android.widget.ImageView;
 import android.widget.FrameLayout;
 
+/**
+ * A layout which handles the preview aspect ratio and the position of
+ * the gripper.
+ */
 public class PreviewFrameLayout extends ViewGroup {
     private static final int MIN_HORIZONTAL_MARGIN = 10; // 10dp
 
+    /** A callback to be invoked when the preview frame's size changes. */
     public interface OnSizeChangedListener {
         public void onSizeChanged();
     }
diff --git a/src/com/android/camera/ReverseGeocoderTask.java b/src/com/android/camera/ReverseGeocoderTask.java
index 97f5978..f4e7c71 100644
--- a/src/com/android/camera/ReverseGeocoderTask.java
+++ b/src/com/android/camera/ReverseGeocoderTask.java
@@ -24,10 +24,19 @@
 import java.io.IOException;
 import java.util.List;
 
-// Reverse geocoding may take a long time to return so we put it in AsyncTask.
+/**
+ * A asynchronous task which does reverse geocoding.
+ *
+ * <p>Because it may take a long time to return, we put it in an AsyncTask.
+ * The input is latitude and longitude, and the output is a descriptive string
+ * for the specified location. The result is passed to a callback.
+ */
 public class ReverseGeocoderTask extends AsyncTask<Void, Void, String> {
     private static final String TAG = "ReverseGeocoder";
 
+    /**
+     * A callback to be invoked when the reverse geocoding task is done.
+     */
     public static interface Callback {
         public void onComplete(String location);
     }
@@ -49,8 +58,7 @@
     protected String doInBackground(Void... params) {
         String value = MenuHelper.EMPTY_STRING;
         try {
-            List<Address> address =
-                    mGeocoder.getFromLocation(mLat, mLng, 1);
+            List<Address> address = mGeocoder.getFromLocation(mLat, mLng, 1);
             StringBuilder sb = new StringBuilder();
             for (Address addr : address) {
                 int index = addr.getMaxAddressLineIndex();
@@ -72,4 +80,3 @@
         mCallback.onComplete(location);
     }
 }
-
diff --git a/src/com/android/camera/ReviewImage.java b/src/com/android/camera/ReviewImage.java
index 0633b18..73c3096 100644
--- a/src/com/android/camera/ReviewImage.java
+++ b/src/com/android/camera/ReviewImage.java
@@ -16,7 +16,6 @@
 
 package com.android.camera;
 
-import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
 import android.graphics.Bitmap;
@@ -43,12 +42,15 @@
 import com.android.camera.gallery.IImageList;
 import com.android.camera.gallery.VideoObject;
 
-// This activity can display a whole picture and navigate them in a specific
-// gallery. It has two modes: normal mode and slide show mode. In normal mode
-// the user view one image at a time, and can click "previous" and "next"
-// button to see the previous or next image. In slide show mode it shows one
-// image after another, with some transition effect.
-public class ReviewImage extends Activity implements View.OnClickListener {
+/**
+ * An activity displays a full picture and can navigate in a specific image
+ * list.
+ *
+ * <p>The user view one image at a time, and can click "previous" and "next"
+ * button to see the previous or next image.
+ */
+public class ReviewImage extends NoSearchActivity
+        implements View.OnClickListener {
     private static final String STATE_URI = "uri";
     private static final String TAG = "ReviewImage";
     private static final double ASPECT_RATIO = 4.0 / 3.0;
@@ -281,6 +283,7 @@
         @Override
         public boolean onScroll(MotionEvent e1, MotionEvent e2,
                 float distanceX, float distanceY) {
+            if (mPaused) return false;
             ImageViewTouch2 imageView = mImageView;
             if (imageView.getScale() > 1F) {
                 imageView.postTranslateCenter(-distanceX, -distanceY);
@@ -290,6 +293,7 @@
 
         @Override
         public boolean onSingleTapConfirmed(MotionEvent e) {
+            if (mPaused) return false;
             showOnScreenControls();
             scheduleDismissOnScreenControls();
             return true;
@@ -297,6 +301,7 @@
 
         @Override
         public boolean onDoubleTap(MotionEvent e) {
+            if (mPaused) return false;
             ImageViewTouch2 imageView = mImageView;
 
             // Switch between the original scale and 3x scale.
@@ -309,12 +314,6 @@
         }
     }
 
-    boolean isPickIntent() {
-        String action = getIntent().getAction();
-        return (Intent.ACTION_PICK.equals(action)
-                || Intent.ACTION_GET_CONTENT.equals(action));
-    }
-
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
         super.onCreateOptionsMenu(menu);
@@ -376,7 +375,8 @@
         Uri uri = mAllImages.getImageAt(mCurrentPosition).fullSizeImageUri();
         MenuHelper.enableShareMenuItem(menu, MenuHelper.isWhiteListUri(uri));
 
-        MenuHelper.enableShowOnMapMenuItem(menu, MenuHelper.hasLatLngData(image));
+        MenuHelper.enableShowOnMapMenuItem(menu,
+                MenuHelper.hasLatLngData(image));
 
         return true;
     }
@@ -504,11 +504,9 @@
             mSavedUri = getIntent().getData();
         }
 
-        int[] pickIds = {R.id.attach, R.id.cancel};
         int[] reviewIds = {R.id.btn_delete, R.id.btn_share, R.id.btn_set_as,
                 R.id.btn_play, R.id.btn_done};
-        int[] connectIds = isPickIntent() ? pickIds : reviewIds;
-        for (int id : connectIds) {
+        for (int id : reviewIds) {
             View view = mControlBar.findViewById(id);
             view.setOnClickListener(this);
             // Set the LinearLayout of the given button to visible
@@ -529,7 +527,6 @@
     }
 
     private void updateActionIcons() {
-        if (isPickIntent()) return;
 
         IImage image = mAllImages.getImageAt(mCurrentPosition);
         if (image instanceof VideoObject) {
@@ -787,16 +784,6 @@
         int nextImagePos = -2; // default no next image
         try {
             switch (keyCode) {
-                case KeyEvent.KEYCODE_DPAD_CENTER: {
-                    if (mViewImage.isPickIntent()) {
-                        IImage img = mViewImage.mAllImages
-                                .getImageAt(mViewImage.mCurrentPosition);
-                        mViewImage.setResult(ReviewImage.RESULT_OK,
-                                 new Intent().setData(img.fullSizeImageUri()));
-                        mViewImage.finish();
-                    }
-                    break;
-                }
                 case KeyEvent.KEYCODE_DPAD_LEFT: {
                     if (getScale() <= 1F && event.getEventTime()
                             >= mNextChangePositionTime) {
diff --git a/src/com/android/camera/RotateBitmap.java b/src/com/android/camera/RotateBitmap.java
index 67ca3c3..635ec08 100644
--- a/src/com/android/camera/RotateBitmap.java
+++ b/src/com/android/camera/RotateBitmap.java
@@ -19,8 +19,17 @@
 import android.graphics.Bitmap;
 import android.graphics.Matrix;
 
+/**
+ * This class represents a bitmap with a rotation (The rotation can only be
+ * 0, 90, 180, 270 degrees).
+ *
+ * Because it takes twice the memory to do the rotation (the original bitmap
+ * and the new bitmap), we do not actually rotate the bitmap. We pass the
+ * rotation along with the bitmap in the program and only apply the rotation
+ * when we are actually drawing the bitmap.
+ */
 public class RotateBitmap {
-    public static final String TAG = "RotateBitmap";
+    private static final String TAG = "RotateBitmap";
     private Bitmap mBitmap;
     private int mRotation;
 
diff --git a/src/com/android/camera/ShutterButton.java b/src/com/android/camera/ShutterButton.java
index 1fb9258..e1499a6 100644
--- a/src/com/android/camera/ShutterButton.java
+++ b/src/com/android/camera/ShutterButton.java
@@ -22,13 +22,12 @@
 
 /**
  * A button designed to be used for the on-screen shutter button.
- * It's currently an ImageView that can call a delegate when the pressed state
- * changes.
+ * It's currently an {@code ImageView} that can call a delegate when the
+ * pressed state changes.
  */
 public class ShutterButton extends ImageView {
     /**
-     * Interface definition for a callback to be invoked when a ModeButton's
-     * pressed state changes.
+     * A callback to be invoked when a ShutterButton's pressed state changes.
      */
     public interface OnShutterButtonListener {
         /**
diff --git a/src/com/android/camera/Switcher.java b/src/com/android/camera/Switcher.java
index ba205a8..0813633 100644
--- a/src/com/android/camera/Switcher.java
+++ b/src/com/android/camera/Switcher.java
@@ -25,11 +25,16 @@
 import android.view.animation.AnimationUtils;
 import android.widget.ImageView;
 
+/**
+ * A widget which switchs between the {@code Camera} and the {@code VideoCamera}
+ * activities.
+ */
 public class Switcher extends ImageView implements View.OnTouchListener {
 
     @SuppressWarnings("unused")
     private static final String TAG = "Switcher";
 
+    /** A callback to be called when the user wants to switch activity. */
     public interface OnSwitchListener {
         // Returns true if the listener agrees that the switch can be changed.
         public boolean onSwitchChanged(Switcher source, boolean onOff);
@@ -41,6 +46,7 @@
     private boolean mSwitch = false;
     private int mPosition = 0;
     private long mAnimationStartTime = 0;
+    private int mAnimationStartPosition;
     private OnSwitchListener mListener;
 
     public Switcher(Context context, AttributeSet attrs) {
@@ -108,6 +114,7 @@
 
     private void startParkingAnimation() {
         mAnimationStartTime = AnimationUtils.currentAnimationTimeMillis();
+        mAnimationStartPosition = mPosition;
     }
 
     private void trackTouchEvent(MotionEvent event) {
@@ -138,14 +145,14 @@
             final int available = getHeight() - mPaddingTop - mPaddingBottom
                     - drawableHeight;
             long time = AnimationUtils.currentAnimationTimeMillis();
-            long deltaTime = time - mAnimationStartTime;
-            mPosition += ANIMATION_SPEED
-                    * (mSwitch ? deltaTime : -deltaTime) / 1000;
-            mAnimationStartTime = time;
+            int deltaTime = (int) (time - mAnimationStartTime);
+            mPosition = mAnimationStartPosition +
+                    ANIMATION_SPEED * (mSwitch ? deltaTime : -deltaTime) / 1000;
             if (mPosition < 0) mPosition = 0;
             if (mPosition > available) mPosition = available;
-            if (mPosition != 0 && mPosition != available) {
-                postInvalidate();
+            boolean done = (mPosition == (mSwitch ? available : 0));
+            if (!done) {
+                invalidate();
             } else {
                 mAnimationStartTime = NO_ANIMATION;
             }
diff --git a/src/com/android/camera/ThumbnailController.java b/src/com/android/camera/ThumbnailController.java
index 2ae8e20..3bc0e8c 100644
--- a/src/com/android/camera/ThumbnailController.java
+++ b/src/com/android/camera/ThumbnailController.java
@@ -39,17 +39,10 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 
-/** A controller shows thumbnail picture on a button. The thumbnail picture
+/**
+ * A controller shows thumbnail picture on a button. The thumbnail picture
  * corresponds to a URI of the original picture/video. The thumbnail bitmap
  * and the URI can be saved to a file (and later loaded from it).
- * <pre>
- *    public ThumbnailController(ImageView button)
- *    public void setData(Uri uri, Bitmap original)
- *    public void updateDisplayIfNeeded()
- *    public Uri getUri()
- *    public boolean storeData(String filePath)
- *    public boolean loadData(String filePath)
- * </pre>
  */
 public class ThumbnailController {
 
@@ -169,7 +162,7 @@
         final int miniThumbHeight = param.height - 2 * PADDING_HEIGHT;
         mThumb = ThumbnailUtil.extractMiniThumb(
                 original, miniThumbWidth, miniThumbHeight,
-                Util.NO_RECYCLE_INPUT);
+                ThumbnailUtil.NO_RECYCLE_INPUT);
         Drawable drawable;
         if (mThumbs == null) {
             mThumbs = new Drawable[2];
diff --git a/src/com/android/camera/Util.java b/src/com/android/camera/Util.java
index d44435a..4492091 100644
--- a/src/com/android/camera/Util.java
+++ b/src/com/android/camera/Util.java
@@ -32,7 +32,6 @@
 import android.os.ParcelFileDescriptor;
 import android.util.Log;
 import android.view.View;
-import android.view.View.OnClickListener;
 import android.view.animation.Animation;
 import android.view.animation.TranslateAnimation;
 
@@ -52,8 +51,6 @@
     public static final int DIRECTION_UP = 2;
     public static final int DIRECTION_DOWN = 3;
 
-    private static OnClickListener sNullOnClickListener;
-
     private Util() {
     }
 
@@ -141,103 +138,6 @@
         }
     }
 
-    // Whether we should recycle the input (unless the output is the input).
-    public static final boolean RECYCLE_INPUT = true;
-    public static final boolean NO_RECYCLE_INPUT = false;
-
-    public static Bitmap transform(Matrix scaler,
-                                   Bitmap source,
-                                   int targetWidth,
-                                   int targetHeight,
-                                   boolean scaleUp,
-                                   boolean recycle) {
-        int deltaX = source.getWidth() - targetWidth;
-        int deltaY = source.getHeight() - targetHeight;
-        if (!scaleUp && (deltaX < 0 || deltaY < 0)) {
-            /*
-             * In this case the bitmap is smaller, at least in one dimension,
-             * than the target.  Transform it by placing as much of the image
-             * as possible into the target and leaving the top/bottom or
-             * left/right (or both) black.
-             */
-            Bitmap b2 = Bitmap.createBitmap(targetWidth, targetHeight,
-                    Bitmap.Config.ARGB_8888);
-            Canvas c = new Canvas(b2);
-
-            int deltaXHalf = Math.max(0, deltaX / 2);
-            int deltaYHalf = Math.max(0, deltaY / 2);
-            Rect src = new Rect(
-                    deltaXHalf,
-                    deltaYHalf,
-                    deltaXHalf + Math.min(targetWidth, source.getWidth()),
-                    deltaYHalf + Math.min(targetHeight, source.getHeight()));
-            int dstX = (targetWidth  - src.width())  / 2;
-            int dstY = (targetHeight - src.height()) / 2;
-            Rect dst = new Rect(
-                    dstX,
-                    dstY,
-                    targetWidth - dstX,
-                    targetHeight - dstY);
-            c.drawBitmap(source, src, dst, null);
-            if (recycle) {
-                source.recycle();
-            }
-            return b2;
-        }
-        float bitmapWidthF = source.getWidth();
-        float bitmapHeightF = source.getHeight();
-
-        float bitmapAspect = bitmapWidthF / bitmapHeightF;
-        float viewAspect   = (float) targetWidth / targetHeight;
-
-        if (bitmapAspect > viewAspect) {
-            float scale = targetHeight / bitmapHeightF;
-            if (scale < .9F || scale > 1F) {
-                scaler.setScale(scale, scale);
-            } else {
-                scaler = null;
-            }
-        } else {
-            float scale = targetWidth / bitmapWidthF;
-            if (scale < .9F || scale > 1F) {
-                scaler.setScale(scale, scale);
-            } else {
-                scaler = null;
-            }
-        }
-
-        Bitmap b1;
-        if (scaler != null) {
-            // this is used for minithumb and crop, so we want to filter here.
-            b1 = Bitmap.createBitmap(source, 0, 0,
-                    source.getWidth(), source.getHeight(), scaler, true);
-        } else {
-            b1 = source;
-        }
-
-        if (recycle && b1 != source) {
-            source.recycle();
-        }
-
-        int dx1 = Math.max(0, b1.getWidth() - targetWidth);
-        int dy1 = Math.max(0, b1.getHeight() - targetHeight);
-
-        Bitmap b2 = Bitmap.createBitmap(
-                b1,
-                dx1 / 2,
-                dy1 / 2,
-                targetWidth,
-                targetHeight);
-
-        if (b2 != b1) {
-            if (recycle || b1 != source) {
-                b1.recycle();
-            }
-        }
-
-        return b2;
-    }
-
     public static <T>  int indexOf(T [] array, T s) {
         for (int i = 0; i < array.length; i++) {
             if (array[i].equals(s)) {
@@ -361,16 +261,6 @@
         }
     }
 
-    public static synchronized OnClickListener getNullOnClickListener() {
-        if (sNullOnClickListener == null) {
-            sNullOnClickListener = new OnClickListener() {
-                public void onClick(View v) {
-                }
-            };
-        }
-        return sNullOnClickListener;
-    }
-
     public static void Assert(boolean cond) {
         if (!cond) {
             throw new AssertionError();
@@ -382,66 +272,6 @@
         return a == b || a.equals(b);
     }
 
-    private static class BackgroundJob
-            extends MonitoredActivity.LifeCycleAdapter implements Runnable {
-
-        private final MonitoredActivity mActivity;
-        private final ProgressDialog mDialog;
-        private final Runnable mJob;
-        private final Handler mHandler;
-        private final Runnable mCleanupRunner = new Runnable() {
-            public void run() {
-                mActivity.removeLifeCycleListener(BackgroundJob.this);
-                if (mDialog.getWindow() != null) mDialog.dismiss();
-            }
-        };
-
-        public BackgroundJob(MonitoredActivity activity, Runnable job,
-                ProgressDialog dialog, Handler handler) {
-            mActivity = activity;
-            mDialog = dialog;
-            mJob = job;
-            mActivity.addLifeCycleListener(this);
-            mHandler = handler;
-        }
-
-        public void run() {
-            try {
-                mJob.run();
-            } finally {
-                mHandler.post(mCleanupRunner);
-            }
-        }
-
-
-        @Override
-        public void onActivityDestroyed(MonitoredActivity activity) {
-            // We get here only when the onDestroyed being called before
-            // the mCleanupRunner. So, run it now and remove it from the queue
-            mCleanupRunner.run();
-            mHandler.removeCallbacks(mCleanupRunner);
-        }
-
-        @Override
-        public void onActivityStopped(MonitoredActivity activity) {
-            mDialog.hide();
-        }
-
-        @Override
-        public void onActivityStarted(MonitoredActivity activity) {
-            mDialog.show();
-        }
-    }
-
-    public static void startBackgroundJob(MonitoredActivity activity,
-            String title, String message, Runnable job, Handler handler) {
-        // Make the progress dialog uncancelable, so that we can gurantee
-        // the thread will be done before the activity getting destroyed.
-        ProgressDialog dialog = ProgressDialog.show(
-                activity, title, message, true, false);
-        new Thread(new BackgroundJob(activity, job, dialog, handler)).start();
-    }
-
     // Returns an intent which is used for "set as" menu items.
     public static Intent createSetAsIntent(IImage image) {
         Uri u = image.fullSizeImageUri();
diff --git a/src/com/android/camera/VideoCamera.java b/src/com/android/camera/VideoCamera.java
index afd4cdd..144c9fb 100644
--- a/src/com/android/camera/VideoCamera.java
+++ b/src/com/android/camera/VideoCamera.java
@@ -16,7 +16,6 @@
 
 package com.android.camera;
 
-import android.app.Activity;
 import android.content.ActivityNotFoundException;
 import android.content.BroadcastReceiver;
 import android.content.ContentResolver;
@@ -66,7 +65,6 @@
 import android.widget.TextView;
 import android.widget.Toast;
 
-import com.android.camera.PreviewFrameLayout.OnSizeChangedListener;
 import com.android.camera.gallery.IImage;
 import com.android.camera.gallery.IImageList;
 
@@ -81,7 +79,8 @@
 /**
  * The Camcorder activity.
  */
-public class VideoCamera extends Activity implements View.OnClickListener,
+public class VideoCamera extends NoSearchActivity
+        implements View.OnClickListener,
         ShutterButton.OnShutterButtonListener, SurfaceHolder.Callback,
         MediaRecorder.OnErrorListener, MediaRecorder.OnInfoListener,
         Switcher.OnSwitchListener, OnSharedPreferenceChangeListener,
@@ -224,7 +223,6 @@
                 ress.getString(R.string.cannot_connect_camera));
     }
 
-    /** Called with the activity is first created. */
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
@@ -331,20 +329,6 @@
         }
     }
 
-    private void startShareVideoActivity() {
-        Intent intent = new Intent();
-        intent.setAction(Intent.ACTION_SEND);
-        intent.setType("video/3gpp");
-        intent.putExtra(Intent.EXTRA_STREAM, mCurrentVideoUri);
-        try {
-            startActivity(Intent.createChooser(intent,
-                    getText(R.string.sendVideo)));
-        } catch (android.content.ActivityNotFoundException ex) {
-            Toast.makeText(VideoCamera.this, R.string.no_way_to_share_video,
-                    Toast.LENGTH_SHORT).show();
-        }
-    }
-
     private void startPlayVideoActivity() {
         Intent intent = new Intent(Intent.ACTION_VIEW, mCurrentVideoUri);
         try {
@@ -354,7 +338,6 @@
         }
     }
 
-
     public void onClick(View v) {
         switch (v.getId()) {
             case R.id.btn_retake:
@@ -370,25 +353,11 @@
                 stopVideoRecording();
                 doReturnToCaller(false);
                 break;
-            case R.id.discard: {
-                Runnable deleteCallback = new Runnable() {
-                    public void run() {
-                        discardCurrentVideoAndInitRecorder();
-                    }
-                };
-                MenuHelper.deleteVideo(this, deleteCallback);
-                break;
-            }
-            case R.id.share: {
-                startShareVideoActivity();
-                break;
-            }
-            case R.id.play: {
-                doPlayCurrentVideo();
-                break;
-            }
             case R.id.review_thumbnail: {
-                stopVideoRecordingAndShowReview();
+                if (!mMediaRecorderRecording) {
+                    stopVideoRecordingAndShowReview();
+                    initializeRecorder();
+                }
                 break;
             }
         }
@@ -419,16 +388,6 @@
         }
     }
 
-    private void doPlayCurrentVideo() {
-        Log.v(TAG, "Playing current video: " + mCurrentVideoUri);
-        Intent intent = new Intent(Intent.ACTION_VIEW, mCurrentVideoUri);
-        try {
-            startActivity(intent);
-        } catch (android.content.ActivityNotFoundException ex) {
-            Log.e(TAG, "Couldn't view video " + mCurrentVideoUri, ex);
-        }
-    }
-
     private void discardCurrentVideoAndInitRecorder() {
         deleteCurrentVideo();
         hideAlertAndInitializeRecorder();
@@ -987,9 +946,17 @@
             Uri videoTable = Uri.parse("content://media/external/video/media");
             mCurrentVideoValues.put(Video.Media.SIZE,
                     new File(mCurrentVideoFilename).length());
-            mCurrentVideoUri = mContentResolver.insert(videoTable,
-                    mCurrentVideoValues);
-            Log.v(TAG, "Current video URI: " + mCurrentVideoUri);
+            try {
+                mCurrentVideoUri = mContentResolver.insert(videoTable,
+                        mCurrentVideoValues);
+            } catch (Exception e) {
+                // We failed to insert into the database. This can happen if
+                // the SD card is unmounted.
+                mCurrentVideoUri = null;
+                mCurrentVideoFilename = null;
+            } finally {
+                Log.v(TAG, "Current video URI: " + mCurrentVideoUri);
+            }
         }
         mCurrentVideoValues = null;
     }
@@ -1300,7 +1267,8 @@
     }
 
     private void acquireVideoThumb() {
-        Bitmap videoFrame = ThumbnailUtil.createVideoThumbnail(mCurrentVideoFilename);
+        Bitmap videoFrame = ThumbnailUtil.createVideoThumbnail(
+                mCurrentVideoFilename);
         mThumbController.setData(mCurrentVideoUri, videoFrame);
     }
 
@@ -1382,13 +1350,6 @@
             mRecordingTimeView.setTextColor(color);
         }
 
-        // Work around a limitation of the T-Mobile G1: The T-Mobile
-        // hardware blitter can't pixel-accurately scale and clip at the
-        // same time, and the SurfaceFlinger doesn't attempt to work around
-        // this limitation. In order to avoid visual corruption we must
-        // manually refresh the entire surface view when changing any
-        // overlapping view's contents.
-        mVideoPreview.invalidate();
         mHandler.sendEmptyMessageDelayed(
                 UPDATE_RECORD_TIME, next_update_delay);
     }
@@ -1420,6 +1381,7 @@
 
     public boolean onSwitchChanged(Switcher source, boolean onOff) {
         if (onOff == SWITCH_CAMERA) {
+            if (mMediaRecorderRecording) return false;
             MenuHelper.gotoCameraMode(this);
             finish();
         }
diff --git a/src/com/android/camera/ViewImage.java b/src/com/android/camera/ViewImage.java
deleted file mode 100644
index 3ee3029..0000000
--- a/src/com/android/camera/ViewImage.java
+++ /dev/null
@@ -1,1291 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.camera;
-
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.graphics.Bitmap;
-import android.net.Uri;
-import android.os.Bundle;
-import android.preference.PreferenceManager;
-import android.provider.MediaStore;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.GestureDetector;
-import android.view.KeyEvent;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.Window;
-import android.view.WindowManager;
-import android.view.View.OnTouchListener;
-import android.view.animation.AlphaAnimation;
-import android.view.animation.Animation;
-import android.view.animation.AnimationUtils;
-import android.widget.Toast;
-import android.widget.ZoomButtonsController;
-
-import com.android.camera.gallery.IImage;
-import com.android.camera.gallery.IImageList;
-import com.android.camera.gallery.VideoObject;
-
-import java.util.Random;
-
-// This activity can display a whole picture and navigate them in a specific
-// gallery. It has two modes: normal mode and slide show mode. In normal mode
-// the user view one image at a time, and can click "previous" and "next"
-// button to see the previous or next image. In slide show mode it shows one
-// image after another, with some transition effect.
-public class ViewImage extends Activity implements View.OnClickListener {
-    private static final String PREF_SLIDESHOW_REPEAT =
-            "pref_gallery_slideshow_repeat_key";
-    private static final String PREF_SHUFFLE_SLIDESHOW =
-            "pref_gallery_slideshow_shuffle_key";
-    private static final String STATE_URI = "uri";
-    private static final String STATE_SLIDESHOW = "slideshow";
-    private static final String EXTRA_SLIDESHOW = "slideshow";
-    private static final String TAG = "ViewImage";
-
-    private ImageGetter mGetter;
-    private Uri mSavedUri;
-    boolean mPaused = true;
-    private boolean mShowControls = true;
-
-    // Choices for what adjacents to load.
-    private static final int[] sOrderAdjacents = new int[] {0, 1, -1};
-    private static final int[] sOrderSlideshow = new int[] {0};
-
-    final GetterHandler mHandler = new GetterHandler();
-
-    private final Random mRandom = new Random(System.currentTimeMillis());
-    private int [] mShuffleOrder = null;
-    private boolean mUseShuffleOrder = false;
-    private boolean mSlideShowLoop = false;
-
-    static final int MODE_NORMAL = 1;
-    static final int MODE_SLIDESHOW = 2;
-    private int mMode = MODE_NORMAL;
-
-    private boolean mFullScreenInNormalMode;
-    private boolean mShowActionIcons;
-    private View mActionIconPanel;
-
-    private int mSlideShowInterval;
-    private int mLastSlideShowImage;
-    int mCurrentPosition = 0;
-
-    // represents which style animation to use
-    private int mAnimationIndex;
-    private Animation [] mSlideShowInAnimation;
-    private Animation [] mSlideShowOutAnimation;
-
-    private SharedPreferences mPrefs;
-
-    private View mNextImageView;
-    private View mPrevImageView;
-    private final Animation mHideNextImageViewAnimation =
-            new AlphaAnimation(1F, 0F);
-    private final Animation mHidePrevImageViewAnimation =
-            new AlphaAnimation(1F, 0F);
-    private final Animation mShowNextImageViewAnimation =
-            new AlphaAnimation(0F, 1F);
-    private final Animation mShowPrevImageViewAnimation =
-            new AlphaAnimation(0F, 1F);
-
-    public static final String KEY_IMAGE_LIST = "image_list";
-    private static final String STATE_SHOW_CONTROLS = "show_controls";
-
-    IImageList mAllImages;
-
-    private ImageManager.ImageListParam mParam;
-
-    private int mSlideShowImageCurrent = 0;
-    private final ImageViewTouchBase [] mSlideShowImageViews =
-            new ImageViewTouchBase[2];
-
-    GestureDetector mGestureDetector;
-    private ZoomButtonsController mZoomButtonsController;
-
-    // The image view displayed for normal mode.
-    private ImageViewTouch mImageView;
-    // This is the cache for thumbnail bitmaps.
-    private BitmapCache mCache;
-    private MenuHelper.MenuItemsResult mImageMenuRunnable;
-    private final Runnable mDismissOnScreenControlRunner = new Runnable() {
-        public void run() {
-            hideOnScreenControls();
-        }
-    };
-
-    private void updateNextPrevControls() {
-        boolean showPrev = mCurrentPosition > 0;
-        boolean showNext = mCurrentPosition < mAllImages.getCount() - 1;
-
-        boolean prevIsVisible = mPrevImageView.getVisibility() == View.VISIBLE;
-        boolean nextIsVisible = mNextImageView.getVisibility() == View.VISIBLE;
-
-        if (showPrev && !prevIsVisible) {
-            Animation a = mShowPrevImageViewAnimation;
-            a.setDuration(500);
-            mPrevImageView.startAnimation(a);
-            mPrevImageView.setVisibility(View.VISIBLE);
-        } else if (!showPrev && prevIsVisible) {
-            Animation a = mHidePrevImageViewAnimation;
-            a.setDuration(500);
-            mPrevImageView.startAnimation(a);
-            mPrevImageView.setVisibility(View.GONE);
-        }
-
-        if (showNext && !nextIsVisible) {
-            Animation a = mShowNextImageViewAnimation;
-            a.setDuration(500);
-            mNextImageView.startAnimation(a);
-            mNextImageView.setVisibility(View.VISIBLE);
-        } else if (!showNext && nextIsVisible) {
-            Animation a = mHideNextImageViewAnimation;
-            a.setDuration(500);
-            mNextImageView.startAnimation(a);
-            mNextImageView.setVisibility(View.GONE);
-        }
-    }
-
-    private void hideOnScreenControls() {
-        if (mShowActionIcons
-                && mActionIconPanel.getVisibility() == View.VISIBLE) {
-            Animation animation = new AlphaAnimation(1, 0);
-            animation.setDuration(500);
-            mActionIconPanel.startAnimation(animation);
-            mActionIconPanel.setVisibility(View.INVISIBLE);
-        }
-
-        if (mNextImageView.getVisibility() == View.VISIBLE) {
-            Animation a = mHideNextImageViewAnimation;
-            a.setDuration(500);
-            mNextImageView.startAnimation(a);
-            mNextImageView.setVisibility(View.INVISIBLE);
-        }
-
-        if (mPrevImageView.getVisibility() == View.VISIBLE) {
-            Animation a = mHidePrevImageViewAnimation;
-            a.setDuration(500);
-            mPrevImageView.startAnimation(a);
-            mPrevImageView.setVisibility(View.INVISIBLE);
-        }
-
-        mZoomButtonsController.setVisible(false);
-    }
-
-    private void showOnScreenControls() {
-        if (mPaused) return;
-        // If the view has not been attached to the window yet, the
-        // zoomButtonControls will not able to show up. So delay it until the
-        // view has attached to window.
-        if (mActionIconPanel.getWindowToken() == null) {
-            mHandler.postGetterCallback(new Runnable() {
-                public void run() {
-                    showOnScreenControls();
-                }
-            });
-            return;
-        }
-        updateNextPrevControls();
-
-        IImage image = mAllImages.getImageAt(mCurrentPosition);
-        if (image instanceof VideoObject) {
-            mZoomButtonsController.setVisible(false);
-        } else {
-            updateZoomButtonsEnabled();
-            mZoomButtonsController.setVisible(true);
-        }
-
-        if (mShowActionIcons
-                && mActionIconPanel.getVisibility() != View.VISIBLE) {
-            Animation animation = new AlphaAnimation(0, 1);
-            animation.setDuration(500);
-            mActionIconPanel.startAnimation(animation);
-            mActionIconPanel.setVisibility(View.VISIBLE);
-        }
-    }
-
-    @Override
-    public boolean dispatchTouchEvent(MotionEvent m) {
-        if (mPaused) return true;
-        if (mZoomButtonsController.isVisible()) {
-            scheduleDismissOnScreenControls();
-        }
-        return super.dispatchTouchEvent(m);
-    }
-
-    private void updateZoomButtonsEnabled() {
-        ImageViewTouch imageView = mImageView;
-        float scale = imageView.getScale();
-        mZoomButtonsController.setZoomInEnabled(scale < imageView.mMaxZoom);
-        mZoomButtonsController.setZoomOutEnabled(scale > 1);
-    }
-
-    @Override
-    protected void onDestroy() {
-        // This is necessary to make the ZoomButtonsController unregister
-        // its configuration change receiver.
-        if (mZoomButtonsController != null) {
-            mZoomButtonsController.setVisible(false);
-        }
-        super.onDestroy();
-    }
-
-    private void scheduleDismissOnScreenControls() {
-        mHandler.removeCallbacks(mDismissOnScreenControlRunner);
-        mHandler.postDelayed(mDismissOnScreenControlRunner, 2000);
-    }
-
-    private void setupOnScreenControls(View rootView, View ownerView) {
-        mNextImageView = rootView.findViewById(R.id.next_image);
-        mPrevImageView = rootView.findViewById(R.id.prev_image);
-
-        mNextImageView.setOnClickListener(this);
-        mPrevImageView.setOnClickListener(this);
-
-        setupZoomButtonController(ownerView);
-        setupOnTouchListeners(rootView);
-    }
-
-    private void setupZoomButtonController(final View ownerView) {
-        mZoomButtonsController = new ZoomButtonsController(ownerView);
-        mZoomButtonsController.setAutoDismissed(false);
-        mZoomButtonsController.setZoomSpeed(100);
-        mZoomButtonsController.setOnZoomListener(
-                new ZoomButtonsController.OnZoomListener() {
-            public void onVisibilityChanged(boolean visible) {
-                if (visible) {
-                    updateZoomButtonsEnabled();
-                }
-            }
-
-            public void onZoom(boolean zoomIn) {
-                if (zoomIn) {
-                    mImageView.zoomIn();
-                } else {
-                    mImageView.zoomOut();
-                }
-                mZoomButtonsController.setVisible(true);
-                updateZoomButtonsEnabled();
-            }
-        });
-    }
-
-    private void setupOnTouchListeners(View rootView) {
-        mGestureDetector = new GestureDetector(this, new MyGestureListener());
-
-        // If the user touches anywhere on the panel (including the
-        // next/prev button). We show the on-screen controls. In addition
-        // to that, if the touch is not on the prev/next button, we
-        // pass the event to the gesture detector to detect double tap.
-        final OnTouchListener buttonListener = new OnTouchListener() {
-            public boolean onTouch(View v, MotionEvent event) {
-                scheduleDismissOnScreenControls();
-                return false;
-            }
-        };
-
-        OnTouchListener rootListener = new OnTouchListener() {
-            public boolean onTouch(View v, MotionEvent event) {
-                buttonListener.onTouch(v, event);
-                mGestureDetector.onTouchEvent(event);
-
-                // We do not use the return value of
-                // mGestureDetector.onTouchEvent because we will not receive
-                // the "up" event if we return false for the "down" event.
-                return true;
-            }
-        };
-
-        mNextImageView.setOnTouchListener(buttonListener);
-        mPrevImageView.setOnTouchListener(buttonListener);
-        rootView.setOnTouchListener(rootListener);
-    }
-
-    private class MyGestureListener extends
-            GestureDetector.SimpleOnGestureListener {
-
-        @Override
-        public boolean onScroll(MotionEvent e1, MotionEvent e2,
-                float distanceX, float distanceY) {
-            ImageViewTouch imageView = mImageView;
-            if (imageView.getScale() > 1F) {
-                imageView.postTranslateCenter(-distanceX, -distanceY);
-            }
-            return true;
-        }
-
-        @Override
-        public boolean onSingleTapUp(MotionEvent e) {
-            setMode(MODE_NORMAL);
-            return true;
-        }
-
-        @Override
-        public boolean onSingleTapConfirmed(MotionEvent e) {
-            showOnScreenControls();
-            scheduleDismissOnScreenControls();
-            return true;
-        }
-
-        @Override
-        public boolean onDoubleTap(MotionEvent e) {
-            ImageViewTouch imageView = mImageView;
-
-            // Switch between the original scale and 3x scale.
-            if (imageView.getScale() > 2F) {
-                mImageView.zoomTo(1f);
-            } else {
-                mImageView.zoomToPoint(3f, e.getX(), e.getY());
-            }
-            return true;
-        }
-    }
-
-    boolean isPickIntent() {
-        String action = getIntent().getAction();
-        return (Intent.ACTION_PICK.equals(action)
-                || Intent.ACTION_GET_CONTENT.equals(action));
-    }
-
-    @Override
-    public boolean onCreateOptionsMenu(Menu menu) {
-        super.onCreateOptionsMenu(menu);
-
-        MenuItem item = menu.add(Menu.NONE, Menu.NONE,
-                MenuHelper.POSITION_SLIDESHOW,
-                R.string.slide_show);
-        item.setOnMenuItemClickListener(
-                new MenuItem.OnMenuItemClickListener() {
-            public boolean onMenuItemClick(MenuItem item) {
-                setMode(MODE_SLIDESHOW);
-                mLastSlideShowImage = mCurrentPosition;
-                loadNextImage(mCurrentPosition, 0, true);
-                return true;
-            }
-        });
-        item.setIcon(android.R.drawable.ic_menu_slideshow);
-
-        mImageMenuRunnable = MenuHelper.addImageMenuItems(
-                menu,
-                MenuHelper.INCLUDE_ALL,
-                ViewImage.this,
-                mHandler,
-                mDeletePhotoRunnable,
-                new MenuHelper.MenuInvoker() {
-                    public void run(final MenuHelper.MenuCallback cb) {
-                        if (mPaused) return;
-                        setMode(MODE_NORMAL);
-
-                        IImage image = mAllImages.getImageAt(mCurrentPosition);
-                        Uri uri = image.fullSizeImageUri();
-                        cb.run(uri, image);
-
-                        mImageView.clear();
-                        setImage(mCurrentPosition, false);
-                    }
-                });
-
-        item = menu.add(Menu.NONE, Menu.NONE,
-                MenuHelper.POSITION_GALLERY_SETTING, R.string.camerasettings);
-        item.setOnMenuItemClickListener(
-                new MenuItem.OnMenuItemClickListener() {
-            public boolean onMenuItemClick(MenuItem item) {
-                Intent preferences = new Intent();
-                preferences.setClass(ViewImage.this, GallerySettings.class);
-                startActivity(preferences);
-                return true;
-            }
-        });
-        item.setAlphabeticShortcut('p');
-        item.setIcon(android.R.drawable.ic_menu_preferences);
-
-        return true;
-    }
-
-    protected Runnable mDeletePhotoRunnable = new Runnable() {
-        public void run() {
-            mAllImages.removeImageAt(mCurrentPosition);
-            if (mAllImages.getCount() == 0) {
-                finish();
-                return;
-            } else {
-                if (mCurrentPosition == mAllImages.getCount()) {
-                    mCurrentPosition -= 1;
-                }
-            }
-            mImageView.clear();
-            mCache.clear();  // Because the position number is changed.
-            setImage(mCurrentPosition, true);
-        }
-    };
-
-    @Override
-    public boolean onPrepareOptionsMenu(Menu menu) {
-
-        super.onPrepareOptionsMenu(menu);
-        if (mPaused) return false;
-
-        setMode(MODE_NORMAL);
-        IImage image = mAllImages.getImageAt(mCurrentPosition);
-
-        if (mImageMenuRunnable != null) {
-            mImageMenuRunnable.gettingReadyToOpen(menu, image);
-        }
-
-        Uri uri = mAllImages.getImageAt(mCurrentPosition).fullSizeImageUri();
-        MenuHelper.enableShareMenuItem(menu, MenuHelper.isWhiteListUri(uri));
-
-        MenuHelper.enableShowOnMapMenuItem(menu, MenuHelper.hasLatLngData(image));
-
-        return true;
-    }
-
-    @Override
-    public boolean onMenuItemSelected(int featureId, MenuItem item) {
-        boolean b = super.onMenuItemSelected(featureId, item);
-        if (mImageMenuRunnable != null) {
-            mImageMenuRunnable.aboutToCall(item,
-                    mAllImages.getImageAt(mCurrentPosition));
-        }
-        return b;
-    }
-
-    void setImage(int pos, boolean showControls) {
-        mCurrentPosition = pos;
-
-        Bitmap b = mCache.getBitmap(pos);
-        if (b != null) {
-            IImage image = mAllImages.getImageAt(pos);
-            mImageView.setImageRotateBitmapResetBase(
-                    new RotateBitmap(b, image.getDegreesRotated()), true);
-            updateZoomButtonsEnabled();
-        }
-
-        ImageGetterCallback cb = new ImageGetterCallback() {
-            public void completed() {
-            }
-
-            public boolean wantsThumbnail(int pos, int offset) {
-                return !mCache.hasBitmap(pos + offset);
-            }
-
-            public boolean wantsFullImage(int pos, int offset) {
-                return offset == 0;
-            }
-
-            public int fullImageSizeToUse(int pos, int offset) {
-                // this number should be bigger so that we can zoom.  we may
-                // need to get fancier and read in the fuller size image as the
-                // user starts to zoom.
-                // Originally the value is set to 480 in order to avoid OOM.
-                // Now we set it to 2048 because of using
-                // native memory allocation for Bitmaps.
-                final int imageViewSize = 2048;
-                return imageViewSize;
-            }
-
-            public int [] loadOrder() {
-                return sOrderAdjacents;
-            }
-
-            public void imageLoaded(int pos, int offset, RotateBitmap bitmap,
-                                    boolean isThumb) {
-                // shouldn't get here after onPause()
-
-                // We may get a result from a previous request. Ignore it.
-                if (pos != mCurrentPosition) {
-                    bitmap.recycle();
-                    return;
-                }
-
-                if (isThumb) {
-                    mCache.put(pos + offset, bitmap.getBitmap());
-                }
-                if (offset == 0) {
-                    // isThumb: We always load thumb bitmap first, so we will
-                    // reset the supp matrix for then thumb bitmap, and keep
-                    // the supp matrix when the full bitmap is loaded.
-                    mImageView.setImageRotateBitmapResetBase(bitmap, isThumb);
-                    updateZoomButtonsEnabled();
-                }
-            }
-        };
-
-        // Could be null if we're stopping a slide show in the course of pausing
-        if (mGetter != null) {
-            mGetter.setPosition(pos, cb, mAllImages, mHandler);
-        }
-        updateActionIcons();
-        if (showControls) showOnScreenControls();
-        scheduleDismissOnScreenControls();
-    }
-
-    @Override
-    public void onCreate(Bundle instanceState) {
-        super.onCreate(instanceState);
-
-        Intent intent = getIntent();
-        mFullScreenInNormalMode = intent.getBooleanExtra(
-                MediaStore.EXTRA_FULL_SCREEN, true);
-        mShowActionIcons = intent.getBooleanExtra(
-                MediaStore.EXTRA_SHOW_ACTION_ICONS, true);
-
-        mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
-
-        setDefaultKeyMode(DEFAULT_KEYS_SHORTCUT);
-        requestWindowFeature(Window.FEATURE_NO_TITLE);
-        setContentView(R.layout.viewimage);
-
-        mImageView = (ImageViewTouch) findViewById(R.id.image);
-        mImageView.setEnableTrackballScroll(true);
-        mCache = new BitmapCache(3);
-        mImageView.setRecycler(mCache);
-
-        makeGetter();
-
-        mAnimationIndex = -1;
-
-        mSlideShowInAnimation = new Animation[] {
-            makeInAnimation(R.anim.transition_in),
-            makeInAnimation(R.anim.slide_in),
-            makeInAnimation(R.anim.slide_in_vertical),
-        };
-
-        mSlideShowOutAnimation = new Animation[] {
-            makeOutAnimation(R.anim.transition_out),
-            makeOutAnimation(R.anim.slide_out),
-            makeOutAnimation(R.anim.slide_out_vertical),
-        };
-
-        mSlideShowImageViews[0] =
-                (ImageViewTouchBase) findViewById(R.id.image1_slideShow);
-        mSlideShowImageViews[1] =
-                (ImageViewTouchBase) findViewById(R.id.image2_slideShow);
-        for (ImageViewTouchBase v : mSlideShowImageViews) {
-            v.setVisibility(View.INVISIBLE);
-            v.setRecycler(mCache);
-        }
-
-        mActionIconPanel = findViewById(R.id.action_icon_panel);
-
-        mParam = getIntent().getParcelableExtra(KEY_IMAGE_LIST);
-
-        boolean slideshow;
-        if (instanceState != null) {
-            mSavedUri = instanceState.getParcelable(STATE_URI);
-            slideshow = instanceState.getBoolean(STATE_SLIDESHOW, false);
-            mShowControls = instanceState.getBoolean(STATE_SHOW_CONTROLS, true);
-        } else {
-            mSavedUri = getIntent().getData();
-            slideshow = intent.getBooleanExtra(EXTRA_SLIDESHOW, false);
-        }
-
-        // We only show action icons for URIs that we know we can share and
-        // delete. Although we get read permission (for the images) from
-        // applications like MMS, we cannot pass the permission to other
-        // activities due to the current framework design.
-        if (!MenuHelper.isWhiteListUri(mSavedUri)) {
-            mShowActionIcons = false;
-        }
-
-        if (mShowActionIcons) {
-            int[] pickIds = {R.id.attach, R.id.cancel};
-            int[] normalIds = {R.id.setas, R.id.play, R.id.share, R.id.discard};
-            int[] connectIds = isPickIntent() ? pickIds : normalIds;
-            for (int id : connectIds) {
-                View view = mActionIconPanel.findViewById(id);
-                view.setVisibility(View.VISIBLE);
-                view.setOnClickListener(this);
-            }
-        }
-
-        // Don't show the "delete" icon for SingleImageList.
-        if (ImageManager.isSingleImageMode(mSavedUri.toString())) {
-            mActionIconPanel.findViewById(R.id.discard)
-                    .setVisibility(View.GONE);
-        }
-
-        if (slideshow) {
-            setMode(MODE_SLIDESHOW);
-        } else {
-            if (mFullScreenInNormalMode) {
-                getWindow().addFlags(
-                        WindowManager.LayoutParams.FLAG_FULLSCREEN);
-            }
-            if (mShowActionIcons) {
-                mActionIconPanel.setVisibility(View.VISIBLE);
-            }
-        }
-
-        setupOnScreenControls(findViewById(R.id.rootLayout), mImageView);
-    }
-
-    private void updateActionIcons() {
-        if (isPickIntent()) return;
-
-        IImage image = mAllImages.getImageAt(mCurrentPosition);
-        View panel = mActionIconPanel;
-        if (image instanceof VideoObject) {
-            panel.findViewById(R.id.setas).setVisibility(View.GONE);
-            panel.findViewById(R.id.play).setVisibility(View.VISIBLE);
-        } else {
-            panel.findViewById(R.id.setas).setVisibility(View.VISIBLE);
-            panel.findViewById(R.id.play).setVisibility(View.GONE);
-        }
-    }
-
-    private Animation makeInAnimation(int id) {
-        Animation inAnimation = AnimationUtils.loadAnimation(this, id);
-        return inAnimation;
-    }
-
-    private Animation makeOutAnimation(int id) {
-        Animation outAnimation = AnimationUtils.loadAnimation(this, id);
-        return outAnimation;
-    }
-
-    private static int getPreferencesInteger(
-            SharedPreferences prefs, String key, int defaultValue) {
-        String value = prefs.getString(key, null);
-        try {
-            return value == null ? defaultValue : Integer.parseInt(value);
-        } catch (NumberFormatException ex) {
-            Log.e(TAG, "couldn't parse preference: " + value, ex);
-            return defaultValue;
-        }
-    }
-
-    void setMode(int mode) {
-        if (mMode == mode) {
-            return;
-        }
-        View slideshowPanel = findViewById(R.id.slideShowContainer);
-        View normalPanel = findViewById(R.id.abs);
-
-        Window win = getWindow();
-        mMode = mode;
-        if (mode == MODE_SLIDESHOW) {
-            slideshowPanel.setVisibility(View.VISIBLE);
-            normalPanel.setVisibility(View.GONE);
-
-            win.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN
-                    | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
-
-            mImageView.clear();
-            mActionIconPanel.setVisibility(View.GONE);
-
-            slideshowPanel.getRootView().requestLayout();
-
-            // The preferences we want to read:
-            //   mUseShuffleOrder
-            //   mSlideShowLoop
-            //   mAnimationIndex
-            //   mSlideShowInterval
-
-            mUseShuffleOrder = mPrefs.getBoolean(PREF_SHUFFLE_SLIDESHOW, false);
-            mSlideShowLoop = mPrefs.getBoolean(PREF_SLIDESHOW_REPEAT, false);
-            mAnimationIndex = getPreferencesInteger(
-                    mPrefs, "pref_gallery_slideshow_transition_key", 0);
-            mSlideShowInterval = getPreferencesInteger(
-                    mPrefs, "pref_gallery_slideshow_interval_key", 3) * 1000;
-        } else {
-            slideshowPanel.setVisibility(View.GONE);
-            normalPanel.setVisibility(View.VISIBLE);
-
-            win.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
-            if (mFullScreenInNormalMode) {
-                win.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
-            } else {
-                win.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
-            }
-
-            if (mGetter != null) {
-                mGetter.cancelCurrent();
-            }
-
-            if (mShowActionIcons) {
-                Animation animation = new AlphaAnimation(0F, 1F);
-                animation.setDuration(500);
-                mActionIconPanel.setAnimation(animation);
-                mActionIconPanel.setVisibility(View.VISIBLE);
-            }
-
-            ImageViewTouchBase dst = mImageView;
-            dst.mLastXTouchPos = -1;
-            dst.mLastYTouchPos = -1;
-
-            for (ImageViewTouchBase ivt : mSlideShowImageViews) {
-                ivt.clear();
-            }
-
-            mShuffleOrder = null;
-
-            // mGetter null is a proxy for being paused
-            if (mGetter != null) {
-                setImage(mCurrentPosition, true);
-            }
-        }
-    }
-
-    private void generateShuffleOrder() {
-        if (mShuffleOrder == null
-                || mShuffleOrder.length != mAllImages.getCount()) {
-            mShuffleOrder = new int[mAllImages.getCount()];
-            for (int i = 0, n = mShuffleOrder.length; i < n; i++) {
-                mShuffleOrder[i] = i;
-            }
-        }
-
-        for (int i = mShuffleOrder.length - 1; i >= 0; i--) {
-            int r = mRandom.nextInt(i + 1);
-            if (r != i) {
-                int tmp = mShuffleOrder[r];
-                mShuffleOrder[r] = mShuffleOrder[i];
-                mShuffleOrder[i] = tmp;
-            }
-        }
-    }
-
-    private void loadNextImage(final int requestedPos, final long delay,
-                               final boolean firstCall) {
-        if (firstCall && mUseShuffleOrder) {
-            generateShuffleOrder();
-        }
-
-        final long targetDisplayTime = System.currentTimeMillis() + delay;
-
-        ImageGetterCallback cb = new ImageGetterCallback() {
-            public void completed() {
-            }
-
-            public boolean wantsThumbnail(int pos, int offset) {
-                return true;
-            }
-
-            public boolean wantsFullImage(int pos, int offset) {
-                return false;
-            }
-
-            public int [] loadOrder() {
-                return sOrderSlideshow;
-            }
-
-            public int fullImageSizeToUse(int pos, int offset) {
-                return 480; // TODO compute this
-            }
-
-            public void imageLoaded(final int pos, final int offset,
-                    final RotateBitmap bitmap, final boolean isThumb) {
-                long timeRemaining = Math.max(0,
-                        targetDisplayTime - System.currentTimeMillis());
-                mHandler.postDelayedGetterCallback(new Runnable() {
-                    public void run() {
-                        if (mMode == MODE_NORMAL) {
-                            return;
-                        }
-
-                        ImageViewTouchBase oldView =
-                                mSlideShowImageViews[mSlideShowImageCurrent];
-
-                        if (++mSlideShowImageCurrent
-                                == mSlideShowImageViews.length) {
-                            mSlideShowImageCurrent = 0;
-                        }
-
-                        ImageViewTouchBase newView =
-                                mSlideShowImageViews[mSlideShowImageCurrent];
-                        newView.setVisibility(View.VISIBLE);
-                        newView.setImageRotateBitmapResetBase(bitmap, true);
-                        newView.bringToFront();
-
-                        int animation = 0;
-
-                        if (mAnimationIndex == -1) {
-                            int n = mRandom.nextInt(
-                                    mSlideShowInAnimation.length);
-                            animation = n;
-                        } else {
-                            animation = mAnimationIndex;
-                        }
-
-                        Animation aIn = mSlideShowInAnimation[animation];
-                        newView.startAnimation(aIn);
-                        newView.setVisibility(View.VISIBLE);
-
-                        Animation aOut = mSlideShowOutAnimation[animation];
-                        oldView.setVisibility(View.INVISIBLE);
-                        oldView.startAnimation(aOut);
-
-                        mCurrentPosition = requestedPos;
-
-                        if (mCurrentPosition == mLastSlideShowImage
-                                && !firstCall) {
-                            if (mSlideShowLoop) {
-                                if (mUseShuffleOrder) {
-                                    generateShuffleOrder();
-                                }
-                            } else {
-                                setMode(MODE_NORMAL);
-                                return;
-                            }
-                        }
-
-                        loadNextImage(
-                                (mCurrentPosition + 1) % mAllImages.getCount(),
-                                mSlideShowInterval, false);
-                    }
-                }, timeRemaining);
-            }
-        };
-        // Could be null if we're stopping a slide show in the course of pausing
-        if (mGetter != null) {
-            int pos = requestedPos;
-            if (mShuffleOrder != null) {
-                pos = mShuffleOrder[pos];
-            }
-            mGetter.setPosition(pos, cb, mAllImages, mHandler);
-        }
-    }
-
-    private void makeGetter() {
-        mGetter = new ImageGetter(getContentResolver());
-    }
-
-    private IImageList buildImageListFromUri(Uri uri) {
-        String sortOrder = mPrefs.getString(
-                "pref_gallery_sort_key", "descending");
-        int sort = sortOrder.equals("ascending")
-                ? ImageManager.SORT_ASCENDING
-                : ImageManager.SORT_DESCENDING;
-        return ImageManager.makeImageList(getContentResolver(), uri, sort);
-    }
-
-    private boolean init(Uri uri) {
-        if (uri == null) return false;
-        mAllImages = (mParam == null)
-                ? buildImageListFromUri(uri)
-                : ImageManager.makeImageList(getContentResolver(), mParam);
-        IImage image = mAllImages.getImageForUri(uri);
-        if (image == null) return false;
-        mCurrentPosition = mAllImages.getImageIndex(image);
-        mLastSlideShowImage = mCurrentPosition;
-        return true;
-    }
-
-    private Uri getCurrentUri() {
-        if (mAllImages.getCount() == 0) return null;
-        IImage image = mAllImages.getImageAt(mCurrentPosition);
-        return image.fullSizeImageUri();
-    }
-
-    @Override
-    public void onSaveInstanceState(Bundle b) {
-        super.onSaveInstanceState(b);
-        b.putParcelable(STATE_URI,
-                mAllImages.getImageAt(mCurrentPosition).fullSizeImageUri());
-        b.putBoolean(STATE_SLIDESHOW, mMode == MODE_SLIDESHOW);
-    }
-
-    @Override
-    public void onStart() {
-        super.onStart();
-        mPaused = false;
-
-        if (!init(mSavedUri)) {
-            Log.w(TAG, "init failed: " + mSavedUri);
-            finish();
-            return;
-        }
-
-        // normally this will never be zero but if one "backs" into this
-        // activity after removing the sdcard it could be zero.  in that
-        // case just "finish" since there's nothing useful that can happen.
-        int count = mAllImages.getCount();
-        if (count == 0) {
-            finish();
-            return;
-        } else if (count <= mCurrentPosition) {
-            mCurrentPosition = count - 1;
-        }
-
-        if (mGetter == null) {
-            makeGetter();
-        }
-
-        if (mMode == MODE_SLIDESHOW) {
-            loadNextImage(mCurrentPosition, 0, true);
-        } else {  // MODE_NORMAL
-            setImage(mCurrentPosition, mShowControls);
-            mShowControls = false;
-        }
-    }
-
-    @Override
-    public void onStop() {
-        super.onStop();
-        mPaused = true;
-
-        // mGetter could be null if we call finish() and leave early in
-        // onStart().
-        if (mGetter != null) {
-            mGetter.cancelCurrent();
-            mGetter.stop();
-            mGetter = null;
-        }
-        setMode(MODE_NORMAL);
-
-        // removing all callback in the message queue
-        mHandler.removeAllGetterCallbacks();
-
-        if (mAllImages != null) {
-            mSavedUri = getCurrentUri();
-            mAllImages.close();
-            mAllImages = null;
-        }
-
-        hideOnScreenControls();
-        mImageView.clear();
-        mCache.clear();
-
-        for (ImageViewTouchBase iv : mSlideShowImageViews) {
-            iv.clear();
-        }
-    }
-
-    private void startShareMediaActivity(IImage image) {
-        boolean isVideo = image instanceof VideoObject;
-        Intent intent = new Intent();
-        intent.setAction(Intent.ACTION_SEND);
-        intent.setType(image.getMimeType());
-        intent.putExtra(Intent.EXTRA_STREAM, image.fullSizeImageUri());
-        try {
-            startActivity(Intent.createChooser(intent, getText(
-                    isVideo ? R.string.sendVideo : R.string.sendImage)));
-        } catch (android.content.ActivityNotFoundException ex) {
-            Toast.makeText(this, isVideo
-                    ? R.string.no_way_to_share_image
-                    : R.string.no_way_to_share_video,
-                    Toast.LENGTH_SHORT).show();
-        }
-    }
-
-    private void startPlayVideoActivity() {
-        IImage image = mAllImages.getImageAt(mCurrentPosition);
-        Intent intent = new Intent(
-                Intent.ACTION_VIEW, image.fullSizeImageUri());
-        try {
-            startActivity(intent);
-        } catch (android.content.ActivityNotFoundException ex) {
-            Log.e(TAG, "Couldn't view video " + image.fullSizeImageUri(), ex);
-        }
-    }
-
-    public void onClick(View v) {
-        switch (v.getId()) {
-            case R.id.discard:
-                MenuHelper.deletePhoto(this, mDeletePhotoRunnable);
-                break;
-            case R.id.play:
-                startPlayVideoActivity();
-                break;
-            case R.id.share: {
-                IImage image = mAllImages.getImageAt(mCurrentPosition);
-                if (!MenuHelper.isWhiteListUri(image.fullSizeImageUri())) {
-                    return;
-                }
-                startShareMediaActivity(image);
-                break;
-            }
-            case R.id.setas: {
-                IImage image = mAllImages.getImageAt(mCurrentPosition);
-                Intent intent = Util.createSetAsIntent(image);
-                try {
-                    startActivity(Intent.createChooser(
-                            intent, getText(R.string.setImage)));
-                } catch (android.content.ActivityNotFoundException ex) {
-                    Toast.makeText(this, R.string.no_way_to_share_video,
-                            Toast.LENGTH_SHORT).show();
-                }
-                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, true);
-            showOnScreenControls();
-        }
-    }
-
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode,
-            Intent data) {
-        switch (requestCode) {
-            case MenuHelper.RESULT_COMMON_MENU_CROP:
-                if (resultCode == RESULT_OK) {
-                    // The CropImage activity passes back the Uri of the
-                    // cropped image as the Action rather than the Data.
-                    mSavedUri = Uri.parse(data.getAction());
-
-                    // if onStart() runs before, then set the returned
-                    // image as currentImage.
-                    if (mAllImages != null) {
-                        IImage image = mAllImages.getImageForUri(mSavedUri);
-                        // image could be null if SD card is removed.
-                        if (image == null) {
-                            finish();
-                        } else {
-                            mCurrentPosition = mAllImages.getImageIndex(image);
-                            setImage(mCurrentPosition, false);
-                        }
-                    }
-                }
-                break;
-        }
-    }
-}
-
-class ImageViewTouch extends ImageViewTouchBase {
-    private final ViewImage mViewImage;
-    private boolean mEnableTrackballScroll;
-
-    public ImageViewTouch(Context context) {
-        super(context);
-        mViewImage = (ViewImage) context;
-    }
-
-    public ImageViewTouch(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        mViewImage = (ViewImage) context;
-    }
-
-    public void setEnableTrackballScroll(boolean enable) {
-        mEnableTrackballScroll = enable;
-    }
-
-    protected void postTranslateCenter(float dx, float dy) {
-        super.postTranslate(dx, dy);
-        center(true, true);
-    }
-
-    private static final float PAN_RATE = 20;
-
-    // This is the time we allow the dpad to change the image position again.
-    private long mNextChangePositionTime;
-
-    @Override
-    public boolean onKeyDown(int keyCode, KeyEvent event) {
-        if (mViewImage.mPaused) return false;
-
-        // 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
-        try {
-            switch (keyCode) {
-                case KeyEvent.KEYCODE_DPAD_CENTER: {
-                    if (mViewImage.isPickIntent()) {
-                        IImage img = mViewImage.mAllImages
-                                .getImageAt(mViewImage.mCurrentPosition);
-                        mViewImage.setResult(ViewImage.RESULT_OK,
-                                 new Intent().setData(img.fullSizeImageUri()));
-                        mViewImage.finish();
-                    }
-                    break;
-                }
-                case KeyEvent.KEYCODE_DPAD_LEFT: {
-                    if (getScale() <= 1F && event.getEventTime()
-                            >= mNextChangePositionTime) {
-                        nextImagePos = current - 1;
-                        mNextChangePositionTime = event.getEventTime() + 500;
-                    } else {
-                        panBy(PAN_RATE, 0);
-                        center(true, false);
-                    }
-                    return true;
-                }
-                case KeyEvent.KEYCODE_DPAD_RIGHT: {
-                    if (getScale() <= 1F && event.getEventTime()
-                            >= mNextChangePositionTime) {
-                        nextImagePos = current + 1;
-                        mNextChangePositionTime = event.getEventTime() + 500;
-                    } else {
-                        panBy(-PAN_RATE, 0);
-                        center(true, false);
-                    }
-                    return true;
-                }
-                case KeyEvent.KEYCODE_DPAD_UP: {
-                    panBy(0, PAN_RATE);
-                    center(false, true);
-                    return true;
-                }
-                case KeyEvent.KEYCODE_DPAD_DOWN: {
-                    panBy(0, -PAN_RATE);
-                    center(false, true);
-                    return true;
-                }
-                case KeyEvent.KEYCODE_DEL:
-                    MenuHelper.deletePhoto(
-                            mViewImage, mViewImage.mDeletePhotoRunnable);
-                    break;
-            }
-        } finally {
-            if (nextImagePos >= 0
-                    && nextImagePos < mViewImage.mAllImages.getCount()) {
-                synchronized (mViewImage) {
-                    mViewImage.setMode(ViewImage.MODE_NORMAL);
-                    mViewImage.setImage(nextImagePos, true);
-                }
-           } else if (nextImagePos != -2) {
-               center(true, true);
-           }
-        }
-
-        return super.onKeyDown(keyCode, event);
-    }
-}
-
-// This is a cache for Bitmap displayed in ViewImage (normal mode, thumb only).
-class BitmapCache implements ImageViewTouchBase.Recycler {
-    public static class Entry {
-        int mPos;
-        Bitmap mBitmap;
-        public Entry() {
-            clear();
-        }
-        public void clear() {
-            mPos = -1;
-            mBitmap = null;
-        }
-    }
-
-    private final Entry[] mCache;
-
-    public BitmapCache(int size) {
-        mCache = new Entry[size];
-        for (int i = 0; i < mCache.length; i++) {
-            mCache[i] = new Entry();
-        }
-    }
-
-    // Given the position, find the associated entry. Returns null if there is
-    // no such entry.
-    private Entry findEntry(int pos) {
-        for (Entry e : mCache) {
-            if (pos == e.mPos) {
-                return e;
-            }
-        }
-        return null;
-    }
-
-    // Returns the thumb bitmap if we have it, otherwise return null.
-    public synchronized Bitmap getBitmap(int pos) {
-        Entry e = findEntry(pos);
-        if (e != null) {
-            return e.mBitmap;
-        }
-        return null;
-    }
-
-    public synchronized void put(int pos, Bitmap bitmap) {
-        // First see if we already have this entry.
-        if (findEntry(pos) != null) {
-            return;
-        }
-
-        // Find the best entry we should replace.
-        // See if there is any empty entry.
-        // Otherwise assuming sequential access, kick out the entry with the
-        // greatest distance.
-        Entry best = null;
-        int maxDist = -1;
-        for (Entry e : mCache) {
-            if (e.mPos == -1) {
-                best = e;
-                break;
-            } else {
-                int dist = Math.abs(pos - e.mPos);
-                if (dist > maxDist) {
-                    maxDist = dist;
-                    best = e;
-                }
-            }
-        }
-
-        // Recycle the image being kicked out.
-        // This only works because our current usage is sequential, so we
-        // do not happen to recycle the image being displayed.
-        if (best.mBitmap != null) {
-            best.mBitmap.recycle();
-        }
-
-        best.mPos = pos;
-        best.mBitmap = bitmap;
-    }
-
-    // Recycle all bitmaps in the cache and clear the cache.
-    public synchronized void clear() {
-        for (Entry e : mCache) {
-            if (e.mBitmap != null) {
-                e.mBitmap.recycle();
-            }
-            e.clear();
-        }
-    }
-
-    // Returns whether the bitmap is in the cache.
-    public synchronized boolean hasBitmap(int pos) {
-        Entry e = findEntry(pos);
-        return (e != null);
-    }
-
-    // Recycle the bitmap if it's not in the cache.
-    // The input must be non-null.
-    public synchronized void recycle(Bitmap b) {
-        for (Entry e : mCache) {
-            if (e.mPos != -1) {
-                if (e.mBitmap == b) {
-                    return;
-                }
-            }
-        }
-        b.recycle();
-    }
-}
diff --git a/src/com/android/camera/Wallpaper.java b/src/com/android/camera/Wallpaper.java
deleted file mode 100644
index 2d533b5..0000000
--- a/src/com/android/camera/Wallpaper.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.camera;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-
-/**
- * Wallpaper picker for the camera application. This just redirects to the
- * standard pick action.
- */
-public class Wallpaper extends Activity {
-    @SuppressWarnings("unused")
-    private static final String TAG = "Wallpaper";
-    private static final int PHOTO_PICKED = 1;
-    private static final int CROP_DONE = 2;
-
-    @Override
-    protected void onCreate(Bundle icicle) {
-        super.onCreate(icicle);
-
-        Uri imageToUse = getIntent().getData();
-        if (imageToUse != null) {
-            Intent intent = new Intent();
-            intent.setClassName("com.android.camera",
-                                "com.android.camera.CropImage");
-            intent.setData(imageToUse);
-            formatIntent(intent);
-            startActivityForResult(intent, CROP_DONE);
-        } else {
-            Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
-            intent.setType("image/*");
-            intent.putExtra("crop", "true");
-            formatIntent(intent);
-            startActivityForResult(intent, PHOTO_PICKED);
-        }
-    }
-
-    protected void formatIntent(Intent intent) {
-        int width = getWallpaperDesiredMinimumWidth();
-        int height = getWallpaperDesiredMinimumHeight();
-        intent.putExtra("outputX",         width);
-        intent.putExtra("outputY",         height);
-        intent.putExtra("aspectX",         width);
-        intent.putExtra("aspectY",         height);
-        intent.putExtra("scale",           true);
-        intent.putExtra("noFaceDetection", true);
-        intent.putExtra("setWallpaper",    true);
-    }
-
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode,
-                                    Intent data) {
-        if ((requestCode == PHOTO_PICKED || requestCode == CROP_DONE)) {
-            setResult(resultCode);
-            finish();
-        }
-    }
-}
diff --git a/src/com/android/camera/gallery/BaseImage.java b/src/com/android/camera/gallery/BaseImage.java
index 6607b08..42d0f66 100644
--- a/src/com/android/camera/gallery/BaseImage.java
+++ b/src/com/android/camera/gallery/BaseImage.java
@@ -117,10 +117,6 @@
         }
     }
 
-    public long fullSizeImageId() {
-        return mId;
-    }
-
     public Uri fullSizeImageUri() {
         return mUri;
     }
@@ -181,8 +177,8 @@
         Bitmap b = null;
         try {
             long id = mId;
-            b = Images.Thumbnails.getThumbnail(mContentResolver, id,
-                    Images.Thumbnails.MICRO_KIND, null);
+            b = BitmapManager.instance().getThumbnail(mContentResolver, id,
+                    Images.Thumbnails.MICRO_KIND, null, false);
         } catch (Throwable ex) {
             Log.e(TAG, "miniThumbBitmap got exception", ex);
             return null;
diff --git a/src/com/android/camera/gallery/IImage.java b/src/com/android/camera/gallery/IImage.java
index bad41cc..8b443d6 100644
--- a/src/com/android/camera/gallery/IImage.java
+++ b/src/com/android/camera/gallery/IImage.java
@@ -47,7 +47,6 @@
 
     /** Get the input stream associated with a given full size image. */
     public abstract InputStream fullSizeImageData();
-    public abstract long fullSizeImageId();
     public abstract Uri fullSizeImageUri();
 
     /** Get the path of the (full size) image data. */
diff --git a/src/com/android/camera/gallery/IImageList.java b/src/com/android/camera/gallery/IImageList.java
index 07a6bb2..6f3d68d 100644
--- a/src/com/android/camera/gallery/IImageList.java
+++ b/src/com/android/camera/gallery/IImageList.java
@@ -18,8 +18,6 @@
 
 import android.net.Uri;
 
-import java.util.HashMap;
-
 //
 // ImageList and Image classes have one-to-one correspondence.
 // The class hierarchy (* = abstract class):
@@ -44,7 +42,6 @@
  * The interface of all image collections used in gallery.
  */
 public interface IImageList {
-    public HashMap<String, String> getBucketIds();
 
     /**
      * Returns the count of image objects.
@@ -54,11 +51,6 @@
     public int getCount();
 
     /**
-     * @return true if the count of image objects is zero.
-     */
-    public boolean isEmpty();
-
-    /**
      * Returns the image at the ith position.
      *
      * @param i     the position
diff --git a/src/com/android/camera/gallery/Image.java b/src/com/android/camera/gallery/Image.java
index 6190706..78ec382 100644
--- a/src/com/android/camera/gallery/Image.java
+++ b/src/com/android/camera/gallery/Image.java
@@ -16,6 +16,7 @@
 
 package com.android.camera.gallery;
 
+import com.android.camera.BitmapManager;
 import com.android.camera.Util;
 
 import android.content.ContentResolver;
@@ -152,8 +153,8 @@
         BitmapFactory.Options options = new BitmapFactory.Options();
         options.inDither = false;
         options.inPreferredConfig = Bitmap.Config.ARGB_8888;
-        bitmap = Images.Thumbnails.getThumbnail(
-                    mContentResolver, mId, Images.Thumbnails.MINI_KIND, options);
+        bitmap = BitmapManager.instance().getThumbnail(mContentResolver, mId,
+                Images.Thumbnails.MINI_KIND, options, false);
 
         if (bitmap != null && rotateAsNeeded) {
             bitmap = Util.rotate(bitmap, getDegreesRotated());
diff --git a/src/com/android/camera/gallery/ImageList.java b/src/com/android/camera/gallery/ImageList.java
index 9a47e55..064a192 100644
--- a/src/com/android/camera/gallery/ImageList.java
+++ b/src/com/android/camera/gallery/ImageList.java
@@ -21,8 +21,6 @@
 import android.net.Uri;
 import android.provider.MediaStore.Images.Media;
 
-import java.util.HashMap;
-
 /**
  * Represents an ordered collection of Image objects. Provides an API to add
  * and remove an image.
@@ -35,26 +33,6 @@
     private static final String[] ACCEPTABLE_IMAGE_TYPES =
             new String[] { "image/jpeg", "image/png", "image/gif" };
 
-    public HashMap<String, String> getBucketIds() {
-        Uri uri = mBaseUri.buildUpon()
-                .appendQueryParameter("distinct", "true").build();
-        Cursor cursor = Media.query(
-                mContentResolver, uri,
-                new String[] {
-                    Media.BUCKET_DISPLAY_NAME,
-                    Media.BUCKET_ID},
-                whereClause(), whereClauseArgs(), null);
-        try {
-            HashMap<String, String> hash = new HashMap<String, String>();
-            while (cursor.moveToNext()) {
-                hash.put(cursor.getString(1), cursor.getString(0));
-            }
-            return hash;
-        } finally {
-            cursor.close();
-        }
-    }
-
     /**
      * ImageList constructor.
      */
diff --git a/src/com/android/camera/gallery/ImageListUber.java b/src/com/android/camera/gallery/ImageListUber.java
index 95146ae..0756947 100644
--- a/src/com/android/camera/gallery/ImageListUber.java
+++ b/src/com/android/camera/gallery/ImageListUber.java
@@ -23,7 +23,6 @@
 
 import java.util.Arrays;
 import java.util.Comparator;
-import java.util.HashMap;
 import java.util.PriorityQueue;
 
 /**
@@ -68,14 +67,6 @@
         }
     }
 
-    public HashMap<String, String> getBucketIds() {
-        HashMap<String, String> hashMap = new HashMap<String, String>();
-        for (IImageList list : mSubList) {
-            hashMap.putAll(list.getBucketIds());
-        }
-        return hashMap;
-    }
-
     public int getCount() {
         int count = 0;
         for (IImageList subList : mSubList) {
@@ -84,18 +75,10 @@
         return count;
     }
 
-    public boolean isEmpty() {
-        for (IImageList subList : mSubList) {
-            if (!subList.isEmpty()) return false;
-        }
-        return true;
-    }
-
     // mSkipCounts is used to tally the counts as we traverse
     // the mSkipList.  It's a member variable only so that
     // we don't have to allocate each time through.  Otherwise
     // it could just as easily be a local.
-
     public IImage getImageAt(int index) {
         if (index < 0 || index > getCount()) {
             throw new IndexOutOfBoundsException(
diff --git a/src/com/android/camera/gallery/LruCache.java b/src/com/android/camera/gallery/LruCache.java
index 2e15ee5..d4ff417 100644
--- a/src/com/android/camera/gallery/LruCache.java
+++ b/src/com/android/camera/gallery/LruCache.java
@@ -22,6 +22,10 @@
 import java.util.LinkedHashMap;
 import java.util.Map;
 
+/**
+ * An LRU cache which stores recently inserted entries and all entries ever
+ * inserted which still has a strong reference elsewhere.
+ */
 public class LruCache<K, V> {
 
     private final HashMap<K, V> mLruMap;
diff --git a/src/com/android/camera/gallery/SingleImageList.java b/src/com/android/camera/gallery/SingleImageList.java
index 8abb306..c2ef371 100644
--- a/src/com/android/camera/gallery/SingleImageList.java
+++ b/src/com/android/camera/gallery/SingleImageList.java
@@ -19,8 +19,6 @@
 import android.content.ContentResolver;
 import android.net.Uri;
 
-import java.util.HashMap;
-
 /**
  * An implementation of interface <code>IImageList</code> which contains only
  * one image.
@@ -38,18 +36,10 @@
         mSingleImage = new UriImage(this, resolver, uri);
     }
 
-    public HashMap<String, String> getBucketIds() {
-        throw new UnsupportedOperationException();
-    }
-
     public int getCount() {
         return 1;
     }
 
-    public boolean isEmpty() {
-        return false;
-    }
-
     public int getImageIndex(IImage image) {
         return image == mSingleImage ? 0 : -1;
     }
diff --git a/src/com/android/camera/gallery/UriImage.java b/src/com/android/camera/gallery/UriImage.java
index 0db1633..0f27b24 100644
--- a/src/com/android/camera/gallery/UriImage.java
+++ b/src/com/android/camera/gallery/UriImage.java
@@ -156,10 +156,6 @@
         return (options != null) ? options.outWidth : 0;
     }
 
-    public long fullSizeImageId() {
-        return 0;
-    }
-
     public IImageList getContainer() {
         return mContainer;
     }
diff --git a/src/com/android/camera/gallery/VideoList.java b/src/com/android/camera/gallery/VideoList.java
index c22a206..375de15 100644
--- a/src/com/android/camera/gallery/VideoList.java
+++ b/src/com/android/camera/gallery/VideoList.java
@@ -22,8 +22,6 @@
 import android.provider.MediaStore.Images;
 import android.provider.MediaStore.Video.Media;
 
-import java.util.HashMap;
-
 /**
  * A collection of all the <code>VideoObject</code> in gallery.
  */
@@ -79,27 +77,6 @@
         super(resolver, uri, sort, bucketId);
     }
 
-    public HashMap<String, String> getBucketIds() {
-        Uri uri = mBaseUri.buildUpon()
-                .appendQueryParameter("distinct", "true").build();
-        Cursor c = Images.Media.query(
-                mContentResolver, uri,
-                new String[] {
-                    Media.BUCKET_DISPLAY_NAME,
-                    Media.BUCKET_ID
-                },
-                whereClause(), whereClauseArgs(), sortOrder());
-        try {
-            HashMap<String, String> hash = new HashMap<String, String>();
-            while (c.moveToNext()) {
-                hash.put(c.getString(1), c.getString(0));
-            }
-            return hash;
-        } finally {
-            c.close();
-        }
-    }
-
     protected String whereClause() {
         return mBucketId != null
                 ? Images.Media.BUCKET_ID + " = '" + mBucketId + "'"
diff --git a/src/com/android/camera/gallery/VideoObject.java b/src/com/android/camera/gallery/VideoObject.java
index 8e3b60e..31c6e30 100644
--- a/src/com/android/camera/gallery/VideoObject.java
+++ b/src/com/android/camera/gallery/VideoObject.java
@@ -16,11 +16,13 @@
 
 package com.android.camera.gallery;
 
+import com.android.camera.BitmapManager;
+
 import android.content.ContentResolver;
 import android.graphics.Bitmap;
 import android.media.ThumbnailUtil;
 import android.net.Uri;
-import android.provider.MediaStore.Video;
+import android.provider.MediaStore.Images;
 import android.util.Log;
 
 import java.io.IOException;
@@ -76,11 +78,6 @@
     }
 
     @Override
-    public long fullSizeImageId() {
-        return mId;
-    }
-
-    @Override
     public int getHeight() {
          return 0;
     }
@@ -110,8 +107,8 @@
     public Bitmap miniThumbBitmap() {
         try {
             long id = mId;
-            return Video.Thumbnails.getThumbnail(mContentResolver, id,
-                    Video.Thumbnails.MICRO_KIND, null);
+            return BitmapManager.instance().getThumbnail(mContentResolver,
+                    id, Images.Thumbnails.MICRO_KIND, null, true);
         } catch (Throwable ex) {
             Log.e(TAG, "miniThumbBitmap got exception", ex);
             return null;
@@ -122,4 +119,4 @@
     public String toString() {
         return new StringBuilder("VideoObject").append(mId).toString();
     }
-}
\ No newline at end of file
+}
diff --git a/tests/src/com/android/camera/BitmapManagerUnitTests.java b/tests/src/com/android/camera/BitmapManagerUnitTests.java
index fc1ade1..7878b74 100644
--- a/tests/src/com/android/camera/BitmapManagerUnitTests.java
+++ b/tests/src/com/android/camera/BitmapManagerUnitTests.java
@@ -75,7 +75,7 @@
         assertTrue(mBitmapManager.canThreadDecoding(t));
 
         // Disallow thread t to decode.
-        mBitmapManager.cancelThreadDecoding(t);
+        mBitmapManager.cancelThreadDecoding(t, mContext.getContentResolver());
         assertFalse(mBitmapManager.canThreadDecoding(t));
 
         // Allow thread t to decode again.
@@ -96,7 +96,7 @@
 
     public void testCancelDecoding() {
         DecodeThread t = new DecodeThread();
-        mBitmapManager.cancelThreadDecoding(t);
+        mBitmapManager.cancelThreadDecoding(t, mContext.getContentResolver());
         try {
             t.start();
             t.join();
@@ -108,7 +108,7 @@
 
     public void testAllowDecoding() {
         DecodeThread t = new DecodeThread();
-        mBitmapManager.cancelThreadDecoding(t);
+        mBitmapManager.cancelThreadDecoding(t, mContext.getContentResolver());
         mBitmapManager.allowThreadDecoding(t);
         try {
             t.start();
@@ -123,7 +123,7 @@
         DecodeThread t1 = new DecodeThread();
         DecodeThread t2 = new DecodeThread();
         mBitmapManager.allowThreadDecoding(t1);
-        mBitmapManager.cancelThreadDecoding(t2);
+        mBitmapManager.cancelThreadDecoding(t2, mContext.getContentResolver());
         t1.start();
         t2.start();
 
diff --git a/tests/src/com/android/camera/gallery/ImageListUberUnitTests.java b/tests/src/com/android/camera/gallery/ImageListUberUnitTests.java
deleted file mode 100644
index 30487f2..0000000
--- a/tests/src/com/android/camera/gallery/ImageListUberUnitTests.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package com.android.camera.gallery;
-
-import com.android.camera.ImageManager;
-
-import android.test.AndroidTestCase;
-
-public class ImageListUberUnitTests extends AndroidTestCase {
-
-    public void testTheOrderOfGetImageAt() {
-        MockImageList listA = new MockImageList();
-        MockImageList listB = new MockImageList();
-        listA.addImage(new MockImage(2, 2));
-        listA.addImage(new MockImage(0, 0));
-        listB.addImage(new MockImage(1, 1));
-        ImageListUber uber = new ImageListUber(
-                new IImageList[] {listA, listB}, ImageManager.SORT_DESCENDING);
-
-        assertEquals(2, uber.getImageAt(0).fullSizeImageId());
-        assertEquals(1, uber.getImageAt(1).fullSizeImageId());
-        assertEquals(0, uber.getImageAt(2).fullSizeImageId());
-        uber.close();
-
-        uber = new ImageListUber(
-                new IImageList[] {listA, listB}, ImageManager.SORT_DESCENDING);
-        assertEquals(2, uber.getImageAt(0).fullSizeImageId());
-        assertEquals(1, uber.getImageAt(1).fullSizeImageId());
-        assertEquals(0, uber.getImageAt(2).fullSizeImageId());
-        uber.close();
-    }
-
-    public void testTheOrderOfGetImageAtCaseTwo() {
-        MockImageList listA = new MockImageList();
-        MockImageList listB = new MockImageList();
-        listA.addImage(new MockImage(2, 2));
-        listA.addImage(new MockImage(1, 1));
-        listB.addImage(new MockImage(0, 0));
-        ImageListUber uber = new ImageListUber(
-                new IImageList[] {listB, listA}, ImageManager.SORT_DESCENDING);
-
-        assertEquals(2, uber.getImageAt(0).fullSizeImageId());
-        assertEquals(1, uber.getImageAt(1).fullSizeImageId());
-        assertEquals(0, uber.getImageAt(2).fullSizeImageId());
-        uber.close();
-
-        uber = new ImageListUber(
-                new IImageList[] {listA, listB}, ImageManager.SORT_DESCENDING);
-
-        assertEquals(2, uber.getImageAt(0).fullSizeImageId());
-        assertEquals(1, uber.getImageAt(1).fullSizeImageId());
-        assertEquals(0, uber.getImageAt(2).fullSizeImageId());
-        uber.close();
-    }
-
-    public void testRemoveImage() {
-        MockImageList listA = new MockImageList();
-        MockImageList listB = new MockImageList();
-        MockImage target = new MockImage(1, 1);
-        listA.addImage(new MockImage(2, 2));
-        listA.addImage(new MockImage(0, 0));
-        listB.addImage(target);
-        ImageListUber uber = new ImageListUber(
-                new IImageList[] {listB, listA}, ImageManager.SORT_DESCENDING);
-        uber.removeImage(target);
-        assertEquals(2, uber.getImageAt(0).fullSizeImageId());
-        assertEquals(0, uber.getImageAt(1).fullSizeImageId());
-
-        assertEquals(0, uber.getImageIndex(uber.getImageAt(0)));
-        assertEquals(1, uber.getImageIndex(uber.getImageAt(1)));
-        uber.close();
-    }
-
-    public void testRemoveImageAt() {
-        MockImageList listA = new MockImageList();
-        MockImageList listB = new MockImageList();
-        MockImage target = new MockImage(1, 1);
-        listA.addImage(new MockImage(2, 2));
-        listA.addImage(new MockImage(0, 0));
-        listB.addImage(target);
-        ImageListUber uber = new ImageListUber(
-                new IImageList[] {listB, listA}, ImageManager.SORT_DESCENDING);
-        uber.removeImageAt(1);
-        assertEquals(2, uber.getImageAt(0).fullSizeImageId());
-        assertEquals(0, uber.getImageAt(1).fullSizeImageId());
-
-        assertEquals(0, uber.getImageIndex(uber.getImageAt(0)));
-        assertEquals(1, uber.getImageIndex(uber.getImageAt(1)));
-        uber.close();
-    }
-}