summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AndroidManifest.xml55
-rw-r--r--res/anim/footer_appear.xml25
-rw-r--r--res/anim/footer_disappear.xml25
-rw-r--r--res/anim/slide_in.xml21
-rw-r--r--res/anim/slide_in_vertical.xml21
-rw-r--r--res/anim/slide_out.xml21
-rw-r--r--res/anim/slide_out_vertical.xml21
-rw-r--r--res/anim/transition_in.xml24
-rw-r--r--res/anim/transition_out.xml25
-rw-r--r--res/drawable-hdpi/appwidget_bg.9.pngbin2658 -> 0 bytes
-rw-r--r--res/drawable-hdpi/btn_check_buttonless_off.pngbin1246 -> 0 bytes
-rw-r--r--res/drawable-hdpi/btn_check_buttonless_on.pngbin1451 -> 0 bytes
-rw-r--r--res/drawable-hdpi/camera_crop_height.pngbin2901 -> 0 bytes
-rw-r--r--res/drawable-hdpi/camera_crop_width.pngbin2908 -> 0 bytes
-rw-r--r--res/drawable-hdpi/frame_gallery_preview_album.pngbin3104 -> 0 bytes
-rw-r--r--res/drawable-hdpi/frame_gallery_preview_album_mask.pngbin861 -> 0 bytes
-rw-r--r--res/drawable-hdpi/frame_gallery_preview_album_pressed.pngbin2820 -> 0 bytes
-rw-r--r--res/drawable-hdpi/frame_gallery_preview_album_selected.pngbin2777 -> 0 bytes
-rw-r--r--res/drawable-hdpi/frame_overlay_gallery_camera.pngbin2762 -> 0 bytes
-rw-r--r--res/drawable-hdpi/frame_overlay_gallery_folder.pngbin1766 -> 0 bytes
-rw-r--r--res/drawable-hdpi/frame_overlay_gallery_video.pngbin2099 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_btn_actionmenu_attach_default.pngbin4547 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_btn_actionmenu_attach_pressed.pngbin5464 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_btn_actionmenu_attach_selected.pngbin5368 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_btn_actionmenu_cancel_default.pngbin4515 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_btn_actionmenu_cancel_pressed.pngbin5873 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_btn_actionmenu_cancel_selected.pngbin5897 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_btn_actionmenu_play_default.pngbin3263 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_btn_actionmenu_play_pressed.pngbin4440 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_btn_actionmenu_play_selected.pngbin4503 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_error_mms_video_overlay.pngbin1465 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_gallery_empty2.pngbin4129 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_gallery_video_overlay.pngbin564 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_launcher_gallery.pngbin4319 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_menu_camera_video_view.pngbin2962 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_menu_multiselect_gallery.pngbin2829 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_missing_thumbnail_picture.pngbin3213 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_missing_thumbnail_video.pngbin3605 -> 0 bytes
-rw-r--r--res/drawable-hdpi/image_border_bg_focus_blue.9.pngbin820 -> 0 bytes
-rw-r--r--res/drawable-hdpi/image_border_bg_normal.9.pngbin666 -> 0 bytes
-rw-r--r--res/drawable-hdpi/image_border_bg_pressed_blue.9.pngbin815 -> 0 bytes
-rw-r--r--res/drawable-hdpi/indicator_autocrop.pngbin3266 -> 0 bytes
-rw-r--r--res/drawable-hdpi/photo_inner.9.pngbin412 -> 0 bytes
-rw-r--r--res/drawable-mdpi/appwidget_bg.9.pngbin1736 -> 0 bytes
-rwxr-xr-xres/drawable-mdpi/btn_check_buttonless_off.pngbin716 -> 0 bytes
-rwxr-xr-xres/drawable-mdpi/btn_check_buttonless_on.pngbin914 -> 0 bytes
-rw-r--r--res/drawable-mdpi/camera_crop_height.pngbin2100 -> 0 bytes
-rw-r--r--res/drawable-mdpi/camera_crop_width.pngbin2085 -> 0 bytes
-rw-r--r--res/drawable-mdpi/frame_gallery_preview_album.pngbin3158 -> 0 bytes
-rw-r--r--res/drawable-mdpi/frame_gallery_preview_album_mask.pngbin624 -> 0 bytes
-rw-r--r--res/drawable-mdpi/frame_gallery_preview_album_pressed.pngbin3122 -> 0 bytes
-rw-r--r--res/drawable-mdpi/frame_gallery_preview_album_selected.pngbin2432 -> 0 bytes
-rw-r--r--res/drawable-mdpi/frame_overlay_gallery_camera.pngbin1922 -> 0 bytes
-rw-r--r--res/drawable-mdpi/frame_overlay_gallery_folder.pngbin1143 -> 0 bytes
-rw-r--r--res/drawable-mdpi/frame_overlay_gallery_video.pngbin1046 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_btn_actionmenu_attach_default.pngbin2720 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_btn_actionmenu_attach_pressed.pngbin3148 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_btn_actionmenu_attach_selected.pngbin3157 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_btn_actionmenu_cancel_default.pngbin2387 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_btn_actionmenu_cancel_pressed.pngbin2982 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_btn_actionmenu_cancel_selected.pngbin2976 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_btn_actionmenu_play_default.pngbin1622 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_btn_actionmenu_play_pressed.pngbin2138 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_btn_actionmenu_play_selected.pngbin2153 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_error_mms_video_overlay.pngbin4362 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_gallery_empty2.pngbin2718 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_gallery_video_overlay.pngbin365 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_launcher_gallery.pngbin3040 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_menu_camera_video_view.pngbin1474 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_menu_multiselect_gallery.pngbin1645 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_missing_thumbnail_picture.pngbin1896 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_missing_thumbnail_video.pngbin2198 -> 0 bytes
-rw-r--r--res/drawable-mdpi/image_border_bg_focus_blue.9.pngbin3618 -> 0 bytes
-rw-r--r--res/drawable-mdpi/image_border_bg_normal.9.pngbin3423 -> 0 bytes
-rw-r--r--res/drawable-mdpi/image_border_bg_pressed_blue.9.pngbin3418 -> 0 bytes
-rw-r--r--res/drawable-mdpi/indicator_autocrop.pngbin3225 -> 0 bytes
-rw-r--r--res/drawable-mdpi/photo_inner.9.pngbin3000 -> 0 bytes
-rw-r--r--res/drawable/frame_gallery_preview.xml31
-rw-r--r--res/drawable/grid_background.xml24
-rw-r--r--res/drawable/ic_menu_attach.xml23
-rw-r--r--res/drawable/ic_menu_camera_play.xml24
-rw-r--r--res/drawable/ic_menu_cancel.xml23
-rw-r--r--res/layout/camera.xml2
-rw-r--r--res/layout/cropimage.xml57
-rw-r--r--res/layout/custom_gallery_title.xml30
-rw-r--r--res/layout/delete_image.xml26
-rw-r--r--res/layout/details.xml159
-rw-r--r--res/layout/gallery_picker_item.xml40
-rw-r--r--res/layout/gallerypicker.xml33
-rw-r--r--res/layout/gallerypicker_no_images.xml45
-rw-r--r--res/layout/image_gallery.xml96
-rw-r--r--res/layout/movie_view.xml47
-rw-r--r--res/layout/photo_frame.xml34
-rw-r--r--res/layout/viewimage.xml118
-rw-r--r--res/values-cs/strings.xml90
-rw-r--r--res/values-da/strings.xml106
-rw-r--r--res/values-de/strings.xml90
-rw-r--r--res/values-el/strings.xml90
-rw-r--r--res/values-es-rUS/strings.xml90
-rw-r--r--res/values-es/strings.xml90
-rw-r--r--res/values-fr/strings.xml90
-rw-r--r--res/values-it/strings.xml90
-rw-r--r--res/values-ja/strings.xml90
-rw-r--r--res/values-ko/strings.xml90
-rw-r--r--res/values-land/dimens.xml2
-rw-r--r--res/values-nb/strings.xml90
-rw-r--r--res/values-nl/strings.xml90
-rw-r--r--res/values-pl/strings.xml90
-rw-r--r--res/values-pt-rPT/strings.xml90
-rw-r--r--res/values-pt/strings.xml90
-rw-r--r--res/values-ru/strings.xml90
-rw-r--r--res/values-sv/strings.xml90
-rw-r--r--res/values-tr/strings.xml90
-rw-r--r--res/values-zh-rCN/strings.xml94
-rw-r--r--res/values-zh-rTW/strings.xml92
-rw-r--r--res/values/arrays.xml8
-rw-r--r--res/values/colors.xml1
-rw-r--r--res/values/dimens.xml2
-rw-r--r--res/values/strings.xml272
-rw-r--r--res/values/styles.xml19
-rw-r--r--res/xml/appwidget_info.xml24
-rw-r--r--res/xml/gallery_preferences.xml90
-rw-r--r--src/com/android/camera/ActionMenuButton.java87
-rw-r--r--src/com/android/camera/BitmapCache.java126
-rw-r--r--src/com/android/camera/BitmapManager.java83
-rw-r--r--src/com/android/camera/Camera.java26
-rw-r--r--src/com/android/camera/CameraButtonIntentReceiver.java17
-rw-r--r--src/com/android/camera/CameraHardwareException.java8
-rw-r--r--src/com/android/camera/CameraHolder.java33
-rw-r--r--src/com/android/camera/CameraSettings.java19
-rw-r--r--src/com/android/camera/CropImage.java792
-rw-r--r--src/com/android/camera/DeleteImage.java83
-rw-r--r--src/com/android/camera/EvenlySpacedLayout.java9
-rw-r--r--src/com/android/camera/GalleryPicker.java943
-rw-r--r--src/com/android/camera/GalleryPickerItem.java101
-rw-r--r--src/com/android/camera/GallerySettings.java32
-rw-r--r--src/com/android/camera/GridViewSpecial.java1169
-rw-r--r--src/com/android/camera/HighlightView.java410
-rw-r--r--src/com/android/camera/IconIndicator.java5
-rw-r--r--src/com/android/camera/IconListPreference.java1
-rw-r--r--src/com/android/camera/ImageGallery.java1018
-rw-r--r--src/com/android/camera/ImageGetter.java4
-rw-r--r--src/com/android/camera/ImageLoader.java175
-rw-r--r--src/com/android/camera/ImageManager.java44
-rw-r--r--src/com/android/camera/ImageViewTouchBase.java25
-rw-r--r--src/com/android/camera/MenuHelper.java99
-rw-r--r--src/com/android/camera/MonitoredActivity.java90
-rw-r--r--src/com/android/camera/MovieView.java76
-rw-r--r--src/com/android/camera/MovieViewControl.java240
-rw-r--r--src/com/android/camera/NoSearchActivity.java (renamed from src/com/android/camera/DrmWallpaper.java)18
-rw-r--r--src/com/android/camera/OnScreenHint.java4
-rw-r--r--src/com/android/camera/OnScreenSettings.java33
-rw-r--r--src/com/android/camera/PhotoAppWidgetBind.java76
-rw-r--r--src/com/android/camera/PhotoAppWidgetConfigure.java104
-rw-r--r--src/com/android/camera/PhotoAppWidgetProvider.java209
-rw-r--r--src/com/android/camera/PickWallpaper.java24
-rw-r--r--src/com/android/camera/PreviewFrameLayout.java5
-rw-r--r--src/com/android/camera/ReverseGeocoderTask.java15
-rw-r--r--src/com/android/camera/ReviewImage.java43
-rw-r--r--src/com/android/camera/RotateBitmap.java11
-rw-r--r--src/com/android/camera/ShutterButton.java7
-rw-r--r--src/com/android/camera/Switcher.java19
-rw-r--r--src/com/android/camera/ThumbnailController.java13
-rw-r--r--src/com/android/camera/Util.java170
-rw-r--r--src/com/android/camera/VideoCamera.java78
-rw-r--r--src/com/android/camera/ViewImage.java1291
-rw-r--r--src/com/android/camera/Wallpaper.java75
-rw-r--r--src/com/android/camera/gallery/BaseImage.java10
-rw-r--r--src/com/android/camera/gallery/BaseImageList.java1
-rw-r--r--src/com/android/camera/gallery/DrmImageList.java2
-rw-r--r--src/com/android/camera/gallery/IImage.java1
-rw-r--r--src/com/android/camera/gallery/IImageList.java8
-rw-r--r--src/com/android/camera/gallery/Image.java5
-rw-r--r--src/com/android/camera/gallery/ImageList.java25
-rw-r--r--src/com/android/camera/gallery/ImageListUber.java17
-rw-r--r--src/com/android/camera/gallery/LruCache.java4
-rw-r--r--src/com/android/camera/gallery/SingleImageList.java10
-rw-r--r--src/com/android/camera/gallery/UriImage.java4
-rw-r--r--src/com/android/camera/gallery/VideoList.java23
-rw-r--r--src/com/android/camera/gallery/VideoObject.java15
-rw-r--r--tests/src/com/android/camera/BitmapManagerUnitTests.java8
-rw-r--r--tests/src/com/android/camera/gallery/ImageListUberUnitTests.java89
182 files changed, 455 insertions, 10967 deletions
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 b35761c..e6b3b47 100644
--- a/res/layout/camera.xml
+++ b/res/layout/camera.xml
@@ -72,7 +72,7 @@
<com.android.camera.IconIndicator
style="@style/IconIndicator"
android:id="@+id/flash_icon"
- camera:modes="@array/pref_camera_flashmode_entryvalues"
+ camera:modes="@array/flash_modes"
camera:icons="@array/flash_icons"/>
</LinearLayout>
</FrameLayout>
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 2e128fa..3260125 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -17,45 +17,27 @@
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">"Indstillinger for kamera"</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">"Angiver 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">"Angiv som"</string>
+ <string name="review_set" msgid="8304758352155378636">"INDSTIL SOM"</string>
<string name="review_play" msgid="6015456244323302817">"AFSPIL"</string>
<string name="review_cancel" msgid="8188009385853399254">"ANNULLER"</string>
<string name="review_done" msgid="5417465988786728114">"FÆRDIG"</string>
@@ -63,69 +45,26 @@
<string name="review_retake" msgid="7804864054896088338">"TAG IGEN"</string>
<string name="camera_toss" msgid="3781186798552460833">"Slet"</string>
<string name="camera_share" msgid="8207701858325694182">"Del"</string>
- <string name="camera_set" msgid="3422192914806971182">"Angiv 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_set" msgid="3422192914806971182">"Indstil som"</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">"Indstillinger for diasshow"</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>
<string name="pref_camera_videoquality_title" msgid="4127153321803677407">"Videokvalitet"</string>
- <string name="pref_camera_videoquality_entry_0" msgid="6300182041472826848">"Lav (til mms-beskeder)"</string>
+ <string name="pref_camera_videoquality_entry_0" msgid="6300182041472826848">"Lav (til MMS-beskeder)"</string>
<string name="pref_camera_videoquality_entry_1" msgid="6742349839919099735">"Høj (til SD-kort)"</string>
<string name="pref_camera_videoquality_dialogtitle" msgid="9154437474111181737">"Videokvalitet"</string>
<string name="pref_camera_video_duration_title" msgid="8049279326917441484">"Varighed på video"</string>
- <string name="pref_camera_video_duration_entry_mms" msgid="9067623003661464481">"<xliff:g id="DURATION">%1$d</xliff:g> sekunder (til mms)"</string>
+ <string name="pref_camera_video_duration_entry_mms" msgid="9067623003661464481">"<xliff:g id="DURATION">%1$d</xliff:g> sekunder (til MMS)"</string>
<string name="pref_camera_video_duration_entry_10" msgid="664455443394175885">"10 minutter"</string>
<string name="pref_camera_video_duration_entry_30" msgid="1197298883102352735">"30 minutter"</string>
<string name="pref_camera_video_duration_dialogtitle" msgid="5762031980003877975">"Varighed på video"</string>
- <string name="pref_camera_settings_category" msgid="2576236450859613120">"Indstillinger for kamera"</string>
- <string name="pref_camcorder_settings_category" msgid="460313486231965141">"Indstillinger for videokamera"</string>
+ <string name="pref_camera_settings_category" msgid="2576236450859613120">"Kameraindstillinger"</string>
+ <string name="pref_camcorder_settings_category" msgid="460313486231965141">"Videokameraindstillinger"</string>
<string name="pref_camera_picturesize_title" msgid="4333724936665883006">"Billedstørrelse"</string>
<string name="pref_camera_picturesize_entry_2592x1936" msgid="1871154452633783418">"5 M pixels"</string>
<string name="pref_camera_picturesize_entry_2048x1536" msgid="8763841848102861602">"3 M pixels"</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 en 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">"Indstillinger for billede"</string>
- <string name="video_context_menu_header" msgid="7318971116949475029">"Indstillinger for video"</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">"Angiv billedet som"</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">"Der er snart ikke mere plads på diit SD-kort. Rediger indstillingerne for kvaliteten, 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="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="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 d5724ed..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">"Sel. cuánto tiempo se visualizará cada diapositiva en la present."</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."</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 present. .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 cd399d6..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élect. durée d\'affichage de chaque diapositive dans 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élect. 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 b38c237..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 presentaz."</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 71fbc1d..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 f314a32..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,60 +46,17 @@
<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>
<string name="pref_camera_videoquality_title" msgid="4127153321803677407">"视频画质"</string>
<string name="pref_camera_videoquality_entry_0" msgid="6300182041472826848">"低(对于彩信)"</string>
- <string name="pref_camera_videoquality_entry_1" msgid="6742349839919099735">"高(适用于 SD 卡)"</string>
+ <string name="pref_camera_videoquality_entry_1" msgid="6742349839919099735">"高(对于 SD 卡)"</string>
<string name="pref_camera_videoquality_dialogtitle" msgid="9154437474111181737">"视频画质"</string>
<string name="pref_camera_video_duration_title" msgid="8049279326917441484">"视频时长"</string>
<string name="pref_camera_video_duration_entry_mms" msgid="9067623003661464481">"<xliff:g id="DURATION">%1$d</xliff:g> 秒(对于彩信)"</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="spaceIsLow_content" msgid="2848517537672543641">"SD 卡空间不足。请更改画质设置或从图库中删除部分项。"</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 2115430..e15f422 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -16,43 +16,25 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
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="cannot_connect_camera" msgid="8029009101380114174">"無法連線至相機。"</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 77f9154..746f015 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>@null</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 e18658d..04bd634 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 @@ public class BitmapManager {
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 @@ public class BitmapManager {
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 @@ public class BitmapManager {
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 @@ public class BitmapManager {
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 @@ public class BitmapManager {
// 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 22612ce..b60639f 100644
--- a/src/com/android/camera/Camera.java
+++ b/src/com/android/camera/Camera.java
@@ -80,16 +80,17 @@ import java.util.ArrayList;
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;
@@ -204,8 +205,9 @@ public class Camera extends Activity implements View.OnClickListener,
public long mPictureDisplayedToJpegCallbackTime;
public long mJpegCallbackToFirstFrameTime;
- // Add the media server tag
+ // Add for test
public static boolean mMediaServerDied = false;
+
// Focus mode. Options are pref_camera_focusmode_entryvalues.
private String mFocusMode;
@@ -683,7 +685,7 @@ public class Camera extends Activity implements View.OnClickListener,
}
}
- private final class ErrorCallback
+ private static final class ErrorCallback
implements android.hardware.Camera.ErrorCallback {
public void onError(int error, android.hardware.Camera camera) {
if (error == android.hardware.Camera.CAMERA_ERROR_SERVER_DIED) {
@@ -862,7 +864,7 @@ public class Camera extends Activity implements View.OnClickListener,
}
}
- public boolean saveDataToFile(String filePath, byte[] data) {
+ private boolean saveDataToFile(String filePath, byte[] data) {
FileOutputStream f = null;
try {
f = new FileOutputStream(filePath);
@@ -1062,7 +1064,7 @@ public class Camera extends Activity implements View.OnClickListener,
}
// 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;
}
@@ -1701,9 +1703,9 @@ public class Camera extends Activity implements View.OnClickListener,
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 {
@@ -1803,7 +1805,7 @@ public class Camera extends Activity implements View.OnClickListener,
} 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.BroadcastReceiver;
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 @@ public class CameraButtonIntentReceiver extends BroadcastReceiver {
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..a4c1537 100644
--- a/src/com/android/camera/CameraHolder.java
+++ b/src/com/android/camera/CameraHolder.java
@@ -28,17 +28,19 @@ import android.util.Log;
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;
@@ -71,7 +73,14 @@ public class CameraHolder {
public void handleMessage(Message msg) {
switch(msg.what) {
case RELEASE_CAMERA:
- releaseCamera();
+ synchronized (CameraHolder.this) {
+ // In 'CameraHolder.open', the 'RELEASE_CAMERA' message
+ // will be removed if it is found in the queue. However,
+ // there is a chance that this message has been handled
+ // before being removed. So, we need to add a check
+ // here:
+ if (CameraHolder.this.mUsers == 0) releaseCamera();
+ }
break;
}
}
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 android.util.Log;
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.util.AttributeSet;
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 e4500e4..b96f0b8 100644
--- a/src/com/android/camera/IconIndicator.java
+++ b/src/com/android/camera/IconIndicator.java
@@ -24,6 +24,11 @@ import android.util.AttributeSet;
import android.view.View;
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.graphics.drawable.Drawable;
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.graphics.Bitmap;
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 @@ class ImageGetter {
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..0a6fd2f 100644
--- a/src/com/android/camera/ImageManager.java
+++ b/src/com/android/camera/ImageManager.java
@@ -48,11 +48,10 @@ import java.io.FileOutputStream;
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 @@ public class ImageManager {
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 @@ public class ImageManager {
// 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 class ImageManager {
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 {
@@ -334,8 +339,7 @@ public class ImageManager {
if (haveSdCard && location != DataLocation.INTERNAL) {
if ((inclusion & INCLUDE_IMAGES) != 0) {
- l.add(new ImageList(
- cr, STORAGE_URI, THUMB_URI, sort, bucketId));
+ l.add(new ImageList(cr, STORAGE_URI, sort, bucketId));
}
if ((inclusion & INCLUDE_VIDEOS) != 0) {
l.add(new VideoList(cr, VIDEO_STORAGE_URI, sort, bucketId));
@@ -344,9 +348,7 @@ public class ImageManager {
if (location == DataLocation.INTERNAL || location == DataLocation.ALL) {
if ((inclusion & INCLUDE_IMAGES) != 0) {
l.add(new ImageList(cr,
- Images.Media.INTERNAL_CONTENT_URI,
- Images.Thumbnails.INTERNAL_CONTENT_URI,
- sort, bucketId));
+ Images.Media.INTERNAL_CONTENT_URI, sort, bucketId));
}
if ((inclusion & INCLUDE_DRM_IMAGES) != 0) {
l.add(new DrmImageList(
@@ -410,18 +412,10 @@ public class ImageManager {
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 +453,6 @@ public class ImageManager {
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 +460,6 @@ public class ImageManager {
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..5a9069a 100644
--- a/src/com/android/camera/ImageViewTouchBase.java
+++ b/src/com/android/camera/ImageViewTouchBase.java
@@ -114,11 +114,6 @@ abstract class ImageViewTouchBase extends ImageView {
return super.onKeyUp(keyCode, event);
}
- protected Handler mHandler = new Handler();
-
- protected int mLastXTouchPos;
- protected int mLastYTouchPos;
-
@Override
public void setImageBitmap(Bitmap bitmap) {
setImageBitmap(bitmap, 0);
@@ -320,26 +315,6 @@ abstract class ImageViewTouchBase extends ImageView {
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 class MenuHelper {
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 @@ public class MenuHelper {
}
/**
- * 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 @@ public class MenuHelper {
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 class MenuHelper {
}
}
- 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 @@ public class MenuHelper {
}
}
- 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 @@ public class MenuHelper {
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
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..54a2f64 100644
--- a/src/com/android/camera/OnScreenHint.java
+++ b/src/com/android/camera/OnScreenHint.java
@@ -35,13 +35,12 @@ import android.widget.TextView;
* 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";
static final boolean LOCAL_LOGV = false;
- final Context mContext;
int mGravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM;
int mX, mY;
float mHorizontalMargin;
@@ -63,7 +62,6 @@ public class OnScreenHint {
* {@link android.app.Activity} object.
*/
public OnScreenHint(Context context) {
- mContext = context;
mWM = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
mY = context.getResources().getDimensionPixelSize(
R.dimen.hint_y_offset);
diff --git a/src/com/android/camera/OnScreenSettings.java b/src/com/android/camera/OnScreenSettings.java
index ffd309d..55294b1 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.ListPreference;
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 android.widget.AdapterView.OnItemClickListener;
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);
}
@@ -49,7 +70,6 @@ public class OnScreenSettings {
private final View mOwnerView;
private ListView mMainMenu;
private ListView mSubMenu;
- private View mMainPanel;
private boolean mIsVisible = false;
private OnVisibilityChangedListener mVisibilityListener;
private MainMenuAdapter mMainAdapter;
@@ -195,7 +215,6 @@ public class OnScreenSettings {
mInflater.inflate(R.layout.on_screen_menu, container);
- mMainPanel = container.findViewById(R.id.main_panel);
mMainMenu = (ListView) container.findViewById(R.id.menu_view);
mSubMenu = (ListView) container.findViewById(R.id.sub_menu);
@@ -400,7 +419,7 @@ public class OnScreenSettings {
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.view.ViewGroup;
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 android.util.Log;
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 @@ public class ReverseGeocoderTask extends AsyncTask<Void, Void, String> {
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 @@ public class ReverseGeocoderTask extends AsyncTask<Void, Void, String> {
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.IImage;
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 @@ public class ReviewImage extends Activity implements View.OnClickListener {
@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 @@ public class ReviewImage extends Activity implements View.OnClickListener {
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
+ if (mPaused) return false;
showOnScreenControls();
scheduleDismissOnScreenControls();
return true;
@@ -297,6 +301,7 @@ public class ReviewImage extends Activity implements View.OnClickListener {
@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 @@ public class ReviewImage extends Activity implements View.OnClickListener {
}
}
- 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 @@ public class ReviewImage extends Activity implements View.OnClickListener {
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 @@ public class ReviewImage extends Activity implements View.OnClickListener {
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 @@ public class ReviewImage extends Activity implements View.OnClickListener {
}
private void updateActionIcons() {
- if (isPickIntent()) return;
IImage image = mAllImages.getImageAt(mCurrentPosition);
if (image instanceof VideoObject) {
@@ -787,16 +784,6 @@ class ImageViewTouch2 extends ImageViewTouchBase {
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 @@ package com.android.camera;
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 @@ import android.widget.ImageView;
/**
* 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.View;
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 @@ public class Switcher extends ImageView implements View.OnTouchListener {
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 @@ public class Switcher extends ImageView implements View.OnTouchListener {
private void startParkingAnimation() {
mAnimationStartTime = AnimationUtils.currentAnimationTimeMillis();
+ mAnimationStartPosition = mPosition;
}
private void trackTouchEvent(MotionEvent event) {
@@ -138,14 +145,14 @@ public class Switcher extends ImageView implements View.OnTouchListener {
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.FileInputStream;
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 @@ public class ThumbnailController {
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.Handler;
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 class Util {
public static final int DIRECTION_UP = 2;
public static final int DIRECTION_DOWN = 3;
- private static OnClickListener sNullOnClickListener;
-
private Util() {
}
@@ -141,103 +138,6 @@ public class Util {
}
}
- // 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 class Util {
}
}
- 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 @@ public class Util {
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 f065f90..8ef404c 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.ImageView;
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 @@ import java.util.HashMap;
/**
* 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,
@@ -225,7 +224,6 @@ public class VideoCamera extends Activity implements View.OnClickListener,
ress.getString(R.string.cannot_connect_camera));
}
- /** Called with the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
@@ -335,20 +333,6 @@ public class VideoCamera extends Activity implements View.OnClickListener,
}
}
- 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 {
@@ -358,7 +342,6 @@ public class VideoCamera extends Activity implements View.OnClickListener,
}
}
-
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_retake:
@@ -374,25 +357,11 @@ public class VideoCamera extends Activity implements View.OnClickListener,
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;
}
}
@@ -423,16 +392,6 @@ public class VideoCamera extends Activity implements View.OnClickListener,
}
}
- 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();
@@ -991,9 +950,17 @@ public class VideoCamera extends Activity implements View.OnClickListener,
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;
}
@@ -1304,7 +1271,8 @@ public class VideoCamera extends Activity implements View.OnClickListener,
}
private void acquireVideoThumb() {
- Bitmap videoFrame = ThumbnailUtil.createVideoThumbnail(mCurrentVideoFilename);
+ Bitmap videoFrame = ThumbnailUtil.createVideoThumbnail(
+ mCurrentVideoFilename);
mThumbController.setData(mCurrentVideoUri, videoFrame);
}
@@ -1386,13 +1354,6 @@ public class VideoCamera extends Activity implements View.OnClickListener,
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);
}
@@ -1435,6 +1396,7 @@ public class VideoCamera extends Activity implements View.OnClickListener,
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..fd41ab4 100644
--- a/src/com/android/camera/gallery/BaseImage.java
+++ b/src/com/android/camera/gallery/BaseImage.java
@@ -45,7 +45,6 @@ public abstract class BaseImage implements IImage {
protected Uri mUri;
protected long mId;
protected String mDataPath;
- protected long mMiniThumbMagic;
protected final int mIndex;
protected String mMimeType;
private final long mDateTaken;
@@ -66,7 +65,6 @@ public abstract class BaseImage implements IImage {
mIndex = index;
mUri = uri;
mDataPath = dataPath;
- mMiniThumbMagic = miniThumbMagic;
mMimeType = mimeType;
mDateTaken = dateTaken;
mTitle = title;
@@ -117,10 +115,6 @@ public abstract class BaseImage implements IImage {
}
}
- public long fullSizeImageId() {
- return mId;
- }
-
public Uri fullSizeImageUri() {
return mUri;
}
@@ -181,8 +175,8 @@ public abstract class BaseImage implements IImage {
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/BaseImageList.java b/src/com/android/camera/gallery/BaseImageList.java
index ce85753..cc42db7 100644
--- a/src/com/android/camera/gallery/BaseImageList.java
+++ b/src/com/android/camera/gallery/BaseImageList.java
@@ -43,7 +43,6 @@ public abstract class BaseImageList implements IImageList {
protected Uri mBaseUri;
protected Cursor mCursor;
protected String mBucketId;
- protected Uri mThumbUri;
protected boolean mCursorDeactivated = false;
public BaseImageList(ContentResolver resolver, Uri uri, int sort,
diff --git a/src/com/android/camera/gallery/DrmImageList.java b/src/com/android/camera/gallery/DrmImageList.java
index 3acd43c..f745977 100644
--- a/src/com/android/camera/gallery/DrmImageList.java
+++ b/src/com/android/camera/gallery/DrmImageList.java
@@ -40,7 +40,7 @@ public class DrmImageList extends ImageList implements IImageList {
public DrmImageList(ContentResolver resolver, Uri imageUri, int sort,
String bucketId) {
- super(resolver, imageUri, null, sort, bucketId);
+ super(resolver, imageUri, sort, bucketId);
}
@Override
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 @@ public interface IImage {
/** 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 @@ package com.android.camera.gallery;
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 @@ import java.util.HashMap;
* 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 interface IImageList {
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 @@ public class Image extends BaseImage implements IImage {
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..bc9d7ca 100644
--- a/src/com/android/camera/gallery/ImageList.java
+++ b/src/com/android/camera/gallery/ImageList.java
@@ -21,8 +21,6 @@ import android.database.Cursor;
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,33 +33,12 @@ public class ImageList extends BaseImageList implements IImageList {
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.
*/
- public ImageList(ContentResolver resolver, Uri imageUri, Uri thumbUri,
+ public ImageList(ContentResolver resolver, Uri imageUri,
int sort, String bucketId) {
super(resolver, imageUri, sort, bucketId);
- mThumbUri = thumbUri;
}
private static final String WHERE_CLAUSE =
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 com.android.camera.Util;
import java.util.Arrays;
import java.util.Comparator;
-import java.util.HashMap;
import java.util.PriorityQueue;
/**
@@ -68,14 +67,6 @@ public class ImageListUber implements IImageList {
}
}
- 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 @@ public class ImageListUber implements IImageList {
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.HashMap;
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 @@ package com.android.camera.gallery;
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 @@ public class SingleImageList implements IImageList {
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 @@ class UriImage implements IImage {
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.net.Uri;
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 @@ public class VideoList extends BaseImageList {
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 @@ public class VideoObject extends BaseImage implements IImage {
}
@Override
- public long fullSizeImageId() {
- return mId;
- }
-
- @Override
public int getHeight() {
return 0;
}
@@ -110,8 +107,8 @@ public class VideoObject extends BaseImage implements IImage {
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 class VideoObject extends BaseImage implements IImage {
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 @@ public class BitmapManagerUnitTests extends AndroidTestCase {
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 class BitmapManagerUnitTests extends AndroidTestCase {
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 class BitmapManagerUnitTests extends AndroidTestCase {
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 @@ public class BitmapManagerUnitTests extends AndroidTestCase {
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();
- }
-}