diff options
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 Binary files differdeleted file mode 100644 index 6861664..0000000 --- a/res/drawable-hdpi/appwidget_bg.9.png +++ /dev/null diff --git a/res/drawable-hdpi/btn_check_buttonless_off.png b/res/drawable-hdpi/btn_check_buttonless_off.png Binary files differdeleted file mode 100644 index bf58886..0000000 --- a/res/drawable-hdpi/btn_check_buttonless_off.png +++ /dev/null diff --git a/res/drawable-hdpi/btn_check_buttonless_on.png b/res/drawable-hdpi/btn_check_buttonless_on.png Binary files differdeleted file mode 100644 index 324a6b0..0000000 --- a/res/drawable-hdpi/btn_check_buttonless_on.png +++ /dev/null diff --git a/res/drawable-hdpi/camera_crop_height.png b/res/drawable-hdpi/camera_crop_height.png Binary files differdeleted file mode 100644 index dc157ed..0000000 --- a/res/drawable-hdpi/camera_crop_height.png +++ /dev/null diff --git a/res/drawable-hdpi/camera_crop_width.png b/res/drawable-hdpi/camera_crop_width.png Binary files differdeleted file mode 100644 index b3f4ee0..0000000 --- a/res/drawable-hdpi/camera_crop_width.png +++ /dev/null diff --git a/res/drawable-hdpi/frame_gallery_preview_album.png b/res/drawable-hdpi/frame_gallery_preview_album.png Binary files differdeleted file mode 100644 index acbd437..0000000 --- a/res/drawable-hdpi/frame_gallery_preview_album.png +++ /dev/null diff --git a/res/drawable-hdpi/frame_gallery_preview_album_mask.png b/res/drawable-hdpi/frame_gallery_preview_album_mask.png Binary files differdeleted file mode 100644 index ff4ba21..0000000 --- a/res/drawable-hdpi/frame_gallery_preview_album_mask.png +++ /dev/null diff --git a/res/drawable-hdpi/frame_gallery_preview_album_pressed.png b/res/drawable-hdpi/frame_gallery_preview_album_pressed.png Binary files differdeleted file mode 100644 index a974c6b..0000000 --- a/res/drawable-hdpi/frame_gallery_preview_album_pressed.png +++ /dev/null diff --git a/res/drawable-hdpi/frame_gallery_preview_album_selected.png b/res/drawable-hdpi/frame_gallery_preview_album_selected.png Binary files differdeleted file mode 100644 index b95c6b7..0000000 --- a/res/drawable-hdpi/frame_gallery_preview_album_selected.png +++ /dev/null diff --git a/res/drawable-hdpi/frame_overlay_gallery_camera.png b/res/drawable-hdpi/frame_overlay_gallery_camera.png Binary files differdeleted file mode 100644 index 729c4c9..0000000 --- a/res/drawable-hdpi/frame_overlay_gallery_camera.png +++ /dev/null diff --git a/res/drawable-hdpi/frame_overlay_gallery_folder.png b/res/drawable-hdpi/frame_overlay_gallery_folder.png Binary files differdeleted file mode 100644 index 508fe51..0000000 --- a/res/drawable-hdpi/frame_overlay_gallery_folder.png +++ /dev/null diff --git a/res/drawable-hdpi/frame_overlay_gallery_video.png b/res/drawable-hdpi/frame_overlay_gallery_video.png Binary files differdeleted file mode 100644 index 3249754..0000000 --- a/res/drawable-hdpi/frame_overlay_gallery_video.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_btn_actionmenu_attach_default.png b/res/drawable-hdpi/ic_btn_actionmenu_attach_default.png Binary files differdeleted file mode 100644 index 9bb1bc6..0000000 --- a/res/drawable-hdpi/ic_btn_actionmenu_attach_default.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_btn_actionmenu_attach_pressed.png b/res/drawable-hdpi/ic_btn_actionmenu_attach_pressed.png Binary files differdeleted file mode 100644 index 0614764..0000000 --- a/res/drawable-hdpi/ic_btn_actionmenu_attach_pressed.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_btn_actionmenu_attach_selected.png b/res/drawable-hdpi/ic_btn_actionmenu_attach_selected.png Binary files differdeleted file mode 100644 index a5e1ddc..0000000 --- a/res/drawable-hdpi/ic_btn_actionmenu_attach_selected.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_btn_actionmenu_cancel_default.png b/res/drawable-hdpi/ic_btn_actionmenu_cancel_default.png Binary files differdeleted file mode 100644 index 04fe74b..0000000 --- a/res/drawable-hdpi/ic_btn_actionmenu_cancel_default.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_btn_actionmenu_cancel_pressed.png b/res/drawable-hdpi/ic_btn_actionmenu_cancel_pressed.png Binary files differdeleted file mode 100644 index ec3a9d9..0000000 --- a/res/drawable-hdpi/ic_btn_actionmenu_cancel_pressed.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_btn_actionmenu_cancel_selected.png b/res/drawable-hdpi/ic_btn_actionmenu_cancel_selected.png Binary files differdeleted file mode 100644 index 33a9ee0..0000000 --- a/res/drawable-hdpi/ic_btn_actionmenu_cancel_selected.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_btn_actionmenu_play_default.png b/res/drawable-hdpi/ic_btn_actionmenu_play_default.png Binary files differdeleted file mode 100644 index f8c2c62..0000000 --- a/res/drawable-hdpi/ic_btn_actionmenu_play_default.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_btn_actionmenu_play_pressed.png b/res/drawable-hdpi/ic_btn_actionmenu_play_pressed.png Binary files differdeleted file mode 100644 index 2411d54..0000000 --- a/res/drawable-hdpi/ic_btn_actionmenu_play_pressed.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_btn_actionmenu_play_selected.png b/res/drawable-hdpi/ic_btn_actionmenu_play_selected.png Binary files differdeleted file mode 100644 index 33cb377..0000000 --- a/res/drawable-hdpi/ic_btn_actionmenu_play_selected.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_error_mms_video_overlay.png b/res/drawable-hdpi/ic_error_mms_video_overlay.png Binary files differdeleted file mode 100644 index df0564e..0000000 --- a/res/drawable-hdpi/ic_error_mms_video_overlay.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_gallery_empty2.png b/res/drawable-hdpi/ic_gallery_empty2.png Binary files differdeleted file mode 100644 index 7658372..0000000 --- a/res/drawable-hdpi/ic_gallery_empty2.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_gallery_video_overlay.png b/res/drawable-hdpi/ic_gallery_video_overlay.png Binary files differdeleted file mode 100644 index 0e3370e..0000000 --- a/res/drawable-hdpi/ic_gallery_video_overlay.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_launcher_gallery.png b/res/drawable-hdpi/ic_launcher_gallery.png Binary files differdeleted file mode 100644 index 3e39baa..0000000 --- a/res/drawable-hdpi/ic_launcher_gallery.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_menu_camera_video_view.png b/res/drawable-hdpi/ic_menu_camera_video_view.png Binary files differdeleted file mode 100644 index 47bdfb6..0000000 --- a/res/drawable-hdpi/ic_menu_camera_video_view.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_menu_multiselect_gallery.png b/res/drawable-hdpi/ic_menu_multiselect_gallery.png Binary files differdeleted file mode 100644 index cdc83f3..0000000 --- a/res/drawable-hdpi/ic_menu_multiselect_gallery.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_missing_thumbnail_picture.png b/res/drawable-hdpi/ic_missing_thumbnail_picture.png Binary files differdeleted file mode 100644 index f16b041..0000000 --- a/res/drawable-hdpi/ic_missing_thumbnail_picture.png +++ /dev/null diff --git a/res/drawable-hdpi/ic_missing_thumbnail_video.png b/res/drawable-hdpi/ic_missing_thumbnail_video.png Binary files differdeleted file mode 100644 index f6bff4e..0000000 --- a/res/drawable-hdpi/ic_missing_thumbnail_video.png +++ /dev/null diff --git a/res/drawable-hdpi/image_border_bg_focus_blue.9.png b/res/drawable-hdpi/image_border_bg_focus_blue.9.png Binary files differdeleted file mode 100644 index cd6cde0..0000000 --- a/res/drawable-hdpi/image_border_bg_focus_blue.9.png +++ /dev/null diff --git a/res/drawable-hdpi/image_border_bg_normal.9.png b/res/drawable-hdpi/image_border_bg_normal.9.png Binary files differdeleted file mode 100644 index 571c5dd..0000000 --- a/res/drawable-hdpi/image_border_bg_normal.9.png +++ /dev/null diff --git a/res/drawable-hdpi/image_border_bg_pressed_blue.9.png b/res/drawable-hdpi/image_border_bg_pressed_blue.9.png Binary files differdeleted file mode 100644 index 36ccfb0..0000000 --- a/res/drawable-hdpi/image_border_bg_pressed_blue.9.png +++ /dev/null diff --git a/res/drawable-hdpi/indicator_autocrop.png b/res/drawable-hdpi/indicator_autocrop.png Binary files differdeleted file mode 100644 index 73fa59e..0000000 --- a/res/drawable-hdpi/indicator_autocrop.png +++ /dev/null diff --git a/res/drawable-hdpi/photo_inner.9.png b/res/drawable-hdpi/photo_inner.9.png Binary files differdeleted file mode 100644 index 8d27225..0000000 --- a/res/drawable-hdpi/photo_inner.9.png +++ /dev/null diff --git a/res/drawable-mdpi/appwidget_bg.9.png b/res/drawable-mdpi/appwidget_bg.9.png Binary files differdeleted file mode 100644 index 8e7e3d7..0000000 --- a/res/drawable-mdpi/appwidget_bg.9.png +++ /dev/null diff --git a/res/drawable-mdpi/btn_check_buttonless_off.png b/res/drawable-mdpi/btn_check_buttonless_off.png Binary files differdeleted file mode 100755 index 45216dd..0000000 --- a/res/drawable-mdpi/btn_check_buttonless_off.png +++ /dev/null diff --git a/res/drawable-mdpi/btn_check_buttonless_on.png b/res/drawable-mdpi/btn_check_buttonless_on.png Binary files differdeleted file mode 100755 index adf09fb..0000000 --- a/res/drawable-mdpi/btn_check_buttonless_on.png +++ /dev/null diff --git a/res/drawable-mdpi/camera_crop_height.png b/res/drawable-mdpi/camera_crop_height.png Binary files differdeleted file mode 100644 index b089aec..0000000 --- a/res/drawable-mdpi/camera_crop_height.png +++ /dev/null diff --git a/res/drawable-mdpi/camera_crop_width.png b/res/drawable-mdpi/camera_crop_width.png Binary files differdeleted file mode 100644 index 65216af..0000000 --- a/res/drawable-mdpi/camera_crop_width.png +++ /dev/null diff --git a/res/drawable-mdpi/frame_gallery_preview_album.png b/res/drawable-mdpi/frame_gallery_preview_album.png Binary files differdeleted file mode 100644 index 5b92ee2..0000000 --- a/res/drawable-mdpi/frame_gallery_preview_album.png +++ /dev/null diff --git a/res/drawable-mdpi/frame_gallery_preview_album_mask.png b/res/drawable-mdpi/frame_gallery_preview_album_mask.png Binary files differdeleted file mode 100644 index b053f30..0000000 --- a/res/drawable-mdpi/frame_gallery_preview_album_mask.png +++ /dev/null diff --git a/res/drawable-mdpi/frame_gallery_preview_album_pressed.png b/res/drawable-mdpi/frame_gallery_preview_album_pressed.png Binary files differdeleted file mode 100644 index e3575ff..0000000 --- a/res/drawable-mdpi/frame_gallery_preview_album_pressed.png +++ /dev/null diff --git a/res/drawable-mdpi/frame_gallery_preview_album_selected.png b/res/drawable-mdpi/frame_gallery_preview_album_selected.png Binary files differdeleted file mode 100644 index 222a38a..0000000 --- a/res/drawable-mdpi/frame_gallery_preview_album_selected.png +++ /dev/null diff --git a/res/drawable-mdpi/frame_overlay_gallery_camera.png b/res/drawable-mdpi/frame_overlay_gallery_camera.png Binary files differdeleted file mode 100644 index e0c24a6..0000000 --- a/res/drawable-mdpi/frame_overlay_gallery_camera.png +++ /dev/null diff --git a/res/drawable-mdpi/frame_overlay_gallery_folder.png b/res/drawable-mdpi/frame_overlay_gallery_folder.png Binary files differdeleted file mode 100644 index 05f64cc..0000000 --- a/res/drawable-mdpi/frame_overlay_gallery_folder.png +++ /dev/null diff --git a/res/drawable-mdpi/frame_overlay_gallery_video.png b/res/drawable-mdpi/frame_overlay_gallery_video.png Binary files differdeleted file mode 100644 index 4b84854..0000000 --- a/res/drawable-mdpi/frame_overlay_gallery_video.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_btn_actionmenu_attach_default.png b/res/drawable-mdpi/ic_btn_actionmenu_attach_default.png Binary files differdeleted file mode 100644 index c8f7ec7..0000000 --- a/res/drawable-mdpi/ic_btn_actionmenu_attach_default.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_btn_actionmenu_attach_pressed.png b/res/drawable-mdpi/ic_btn_actionmenu_attach_pressed.png Binary files differdeleted file mode 100644 index 7753e5b..0000000 --- a/res/drawable-mdpi/ic_btn_actionmenu_attach_pressed.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_btn_actionmenu_attach_selected.png b/res/drawable-mdpi/ic_btn_actionmenu_attach_selected.png Binary files differdeleted file mode 100644 index ca7e775..0000000 --- a/res/drawable-mdpi/ic_btn_actionmenu_attach_selected.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_btn_actionmenu_cancel_default.png b/res/drawable-mdpi/ic_btn_actionmenu_cancel_default.png Binary files differdeleted file mode 100644 index ac7169a..0000000 --- a/res/drawable-mdpi/ic_btn_actionmenu_cancel_default.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_btn_actionmenu_cancel_pressed.png b/res/drawable-mdpi/ic_btn_actionmenu_cancel_pressed.png Binary files differdeleted file mode 100644 index ecb1a1f..0000000 --- a/res/drawable-mdpi/ic_btn_actionmenu_cancel_pressed.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_btn_actionmenu_cancel_selected.png b/res/drawable-mdpi/ic_btn_actionmenu_cancel_selected.png Binary files differdeleted file mode 100644 index 235ee88..0000000 --- a/res/drawable-mdpi/ic_btn_actionmenu_cancel_selected.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_btn_actionmenu_play_default.png b/res/drawable-mdpi/ic_btn_actionmenu_play_default.png Binary files differdeleted file mode 100644 index eba780b..0000000 --- a/res/drawable-mdpi/ic_btn_actionmenu_play_default.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_btn_actionmenu_play_pressed.png b/res/drawable-mdpi/ic_btn_actionmenu_play_pressed.png Binary files differdeleted file mode 100644 index 1caa2c2..0000000 --- a/res/drawable-mdpi/ic_btn_actionmenu_play_pressed.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_btn_actionmenu_play_selected.png b/res/drawable-mdpi/ic_btn_actionmenu_play_selected.png Binary files differdeleted file mode 100644 index fea0ba0..0000000 --- a/res/drawable-mdpi/ic_btn_actionmenu_play_selected.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_error_mms_video_overlay.png b/res/drawable-mdpi/ic_error_mms_video_overlay.png Binary files differdeleted file mode 100644 index 4f50072..0000000 --- a/res/drawable-mdpi/ic_error_mms_video_overlay.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_gallery_empty2.png b/res/drawable-mdpi/ic_gallery_empty2.png Binary files differdeleted file mode 100644 index f950e08..0000000 --- a/res/drawable-mdpi/ic_gallery_empty2.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_gallery_video_overlay.png b/res/drawable-mdpi/ic_gallery_video_overlay.png Binary files differdeleted file mode 100644 index ae263a7..0000000 --- a/res/drawable-mdpi/ic_gallery_video_overlay.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_launcher_gallery.png b/res/drawable-mdpi/ic_launcher_gallery.png Binary files differdeleted file mode 100644 index 965fb71..0000000 --- a/res/drawable-mdpi/ic_launcher_gallery.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_menu_camera_video_view.png b/res/drawable-mdpi/ic_menu_camera_video_view.png Binary files differdeleted file mode 100644 index f7e52c2..0000000 --- a/res/drawable-mdpi/ic_menu_camera_video_view.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_menu_multiselect_gallery.png b/res/drawable-mdpi/ic_menu_multiselect_gallery.png Binary files differdeleted file mode 100644 index cb342c6..0000000 --- a/res/drawable-mdpi/ic_menu_multiselect_gallery.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_missing_thumbnail_picture.png b/res/drawable-mdpi/ic_missing_thumbnail_picture.png Binary files differdeleted file mode 100644 index ebab487..0000000 --- a/res/drawable-mdpi/ic_missing_thumbnail_picture.png +++ /dev/null diff --git a/res/drawable-mdpi/ic_missing_thumbnail_video.png b/res/drawable-mdpi/ic_missing_thumbnail_video.png Binary files differdeleted file mode 100644 index b44d821..0000000 --- a/res/drawable-mdpi/ic_missing_thumbnail_video.png +++ /dev/null diff --git a/res/drawable-mdpi/image_border_bg_focus_blue.9.png b/res/drawable-mdpi/image_border_bg_focus_blue.9.png Binary files differdeleted file mode 100644 index 89debd2..0000000 --- a/res/drawable-mdpi/image_border_bg_focus_blue.9.png +++ /dev/null diff --git a/res/drawable-mdpi/image_border_bg_normal.9.png b/res/drawable-mdpi/image_border_bg_normal.9.png Binary files differdeleted file mode 100644 index 18e3607..0000000 --- a/res/drawable-mdpi/image_border_bg_normal.9.png +++ /dev/null diff --git a/res/drawable-mdpi/image_border_bg_pressed_blue.9.png b/res/drawable-mdpi/image_border_bg_pressed_blue.9.png Binary files differdeleted file mode 100644 index 94fa74f..0000000 --- a/res/drawable-mdpi/image_border_bg_pressed_blue.9.png +++ /dev/null diff --git a/res/drawable-mdpi/indicator_autocrop.png b/res/drawable-mdpi/indicator_autocrop.png Binary files differdeleted file mode 100644 index d960b1f..0000000 --- a/res/drawable-mdpi/indicator_autocrop.png +++ /dev/null diff --git a/res/drawable-mdpi/photo_inner.9.png b/res/drawable-mdpi/photo_inner.9.png Binary files differdeleted file mode 100644 index 0e77c7b..0000000 --- a/res/drawable-mdpi/photo_inner.9.png +++ /dev/null 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">"Σταδιακή εμφάνιση & εξαφάνιση"</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">"フェードイン&アウト"</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 & 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(); - } -} |