diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-02-19 10:57:35 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-02-19 10:57:35 -0800 |
commit | d8bccef54d490ce562e61fc907201da0c666314e (patch) | |
tree | f254350cce4028765c3b357809cbca4784b18d02 | |
parent | 5055ba62e22becc9c8d03898b80cda8ed68cfe80 (diff) | |
download | LegacyCamera-d8bccef54d490ce562e61fc907201da0c666314e.zip LegacyCamera-d8bccef54d490ce562e61fc907201da0c666314e.tar.gz LegacyCamera-d8bccef54d490ce562e61fc907201da0c666314e.tar.bz2 |
auto import from //branches/cupcake/...@132276
30 files changed, 1296 insertions, 936 deletions
diff --git a/res/anim/on_screen_hint_accelerate.xml b/res/anim/on_screen_hint_accelerate.xml new file mode 100644 index 0000000..ffbfc39 --- /dev/null +++ b/res/anim/on_screen_hint_accelerate.xml @@ -0,0 +1,21 @@ +<?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. +*/ +--> + +<accelerateInterpolator xmlns:android="http://schemas.android.com/apk/res/android" factor="1" /> diff --git a/res/anim/on_screen_hint_decelerate.xml b/res/anim/on_screen_hint_decelerate.xml new file mode 100644 index 0000000..e63421d --- /dev/null +++ b/res/anim/on_screen_hint_decelerate.xml @@ -0,0 +1,20 @@ +<?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. +*/ +--> + +<decelerateInterpolator xmlns:android="http://schemas.android.com/apk/res/android" factor="1" /> diff --git a/res/anim/on_screen_hint_enter.xml b/res/anim/on_screen_hint_enter.xml new file mode 100644 index 0000000..c7ae9c3 --- /dev/null +++ b/res/anim/on_screen_hint_enter.xml @@ -0,0 +1,22 @@ +<?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. +*/ +--> + +<alpha xmlns:android="http://schemas.android.com/apk/res/android" + android:interpolator="@+android:anim/on_screen_hint_decelerate" + android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="400" /> diff --git a/res/anim/on_screen_hint_exit.xml b/res/anim/on_screen_hint_exit.xml new file mode 100644 index 0000000..e1d1ff2 --- /dev/null +++ b/res/anim/on_screen_hint_exit.xml @@ -0,0 +1,23 @@ +<?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. +*/ +--> + +<alpha xmlns:android="http://schemas.android.com/apk/res/android" + android:interpolator="@+android:anim/on_screen_hint_accelerate" + android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="400" +/> diff --git a/res/drawable/on_screen_hint_frame.9.png b/res/drawable/on_screen_hint_frame.9.png Binary files differnew file mode 100755 index 0000000..08c4f86 --- /dev/null +++ b/res/drawable/on_screen_hint_frame.9.png diff --git a/res/layout/camera.xml b/res/layout/camera.xml index 340a08c..d23066e 100644 --- a/res/layout/camera.xml +++ b/res/layout/camera.xml @@ -15,34 +15,36 @@ --> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/camera" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal"> <com.android.camera.VideoPreview - android:id="@+id/camera_preview" - android:layout_width="fill_parent" - android:layout_height="fill_parent" - android:layout_centerInParent="true" /> + android:id="@+id/camera_preview" + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:layout_centerInParent="true" /> - <ImageView - android:id="@+id/blackout" - android:layout_width="fill_parent" - android:layout_height="fill_parent" - android:visibility="invisible" /> + <View + android:id="@+id/blackout" + android:background="#ff000000" + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:visibility="invisible" /> <com.android.camera.ShutterButton android:id="@+id/shutter_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_camera_indicator_photo" - android:background="@drawable/ic_btn_camera_background" + android:background="@drawable/ic_btn_camera_background" android:clickable="true" - android:focusable="true" + android:focusable="true" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_marginRight="50dip" - android:layout_marginTop="12dip" + android:layout_marginTop="10dip" android:scaleType="center" /> <ImageView @@ -57,39 +59,15 @@ android:scaleType="center" android:visibility="gone" /> - <LinearLayout - android:visibility="gone" - android:id="@+id/post_picture_panel" - android:layout_alignBottom="@id/shutter_button" - android:layout_toLeftOf="@id/shutter_button" - android:layout_marginRight="27dip" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:orientation="horizontal"> - - <com.android.camera.ActionMenuButton - android:id="@+id/attach" - android:drawableTop="@drawable/ic_menu_attach" - android:text="@string/camera_attach" - style="@style/OnscreenActionIcon" - /> - <com.android.camera.ActionMenuButton - android:id="@+id/cancel" - android:drawableTop="@drawable/ic_menu_cancel" - android:text="@string/camera_cancel" - style="@style/OnscreenActionIcon" - /> - </LinearLayout> - <ImageView - android:visibility="gone" - android:id="@+id/last_picture_button" - android:layout_width="72dip" - android:layout_height="72dip" - android:clickable="true" - android:focusable="true" - android:layout_alignTop="@id/shutter_button" - android:layout_toLeftOf="@id/shutter_button" - android:layout_marginRight="20dip" /> + android:visibility="gone" + android:id="@+id/last_picture_button" + android:layout_width="72dip" + android:layout_height="72dip" + android:clickable="true" + android:focusable="true" + android:layout_alignParentLeft="true" + android:layout_alignParentTop="true" + android:layout_marginLeft="10dip" + android:layout_marginTop="10dip" /> </RelativeLayout> - diff --git a/res/layout/on_screen_hint.xml b/res/layout/on_screen_hint.xml new file mode 100644 index 0000000..a56b728 --- /dev/null +++ b/res/layout/on_screen_hint.xml @@ -0,0 +1,38 @@ +<?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. +*/ +--> + +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:orientation="vertical" + android:background="@drawable/on_screen_hint_frame"> + + <TextView + android:id="@+id/message" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_weight="1" + android:textAppearance="@style/OnScreenHintTextAppearance.Small" + android:textColor="#ffffffff" + android:shadowColor="#BB000000" + android:shadowRadius="2.75" + /> +</LinearLayout> + + diff --git a/res/layout/post_picture_panel.xml b/res/layout/post_picture_panel.xml new file mode 100644 index 0000000..17cafe2 --- /dev/null +++ b/res/layout/post_picture_panel.xml @@ -0,0 +1,39 @@ +<?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:visibility="gone" + android:id="@+id/post_picture_panel" + android:layout_alignBottom="@id/shutter_button" + android:layout_toLeftOf="@id/shutter_button" + android:layout_marginRight="15dip" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="horizontal"> + + <com.android.camera.ActionMenuButton + android:id="@+id/attach" + android:drawableTop="@drawable/ic_menu_attach" + android:text="@string/camera_attach" + style="@style/OnscreenActionIcon" + /> + <com.android.camera.ActionMenuButton + android:id="@+id/cancel" + android:drawableTop="@drawable/ic_menu_cancel" + android:text="@string/camera_cancel" + style="@style/OnscreenActionIcon" + /> +</LinearLayout> diff --git a/res/layout/video_camera.xml b/res/layout/video_camera.xml index e853e02..da37bcd 100644 --- a/res/layout/video_camera.xml +++ b/res/layout/video_camera.xml @@ -50,7 +50,7 @@ android:focusable="true" android:layout_alignParentRight="true" android:layout_alignParentTop="true" - android:layout_marginRight="55dip" + android:layout_marginRight="50dip" android:layout_marginTop="10dip" android:scaleType="center"/> @@ -81,12 +81,18 @@ android:id="@+id/post_picture_panel" android:layout_alignTop="@id/shutter_button" android:layout_toLeftOf="@id/shutter_button" - android:layout_marginRight="27dip" + android:layout_marginRight="15dip" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> - <com.android.camera.ActionMenuButton + <com.android.camera.ActionMenuButton + android:id="@+id/gallery" + android:drawableTop="@drawable/ic_menu_gallery" + android:text="@string/camera_gallery" + style="@style/OnscreenActionIcon" + /> + <com.android.camera.ActionMenuButton android:id="@+id/play" android:drawableTop="@drawable/ic_menu_camera_play" android:text="@string/camera_play" diff --git a/res/layout/viewimage.xml b/res/layout/viewimage.xml index 8d52ea1..a1c9d4d 100644 --- a/res/layout/viewimage.xml +++ b/res/layout/viewimage.xml @@ -88,7 +88,7 @@ android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_marginRight="50dip" - android:layout_marginTop="12dip" + android:layout_marginTop="10dip" android:scaleType="center"/> <LinearLayout @@ -96,7 +96,7 @@ android:id="@+id/action_icon_panel" android:layout_alignBottom="@id/shutter_button" android:layout_toLeftOf="@id/shutter_button" - android:layout_marginRight="27dip" + android:layout_marginRight="15dip" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 09489cd..d720d15 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -29,8 +29,7 @@ <string name="wait">"Čekejte prosím..."</string> <string name="no_storage">"Než začnete používat fotoaparát, vložte kartu SD."</string> <string name="not_enough_space">"Vaše karta SD je plná."</string> - <!-- no translation found for preparing_sd (2914969119574812666) --> - <skip /> + <string name="preparing_sd">"Příprava karty SD..."</string> <string name="wallpaper">"Nastavování tapety, čekejte prosím..."</string> <string name="savingImage">"Ukládání fotografie..."</string> <string name="runningFaceDetection">"Čekejte prosím..."</string> @@ -50,15 +49,12 @@ <string name="confirm_delete_message">"Fotografie bude smazána."</string> <string name="confirm_delete_video_message">"Video bude smazáno."</string> <string name="camera_toss">"Smazat"</string> - <!-- no translation found for camera_gallery (815753042966032398) --> - <skip /> + <string name="camera_gallery">"Galerie"</string> <string name="camera_share">"Sdílet"</string> <string name="camera_set">"Použít jako"</string> <string name="camera_play">"Přehrát"</string> - <!-- no translation found for camera_attach (4048659554893435232) --> - <skip /> - <!-- no translation found for camera_cancel (8203341746672085747) --> - <skip /> + <string name="camera_attach">"Připojit přílohu"</string> + <string name="camera_cancel">"Zrušit"</string> <string name="camera_crop">"Oříznout"</string> <string name="camera_tossing">"Mazání..."</string> <string name="no_way_to_share_image">"Tuto fotografii nelze sdílet."</string> @@ -69,19 +65,15 @@ <string name="pref_gallery_category">"Obecné nastavení"</string> <string name="pref_slideshow_category">"Nastavení prezentace"</string> <string name="pref_camera_general_settings_category">"Obecné nastavení"</string> - <!-- no translation found for pref_gallery_size_title (1363406603879434418) --> - <skip /> - <!-- no translation found for pref_gallery_size_summary (8179967445295243638) --> - <skip /> + <string name="pref_gallery_size_title">"Zobrazovaná velikost"</string> + <string name="pref_gallery_size_summary">"Vyberte zobrazovanou velikost obrázků a videí"</string> <string name="pref_gallery_size_dialogtitle">"Velikost fotografie"</string> <string-array name="pref_gallery_size_choices"> <item>"Velké"</item> <item>"Malé"</item> </string-array> - <!-- no translation found for pref_gallery_sort_title (7447949250045443386) --> - <skip /> - <!-- no translation found for pref_gallery_sort_summary (6644398051645595214) --> - <skip /> + <string name="pref_gallery_sort_title">"Řazení"</string> + <string name="pref_gallery_sort_summary">"Vyberte způsob řazení obrázků a videí"</string> <string name="pref_gallery_sort_dialogtitle">"Řazení fotografií"</string> <string-array name="pref_gallery_sort_choices"> <item>"Od nejnovějších"</item> @@ -111,45 +103,30 @@ <string name="pref_camera_recordlocation_title">"K fotografiím ukládat místo pořízení"</string> <string name="pref_camera_recordlocation_summary">"V datech fotografie zaznamenat místo pořízení"</string> <string name="pref_camera_videoquality_category">"Kvalita videa"</string> - <!-- no translation found for pref_camera_videoquality_title (3836197291744160920) --> - <skip /> + <string name="pref_camera_videoquality_title">"Vybrat kvalitu videa"</string> <string name="pref_camera_videoquality_entry_0">"Nízká (pro zprávy MMS)"</string> <string name="pref_camera_videoquality_entry_1">"Vysoká (pro kartu SD)"</string> <string name="pref_camera_videoquality_dialogtitle">"Kvalita videa"</string> <string name="camerasettings">"Nastavení"</string> - <!-- no translation found for image_gallery_NoImageView_text (409595259802877447) --> - <skip /> + <string name="image_gallery_NoImageView_text">"Žádná média nebyla nalezena."</string> <string name="pref_gallery_confirm_delete_title">"Potvrdit smazání"</string> - <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) --> - <skip /> + <string name="pref_gallery_confirm_delete_summary">"Žádat potvrzení před smazáním obrázku nebo videa"</string> <string name="details_panel_title">"Podrobnosti"</string> <string name="details_file_size">"Velikost souboru:"</string> <string name="details_image_resolution">"Rozlišení:"</string> - <!-- no translation found for details_duration (1028116471387901402) --> - <skip /> + <string name="details_duration">"Délka:"</string> <string name="details_date_taken">"Datum pořízení:"</string> - <!-- no translation found for details_frame_rate (122397836963498191) --> - <skip /> - <!-- no translation found for details_bit_rate (5632311789455402186) --> - <skip /> - <!-- no translation found for details_codec (5580300450432398126) --> - <skip /> - <!-- no translation found for details_format (3700860266600796363) --> - <skip /> - <!-- no translation found for details_dimension_x (4479200210424701240) --> - <skip /> - <!-- no translation found for details_ms (940634969189855292) --> - <skip /> - <!-- no translation found for details_hms (3215779248094151255) --> - <skip /> - <!-- no translation found for details_fps (2707670327505979317) --> - <skip /> - <!-- no translation found for details_kbps (59196416864960850) --> - <skip /> - <!-- no translation found for details_mbps (3978720645766601106) --> - <skip /> - <!-- no translation found for details_ok (6848594369924424312) --> - <skip /> + <string name="details_frame_rate">"Počet snímků za sekundu:"</string> + <string name="details_bit_rate">"Bitová rychlost:"</string> + <string name="details_codec">"Kodek:"</string> + <string name="details_format">"Formát:"</string> + <string name="details_dimension_x">"%1$d x %2$d"</string> + <string name="details_ms">"%1$02d:%2$02d"</string> + <string name="details_hms">"%1$d:%2$02d:%3$02d"</string> + <string name="details_fps">"%1$d snímků/s"</string> + <string name="details_kbps">"%1$d Kb/s"</string> + <string name="details_mbps">"%1$g Mb/s"</string> + <string name="details_ok">"OK"</string> <string name="context_menu_header">"Možnosti fotografií"</string> <string name="video_context_menu_header">"Možnosti videa"</string> <string name="multiface_crop_help">"Začněte klepnutím na obličej."</string> @@ -165,16 +142,10 @@ <string name="loading_video">"Načítání videa..."</string> <string name="spaceIsLow_title">"Dochází volné místo"</string> <string name="spaceIsLow_content">"Na vaší kartě SD je málo místa. Změňte nastavení kvality nebo smažte položky z Galerie."</string> - <!-- no translation found for resume_playing_title (8996677350649355013) --> - <skip /> - <!-- no translation found for resume_playing_message (5184414518126703481) --> - <skip /> - <!-- no translation found for resume_playing_resume (3847915469173852416) --> - <skip /> - <!-- no translation found for resume_playing_restart (5471008499835769292) --> - <skip /> - <!-- no translation found for gadget_title (259405922673466798) --> - <skip /> - <!-- no translation found for video_file_name_format (8555507706353616970) --> - <skip /> + <string name="resume_playing_title">"Pokračovat v přehrávání videa"</string> + <string name="resume_playing_message">"Pokračovat v přehrávání od %s?"</string> + <string name="resume_playing_resume">"Pokračovat v přehrávání"</string> + <string name="resume_playing_restart">"Začít znovu"</string> + <string name="gadget_title">"Rámeček fotografie"</string> + <string name="video_file_name_format">"\'video\'-yyyy-MM-dd-HH-mm-ss"</string> </resources> diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 7d309b0..765659f 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -29,8 +29,7 @@ <string name="wait">"Bitte warten..."</string> <string name="no_storage">"Legen Sie vor Verwendung der Kamera eine SD-Karte ein."</string> <string name="not_enough_space">"Ihre SD-Karte ist voll."</string> - <!-- no translation found for preparing_sd (2914969119574812666) --> - <skip /> + <string name="preparing_sd">"SD-Karte wird vorbereitet..."</string> <string name="wallpaper">"Hintergrund wird eingestellt, bitte warten..."</string> <string name="savingImage">"Bild wird gespeichert..."</string> <string name="runningFaceDetection">"Bitte warten..."</string> @@ -50,15 +49,12 @@ <string name="confirm_delete_message">"Das Bild wird gelöscht."</string> <string name="confirm_delete_video_message">"Das Video wird gelöscht."</string> <string name="camera_toss">"Löschen"</string> - <!-- no translation found for camera_gallery (815753042966032398) --> - <skip /> + <string name="camera_gallery">"Galerie"</string> <string name="camera_share">"Senden"</string> <string name="camera_set">"Festlegen als"</string> <string name="camera_play">"Wiedergeben"</string> - <!-- no translation found for camera_attach (4048659554893435232) --> - <skip /> - <!-- no translation found for camera_cancel (8203341746672085747) --> - <skip /> + <string name="camera_attach">"Anhängen"</string> + <string name="camera_cancel">"Abbrechen"</string> <string name="camera_crop">"Zuschneiden"</string> <string name="camera_tossing">"Löschvorgang..."</string> <string name="no_way_to_share_image">"Dieses Bild kann nicht weitergeleitet werden."</string> @@ -69,19 +65,15 @@ <string name="pref_gallery_category">"Allgemeine Einstellungen"</string> <string name="pref_slideshow_category">"Einstellungen für Diashow"</string> <string name="pref_camera_general_settings_category">"Allgemeine Einstellungen"</string> - <!-- no translation found for pref_gallery_size_title (1363406603879434418) --> - <skip /> - <!-- no translation found for pref_gallery_size_summary (8179967445295243638) --> - <skip /> + <string name="pref_gallery_size_title">"Anzeigegröße"</string> + <string name="pref_gallery_size_summary">"Anzeigegröße für Bilder und Videos auswählen"</string> <string name="pref_gallery_size_dialogtitle">"Bildgröße"</string> <string-array name="pref_gallery_size_choices"> <item>"Groß"</item> <item>"Klein"</item> </string-array> - <!-- no translation found for pref_gallery_sort_title (7447949250045443386) --> - <skip /> - <!-- no translation found for pref_gallery_sort_summary (6644398051645595214) --> - <skip /> + <string name="pref_gallery_sort_title">"Sortierreihenfolge"</string> + <string name="pref_gallery_sort_summary">"Sortierreihenfolge für Bilder und Videos auswählen"</string> <string name="pref_gallery_sort_dialogtitle">"Sortierreihenfolge für Bilder"</string> <string-array name="pref_gallery_sort_choices"> <item>"Neue zuerst"</item> @@ -111,45 +103,30 @@ <string name="pref_camera_recordlocation_title">"Aufnahmeort in Bildern speichern"</string> <string name="pref_camera_recordlocation_summary">"Aufnahmeort in Bilddaten speichern"</string> <string name="pref_camera_videoquality_category">"Videoqualität"</string> - <!-- no translation found for pref_camera_videoquality_title (3836197291744160920) --> - <skip /> + <string name="pref_camera_videoquality_title">"Videoqualität auswählen"</string> <string name="pref_camera_videoquality_entry_0">"Niedrig (für MMS-Mitteilungen)"</string> <string name="pref_camera_videoquality_entry_1">"Hoch (für SD-Karte)"</string> <string name="pref_camera_videoquality_dialogtitle">"Videoqualität"</string> <string name="camerasettings">"Einstellungen"</string> - <!-- no translation found for image_gallery_NoImageView_text (409595259802877447) --> - <skip /> + <string name="image_gallery_NoImageView_text">"Keine Medien gefunden."</string> <string name="pref_gallery_confirm_delete_title">"Löschvorgang bestätigen"</string> - <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) --> - <skip /> + <string name="pref_gallery_confirm_delete_summary">"Bestätigung vor dem Löschen eines Bildes oder Videos anzeigen"</string> <string name="details_panel_title">"Details"</string> <string name="details_file_size">"Dateigröße:"</string> <string name="details_image_resolution">"Auflösung:"</string> - <!-- no translation found for details_duration (1028116471387901402) --> - <skip /> + <string name="details_duration">"Dauer:"</string> <string name="details_date_taken">"Aufnahmedatum:"</string> - <!-- no translation found for details_frame_rate (122397836963498191) --> - <skip /> - <!-- no translation found for details_bit_rate (5632311789455402186) --> - <skip /> - <!-- no translation found for details_codec (5580300450432398126) --> - <skip /> - <!-- no translation found for details_format (3700860266600796363) --> - <skip /> - <!-- no translation found for details_dimension_x (4479200210424701240) --> - <skip /> - <!-- no translation found for details_ms (940634969189855292) --> - <skip /> - <!-- no translation found for details_hms (3215779248094151255) --> - <skip /> - <!-- no translation found for details_fps (2707670327505979317) --> - <skip /> - <!-- no translation found for details_kbps (59196416864960850) --> - <skip /> - <!-- no translation found for details_mbps (3978720645766601106) --> - <skip /> - <!-- no translation found for details_ok (6848594369924424312) --> - <skip /> + <string name="details_frame_rate">"Framerate:"</string> + <string name="details_bit_rate">"Bitrate:"</string> + <string name="details_codec">"Codec:"</string> + <string name="details_format">"Format:"</string> + <string name="details_dimension_x">"%1$d x %2$d"</string> + <string name="details_ms">"%1$02d:%2$02d"</string> + <string name="details_hms">"%1$d:%2$02d:%3$02d"</string> + <string name="details_fps">"%1$d fps"</string> + <string name="details_kbps">"%1$d Kbit/s"</string> + <string name="details_mbps">"%1$g Mbit/s"</string> + <string name="details_ok">"OK"</string> <string name="context_menu_header">"Bildoptionen"</string> <string name="video_context_menu_header">"Videooptionen"</string> <string name="multiface_crop_help">"Tippen Sie zum Beginnen auf ein Gesicht."</string> @@ -165,16 +142,10 @@ <string name="loading_video">"Video wird geladen..."</string> <string name="spaceIsLow_title">"Geringer Speicherplatz"</string> <string name="spaceIsLow_content">"Auf Ihrer SD-Karte ist nicht mehr genügend Speicherplatz vorhanden. Ändern Sie die Qualitätseinstellung oder löschen Sie Elemente aus der Galerie."</string> - <!-- no translation found for resume_playing_title (8996677350649355013) --> - <skip /> - <!-- no translation found for resume_playing_message (5184414518126703481) --> - <skip /> - <!-- no translation found for resume_playing_resume (3847915469173852416) --> - <skip /> - <!-- no translation found for resume_playing_restart (5471008499835769292) --> - <skip /> - <!-- no translation found for gadget_title (259405922673466798) --> - <skip /> - <!-- no translation found for video_file_name_format (8555507706353616970) --> - <skip /> + <string name="resume_playing_title">"Mit Video fortfahren"</string> + <string name="resume_playing_message">"Mit Wiedergabe fortfahren ab %s ?"</string> + <string name="resume_playing_resume">"Mit Wiedergabe fortfahren"</string> + <string name="resume_playing_restart">"Starten"</string> + <string name="gadget_title">"Bildrahmen"</string> + <string name="video_file_name_format">"\'video\'-yyyy-MM-dd-HH-mm-ss"</string> </resources> diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 17dffa7..ae347e9 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -29,13 +29,12 @@ <string name="wait">"Por favor, espera..."</string> <string name="no_storage">"Antes de utilizar la cámara, debes insertar una tarjeta SD."</string> <string name="not_enough_space">"La tarjeta SD está llena."</string> - <!-- no translation found for preparing_sd (2914969119574812666) --> - <skip /> - <string name="wallpaper">"Estableciendo papel tapiz; por favor, espera..."</string> + <string name="preparing_sd">"Preparando tarjeta SD…"</string> + <string name="wallpaper">"Estableciendo fondo de pantalla; por favor, espera..."</string> <string name="savingImage">"Guardando imagen..."</string> <string name="runningFaceDetection">"Por favor, espera..."</string> <string name="flip_orientation">"Cambiar orientación"</string> - <string name="settings">"Configuración"</string> + <string name="settings">"Ajustes"</string> <string name="view">"Ver"</string> <string name="details">"Detalles"</string> <string name="rotate">"Girar"</string> @@ -50,38 +49,31 @@ <string name="confirm_delete_message">"Se eliminará la imagen."</string> <string name="confirm_delete_video_message">"Se eliminará el vídeo."</string> <string name="camera_toss">"Suprimir"</string> - <!-- no translation found for camera_gallery (815753042966032398) --> - <skip /> + <string name="camera_gallery">"Galería"</string> <string name="camera_share">"Compartir"</string> <string name="camera_set">"Establecer como"</string> <string name="camera_play">"Reproducir"</string> - <!-- no translation found for camera_attach (4048659554893435232) --> - <skip /> - <!-- no translation found for camera_cancel (8203341746672085747) --> - <skip /> + <string name="camera_attach">"Adjuntar"</string> + <string name="camera_cancel">"Cancelar"</string> <string name="camera_crop">"Recortar"</string> <string name="camera_tossing">"Eliminando..."</string> <string name="no_way_to_share_image">"Esta imagen no se puede compartir."</string> <string name="no_way_to_share_video">"Este vídeo no se puede compartir."</string> <string name="camera_gallery_photos_text">"Galería"</string> <string name="camera_pick_wallpaper">"Imágenes"</string> - <string name="camera_setas_wallpaper">"Papel tapiz"</string> + <string name="camera_setas_wallpaper">"Fondo de pantalla"</string> <string name="pref_gallery_category">"Configuración general"</string> <string name="pref_slideshow_category">"Configuración de presentación"</string> <string name="pref_camera_general_settings_category">"Configuración general"</string> - <!-- no translation found for pref_gallery_size_title (1363406603879434418) --> - <skip /> - <!-- no translation found for pref_gallery_size_summary (8179967445295243638) --> - <skip /> + <string name="pref_gallery_size_title">"Tamaño de visualización"</string> + <string name="pref_gallery_size_summary">"Seleccionar el tamaño de visualización de imágenes y vídeos"</string> <string name="pref_gallery_size_dialogtitle">"Tamaño de imagen"</string> <string-array name="pref_gallery_size_choices"> <item>"Grande"</item> <item>"Pequeña"</item> </string-array> - <!-- no translation found for pref_gallery_sort_title (7447949250045443386) --> - <skip /> - <!-- no translation found for pref_gallery_sort_summary (6644398051645595214) --> - <skip /> + <string name="pref_gallery_sort_title">"Orden"</string> + <string name="pref_gallery_sort_summary">"Seleccionar el orden de imágenes y vídeos"</string> <string name="pref_gallery_sort_dialogtitle">"Ordenación de imágenes"</string> <string-array name="pref_gallery_sort_choices"> <item>"Más recientes primero"</item> @@ -111,45 +103,30 @@ <string name="pref_camera_recordlocation_title">"Almacenar ubicación en imágenes"</string> <string name="pref_camera_recordlocation_summary">"Registrar ubicación en datos de imagen"</string> <string name="pref_camera_videoquality_category">"Calidad de vídeo"</string> - <!-- no translation found for pref_camera_videoquality_title (3836197291744160920) --> - <skip /> + <string name="pref_camera_videoquality_title">"Seleccionar calidad de vídeo"</string> <string name="pref_camera_videoquality_entry_0">"Baja (para mensajes MMS)"</string> <string name="pref_camera_videoquality_entry_1">"Alta (para tarjeta SD)"</string> <string name="pref_camera_videoquality_dialogtitle">"Calidad de vídeo"</string> - <string name="camerasettings">"Configuración"</string> - <!-- no translation found for image_gallery_NoImageView_text (409595259802877447) --> - <skip /> + <string name="camerasettings">"Ajustes"</string> + <string name="image_gallery_NoImageView_text">"No se ha encontrado ningún medio."</string> <string name="pref_gallery_confirm_delete_title">"Confirmar eliminaciones"</string> - <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) --> - <skip /> + <string name="pref_gallery_confirm_delete_summary">"Mostrar confirmación antes de eliminar una imagen o un vídeo"</string> <string name="details_panel_title">"Detalles"</string> <string name="details_file_size">"Tamaño de archivo:"</string> <string name="details_image_resolution">"Resolución:"</string> - <!-- no translation found for details_duration (1028116471387901402) --> - <skip /> + <string name="details_duration">"Duración:"</string> <string name="details_date_taken">"Fecha de realización:"</string> - <!-- no translation found for details_frame_rate (122397836963498191) --> - <skip /> - <!-- no translation found for details_bit_rate (5632311789455402186) --> - <skip /> - <!-- no translation found for details_codec (5580300450432398126) --> - <skip /> - <!-- no translation found for details_format (3700860266600796363) --> - <skip /> - <!-- no translation found for details_dimension_x (4479200210424701240) --> - <skip /> - <!-- no translation found for details_ms (940634969189855292) --> - <skip /> - <!-- no translation found for details_hms (3215779248094151255) --> - <skip /> - <!-- no translation found for details_fps (2707670327505979317) --> - <skip /> - <!-- no translation found for details_kbps (59196416864960850) --> - <skip /> - <!-- no translation found for details_mbps (3978720645766601106) --> - <skip /> - <!-- no translation found for details_ok (6848594369924424312) --> - <skip /> + <string name="details_frame_rate">"Frecuencia de imagen:"</string> + <string name="details_bit_rate">"Velocidad binaria:"</string> + <string name="details_codec">"Códec:"</string> + <string name="details_format">"Formato:"</string> + <string name="details_dimension_x">"%1$d x %2$d"</string> + <string name="details_ms">"%1$02d:%2$02d"</string> + <string name="details_hms">"%1$d:%2$02d:%3$02d"</string> + <string name="details_fps">"%1$d fps"</string> + <string name="details_kbps">"%1$d Kbps"</string> + <string name="details_mbps">"%1$g Mbps"</string> + <string name="details_ok">"Aceptar"</string> <string name="context_menu_header">"Opciones de imagen"</string> <string name="video_context_menu_header">"Opciones de vídeo"</string> <string name="multiface_crop_help">"Selecciona una cara para empezar."</string> @@ -158,23 +135,17 @@ <string name="videos_gallery_title">"Galería"</string> <string name="pick_videos_gallery_title">"Seleccionar vídeo"</string> <string name="loading_progress_format_string">"<xliff:g id="COUNTER">%d</xliff:g> restantes"</string> - <string name="sendImage">"Compartir imagen a través de"</string> + <string name="sendImage">"Compartir imagen por"</string> <string name="setImage">"Establecer imagen como"</string> <string name="sendVideo">"Compartir vídeo a través de"</string> <string name="movieviewlabel">"Películas"</string> <string name="loading_video">"Cargando vídeo…"</string> <string name="spaceIsLow_title">"Poco espacio"</string> <string name="spaceIsLow_content">"No queda espacio en la tarjeta SD. Cambia la configuración de calidad o elimina elementos de la galería."</string> - <!-- no translation found for resume_playing_title (8996677350649355013) --> - <skip /> - <!-- no translation found for resume_playing_message (5184414518126703481) --> - <skip /> - <!-- no translation found for resume_playing_resume (3847915469173852416) --> - <skip /> - <!-- no translation found for resume_playing_restart (5471008499835769292) --> - <skip /> - <!-- no translation found for gadget_title (259405922673466798) --> - <skip /> - <!-- no translation found for video_file_name_format (8555507706353616970) --> - <skip /> + <string name="resume_playing_title">"Reanudar vídeo"</string> + <string name="resume_playing_message">"Reanudar reproducción a partir de %s ?"</string> + <string name="resume_playing_resume">"Reanudar reproducción"</string> + <string name="resume_playing_restart">"Volver a reproducir"</string> + <string name="gadget_title">"Picture frame"</string> + <string name="video_file_name_format">"\'video\'-yyyy-MM-dd-HH-mm-ss"</string> </resources> diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 6afc9ca..a416bb1 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -29,8 +29,7 @@ <string name="wait">"Veuillez patienter..."</string> <string name="no_storage">"Veuillez insérer une carte SD avant d\'utiliser la caméra."</string> <string name="not_enough_space">"Votre carte SD est pleine."</string> - <!-- no translation found for preparing_sd (2914969119574812666) --> - <skip /> + <string name="preparing_sd">"Préparation de la carte SD..."</string> <string name="wallpaper">"Configuration de l\'arrière-plan en cours. Veuillez patienter..."</string> <string name="savingImage">"Enregistrement de l\'image"</string> <string name="runningFaceDetection">"Veuillez patienter..."</string> @@ -50,15 +49,12 @@ <string name="confirm_delete_message">"L\'image sera supprimée."</string> <string name="confirm_delete_video_message">"La vidéo va être supprimée."</string> <string name="camera_toss">"Supprimer"</string> - <!-- no translation found for camera_gallery (815753042966032398) --> - <skip /> + <string name="camera_gallery">"Galerie"</string> <string name="camera_share">"Partager"</string> <string name="camera_set">"Définir en tant que"</string> <string name="camera_play">"Lire"</string> - <!-- no translation found for camera_attach (4048659554893435232) --> - <skip /> - <!-- no translation found for camera_cancel (8203341746672085747) --> - <skip /> + <string name="camera_attach">"Joindre"</string> + <string name="camera_cancel">"Annuler"</string> <string name="camera_crop">"Rogner"</string> <string name="camera_tossing">"Suppression..."</string> <string name="no_way_to_share_image">"Impossible de partager cette image."</string> @@ -69,19 +65,15 @@ <string name="pref_gallery_category">"Paramètres généraux"</string> <string name="pref_slideshow_category">"Paramètres du diaporama"</string> <string name="pref_camera_general_settings_category">"Paramètres généraux"</string> - <!-- no translation found for pref_gallery_size_title (1363406603879434418) --> - <skip /> - <!-- no translation found for pref_gallery_size_summary (8179967445295243638) --> - <skip /> + <string name="pref_gallery_size_title">"Taille d\'affichage"</string> + <string name="pref_gallery_size_summary">"Sélectionner la taille d\'affichage des images et des vidéos"</string> <string name="pref_gallery_size_dialogtitle">"Taille de l\'image"</string> <string-array name="pref_gallery_size_choices"> <item>"Grande"</item> <item>"Petite"</item> </string-array> - <!-- no translation found for pref_gallery_sort_title (7447949250045443386) --> - <skip /> - <!-- no translation found for pref_gallery_sort_summary (6644398051645595214) --> - <skip /> + <string name="pref_gallery_sort_title">"Ordre de tri"</string> + <string name="pref_gallery_sort_summary">"Sélectionner l\'ordre de tri des images et des vidéos"</string> <string name="pref_gallery_sort_dialogtitle">"Trier les images"</string> <string-array name="pref_gallery_sort_choices"> <item>"Les plus récentes d\'abord"</item> @@ -111,45 +103,30 @@ <string name="pref_camera_recordlocation_title">"Enregistrer un emplacement dans les images"</string> <string name="pref_camera_recordlocation_summary">"Enregistrer un emplacement dans les données d\'image"</string> <string name="pref_camera_videoquality_category">"Qualité vidéo"</string> - <!-- no translation found for pref_camera_videoquality_title (3836197291744160920) --> - <skip /> + <string name="pref_camera_videoquality_title">"Sélectionnez le niveau de qualité vidéo"</string> <string name="pref_camera_videoquality_entry_0">"Basse (pour les MMS)"</string> <string name="pref_camera_videoquality_entry_1">"Haute (pour la carte SD)"</string> <string name="pref_camera_videoquality_dialogtitle">"Qualité vidéo"</string> <string name="camerasettings">"Paramètres"</string> - <!-- no translation found for image_gallery_NoImageView_text (409595259802877447) --> - <skip /> + <string name="image_gallery_NoImageView_text">"Aucun fichier média trouvé."</string> <string name="pref_gallery_confirm_delete_title">"Confirmer les suppressions"</string> - <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) --> - <skip /> + <string name="pref_gallery_confirm_delete_summary">"Afficher une confirmation avant de supprimer une image ou une vidéo"</string> <string name="details_panel_title">"Détails"</string> <string name="details_file_size">"Taille du fichier :"</string> <string name="details_image_resolution">"Résolution :"</string> - <!-- no translation found for details_duration (1028116471387901402) --> - <skip /> + <string name="details_duration">"Durée :"</string> <string name="details_date_taken">"Date de création :"</string> - <!-- no translation found for details_frame_rate (122397836963498191) --> - <skip /> - <!-- no translation found for details_bit_rate (5632311789455402186) --> - <skip /> - <!-- no translation found for details_codec (5580300450432398126) --> - <skip /> - <!-- no translation found for details_format (3700860266600796363) --> - <skip /> - <!-- no translation found for details_dimension_x (4479200210424701240) --> - <skip /> - <!-- no translation found for details_ms (940634969189855292) --> - <skip /> - <!-- no translation found for details_hms (3215779248094151255) --> - <skip /> - <!-- no translation found for details_fps (2707670327505979317) --> - <skip /> - <!-- no translation found for details_kbps (59196416864960850) --> - <skip /> - <!-- no translation found for details_mbps (3978720645766601106) --> - <skip /> - <!-- no translation found for details_ok (6848594369924424312) --> - <skip /> + <string name="details_frame_rate">"Fréquence d\'images :"</string> + <string name="details_bit_rate">"Débit :"</string> + <string name="details_codec">"Codec :"</string> + <string name="details_format">"Format :"</string> + <string name="details_dimension_x">"%1$d x %2$d"</string> + <string name="details_ms">"%1$02d:%2$02d"</string> + <string name="details_hms">"%1$d:%2$02d:%3$02d"</string> + <string name="details_fps">"%1$d fps"</string> + <string name="details_kbps">"%1$d Kbits/s"</string> + <string name="details_mbps">"%1$g Mbits/s"</string> + <string name="details_ok">"OK"</string> <string name="context_menu_header">"Options de l\'image"</string> <string name="video_context_menu_header">"Options vidéo"</string> <string name="multiface_crop_help">"Cliquez sur un visage pour commencer."</string> @@ -165,16 +142,10 @@ <string name="loading_video">"Chargement de la vidéo..."</string> <string name="spaceIsLow_title">"L\'espace restant est faible"</string> <string name="spaceIsLow_content">"Votre carte SD est pleine. Modifiez le paramètre de qualité ou supprimez des éléments de la galerie."</string> - <!-- no translation found for resume_playing_title (8996677350649355013) --> - <skip /> - <!-- no translation found for resume_playing_message (5184414518126703481) --> - <skip /> - <!-- no translation found for resume_playing_resume (3847915469173852416) --> - <skip /> - <!-- no translation found for resume_playing_restart (5471008499835769292) --> - <skip /> - <!-- no translation found for gadget_title (259405922673466798) --> - <skip /> - <!-- no translation found for video_file_name_format (8555507706353616970) --> - <skip /> + <string name="resume_playing_title">"Reprendre la vidéo"</string> + <string name="resume_playing_message">"Reprendre la lecture à partir de %s ?"</string> + <string name="resume_playing_resume">"Reprendre la lecture"</string> + <string name="resume_playing_restart">"Démarrer"</string> + <string name="gadget_title">"Cadre d\'image"</string> + <string name="video_file_name_format">"\'video\'-yyyy-MM-dd-HH-mm-ss"</string> </resources> diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 27183e2..23bd952 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -29,8 +29,7 @@ <string name="wait">"Attendere..."</string> <string name="no_storage">"Per usare la fotocamera devi inserire una scheda SD."</string> <string name="not_enough_space">"La scheda SD è piena."</string> - <!-- no translation found for preparing_sd (2914969119574812666) --> - <skip /> + <string name="preparing_sd">"Preparazione scheda SD…"</string> <string name="wallpaper">"Impostazione sfondo, attendi..."</string> <string name="savingImage">"Salvataggio foto..."</string> <string name="runningFaceDetection">"Attendere..."</string> @@ -50,15 +49,12 @@ <string name="confirm_delete_message">"La foto verrà eliminata."</string> <string name="confirm_delete_video_message">"Il video verrà eliminato."</string> <string name="camera_toss">"Elimina"</string> - <!-- no translation found for camera_gallery (815753042966032398) --> - <skip /> + <string name="camera_gallery">"Galleria"</string> <string name="camera_share">"Condividi"</string> <string name="camera_set">"Imposta come"</string> <string name="camera_play">"Riproduci"</string> - <!-- no translation found for camera_attach (4048659554893435232) --> - <skip /> - <!-- no translation found for camera_cancel (8203341746672085747) --> - <skip /> + <string name="camera_attach">"Allega"</string> + <string name="camera_cancel">"Annulla"</string> <string name="camera_crop">"Ritaglia"</string> <string name="camera_tossing">"Eliminazione..."</string> <string name="no_way_to_share_image">"Impossibile condividere la foto."</string> @@ -69,19 +65,15 @@ <string name="pref_gallery_category">"Impostazioni generali"</string> <string name="pref_slideshow_category">"Impostazioni presentazione"</string> <string name="pref_camera_general_settings_category">"Impostazioni generali"</string> - <!-- no translation found for pref_gallery_size_title (1363406603879434418) --> - <skip /> - <!-- no translation found for pref_gallery_size_summary (8179967445295243638) --> - <skip /> + <string name="pref_gallery_size_title">"Dimensioni schermo"</string> + <string name="pref_gallery_size_summary">"Seleziona dimensioni di visualizz. di foto e video"</string> <string name="pref_gallery_size_dialogtitle">"Dimensioni foto"</string> <string-array name="pref_gallery_size_choices"> <item>"Grandi"</item> <item>"Piccole"</item> </string-array> - <!-- no translation found for pref_gallery_sort_title (7447949250045443386) --> - <skip /> - <!-- no translation found for pref_gallery_sort_summary (6644398051645595214) --> - <skip /> + <string name="pref_gallery_sort_title">"Ordinamento"</string> + <string name="pref_gallery_sort_summary">"Seleziona l\'ordinamento di foto e video"</string> <string name="pref_gallery_sort_dialogtitle">"Ordine foto"</string> <string-array name="pref_gallery_sort_choices"> <item>"Da più recente"</item> @@ -111,45 +103,30 @@ <string name="pref_camera_recordlocation_title">"Salva località nelle foto"</string> <string name="pref_camera_recordlocation_summary">"Registra località nei dati della foto"</string> <string name="pref_camera_videoquality_category">"Qualità video"</string> - <!-- no translation found for pref_camera_videoquality_title (3836197291744160920) --> - <skip /> + <string name="pref_camera_videoquality_title">"Seleziona la qualità video"</string> <string name="pref_camera_videoquality_entry_0">"Bassa (per MMS)"</string> <string name="pref_camera_videoquality_entry_1">"Alta (per scheda SD)"</string> <string name="pref_camera_videoquality_dialogtitle">"Qualità video"</string> <string name="camerasettings">"Impostazioni"</string> - <!-- no translation found for image_gallery_NoImageView_text (409595259802877447) --> - <skip /> + <string name="image_gallery_NoImageView_text">"Nessun media trovato."</string> <string name="pref_gallery_confirm_delete_title">"Conferma eliminazioni"</string> - <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) --> - <skip /> + <string name="pref_gallery_confirm_delete_summary">"Mostra conferma prima di eliminare una foto o un video"</string> <string name="details_panel_title">"Dettagli"</string> <string name="details_file_size">"Dim. file:"</string> <string name="details_image_resolution">"Risoluzione:"</string> - <!-- no translation found for details_duration (1028116471387901402) --> - <skip /> + <string name="details_duration">"Durata:"</string> <string name="details_date_taken">"Data scatto:"</string> - <!-- no translation found for details_frame_rate (122397836963498191) --> - <skip /> - <!-- no translation found for details_bit_rate (5632311789455402186) --> - <skip /> - <!-- no translation found for details_codec (5580300450432398126) --> - <skip /> - <!-- no translation found for details_format (3700860266600796363) --> - <skip /> - <!-- no translation found for details_dimension_x (4479200210424701240) --> - <skip /> - <!-- no translation found for details_ms (940634969189855292) --> - <skip /> - <!-- no translation found for details_hms (3215779248094151255) --> - <skip /> - <!-- no translation found for details_fps (2707670327505979317) --> - <skip /> - <!-- no translation found for details_kbps (59196416864960850) --> - <skip /> - <!-- no translation found for details_mbps (3978720645766601106) --> - <skip /> - <!-- no translation found for details_ok (6848594369924424312) --> - <skip /> + <string name="details_frame_rate">"Frequenza fotogrammi:"</string> + <string name="details_bit_rate">"Velocità in bit:"</string> + <string name="details_codec">"Codec:"</string> + <string name="details_format">"Formato:"</string> + <string name="details_dimension_x">"%1$d x %2$d"</string> + <string name="details_ms">"%1$02d:%2$02d"</string> + <string name="details_hms">"%1$d:%2$02d:%3$02d"</string> + <string name="details_fps">"%1$d fps"</string> + <string name="details_kbps">"%1$d Kbps"</string> + <string name="details_mbps">"%1$g Mbps"</string> + <string name="details_ok">"OK"</string> <string name="context_menu_header">"Opzioni foto"</string> <string name="video_context_menu_header">"Opzioni video"</string> <string name="multiface_crop_help">"Tocca un viso per iniziare."</string> @@ -165,16 +142,10 @@ <string name="loading_video">"Caricamento video..."</string> <string name="spaceIsLow_title">"Spazio in esaurimento"</string> <string name="spaceIsLow_content">"Lo spazio della scheda SD si sta esaurendo. Cambia l\'impostazione di qualità o elimina elementi nella galleria."</string> - <!-- no translation found for resume_playing_title (8996677350649355013) --> - <skip /> - <!-- no translation found for resume_playing_message (5184414518126703481) --> - <skip /> - <!-- no translation found for resume_playing_resume (3847915469173852416) --> - <skip /> - <!-- no translation found for resume_playing_restart (5471008499835769292) --> - <skip /> - <!-- no translation found for gadget_title (259405922673466798) --> - <skip /> - <!-- no translation found for video_file_name_format (8555507706353616970) --> - <skip /> + <string name="resume_playing_title">"Riprendi video"</string> + <string name="resume_playing_message">"Riprendi riproduzione da %s ?"</string> + <string name="resume_playing_resume">"Riprendi riproduzione"</string> + <string name="resume_playing_restart">"Ricomincia"</string> + <string name="gadget_title">"Cornice immagine"</string> + <string name="video_file_name_format">"\'video\'-yyyy-MM-dd-HH-mm-ss"</string> </resources> diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 9f6baf9..928ec24 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -21,16 +21,15 @@ <string name="gallery_picker_label">"ギャラリー"</string> <string name="gallery_camera_bucket_name">"カメラ (写真)"</string> <string name="gallery_camera_videos_bucket_name">"カメラ (動画)"</string> - <string name="switch_to_video_lable">"動画に切り替え"</string> - <string name="switch_to_camera_lable">"カメラに切り替え"</string> + <string name="switch_to_video_lable">"ムービーに切替"</string> + <string name="switch_to_camera_lable">"写真に切替"</string> <string name="crop_label">"写真のトリミング"</string> <string name="view_label">"写真を表示"</string> <string name="preferences_label">"カメラ設定"</string> <string name="wait">"お待ちください..."</string> <string name="no_storage">"カメラを使用する前にSDカードを挿入してください。"</string> <string name="not_enough_space">"SDカードがいっぱいです。"</string> - <!-- no translation found for preparing_sd (2914969119574812666) --> - <skip /> + <string name="preparing_sd">"SDカードの準備中..."</string> <string name="wallpaper">"壁紙を設定しています。しばらくお待ちください..."</string> <string name="savingImage">"写真を保存中..."</string> <string name="runningFaceDetection">"お待ちください..."</string> @@ -42,23 +41,20 @@ <string name="rotate_left">"左に回転"</string> <string name="rotate_right">"右に回転"</string> <string name="slide_show">"スライドショー"</string> - <string name="capture_picture">"写真をキャプチャ"</string> - <string name="capture_video">"動画をキャプチャ"</string> + <string name="capture_picture">"写真撮影"</string> + <string name="capture_video">"ムービー撮影"</string> <string name="crop_save_text">"保存"</string> <string name="crop_discard_text">"破棄"</string> <string name="confirm_delete_title">"削除"</string> <string name="confirm_delete_message">"写真を削除します。"</string> <string name="confirm_delete_video_message">"動画を削除します。"</string> <string name="camera_toss">"削除"</string> - <!-- no translation found for camera_gallery (815753042966032398) --> - <skip /> + <string name="camera_gallery">"ギャラリー"</string> <string name="camera_share">"共有"</string> <string name="camera_set">"設定"</string> <string name="camera_play">"再生"</string> - <!-- no translation found for camera_attach (4048659554893435232) --> - <skip /> - <!-- no translation found for camera_cancel (8203341746672085747) --> - <skip /> + <string name="camera_attach">"添付"</string> + <string name="camera_cancel">"キャンセル"</string> <string name="camera_crop">"トリミング"</string> <string name="camera_tossing">"削除中..."</string> <string name="no_way_to_share_image">"この写真は共有できません。"</string> @@ -69,26 +65,22 @@ <string name="pref_gallery_category">"全般設定"</string> <string name="pref_slideshow_category">"スライドショー設定"</string> <string name="pref_camera_general_settings_category">"全般設定"</string> - <!-- no translation found for pref_gallery_size_title (1363406603879434418) --> - <skip /> - <!-- no translation found for pref_gallery_size_summary (8179967445295243638) --> - <skip /> + <string name="pref_gallery_size_title">"表示サイズ"</string> + <string name="pref_gallery_size_summary">"写真と動画の表示サイズを選択"</string> <string name="pref_gallery_size_dialogtitle">"写真サイズ"</string> <string-array name="pref_gallery_size_choices"> <item>"大"</item> <item>"小"</item> </string-array> - <!-- no translation found for pref_gallery_sort_title (7447949250045443386) --> - <skip /> - <!-- no translation found for pref_gallery_sort_summary (6644398051645595214) --> - <skip /> + <string name="pref_gallery_sort_title">"並び替え順"</string> + <string name="pref_gallery_sort_summary">"写真と動画の並び替え順を選択"</string> <string name="pref_gallery_sort_dialogtitle">"写真の並べ替え"</string> <string-array name="pref_gallery_sort_choices"> <item>"日付の新しい順"</item> <item>"日付の古い順"</item> </string-array> <string name="pref_gallery_slideshow_interval_title">"スライドショーの間隔"</string> - <string name="pref_gallery_slideshow_interval_summary">"各スライドを表示する時間を選択"</string> + <string name="pref_gallery_slideshow_interval_summary">"各スライドの表示時間"</string> <string name="pref_gallery_slideshow_interval_dialogtitle">"スライドショーの間隔"</string> <string-array name="pref_gallery_slideshow_interval_choices"> <item>"2秒"</item> @@ -108,51 +100,36 @@ <string name="pref_gallery_slideshow_repeat_summary">"スライドショーを繰り返す"</string> <string name="pref_gallery_slideshow_shuffle_title">"スライドのシャッフル"</string> <string name="pref_gallery_slideshow_shuffle_summary">"写真をランダムに表示"</string> - <string name="pref_camera_recordlocation_title">"位置を写真に保存"</string> + <string name="pref_camera_recordlocation_title">"位置情報を写真に記録する"</string> <string name="pref_camera_recordlocation_summary">"写真データに位置情報を記録します"</string> <string name="pref_camera_videoquality_category">"動画のクオリティ"</string> - <!-- no translation found for pref_camera_videoquality_title (3836197291744160920) --> - <skip /> + <string name="pref_camera_videoquality_title">"動画の画質を選択"</string> <string name="pref_camera_videoquality_entry_0">"低 (MMSメッセージ向け)"</string> <string name="pref_camera_videoquality_entry_1">"高 (SDカード向け)"</string> <string name="pref_camera_videoquality_dialogtitle">"動画のクオリティ"</string> <string name="camerasettings">"設定"</string> - <!-- no translation found for image_gallery_NoImageView_text (409595259802877447) --> - <skip /> + <string name="image_gallery_NoImageView_text">"メディアが見つかりません。"</string> <string name="pref_gallery_confirm_delete_title">"削除を確認"</string> - <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) --> - <skip /> + <string name="pref_gallery_confirm_delete_summary">"写真や動画を削除する前に確認メッセージを表示"</string> <string name="details_panel_title">"詳細"</string> <string name="details_file_size">"ファイルサイズ:"</string> <string name="details_image_resolution">"解像度:"</string> - <!-- no translation found for details_duration (1028116471387901402) --> - <skip /> + <string name="details_duration">"再生時間:"</string> <string name="details_date_taken">"撮影日:"</string> - <!-- no translation found for details_frame_rate (122397836963498191) --> - <skip /> - <!-- no translation found for details_bit_rate (5632311789455402186) --> - <skip /> - <!-- no translation found for details_codec (5580300450432398126) --> - <skip /> - <!-- no translation found for details_format (3700860266600796363) --> - <skip /> - <!-- no translation found for details_dimension_x (4479200210424701240) --> - <skip /> - <!-- no translation found for details_ms (940634969189855292) --> - <skip /> - <!-- no translation found for details_hms (3215779248094151255) --> - <skip /> - <!-- no translation found for details_fps (2707670327505979317) --> - <skip /> - <!-- no translation found for details_kbps (59196416864960850) --> - <skip /> - <!-- no translation found for details_mbps (3978720645766601106) --> - <skip /> - <!-- no translation found for details_ok (6848594369924424312) --> - <skip /> + <string name="details_frame_rate">"フレームレート:"</string> + <string name="details_bit_rate">"ビットレート:"</string> + <string name="details_codec">"コーデック:"</string> + <string name="details_format">"形式:"</string> + <string name="details_dimension_x">"%1$dx%2$d"</string> + <string name="details_ms">"%1$02d:%2$02d"</string> + <string name="details_hms">"%1$d:%2$02d:%3$02d"</string> + <string name="details_fps">"%1$dfps"</string> + <string name="details_kbps">"%1$dKbps"</string> + <string name="details_mbps">"%1$gMbps"</string> + <string name="details_ok">"OK"</string> <string name="context_menu_header">"写真オプション"</string> <string name="video_context_menu_header">"動画オプション"</string> - <string name="multiface_crop_help">"顔を選択して開始します。"</string> + <string name="multiface_crop_help">"顔をタップして開始します。"</string> <string name="photos_gallery_title">"ギャラリー"</string> <string name="pick_photos_gallery_title">"写真を選択"</string> <string name="videos_gallery_title">"ギャラリー"</string> @@ -165,16 +142,10 @@ <string name="loading_video">"動画を読み込み中..."</string> <string name="spaceIsLow_title">"空き容量が残り少なくなっています"</string> <string name="spaceIsLow_content">"SDカードの容量が足りません。クオリティ設定を変更するか、ギャラリーからアイテムを削除してください。"</string> - <!-- no translation found for resume_playing_title (8996677350649355013) --> - <skip /> - <!-- no translation found for resume_playing_message (5184414518126703481) --> - <skip /> - <!-- no translation found for resume_playing_resume (3847915469173852416) --> - <skip /> - <!-- no translation found for resume_playing_restart (5471008499835769292) --> - <skip /> - <!-- no translation found for gadget_title (259405922673466798) --> - <skip /> - <!-- no translation found for video_file_name_format (8555507706353616970) --> - <skip /> + <string name="resume_playing_title">"動画の再開"</string> + <string name="resume_playing_message">"再生を%sから再開しますか?"</string> + <string name="resume_playing_resume">"再生を再開"</string> + <string name="resume_playing_restart">"最初から再生"</string> + <string name="gadget_title">"写真フレーム"</string> + <string name="video_file_name_format">"\'video\'-yyyy-MM-dd-HH-mm-ss"</string> </resources> diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index 33f5ec0..4f4980a 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -29,8 +29,7 @@ <string name="wait">"잠시 기다려 주세요..."</string> <string name="no_storage">"카메라를 사용하기 전에 먼저 SD 카드를 넣으세요."</string> <string name="not_enough_space">"SD 카드가 꽉 찼습니다."</string> - <!-- no translation found for preparing_sd (2914969119574812666) --> - <skip /> + <string name="preparing_sd">"SD 카드 준비중..."</string> <string name="wallpaper">"배경화면 설정 중. 잠시 기다려 주세요..."</string> <string name="savingImage">"사진 저장 중..."</string> <string name="runningFaceDetection">"잠시 기다려 주세요..."</string> @@ -50,15 +49,12 @@ <string name="confirm_delete_message">"사진이 삭제됩니다."</string> <string name="confirm_delete_video_message">"동영상이 삭제됩니다."</string> <string name="camera_toss">"삭제"</string> - <!-- no translation found for camera_gallery (815753042966032398) --> - <skip /> + <string name="camera_gallery">"갤러리"</string> <string name="camera_share">"공유"</string> <string name="camera_set">"사진 설정"</string> <string name="camera_play">"재생"</string> - <!-- no translation found for camera_attach (4048659554893435232) --> - <skip /> - <!-- no translation found for camera_cancel (8203341746672085747) --> - <skip /> + <string name="camera_attach">"첨부"</string> + <string name="camera_cancel">"취소"</string> <string name="camera_crop">"자르기"</string> <string name="camera_tossing">"삭제 중..."</string> <string name="no_way_to_share_image">"공유할 수 없는 사진입니다."</string> @@ -69,19 +65,15 @@ <string name="pref_gallery_category">"일반 설정"</string> <string name="pref_slideshow_category">"슬라이드쇼 설정"</string> <string name="pref_camera_general_settings_category">"일반 설정"</string> - <!-- no translation found for pref_gallery_size_title (1363406603879434418) --> - <skip /> - <!-- no translation found for pref_gallery_size_summary (8179967445295243638) --> - <skip /> + <string name="pref_gallery_size_title">"디스플레이 크기"</string> + <string name="pref_gallery_size_summary">"사진 및 동영상 표시 크기 선택"</string> <string name="pref_gallery_size_dialogtitle">"사진 크기"</string> <string-array name="pref_gallery_size_choices"> <item>"크게"</item> <item>"작게"</item> </string-array> - <!-- no translation found for pref_gallery_sort_title (7447949250045443386) --> - <skip /> - <!-- no translation found for pref_gallery_sort_summary (6644398051645595214) --> - <skip /> + <string name="pref_gallery_sort_title">"정렬 순서"</string> + <string name="pref_gallery_sort_summary">"사진 및 동영상 정렬 순서 선택"</string> <string name="pref_gallery_sort_dialogtitle">"사진 정렬"</string> <string-array name="pref_gallery_sort_choices"> <item>"가장 최근 사진 먼저"</item> @@ -111,45 +103,30 @@ <string name="pref_camera_recordlocation_title">"사진에 위치 저장"</string> <string name="pref_camera_recordlocation_summary">"사진 데이터에 위치 기록"</string> <string name="pref_camera_videoquality_category">"동영상 화질"</string> - <!-- no translation found for pref_camera_videoquality_title (3836197291744160920) --> - <skip /> + <string name="pref_camera_videoquality_title">"동영상 화질 선택"</string> <string name="pref_camera_videoquality_entry_0">"낮음(MMS 메시지용)"</string> <string name="pref_camera_videoquality_entry_1">"높음(SD 카드용)"</string> <string name="pref_camera_videoquality_dialogtitle">"동영상 화질"</string> <string name="camerasettings">"설정"</string> - <!-- no translation found for image_gallery_NoImageView_text (409595259802877447) --> - <skip /> + <string name="image_gallery_NoImageView_text">"미디어 파일이 없습니다."</string> <string name="pref_gallery_confirm_delete_title">"삭제 확인"</string> - <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) --> - <skip /> + <string name="pref_gallery_confirm_delete_summary">"사진 및 동영상 삭제 전 확인 표시"</string> <string name="details_panel_title">"상세정보"</string> <string name="details_file_size">"파일 크기:"</string> <string name="details_image_resolution">"해상도:"</string> - <!-- no translation found for details_duration (1028116471387901402) --> - <skip /> + <string name="details_duration">"재생 시간:"</string> <string name="details_date_taken">"찍은 날짜:"</string> - <!-- no translation found for details_frame_rate (122397836963498191) --> - <skip /> - <!-- no translation found for details_bit_rate (5632311789455402186) --> - <skip /> - <!-- no translation found for details_codec (5580300450432398126) --> - <skip /> - <!-- no translation found for details_format (3700860266600796363) --> - <skip /> - <!-- no translation found for details_dimension_x (4479200210424701240) --> - <skip /> - <!-- no translation found for details_ms (940634969189855292) --> - <skip /> - <!-- no translation found for details_hms (3215779248094151255) --> - <skip /> - <!-- no translation found for details_fps (2707670327505979317) --> - <skip /> - <!-- no translation found for details_kbps (59196416864960850) --> - <skip /> - <!-- no translation found for details_mbps (3978720645766601106) --> - <skip /> - <!-- no translation found for details_ok (6848594369924424312) --> - <skip /> + <string name="details_frame_rate">"프레임 속도:"</string> + <string name="details_bit_rate">"비트 전송률:"</string> + <string name="details_codec">"코덱:"</string> + <string name="details_format">"형식:"</string> + <string name="details_dimension_x">"%1$d x %2$d"</string> + <string name="details_ms">"%1$02d:%2$02d"</string> + <string name="details_hms">"%1$d:%2$02d:%3$02d"</string> + <string name="details_fps">"%1$dfps"</string> + <string name="details_kbps">"%1$dKbps"</string> + <string name="details_mbps">"%1$gMbps"</string> + <string name="details_ok">"확인"</string> <string name="context_menu_header">"사진 옵션"</string> <string name="video_context_menu_header">"동영상 옵션"</string> <string name="multiface_crop_help">"시작하려면 얼굴을 탭하세요."</string> @@ -165,16 +142,10 @@ <string name="loading_video">"동영상 로드 중..."</string> <string name="spaceIsLow_title">"공간부족"</string> <string name="spaceIsLow_content">"SD 카드의 공간이 부족합니다. 화질 설정을 변경하거나 갤러리에서 항목을 삭제하세요."</string> - <!-- no translation found for resume_playing_title (8996677350649355013) --> - <skip /> - <!-- no translation found for resume_playing_message (5184414518126703481) --> - <skip /> - <!-- no translation found for resume_playing_resume (3847915469173852416) --> - <skip /> - <!-- no translation found for resume_playing_restart (5471008499835769292) --> - <skip /> - <!-- no translation found for gadget_title (259405922673466798) --> - <skip /> - <!-- no translation found for video_file_name_format (8555507706353616970) --> - <skip /> + <string name="resume_playing_title">"동영상 다시 시작"</string> + <string name="resume_playing_message">"%s에서 재생을 다시 시작하시겠습니까?"</string> + <string name="resume_playing_resume">"재생 다시 시작"</string> + <string name="resume_playing_restart">"시작"</string> + <string name="gadget_title">"사진 프레임"</string> + <string name="video_file_name_format">"\'video\'-yyyy-MM-dd-HH-mm-ss"</string> </resources> diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 5d3740d..c48f738 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -29,8 +29,7 @@ <string name="wait">"Een ogenblik geduld..."</string> <string name="no_storage">"Plaats een SD-kaart voordat u de camera gebruikt."</string> <string name="not_enough_space">"De SD-kaart is vol."</string> - <!-- no translation found for preparing_sd (2914969119574812666) --> - <skip /> + <string name="preparing_sd">"SD-kaart voorbereiden…"</string> <string name="wallpaper">"Achtergrond wordt ingesteld. Een ogenblik geduld..."</string> <string name="savingImage">"Foto opslaan..."</string> <string name="runningFaceDetection">"Een ogenblik geduld..."</string> @@ -50,15 +49,12 @@ <string name="confirm_delete_message">"De foto wordt verwijderd."</string> <string name="confirm_delete_video_message">"De video wordt verwijderd"</string> <string name="camera_toss">"Verwijderen"</string> - <!-- no translation found for camera_gallery (815753042966032398) --> - <skip /> + <string name="camera_gallery">"Galerij"</string> <string name="camera_share">"Delen"</string> <string name="camera_set">"Instellen als"</string> <string name="camera_play">"Afspelen"</string> - <!-- no translation found for camera_attach (4048659554893435232) --> - <skip /> - <!-- no translation found for camera_cancel (8203341746672085747) --> - <skip /> + <string name="camera_attach">"Bijvoegen"</string> + <string name="camera_cancel">"Annuleren"</string> <string name="camera_crop">"Bijsnijden"</string> <string name="camera_tossing">"Verwijderen..."</string> <string name="no_way_to_share_image">"Deze foto kan niet worden gedeeld."</string> @@ -69,19 +65,15 @@ <string name="pref_gallery_category">"Algemene instellingen"</string> <string name="pref_slideshow_category">"Instellingen van diavoorstelling"</string> <string name="pref_camera_general_settings_category">"Algemene instellingen"</string> - <!-- no translation found for pref_gallery_size_title (1363406603879434418) --> - <skip /> - <!-- no translation found for pref_gallery_size_summary (8179967445295243638) --> - <skip /> + <string name="pref_gallery_size_title">"Weergavegrootte"</string> + <string name="pref_gallery_size_summary">"De weergavegrootte van foto\'s en video\'s selecteren"</string> <string name="pref_gallery_size_dialogtitle">"Grootte van foto"</string> <string-array name="pref_gallery_size_choices"> <item>"Groot"</item> <item>"Klein"</item> </string-array> - <!-- no translation found for pref_gallery_sort_title (7447949250045443386) --> - <skip /> - <!-- no translation found for pref_gallery_sort_summary (6644398051645595214) --> - <skip /> + <string name="pref_gallery_sort_title">"Sorteervolgorde"</string> + <string name="pref_gallery_sort_summary">"De sorteervolgorde van foto\'s en video\'s selecteren"</string> <string name="pref_gallery_sort_dialogtitle">"Foto\'s sorteren"</string> <string-array name="pref_gallery_sort_choices"> <item>"Nieuwste eerst"</item> @@ -111,45 +103,30 @@ <string name="pref_camera_recordlocation_title">"Locatie opslaan in foto\'s"</string> <string name="pref_camera_recordlocation_summary">"Locatie vastleggen in de gegevens van de foto"</string> <string name="pref_camera_videoquality_category">"Videokwaliteit"</string> - <!-- no translation found for pref_camera_videoquality_title (3836197291744160920) --> - <skip /> + <string name="pref_camera_videoquality_title">"Videokwaliteit selecteren"</string> <string name="pref_camera_videoquality_entry_0">"Laag (voor MMS-berichten)"</string> <string name="pref_camera_videoquality_entry_1">"Hoog (voor SD-kaart)"</string> <string name="pref_camera_videoquality_dialogtitle">"Videokwaliteit"</string> <string name="camerasettings">"Instellingen"</string> - <!-- no translation found for image_gallery_NoImageView_text (409595259802877447) --> - <skip /> + <string name="image_gallery_NoImageView_text">"Geen medium gevonden."</string> <string name="pref_gallery_confirm_delete_title">"Verwijderen bevestigen"</string> - <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) --> - <skip /> + <string name="pref_gallery_confirm_delete_summary">"Bevestiging weergeven voordat een foto of video wordt verwijderd"</string> <string name="details_panel_title">"Details"</string> <string name="details_file_size">"Bestandsgrootte:"</string> <string name="details_image_resolution">"Resolutie:"</string> - <!-- no translation found for details_duration (1028116471387901402) --> - <skip /> + <string name="details_duration">"Duur:"</string> <string name="details_date_taken">"Gemaakt op:"</string> - <!-- no translation found for details_frame_rate (122397836963498191) --> - <skip /> - <!-- no translation found for details_bit_rate (5632311789455402186) --> - <skip /> - <!-- no translation found for details_codec (5580300450432398126) --> - <skip /> - <!-- no translation found for details_format (3700860266600796363) --> - <skip /> - <!-- no translation found for details_dimension_x (4479200210424701240) --> - <skip /> - <!-- no translation found for details_ms (940634969189855292) --> - <skip /> - <!-- no translation found for details_hms (3215779248094151255) --> - <skip /> - <!-- no translation found for details_fps (2707670327505979317) --> - <skip /> - <!-- no translation found for details_kbps (59196416864960850) --> - <skip /> - <!-- no translation found for details_mbps (3978720645766601106) --> - <skip /> - <!-- no translation found for details_ok (6848594369924424312) --> - <skip /> + <string name="details_frame_rate">"Framesnelheid:"</string> + <string name="details_bit_rate">"Bitsnelheid:"</string> + <string name="details_codec">"Codec:"</string> + <string name="details_format">"Indeling:"</string> + <string name="details_dimension_x">"%1$d x %2$d"</string> + <string name="details_ms">"%1$02d:%2$02d"</string> + <string name="details_hms">"%1$d:%2$02d:%3$02d"</string> + <string name="details_fps">"%1$d fps"</string> + <string name="details_kbps">"%1$d Kbps"</string> + <string name="details_mbps">"%1$g Mbps"</string> + <string name="details_ok">"OK"</string> <string name="context_menu_header">"Opties voor foto\'s"</string> <string name="video_context_menu_header">"Video-opties"</string> <string name="multiface_crop_help">"Tik op een gezicht om te beginnen."</string> @@ -165,16 +142,10 @@ <string name="loading_video">"Video laden..."</string> <string name="spaceIsLow_title">"Er is weinig ruimte"</string> <string name="spaceIsLow_content">"Er is weinig ruimte beschikbaar op uw SD-kaart. U kunt de kwaliteitsinstelling wijzigen of items uit de galerij verwijderen."</string> - <!-- no translation found for resume_playing_title (8996677350649355013) --> - <skip /> - <!-- no translation found for resume_playing_message (5184414518126703481) --> - <skip /> - <!-- no translation found for resume_playing_resume (3847915469173852416) --> - <skip /> - <!-- no translation found for resume_playing_restart (5471008499835769292) --> - <skip /> - <!-- no translation found for gadget_title (259405922673466798) --> - <skip /> - <!-- no translation found for video_file_name_format (8555507706353616970) --> - <skip /> + <string name="resume_playing_title">"Video hervatten"</string> + <string name="resume_playing_message">"Afspelen hervatten vanaf %s ?"</string> + <string name="resume_playing_resume">"Afspelen hervatten"</string> + <string name="resume_playing_restart">"Opnieuw starten"</string> + <string name="gadget_title">"Fotolijstje"</string> + <string name="video_file_name_format">"\'video\'-yyyy-MM-dd-HH-mm-ss"</string> </resources> diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 9081af4..8a35c58 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -29,8 +29,7 @@ <string name="wait">"Poczekaj…"</string> <string name="no_storage">"Zanim zaczniesz korzystać z aparatu fotograficznego, włóż kartę SD."</string> <string name="not_enough_space">"Karta SD jest pełna."</string> - <!-- no translation found for preparing_sd (2914969119574812666) --> - <skip /> + <string name="preparing_sd">"Przygotowywanie karty SD..."</string> <string name="wallpaper">"Ustawianie tapety, poczekaj…"</string> <string name="savingImage">"Trwa zapisywanie zdjęcia…"</string> <string name="runningFaceDetection">"Poczekaj…"</string> @@ -50,15 +49,12 @@ <string name="confirm_delete_message">"Zdjęcie zostanie usunięte."</string> <string name="confirm_delete_video_message">"Film wideo zostanie usunięty."</string> <string name="camera_toss">"Usuń"</string> - <!-- no translation found for camera_gallery (815753042966032398) --> - <skip /> + <string name="camera_gallery">"Galeria"</string> <string name="camera_share">"Prześlij"</string> <string name="camera_set">"Ustaw jako"</string> <string name="camera_play">"Odtwórz"</string> - <!-- no translation found for camera_attach (4048659554893435232) --> - <skip /> - <!-- no translation found for camera_cancel (8203341746672085747) --> - <skip /> + <string name="camera_attach">"Załącz"</string> + <string name="camera_cancel">"Anuluj"</string> <string name="camera_crop">"Przytnij"</string> <string name="camera_tossing">"Trwa usuwanie…"</string> <string name="no_way_to_share_image">"Nie można przesłać tego zdjęcia."</string> @@ -69,19 +65,15 @@ <string name="pref_gallery_category">"Ustawienia ogólne"</string> <string name="pref_slideshow_category">"Ustawienia pokazu slajdów"</string> <string name="pref_camera_general_settings_category">"Ustawienia ogólne"</string> - <!-- no translation found for pref_gallery_size_title (1363406603879434418) --> - <skip /> - <!-- no translation found for pref_gallery_size_summary (8179967445295243638) --> - <skip /> + <string name="pref_gallery_size_title">"Rozmiar wyświetlacza"</string> + <string name="pref_gallery_size_summary">"Ustaw wyświetlany rozmiar zdjęć i filmów"</string> <string name="pref_gallery_size_dialogtitle">"Rozmiar zdjęć"</string> <string-array name="pref_gallery_size_choices"> <item>"Duży"</item> <item>"Mały"</item> </string-array> - <!-- no translation found for pref_gallery_sort_title (7447949250045443386) --> - <skip /> - <!-- no translation found for pref_gallery_sort_summary (6644398051645595214) --> - <skip /> + <string name="pref_gallery_sort_title">"Kolejność sortowania"</string> + <string name="pref_gallery_sort_summary">"Wybierz kolejność sortowania zdjęć i filmów"</string> <string name="pref_gallery_sort_dialogtitle">"Sortowanie zdjęć"</string> <string-array name="pref_gallery_sort_choices"> <item>"Najpierw najnowsze"</item> @@ -111,45 +103,30 @@ <string name="pref_camera_recordlocation_title">"Zapisuj lokalizację w zdjęciach"</string> <string name="pref_camera_recordlocation_summary">"Zapisz lokalizację w danych zdjęcia"</string> <string name="pref_camera_videoquality_category">"Jakość wideo"</string> - <!-- no translation found for pref_camera_videoquality_title (3836197291744160920) --> - <skip /> + <string name="pref_camera_videoquality_title">"Wybierz jakość wideo"</string> <string name="pref_camera_videoquality_entry_0">"Niska (dla wiadomości MMS)"</string> <string name="pref_camera_videoquality_entry_1">"Wysoka (dla karty SD)"</string> <string name="pref_camera_videoquality_dialogtitle">"Jakość wideo"</string> <string name="camerasettings">"Ustawienia"</string> - <!-- no translation found for image_gallery_NoImageView_text (409595259802877447) --> - <skip /> + <string name="image_gallery_NoImageView_text">"Nie znaleziono nośnika."</string> <string name="pref_gallery_confirm_delete_title">"Potwierdzanie usuwania"</string> - <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) --> - <skip /> + <string name="pref_gallery_confirm_delete_summary">"Wyświetl potwierdzenie przed usunięciem zdjęcia lub filmu"</string> <string name="details_panel_title">"Szczegóły"</string> <string name="details_file_size">"Rozmiar pliku:"</string> <string name="details_image_resolution">"Rozdzielczość:"</string> - <!-- no translation found for details_duration (1028116471387901402) --> - <skip /> + <string name="details_duration">"Czas trwania:"</string> <string name="details_date_taken">"Data zrobienia zdjęcia:"</string> - <!-- no translation found for details_frame_rate (122397836963498191) --> - <skip /> - <!-- no translation found for details_bit_rate (5632311789455402186) --> - <skip /> - <!-- no translation found for details_codec (5580300450432398126) --> - <skip /> - <!-- no translation found for details_format (3700860266600796363) --> - <skip /> - <!-- no translation found for details_dimension_x (4479200210424701240) --> - <skip /> - <!-- no translation found for details_ms (940634969189855292) --> - <skip /> - <!-- no translation found for details_hms (3215779248094151255) --> - <skip /> - <!-- no translation found for details_fps (2707670327505979317) --> - <skip /> - <!-- no translation found for details_kbps (59196416864960850) --> - <skip /> - <!-- no translation found for details_mbps (3978720645766601106) --> - <skip /> - <!-- no translation found for details_ok (6848594369924424312) --> - <skip /> + <string name="details_frame_rate">"Szybkość klatek:"</string> + <string name="details_bit_rate">"Szybkość transmisji:"</string> + <string name="details_codec">"Kodek:"</string> + <string name="details_format">"Format:"</string> + <string name="details_dimension_x">"%1$d x %2$d"</string> + <string name="details_ms">"%1$02d:%2$02d"</string> + <string name="details_hms">"%1$d:%2$02d:%3$02d"</string> + <string name="details_fps">"%1$d ramek/s"</string> + <string name="details_kbps">"%1$d Kb/s"</string> + <string name="details_mbps">"%1$g Mb/s"</string> + <string name="details_ok">"OK"</string> <string name="context_menu_header">"Opcje zdjęć"</string> <string name="video_context_menu_header">"Opcje wideo"</string> <string name="multiface_crop_help">"Dotknij twarzy, aby rozpocząć"</string> @@ -165,16 +142,10 @@ <string name="loading_video">"Ładowanie filmu wideo..."</string> <string name="spaceIsLow_title">"Miejsca jest mało"</string> <string name="spaceIsLow_content">"Na karcie SD brakuje miejsca. Zmień ustawienie jakości lub usuń elementy z Galerii."</string> - <!-- no translation found for resume_playing_title (8996677350649355013) --> - <skip /> - <!-- no translation found for resume_playing_message (5184414518126703481) --> - <skip /> - <!-- no translation found for resume_playing_resume (3847915469173852416) --> - <skip /> - <!-- no translation found for resume_playing_restart (5471008499835769292) --> - <skip /> - <!-- no translation found for gadget_title (259405922673466798) --> - <skip /> - <!-- no translation found for video_file_name_format (8555507706353616970) --> - <skip /> + <string name="resume_playing_title">"Wznów film"</string> + <string name="resume_playing_message">"Wznowić odtwarzanie od %s?"</string> + <string name="resume_playing_resume">"Wznów odtwarzanie"</string> + <string name="resume_playing_restart">"Rozpocznij"</string> + <string name="gadget_title">"Ramka zdjęcia"</string> + <string name="video_file_name_format">"\'video\'-yyyy-MM-dd-HH-mm-ss"</string> </resources> diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 06fbbaa..f3fb789 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -29,8 +29,7 @@ <string name="wait">"Подождите…"</string> <string name="no_storage">"Перед использованием камеры вставьте карту SD."</string> <string name="not_enough_space">"Карта SD заполнена."</string> - <!-- no translation found for preparing_sd (2914969119574812666) --> - <skip /> + <string name="preparing_sd">"Подготовка карты SD..."</string> <string name="wallpaper">"Установка фонового рисунка, подождите…"</string> <string name="savingImage">"Идет сохранение изображения…"</string> <string name="runningFaceDetection">"Подождите…"</string> @@ -50,15 +49,12 @@ <string name="confirm_delete_message">"Изображение будет удалено."</string> <string name="confirm_delete_video_message">"Видео будет удалено."</string> <string name="camera_toss">"Удаление"</string> - <!-- no translation found for camera_gallery (815753042966032398) --> - <skip /> + <string name="camera_gallery">"Галерея"</string> <string name="camera_share">"Отправить"</string> <string name="camera_set">"Установить как"</string> <string name="camera_play">"Воспроизвести"</string> - <!-- no translation found for camera_attach (4048659554893435232) --> - <skip /> - <!-- no translation found for camera_cancel (8203341746672085747) --> - <skip /> + <string name="camera_attach">"Вложить"</string> + <string name="camera_cancel">"Отмена"</string> <string name="camera_crop">"Обрезать"</string> <string name="camera_tossing">"Идет удаление…"</string> <string name="no_way_to_share_image">"Отправить это изображение нельзя."</string> @@ -69,19 +65,15 @@ <string name="pref_gallery_category">"Общие настройки"</string> <string name="pref_slideshow_category">"Настройки слайд-шоу"</string> <string name="pref_camera_general_settings_category">"Общие настройки"</string> - <!-- no translation found for pref_gallery_size_title (1363406603879434418) --> - <skip /> - <!-- no translation found for pref_gallery_size_summary (8179967445295243638) --> - <skip /> + <string name="pref_gallery_size_title">"Отображаемый размер"</string> + <string name="pref_gallery_size_summary">"Выбор отображаемого размера изображений и видео"</string> <string name="pref_gallery_size_dialogtitle">"Размер изображения"</string> <string-array name="pref_gallery_size_choices"> <item>"Крупный"</item> <item>"Мелкий"</item> </string-array> - <!-- no translation found for pref_gallery_sort_title (7447949250045443386) --> - <skip /> - <!-- no translation found for pref_gallery_sort_summary (6644398051645595214) --> - <skip /> + <string name="pref_gallery_sort_title">"Порядок сортировки"</string> + <string name="pref_gallery_sort_summary">"Выберите порядок сортировки изображений и видео"</string> <string name="pref_gallery_sort_dialogtitle">"Сортировка изображений"</string> <string-array name="pref_gallery_sort_choices"> <item>"Начиная с новых"</item> @@ -111,45 +103,30 @@ <string name="pref_camera_recordlocation_title">"Сохранять адрес в изображениях"</string> <string name="pref_camera_recordlocation_summary">"Записывать адрес в данные изображения"</string> <string name="pref_camera_videoquality_category">"Качество видео"</string> - <!-- no translation found for pref_camera_videoquality_title (3836197291744160920) --> - <skip /> + <string name="pref_camera_videoquality_title">"Выбор качества видео"</string> <string name="pref_camera_videoquality_entry_0">"Низкое (для MMS)"</string> <string name="pref_camera_videoquality_entry_1">"Высокое (для карты SD)"</string> <string name="pref_camera_videoquality_dialogtitle">"Качество видео"</string> <string name="camerasettings">"Настройки"</string> - <!-- no translation found for image_gallery_NoImageView_text (409595259802877447) --> - <skip /> + <string name="image_gallery_NoImageView_text">"Нет мультимедийных материалов."</string> <string name="pref_gallery_confirm_delete_title">"Подтверждение удаления"</string> - <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) --> - <skip /> + <string name="pref_gallery_confirm_delete_summary">"Запрашивать подтверждения перед удалением изображения или видео"</string> <string name="details_panel_title">"Сведения"</string> <string name="details_file_size">"Размер файла:"</string> <string name="details_image_resolution">"Разрешение:"</string> - <!-- no translation found for details_duration (1028116471387901402) --> - <skip /> + <string name="details_duration">"Продолжительность:"</string> <string name="details_date_taken">"Дата съемки:"</string> - <!-- no translation found for details_frame_rate (122397836963498191) --> - <skip /> - <!-- no translation found for details_bit_rate (5632311789455402186) --> - <skip /> - <!-- no translation found for details_codec (5580300450432398126) --> - <skip /> - <!-- no translation found for details_format (3700860266600796363) --> - <skip /> - <!-- no translation found for details_dimension_x (4479200210424701240) --> - <skip /> - <!-- no translation found for details_ms (940634969189855292) --> - <skip /> - <!-- no translation found for details_hms (3215779248094151255) --> - <skip /> - <!-- no translation found for details_fps (2707670327505979317) --> - <skip /> - <!-- no translation found for details_kbps (59196416864960850) --> - <skip /> - <!-- no translation found for details_mbps (3978720645766601106) --> - <skip /> - <!-- no translation found for details_ok (6848594369924424312) --> - <skip /> + <string name="details_frame_rate">"Частота кадров:"</string> + <string name="details_bit_rate">"Битрейт:"</string> + <string name="details_codec">"Кодек:"</string> + <string name="details_format">"Формат:"</string> + <string name="details_dimension_x">"%1$d на %2$d"</string> + <string name="details_ms">"%1$02d:%2$02d"</string> + <string name="details_hms">"%1$d:%2$02d:%3$02d"</string> + <string name="details_fps">"%1$d кадров/с"</string> + <string name="details_kbps">"%1$d кбит/с"</string> + <string name="details_mbps">"%1$g мбит/с"</string> + <string name="details_ok">"ОК"</string> <string name="context_menu_header">"Параметры изображения"</string> <string name="video_context_menu_header">"Параметры видео"</string> <string name="multiface_crop_help">"Чтобы начать, выберите лицо."</string> @@ -165,16 +142,10 @@ <string name="loading_video">"Идет загрузка видео…"</string> <string name="spaceIsLow_title">"Осталось мало места"</string> <string name="spaceIsLow_content">"Место на карте SD заканчивается. Измените настройки качества или удалите элементы из галереи."</string> - <!-- no translation found for resume_playing_title (8996677350649355013) --> - <skip /> - <!-- no translation found for resume_playing_message (5184414518126703481) --> - <skip /> - <!-- no translation found for resume_playing_resume (3847915469173852416) --> - <skip /> - <!-- no translation found for resume_playing_restart (5471008499835769292) --> - <skip /> - <!-- no translation found for gadget_title (259405922673466798) --> - <skip /> - <!-- no translation found for video_file_name_format (8555507706353616970) --> - <skip /> + <string name="resume_playing_title">"Продолжение просмотра видео"</string> + <string name="resume_playing_message">"Продолжить воспроизведение с %s ?"</string> + <string name="resume_playing_resume">"Продолжить воспроизведение"</string> + <string name="resume_playing_restart">"Начать с начала"</string> + <string name="gadget_title">"Рамка фотографии"</string> + <string name="video_file_name_format">"\'video\'-yyyy-MM-dd-HH-mm-ss"</string> </resources> diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index eba681b..67104a0 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -29,8 +29,7 @@ <string name="wait">"请稍候..."</string> <string name="no_storage">"请在使用相机之前插入 SD 卡。"</string> <string name="not_enough_space">"您的 SD 卡已满。"</string> - <!-- no translation found for preparing_sd (2914969119574812666) --> - <skip /> + <string name="preparing_sd">"正在准备 SD 卡..."</string> <string name="wallpaper">"正在设置壁纸,请稍候..."</string> <string name="savingImage">"正在保存图片..."</string> <string name="runningFaceDetection">"请稍候..."</string> @@ -50,15 +49,12 @@ <string name="confirm_delete_message">"会删除该图片。"</string> <string name="confirm_delete_video_message">"会删除该视频。"</string> <string name="camera_toss">"删除"</string> - <!-- no translation found for camera_gallery (815753042966032398) --> - <skip /> + <string name="camera_gallery">"图片库"</string> <string name="camera_share">"共享"</string> <string name="camera_set">"设置为"</string> <string name="camera_play">"播放"</string> - <!-- no translation found for camera_attach (4048659554893435232) --> - <skip /> - <!-- no translation found for camera_cancel (8203341746672085747) --> - <skip /> + <string name="camera_attach">"附加"</string> + <string name="camera_cancel">"取消"</string> <string name="camera_crop">"裁切"</string> <string name="camera_tossing">"正在删除..."</string> <string name="no_way_to_share_image">"无法共享此图片。"</string> @@ -69,19 +65,15 @@ <string name="pref_gallery_category">"常规设置"</string> <string name="pref_slideshow_category">"幻灯片演示设置"</string> <string name="pref_camera_general_settings_category">"常规设置"</string> - <!-- no translation found for pref_gallery_size_title (1363406603879434418) --> - <skip /> - <!-- no translation found for pref_gallery_size_summary (8179967445295243638) --> - <skip /> + <string name="pref_gallery_size_title">"显示大小"</string> + <string name="pref_gallery_size_summary">"选择图片和视频的显示大小"</string> <string name="pref_gallery_size_dialogtitle">"图片大小"</string> <string-array name="pref_gallery_size_choices"> <item>"大"</item> <item>"小"</item> </string-array> - <!-- no translation found for pref_gallery_sort_title (7447949250045443386) --> - <skip /> - <!-- no translation found for pref_gallery_sort_summary (6644398051645595214) --> - <skip /> + <string name="pref_gallery_sort_title">"排序顺序"</string> + <string name="pref_gallery_sort_summary">"选择图片和视频的排序顺序"</string> <string name="pref_gallery_sort_dialogtitle">"图片排序"</string> <string-array name="pref_gallery_sort_choices"> <item>"最新的在最前面"</item> @@ -111,45 +103,30 @@ <string name="pref_camera_recordlocation_title">"在图片中存储位置"</string> <string name="pref_camera_recordlocation_summary">"通过图片数据记录位置"</string> <string name="pref_camera_videoquality_category">"视频质量"</string> - <!-- no translation found for pref_camera_videoquality_title (3836197291744160920) --> - <skip /> + <string name="pref_camera_videoquality_title">"选择视频质量"</string> <string name="pref_camera_videoquality_entry_0">"低(对于彩信)"</string> <string name="pref_camera_videoquality_entry_1">"高(对于 SD 卡)"</string> <string name="pref_camera_videoquality_dialogtitle">"视频质量"</string> <string name="camerasettings">"设置"</string> - <!-- no translation found for image_gallery_NoImageView_text (409595259802877447) --> - <skip /> + <string name="image_gallery_NoImageView_text">"找不到媒体。"</string> <string name="pref_gallery_confirm_delete_title">"确认删除"</string> - <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) --> - <skip /> + <string name="pref_gallery_confirm_delete_summary">"在删除图片或视频前显示确认"</string> <string name="details_panel_title">"详细信息"</string> <string name="details_file_size">"文件大小:"</string> <string name="details_image_resolution">"分辨率:"</string> - <!-- no translation found for details_duration (1028116471387901402) --> - <skip /> + <string name="details_duration">"持续时间:"</string> <string name="details_date_taken">"拍摄日期:"</string> - <!-- no translation found for details_frame_rate (122397836963498191) --> - <skip /> - <!-- no translation found for details_bit_rate (5632311789455402186) --> - <skip /> - <!-- no translation found for details_codec (5580300450432398126) --> - <skip /> - <!-- no translation found for details_format (3700860266600796363) --> - <skip /> - <!-- no translation found for details_dimension_x (4479200210424701240) --> - <skip /> - <!-- no translation found for details_ms (940634969189855292) --> - <skip /> - <!-- no translation found for details_hms (3215779248094151255) --> - <skip /> - <!-- no translation found for details_fps (2707670327505979317) --> - <skip /> - <!-- no translation found for details_kbps (59196416864960850) --> - <skip /> - <!-- no translation found for details_mbps (3978720645766601106) --> - <skip /> - <!-- no translation found for details_ok (6848594369924424312) --> - <skip /> + <string name="details_frame_rate">"帧频:"</string> + <string name="details_bit_rate">"比特率:"</string> + <string name="details_codec">"编解码器:"</string> + <string name="details_format">"格式:"</string> + <string name="details_dimension_x">"%1$d x %2$d"</string> + <string name="details_ms">"%1$02d:%2$02d"</string> + <string name="details_hms">"%1$d:%2$02d:%3$02d"</string> + <string name="details_fps">"%1$d fps"</string> + <string name="details_kbps">"%1$d Kbps"</string> + <string name="details_mbps">"%1$g Mbps"</string> + <string name="details_ok">"确定"</string> <string name="context_menu_header">"图片选项"</string> <string name="video_context_menu_header">"视频选项"</string> <string name="multiface_crop_help">"轻击一张脸开始裁切。"</string> @@ -165,16 +142,10 @@ <string name="loading_video">"正在载入视频..."</string> <string name="spaceIsLow_title">"空间不足"</string> <string name="spaceIsLow_content">"您的 SD 卡已满。请更改质量设置或删除图片库中的内容。"</string> - <!-- no translation found for resume_playing_title (8996677350649355013) --> - <skip /> - <!-- no translation found for resume_playing_message (5184414518126703481) --> - <skip /> - <!-- no translation found for resume_playing_resume (3847915469173852416) --> - <skip /> - <!-- no translation found for resume_playing_restart (5471008499835769292) --> - <skip /> - <!-- no translation found for gadget_title (259405922673466798) --> - <skip /> - <!-- no translation found for video_file_name_format (8555507706353616970) --> - <skip /> + <string name="resume_playing_title">"重新播放视频"</string> + <string name="resume_playing_message">"从 %s 开始重新播放?"</string> + <string name="resume_playing_resume">"重新播放"</string> + <string name="resume_playing_restart">"重新开始"</string> + <string name="gadget_title">"相框"</string> + <string name="video_file_name_format">"\'video\'-yyyy-MM-dd-HH-mm-ss"</string> </resources> diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 14ff0eb..4ddb816 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -29,8 +29,7 @@ <string name="wait">"請稍候…"</string> <string name="no_storage">"使用相機前請先插入 SD 卡。"</string> <string name="not_enough_space">"SD 卡已滿。"</string> - <!-- no translation found for preparing_sd (2914969119574812666) --> - <skip /> + <string name="preparing_sd">"正在準備 SD 卡..."</string> <string name="wallpaper">"設定桌布中,請稍候…"</string> <string name="savingImage">"儲存相片中…"</string> <string name="runningFaceDetection">"請稍候…"</string> @@ -50,15 +49,12 @@ <string name="confirm_delete_message">"此相片會被刪除。"</string> <string name="confirm_delete_video_message">"將刪除此影片。"</string> <string name="camera_toss">"刪除"</string> - <!-- no translation found for camera_gallery (815753042966032398) --> - <skip /> + <string name="camera_gallery">"圖庫"</string> <string name="camera_share">"分享"</string> <string name="camera_set">"設為"</string> <string name="camera_play">"播放"</string> - <!-- no translation found for camera_attach (4048659554893435232) --> - <skip /> - <!-- no translation found for camera_cancel (8203341746672085747) --> - <skip /> + <string name="camera_attach">"附加"</string> + <string name="camera_cancel">"取消"</string> <string name="camera_crop">"裁切"</string> <string name="camera_tossing">"刪除中…"</string> <string name="no_way_to_share_image">"此相片無法分享。"</string> @@ -69,19 +65,15 @@ <string name="pref_gallery_category">"一般設定"</string> <string name="pref_slideshow_category">"投影片設定"</string> <string name="pref_camera_general_settings_category">"一般設定"</string> - <!-- no translation found for pref_gallery_size_title (1363406603879434418) --> - <skip /> - <!-- no translation found for pref_gallery_size_summary (8179967445295243638) --> - <skip /> + <string name="pref_gallery_size_title">"顯示大小"</string> + <string name="pref_gallery_size_summary">"選取相片和影片顯示大小"</string> <string name="pref_gallery_size_dialogtitle">"相片大小"</string> <string-array name="pref_gallery_size_choices"> <item>"大"</item> <item>"小"</item> </string-array> - <!-- no translation found for pref_gallery_sort_title (7447949250045443386) --> - <skip /> - <!-- no translation found for pref_gallery_sort_summary (6644398051645595214) --> - <skip /> + <string name="pref_gallery_sort_title">"排序順序"</string> + <string name="pref_gallery_sort_summary">"選取相片和影片排序順序"</string> <string name="pref_gallery_sort_dialogtitle">"圖片排序"</string> <string-array name="pref_gallery_sort_choices"> <item>"最新的優先"</item> @@ -111,45 +103,30 @@ <string name="pref_camera_recordlocation_title">"在相片儲存位置資訊"</string> <string name="pref_camera_recordlocation_summary">"在相片中紀錄位置資訊"</string> <string name="pref_camera_videoquality_category">"影片品質"</string> - <!-- no translation found for pref_camera_videoquality_title (3836197291744160920) --> - <skip /> + <string name="pref_camera_videoquality_title">"選取影片品質"</string> <string name="pref_camera_videoquality_entry_0">"低 (適用於多媒體簡訊)"</string> <string name="pref_camera_videoquality_entry_1">"高 (適用於 SD 卡)"</string> <string name="pref_camera_videoquality_dialogtitle">"影片品質"</string> <string name="camerasettings">"設定"</string> - <!-- no translation found for image_gallery_NoImageView_text (409595259802877447) --> - <skip /> + <string name="image_gallery_NoImageView_text">"找不到媒體。"</string> <string name="pref_gallery_confirm_delete_title">"刪除確認"</string> - <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) --> - <skip /> + <string name="pref_gallery_confirm_delete_summary">"刪除相片或影片前要顯示確認"</string> <string name="details_panel_title">"詳細資料"</string> <string name="details_file_size">"檔案大小:"</string> <string name="details_image_resolution">"解析度:"</string> - <!-- no translation found for details_duration (1028116471387901402) --> - <skip /> + <string name="details_duration">"所需時間:"</string> <string name="details_date_taken">"拍攝日期:"</string> - <!-- no translation found for details_frame_rate (122397836963498191) --> - <skip /> - <!-- no translation found for details_bit_rate (5632311789455402186) --> - <skip /> - <!-- no translation found for details_codec (5580300450432398126) --> - <skip /> - <!-- no translation found for details_format (3700860266600796363) --> - <skip /> - <!-- no translation found for details_dimension_x (4479200210424701240) --> - <skip /> - <!-- no translation found for details_ms (940634969189855292) --> - <skip /> - <!-- no translation found for details_hms (3215779248094151255) --> - <skip /> - <!-- no translation found for details_fps (2707670327505979317) --> - <skip /> - <!-- no translation found for details_kbps (59196416864960850) --> - <skip /> - <!-- no translation found for details_mbps (3978720645766601106) --> - <skip /> - <!-- no translation found for details_ok (6848594369924424312) --> - <skip /> + <string name="details_frame_rate">"影格速率:"</string> + <string name="details_bit_rate">"位元速率:"</string> + <string name="details_codec">"編碼器:"</string> + <string name="details_format">"格式:"</string> + <string name="details_dimension_x">"%1$d x %2$d"</string> + <string name="details_ms">"%1$02d:%2$02d"</string> + <string name="details_hms">"%1$d:%2$02d:%3$02d"</string> + <string name="details_fps">"%1$d fps"</string> + <string name="details_kbps">"%1$d Kbps"</string> + <string name="details_mbps">"%1$g Mbps"</string> + <string name="details_ok">"確定"</string> <string name="context_menu_header">"圖片選項"</string> <string name="video_context_menu_header">"影片選項"</string> <string name="multiface_crop_help">"選取版面開始裁切"</string> @@ -165,16 +142,10 @@ <string name="loading_video">"正在載入影片…"</string> <string name="spaceIsLow_title">"空間不足"</string> <string name="spaceIsLow_content">"您的 SD 卡空間已快用完。請變更品質設定或刪除圖庫中的項目。"</string> - <!-- no translation found for resume_playing_title (8996677350649355013) --> - <skip /> - <!-- no translation found for resume_playing_message (5184414518126703481) --> - <skip /> - <!-- no translation found for resume_playing_resume (3847915469173852416) --> - <skip /> - <!-- no translation found for resume_playing_restart (5471008499835769292) --> - <skip /> - <!-- no translation found for gadget_title (259405922673466798) --> - <skip /> - <!-- no translation found for video_file_name_format (8555507706353616970) --> - <skip /> + <string name="resume_playing_title">"繼續播放影片"</string> + <string name="resume_playing_message">"要從 %s 繼續播放嗎?"</string> + <string name="resume_playing_resume">"繼續播放"</string> + <string name="resume_playing_restart">"重新開始"</string> + <string name="gadget_title">"相框"</string> + <string name="video_file_name_format">"\'video\'-yyyy-MM-dd-HH-mm-ss"</string> </resources> diff --git a/res/values/dimens.xml b/res/values/dimens.xml new file mode 100644 index 0000000..5ec105b --- /dev/null +++ b/res/values/dimens.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* //device/apps/common/assets/res/any/dimens.xml +** +** 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. +*/ +--> +<resources> + <dimen name="hint_y_offset">64dip</dimen> +</resources> diff --git a/res/values/styles.xml b/res/values/styles.xml index 2000bf9..bad65fe 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -18,6 +18,24 @@ --> <resources xmlns:android="http://schemas.android.com/apk/res/android"> + <style name="OnScreenHintTextAppearance"> + <item name="android:textColor">@android:color/primary_text_dark</item> + <item name="android:textColorHighlight">#FFFF9200</item> + <item name="android:textColorHint">#808080</item> + <item name="android:textColorLink">#5C5CFF</item> + <item name="android:textSize">16sp</item> + <item name="android:textStyle">normal</item> + </style> + <style name="OnScreenHintTextAppearance.Small"> + <item name="android:textSize">14sp</item> + <item name="android:textStyle">normal</item> + <item name="android:textColor">@android:color/secondary_text_dark</item> + </style> + <style name="Animation" /> + <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">true</item> <item name="android:clickable">true</item> @@ -30,7 +48,7 @@ <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:layout_marginLeft">32dip</item> + <item name="android:layout_marginLeft">30dip</item> <item name="android:drawablePadding">3dip</item> </style> </resources> diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java index 079528b..9bf101c 100644 --- a/src/com/android/camera/Camera.java +++ b/src/com/android/camera/Camera.java @@ -16,7 +16,12 @@ package com.android.camera; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; import java.io.File; +import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; @@ -68,12 +73,13 @@ import android.util.Log; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; -import android.view.OrientationListener; +import android.view.OrientationEventListener; import android.view.SurfaceHolder; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.view.MenuItem.OnMenuItemClickListener; +import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; @@ -81,8 +87,6 @@ import android.view.animation.AnimationUtils; import android.widget.ImageView; import android.widget.Toast; -import com.android.camera.ImageManager.IImageList; - public class Camera extends Activity implements View.OnClickListener, ShutterButton.OnShutterButtonListener, SurfaceHolder.Callback { @@ -117,8 +121,8 @@ public class Camera extends Activity implements View.OnClickListener, public static final int MENU_SAVE_CAMERA_VIDEO_DONE = 37; private Toast mToast; - private OrientationListener mOrientationListener; - private int mLastOrientation = OrientationListener.ORIENTATION_UNKNOWN; + private OrientationEventListener mOrientationListener; + private int mLastOrientation = OrientationEventListener.ORIENTATION_UNKNOWN; private SharedPreferences mPreferences; private static final int IDLE = 1; @@ -132,7 +136,7 @@ public class Camera extends Activity implements View.OnClickListener, private android.hardware.Camera.Parameters mParameters; private VideoPreview mSurfaceView; private SurfaceHolder mSurfaceHolder = null; - private ImageView mBlackout = null; + private View mBlackout = null; private int mOriginalViewFinderWidth, mOriginalViewFinderHeight; private int mViewFinderWidth, mViewFinderHeight; @@ -165,6 +169,7 @@ public class Camera extends Activity implements View.OnClickListener, private Drawable[] mThumbnails; private boolean mShouldTransitionThumbnails; private Uri mLastPictureUri; + private Bitmap mLastPictureThumb; private LocationManager mLocationManager = null; private ShutterButton mShutterButton; @@ -182,6 +187,7 @@ public class Camera extends Activity implements View.OnClickListener, private boolean mKeepAndRestartPreview; + // mPostCaptureAlert is non-null only if isImageCaptureIntent() is true. private View mPostCaptureAlert; @@ -257,18 +263,16 @@ public class Camera extends Activity implements View.OnClickListener, 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 - showStorageToast(); + updateStorageHint(); } else if (action.equals(Intent.ACTION_MEDIA_UNMOUNTED) || action.equals(Intent.ACTION_MEDIA_CHECKING)) { // SD card unavailable mPicturesRemaining = MenuHelper.NO_STORAGE_ERROR; - showStorageToast(mPicturesRemaining); + updateStorageHint(mPicturesRemaining); } else if (action.equals(Intent.ACTION_MEDIA_SCANNER_STARTED)) { Toast.makeText(Camera.this, getResources().getString(R.string.wait), 5000); } else if (action.equals(Intent.ACTION_MEDIA_SCANNER_FINISHED)) { - showStorageToast(); + updateStorageHint(); } } }; @@ -321,7 +325,6 @@ public class Camera extends Activity implements View.OnClickListener, Log.v(TAG, "********** Total shutter lag " + (now - mShutterPressTime) + " ms"); } if (mClickSound != null) { - mClickSound.seekTo(0); mClickSound.start(); } } @@ -450,17 +453,18 @@ public class Camera extends Activity implements View.OnClickListener, startTiming(); } long dateTaken = System.currentTimeMillis(); + String name = createName(dateTaken) + ".jpg"; mLastContentUri = ImageManager.instance().addImage( Camera.this, mContentResolver, - createName(dateTaken), + name, "", dateTaken, // location for the database goes here loc, 0, // the dsp will use the right orientation so don't "double set it" ImageManager.CAMERA_IMAGE_BUCKET_NAME, - null); + name); if (mLastContentUri == null) { // this means we got an error @@ -626,6 +630,10 @@ public class Camera extends Activity implements View.OnClickListener, mCameraDevice.setParameters(mParameters); mCameraDevice.takePicture(mShutterCallback, mRawPictureCallback, new JpegPictureCallback(loc)); + // Prepare the sound to play in shutter callback. + if (mClickSound != null) { + mClickSound.seekTo(0); + } mBlackout.setVisibility(View.VISIBLE); // Comment this out for now until we can decode the preview frame. This currently @@ -652,7 +660,7 @@ public class Camera extends Activity implements View.OnClickListener, // cached value which was calculated when the preview was restarted. if (DEBUG_TIME_OPERATIONS) mShutterPressTime = System.currentTimeMillis(); if (mPicturesRemaining < 1) { - showStorageToast(mPicturesRemaining); + updateStorageHint(mPicturesRemaining); return; } @@ -713,6 +721,7 @@ public class Camera extends Activity implements View.OnClickListener, if (mLastPictureButton.getVisibility() != View.VISIBLE) { mShouldShowLastPictureButton = true; } + mLastPictureThumb = lastPictureThumb; mLastPictureUri = uri; } @@ -759,12 +768,21 @@ public class Camera extends Activity implements View.OnClickListener, public void onCreate(Bundle icicle) { super.onCreate(icicle); + // To reduce startup time, we open camera device in another thread. + // We make sure the camera is opened at the end of onCreate. + Thread openCameraThread = new Thread(new Runnable() { + public void run() { + mCameraDevice = android.hardware.Camera.open(); + } + }); + openCameraThread.start(); + // To reduce startup time, we run some service creation code in another thread. // We make sure the services are loaded at the end of onCreate(). Thread loadServiceThread = new Thread(new Runnable() { public void run() { mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); - mOrientationListener = new OrientationListener(Camera.this) { + mOrientationListener = new OrientationEventListener(Camera.this) { public void onOrientationChanged(int orientation) { mLastOrientation = orientation; } @@ -776,9 +794,6 @@ public class Camera extends Activity implements View.OnClickListener, mPreferences = PreferenceManager.getDefaultSharedPreferences(this); mContentResolver = getContentResolver(); - //setDefaultKeyMode(DEFAULT_KEYS_SHORTCUT); - requestWindowFeature(Window.FEATURE_PROGRESS); - Window win = getWindow(); win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); setContentView(R.layout.camera); @@ -792,28 +807,12 @@ public class Camera extends Activity implements View.OnClickListener, holder.addCallback(this); holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); - mBlackout = (ImageView) findViewById(R.id.blackout); - mBlackout.setBackgroundDrawable(new ColorDrawable(0xFF000000)); + mBlackout = findViewById(R.id.blackout); - mLastPictureButton = (ImageView) findViewById(R.id.last_picture_button); if (!isImageCaptureIntent()) { - ImageManager.IImageList images = ImageManager.instance().allImages( - this, - getContentResolver(), - ImageManager.DataLocation.ALL, - ImageManager.INCLUDE_IMAGES, - ImageManager.SORT_DESCENDING, - ImageManager.CAMERA_IMAGE_BUCKET_ID); - ImageManager.IImage lastPicture = - images.isEmpty() ? null : images.getImageAt(0); + mLastPictureButton = (ImageView) findViewById(R.id.last_picture_button); mLastPictureButton.setOnClickListener(this); - if (lastPicture == null) { - mLastPictureButton.setVisibility(View.GONE); - } else { - Bitmap miniThumb = lastPicture.miniThumbBitmap(); - setLastPictureThumb(miniThumb, lastPicture.fullSizeImageUri()); - } - images.deactivate(); + loadLastThumb(); } mShutterButton = (ShutterButton) findViewById(R.id.shutter_button); @@ -840,10 +839,17 @@ public class Camera extends Activity implements View.OnClickListener, mFocusBlinkAnimation.setRepeatCount(Animation.INFINITE); mFocusBlinkAnimation.setRepeatMode(Animation.REVERSE); - mPostCaptureAlert = findViewById(R.id.post_picture_panel); + // We load the post_picture_panel layout only if it is needed. + if (isImageCaptureIntent()) { + ViewGroup cameraView = (ViewGroup)findViewById(R.id.camera); + getLayoutInflater().inflate(R.layout.post_picture_panel, + cameraView); + mPostCaptureAlert = findViewById(R.id.post_picture_panel); + } // Make sure the services are loaded. try { + openCameraThread.join(); loadServiceThread.join(); } catch (InterruptedException ex) { } @@ -860,7 +866,7 @@ public class Camera extends Activity implements View.OnClickListener, if (!storageOK) { mHandler.post(new Runnable() { public void run() { - showStorageToast(mPicturesRemaining); + updateStorageHint(mPicturesRemaining); } }); } @@ -1005,12 +1011,37 @@ public class Camera extends Activity implements View.OnClickListener, } } - private void showStorageToast() { - MenuHelper.showStorageToast(this); + private void updateStorageHint() { + updateStorageHint(MenuHelper.calculatePicturesRemaining()); } - private void showStorageToast(int remainingPictures) { - MenuHelper.showStorageToast(this, remainingPictures); + private OnScreenHint mStorageHint; + + private void updateStorageHint(int remaining) { + String noStorageText = null; + + if (remaining == MenuHelper.NO_STORAGE_ERROR) { + String state = Environment.getExternalStorageState(); + if (state == Environment.MEDIA_CHECKING) { + noStorageText = getString(R.string.preparing_sd); + } else { + noStorageText = getString(R.string.no_storage); + } + } else if (remaining < 1) { + noStorageText = getString(R.string.not_enough_space); + } + + if (noStorageText != null) { + if (mStorageHint == null) { + mStorageHint = OnScreenHint.makeText(this, noStorageText); + } else { + mStorageHint.setText(noStorageText); + } + mStorageHint.show(); + } else if (mStorageHint != null) { + mStorageHint.cancel(); + mStorageHint = null; + } } @Override @@ -1048,20 +1079,78 @@ public class Camera extends Activity implements View.OnClickListener, } mBlackout.setVisibility(View.GONE); + } - if (mLastPictureUri != null) { - IImageList list = ImageManager.makeImageList(mLastPictureUri, this, - ImageManager.SORT_ASCENDING); - if (list.getImageForUri(mLastPictureUri) == null) { - mLastPictureUri = null; - mLastPictureButton.setVisibility(View.GONE); + private ImageManager.DataLocation dataLocation() { + return ImageManager.DataLocation.EXTERNAL; + } + + private static final int BUFSIZE = 4096; + + // Stores the thumbnail and URI of last-picture-taken to SD card, so we can + // load it the next time the Camera app starts. + private void storeLastThumb() { + if (mLastPictureUri != null && mLastPictureThumb != null) { + try { + FileOutputStream f = new FileOutputStream(ImageManager.getLastThumbPath()); + try { + BufferedOutputStream b = new BufferedOutputStream(f, BUFSIZE); + try { + DataOutputStream d = new DataOutputStream(b); + try { + d.writeUTF(mLastPictureUri.toString()); + mLastPictureThumb.compress(Bitmap.CompressFormat.PNG, 100, d); + } finally { + d.close(); + b = null; + f = null; + } + } finally { + if (b != null) { + b.close(); + f = null; + } + } + } finally { + if (f != null) { + f.close(); + } + } + } catch (IOException e) { } - list.deactivate(); } } - private ImageManager.DataLocation dataLocation() { - return ImageManager.DataLocation.EXTERNAL; + // Loads the thumbnail and URI of last-picture-taken from SD card. + private void loadLastThumb() { + try { + FileInputStream f = new FileInputStream(ImageManager.getLastThumbPath()); + try { + BufferedInputStream b = new BufferedInputStream(f, BUFSIZE); + try { + DataInputStream d = new DataInputStream(b); + try { + Uri lastUri = Uri.parse(d.readUTF()); + Bitmap lastThumb = BitmapFactory.decodeStream(d); + setLastPictureThumb(lastThumb, lastUri); + } finally { + d.close(); + b = null; + f = null; + } + } finally { + if (b != null) { + b.close(); + f = null; + } + } + } finally { + if (f != null) { + f.close(); + } + } + } catch (IOException e) { + } } @Override @@ -1096,6 +1185,11 @@ public class Camera extends Activity implements View.OnClickListener, mFocusToneGenerator = null; } + storeLastThumb(); + if (mStorageHint != null) { + mStorageHint.cancel(); + mStorageHint = null; + } super.onPause(); } @@ -1184,6 +1278,9 @@ public class Camera extends Activity implements View.OnClickListener, // If we get a dpad center event without any focused view, move the // focus to the shutter button and press it. if (event.getRepeatCount() == 0) { + // Start auto-focus immediately to reduce shutter lag. After the shutter button + // gets the focus, doFocus() will be called again but it is fine. + doFocus(true); if (mShutterButton.isInTouchMode()) { mShutterButton.requestFocusFromTouch(); } else { @@ -1299,7 +1396,7 @@ public class Camera extends Activity implements View.OnClickListener, Animation a = mShowLastPictureButtonAnimation; a.setDuration(500); mLastPictureButton.setAnimation(a); - } + } if (mShouldTransitionThumbnails) { mShouldTransitionThumbnails = false; @@ -1606,10 +1703,8 @@ public class Camera extends Activity implements View.OnClickListener, } private void showPostCaptureAlert() { - boolean isPick = isImageCaptureIntent(); - int pickVisible = isPick ? View.VISIBLE : View.GONE; - mPostCaptureAlert.setVisibility(pickVisible); - if (isPick) { + if (isImageCaptureIntent()) { + mPostCaptureAlert.setVisibility(View.VISIBLE); int[] pickIds = {R.id.attach, R.id.cancel}; for(int id : pickIds) { View view = mPostCaptureAlert.findViewById(id); @@ -1622,7 +1717,9 @@ public class Camera extends Activity implements View.OnClickListener, } private void hidePostCaptureAlert() { - mPostCaptureAlert.setVisibility(View.GONE); + if (isImageCaptureIntent()) { + mPostCaptureAlert.setVisibility(View.INVISIBLE); + } } @Override diff --git a/src/com/android/camera/ImageGallery2.java b/src/com/android/camera/ImageGallery2.java index 89afd9e..566bfcb 100644 --- a/src/com/android/camera/ImageGallery2.java +++ b/src/com/android/camera/ImageGallery2.java @@ -763,7 +763,7 @@ public class ImageGallery2 extends Activity { setVerticalScrollBarEnabled(true); initializeScrollbars(context.obtainStyledAttributes(android.R.styleable.View)); - mGestureDetector = new GestureDetector(context, new SimpleOnGestureListener() { + mGestureDetector = new GestureDetector(context, new SimpleOnGestureListener() { @Override public boolean onDown(MotionEvent e) { if (mScroller != null && !mScroller.isFinished()) { @@ -1464,7 +1464,8 @@ public class ImageGallery2 extends Activity { } return retVal; - }} + } + } Bitmap resizeBitmap(Bitmap b) { // assume they're both square for now diff --git a/src/com/android/camera/ImageManager.java b/src/com/android/camera/ImageManager.java index fb02f9e..4a83958 100755 --- a/src/com/android/camera/ImageManager.java +++ b/src/com/android/camera/ImageManager.java @@ -691,7 +691,17 @@ public class ImageManager { dbMagic = mMiniThumbMagic; byte [] data = mContainer.getMiniThumbFromFile(id, sMiniThumbData, dbMagic); if (data == null) { - dbMagic = ((BaseImageList)getContainer()).checkThumbnail(this, getCursor(), getRow()); + byte[][] createdThumbData = new byte[1][]; + try { + dbMagic = ((BaseImageList)getContainer()).checkThumbnail(this, getCursor(), + getRow(), createdThumbData); + } catch (IOException ex) { + // Typically IOException because the sd card is full. + // But createdThumbData may have been filled in, so continue on. + } + data = createdThumbData[0]; + } + if (data == null) { data = mContainer.getMiniThumbFromFile(id, sMiniThumbData, dbMagic); } if (data == null) { @@ -724,7 +734,7 @@ public class ImageManager { mContainer.mCache.remove(mId); } - protected void saveMiniThumb(Bitmap source) { + protected void saveMiniThumb(Bitmap source) throws IOException { mContainer.saveMiniThumbToFile(source, fullSizeImageId(), 0); } @@ -1039,13 +1049,33 @@ public class ImageManager { } // returns id - public long checkThumbnail(BaseImage existingImage, Cursor c, int i) { + public long checkThumbnail(BaseImage existingImage, Cursor c, int i) throws IOException { + return checkThumbnail(existingImage, c, i, null); + } + + /** + * Checks to see if a mini thumbnail exists in the cache. If not, tries to create it and + * add it to the cache. + * @param existingImage + * @param c + * @param i + * @param createdThumbnailData if this parameter is non-null, and a new mini-thumbnail + * bitmap is created, the new bitmap's data will be stored in createdThumbnailData[0]. + * Note that if the sdcard is full, it's possible that + * createdThumbnailData[0] will be set even if the method throws an IOException. This is + * actually useful, because it allows the caller to use the created thumbnail even if + * the sdcard is full. + * @return + * @throws IOException + */ + public long checkThumbnail(BaseImage existingImage, Cursor c, int i, + byte[][] createdThumbnailData) throws IOException { long magic, fileMagic = 0, id; try { mLock.lock(); if (existingImage == null) { // if we don't have an Image object then get the id and magic from - // the cursor. Synchonize on the cursor object. + // the cursor. Synchronize on the cursor object. synchronized (c) { if (!c.moveToPosition(i)) { return -1; @@ -1090,7 +1120,6 @@ public class ImageManager { // If we can't retrieve the thumbnail, first check if there is one embedded in the // EXIF data. If not, or it's not big enough, decompress the full size image. Bitmap bitmap = null; - String filePath = null; synchronized (c) { if (c.moveToPosition(i)) { @@ -1129,8 +1158,11 @@ public class ImageManager { magic = mRandom.nextLong(); } while (magic == 0); if (bitmap != null) { - saveMiniThumbToFile(bitmap, id, magic); - bitmap.recycle(); + byte [] data = miniThumbData(bitmap); + if (createdThumbnailData != null) { + createdThumbnailData[0] = data; + } + saveMiniThumbToFile(data, id, magic); } synchronized (c) { @@ -1483,7 +1515,12 @@ public class ImageManager { mCursorDeactivated = false; } - protected void saveMiniThumbToFile(Bitmap source, long id, long magic) { + protected void saveMiniThumbToFile(Bitmap bitmap, long id, long magic) throws IOException { + byte[] data = miniThumbData(bitmap); + saveMiniThumbToFile(data, id, magic); + } + + protected void saveMiniThumbToFile(byte[] data, long id, long magic) throws IOException { RandomAccessFile r = miniThumbDataFile(); if (r == null) return; @@ -1493,7 +1530,6 @@ public class ImageManager { synchronized (r) { try { long t1 = System.currentTimeMillis(); - byte [] data = miniThumbData(source); long t2 = System.currentTimeMillis(); if (data != null) { if (data.length > sBytesPerMiniThumb) { @@ -1518,9 +1554,8 @@ public class ImageManager { if (VERBOSE) Log.v(TAG, "saveMiniThumbToFile took " + (t3-t0) + "; " + (t1-t0) + " " + (t2-t1) + " " + (t3-t2)); } } catch (IOException ex) { - if (VERBOSE) { - Log.e(TAG, "couldn't save mini thumbnail data for " + id + "; " + ex.toString()); - } + Log.e(TAG, "couldn't save mini thumbnail data for " + id + "; " + ex.toString()); + throw ex; } } } @@ -1929,7 +1964,11 @@ public class ImageManager { long t4 = System.currentTimeMillis(); checkCanceled(); if (VERBOSE) Log.v(TAG, ">>>>>>>>>>>>>>>>>>>>> rotating by " + orientation); - saveMiniThumb(rotate(thumbnail, orientation)); + try { + saveMiniThumb(rotate(thumbnail, orientation)); + } catch (IOException e) { + // Ignore if unable to save thumb. + } long t5 = System.currentTimeMillis(); checkCanceled(); @@ -2007,7 +2046,11 @@ public class ImageManager { // setting this to zero will force the call to checkCursor to generate fresh thumbs mMiniThumbMagic = 0; - mContainer.checkThumbnail(this, mContainer.getCursor(), this.getRow()); + try { + mContainer.checkThumbnail(this, mContainer.getCursor(), this.getRow()); + } catch (IOException e) { + // Ignore inability to store mini thumbnail. + } return true; } @@ -3604,8 +3647,10 @@ public class ImageManager { return sInstance; } - - static public byte [] miniThumbData(Bitmap source) { + /** + * Creates a byte[] for a given bitmap of the desired size. Recycles the input bitmap. + */ + static public byte[] miniThumbData(Bitmap source) { if (source == null) return null; @@ -4130,4 +4175,9 @@ public class ImageManager { } return bitmap; } + + public static String getLastThumbPath() { + return Environment.getExternalStorageDirectory().toString() + + "/DCIM/.thumbnails/camera_last_thumb"; + } } diff --git a/src/com/android/camera/OnScreenHint.java b/src/com/android/camera/OnScreenHint.java new file mode 100644 index 0000000..96190a0 --- /dev/null +++ b/src/com/android/camera/OnScreenHint.java @@ -0,0 +1,296 @@ +/* + * 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.INotificationManager; +import android.app.ITransientNotification; +import android.content.Context; +import android.content.res.Resources; +import android.graphics.PixelFormat; +import android.os.RemoteException; +import android.os.Handler; +import android.os.ServiceManager; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.WindowManager; +import android.widget.TextView; + +/** + * A on-screen hint is a view containing a little message for the user and will + * be shown on the screen continuously. This class helps you create and show + * those. + * + * <p> + * When the view is shown to the user, appears as a floating view over the + * 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. + */ +public class OnScreenHint { + static final String TAG = "OnScreenHint"; + static final boolean localLOGV = false; + + final Context mContext; + int mGravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM; + int mX, mY; + float mHorizontalMargin; + float mVerticalMargin; + View mView; + View mNextView; + + private final WindowManager.LayoutParams mParams = new WindowManager.LayoutParams(); + private WindowManager mWM; + private final Handler mHandler = new Handler(); + + /** + * Construct an empty OnScreenHint object. You must call {@link #setView} before you + * can call {@link #show}. + * + * @param context The context to use. Usually your {@link android.app.Application} + * or {@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); + + mParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + mParams.width = WindowManager.LayoutParams.WRAP_CONTENT; + mParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE + | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE; + mParams.format = PixelFormat.TRANSLUCENT; + mParams.windowAnimations = R.style.Animation_OnScreenHint; + mParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_PANEL; + mParams.setTitle("OnScreenHint"); + } + + /** + * Show the view on the screen. + */ + public void show() { + if (mNextView == null) { + throw new RuntimeException("setView must have been called"); + } + if (localLOGV) Log.v(TAG, "SHOW: " + this); + mHandler.post(mShow); + } + + /** + * Close the view if it's showing. + */ + public void cancel() { + if (localLOGV) Log.v(TAG, "HIDE: " + this); + mHandler.post(mHide); + } + + /** + * Set the view to show. + * @see #getView + */ + public void setView(View view) { + mNextView = view; + } + + /** + * Return the view. + * @see #setView + */ + public View getView() { + return mNextView; + } + + /** + * Set the margins of the view. + * + * @param horizontalMargin The horizontal margin, in percentage of the + * container width, between the container's edges and the + * notification + * @param verticalMargin The vertical margin, in percentage of the + * container height, between the container's edges and the + * notification + */ + public void setMargin(float horizontalMargin, float verticalMargin) { + mHorizontalMargin = horizontalMargin; + mVerticalMargin = verticalMargin; + } + + /** + * Return the horizontal margin. + */ + public float getHorizontalMargin() { + return mHorizontalMargin; + } + + /** + * Return the vertical margin. + */ + public float getVerticalMargin() { + return mVerticalMargin; + } + + /** + * Set the location at which the notification should appear on the screen. + * @see android.view.Gravity + * @see #getGravity + */ + public void setGravity(int gravity, int xOffset, int yOffset) { + mGravity = gravity; + mX = xOffset; + mY = yOffset; + } + + /** + * Get the location at which the notification should appear on the screen. + * @see android.view.Gravity + * @see #getGravity + */ + public int getGravity() { + return mGravity; + } + + /** + * Return the X offset in pixels to apply to the gravity's location. + */ + public int getXOffset() { + return mX; + } + + /** + * Return the Y offset in pixels to apply to the gravity's location. + */ + public int getYOffset() { + return mY; + } + + /** + * Make a standard hint that just contains a text view. + * + * @param context The context to use. Usually your {@link android.app.Application} + * or {@link android.app.Activity} object. + * @param text The text to show. Can be formatted text. + * + */ + public static OnScreenHint makeText(Context context, CharSequence text) { + OnScreenHint result = new OnScreenHint(context); + + LayoutInflater inflate = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + View v = inflate.inflate(R.layout.on_screen_hint, null); + TextView tv = (TextView)v.findViewById(R.id.message); + tv.setText(text); + + result.mNextView = v; + + return result; + } + + /** + * Make a standard hint that just contains a text view with the text from a resource. + * + * @param context The context to use. Usually your {@link android.app.Application} + * or {@link android.app.Activity} object. + * @param resId The resource id of the string resource to use. Can be formatted text. + * + * @throws Resources.NotFoundException if the resource can't be found. + */ + public static OnScreenHint makeText(Context context, int resId) + throws Resources.NotFoundException { + return makeText(context, context.getResources().getText(resId)); + } + + /** + * Update the text in a OnScreenHint that was previously created using one of the makeText() methods. + * @param resId The new text for the OnScreenHint. + */ + public void setText(int resId) { + setText(mContext.getText(resId)); + } + + /** + * Update the text in a OnScreenHint that was previously created using one of the makeText() methods. + * @param s The new text for the OnScreenHint. + */ + public void setText(CharSequence s) { + if (mNextView == null) { + throw new RuntimeException("This OnScreenHint was not created with OnScreenHint.makeText()"); + } + TextView tv = (TextView) mNextView.findViewById(R.id.message); + if (tv == null) { + throw new RuntimeException("This OnScreenHint was not created with OnScreenHint.makeText()"); + } + tv.setText(s); + } + + private synchronized void handleShow() { + if (localLOGV) Log.v(TAG, "HANDLE SHOW: " + this + " mView=" + mView + + " mNextView=" + mNextView); + if (mView != mNextView) { + // remove the old view if necessary + handleHide(); + mView = mNextView; + final int gravity = mGravity; + mParams.gravity = gravity; + if ((gravity & Gravity.HORIZONTAL_GRAVITY_MASK) == Gravity.FILL_HORIZONTAL) { + mParams.horizontalWeight = 1.0f; + } + if ((gravity & Gravity.VERTICAL_GRAVITY_MASK) == Gravity.FILL_VERTICAL) { + mParams.verticalWeight = 1.0f; + } + mParams.x = mX; + mParams.y = mY; + mParams.verticalMargin = mVerticalMargin; + mParams.horizontalMargin = mHorizontalMargin; + if (mView.getParent() != null) { + if (localLOGV) Log.v( + TAG, "REMOVE! " + mView + " in " + this); + mWM.removeView(mView); + } + if (localLOGV) Log.v(TAG, "ADD! " + mView + " in " + this); + mWM.addView(mView, mParams); + } + } + + private synchronized void handleHide() { + if (localLOGV) Log.v(TAG, "HANDLE HIDE: " + this + " mView=" + mView); + if (mView != null) { + // note: checking parent() just to make sure the view has + // been added... i have seen cases where we get here when + // the view isn't yet added, so let's try not to crash. + if (mView.getParent() != null) { + if (localLOGV) Log.v( + TAG, "REMOVE! " + mView + " in " + this); + mWM.removeView(mView); + } + mView = null; + } + } + + private Runnable mShow = new Runnable() { + public void run() { + handleShow(); + } + }; + + private Runnable mHide = new Runnable() { + public void run() { + handleHide(); + } + }; +} + diff --git a/src/com/android/camera/VideoCamera.java b/src/com/android/camera/VideoCamera.java index e3b7ebe..05e33a6 100644 --- a/src/com/android/camera/VideoCamera.java +++ b/src/com/android/camera/VideoCamera.java @@ -17,6 +17,7 @@ package com.android.camera; import java.io.File; +import java.io.FileDescriptor; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -108,6 +109,7 @@ public class VideoCamera extends Activity implements View.OnClickListener, // The video file that the hardware camera is about to record into // (or is recording into.) private String mCameraVideoFilename; + private FileDescriptor mCameraVideoFileDescriptor; // The video file that has already been recorded, and that is being // examined by the user. @@ -197,16 +199,16 @@ public class VideoCamera extends Activity implements View.OnClickListener, // SD card available // TODO put up a "please wait" message // TODO also listen for the media scanner finished message - showStorageToast(); + updateStorageHint(); mHasSdCard = true; } else if (action.equals(Intent.ACTION_MEDIA_UNMOUNTED)) { // SD card unavailable - showStorageToast(); + updateStorageHint(); mHasSdCard = false; } else if (action.equals(Intent.ACTION_MEDIA_SCANNER_STARTED)) { Toast.makeText(VideoCamera.this, getResources().getString(R.string.wait), 5000); } else if (action.equals(Intent.ACTION_MEDIA_SCANNER_FINISHED)) { - showStorageToast(); + updateStorageHint(); } } }; @@ -273,7 +275,7 @@ public class VideoCamera extends Activity implements View.OnClickListener, if (!storageOK) { mHandler.post(new Runnable() { public void run() { - showStorageToast(); + updateStorageHint(); } }); } @@ -285,6 +287,10 @@ public class VideoCamera extends Activity implements View.OnClickListener, public void onClick(View v) { switch (v.getId()) { + case R.id.gallery: + MenuHelper.gotoCameraVideoGallery(this); + break; + case R.id.attach: doReturnToCaller(true); break; @@ -362,15 +368,30 @@ public class VideoCamera extends Activity implements View.OnClickListener, hideVideoFrameAndStartPreview(); } - private void showStorageToast() { - long remaining = getAvailableStorage(); + private OnScreenHint mStorageHint; + private void updateStorageHint() { + long remaining = getAvailableStorage(); + String errorMessage = null; if (remaining == NO_STORAGE_ERROR) { - Toast.makeText(this, getString(R.string.no_storage), Toast.LENGTH_LONG).show(); + errorMessage = getString(R.string.no_storage); } else if (remaining < LOW_STORAGE_THRESHOLD) { - new AlertDialog.Builder(this).setTitle(R.string.spaceIsLow_title) - .setMessage(R.string.spaceIsLow_content) - .show(); + errorMessage = getString(R.string.spaceIsLow_content); + if (mStorageHint != null) { + mStorageHint.cancel(); + mStorageHint = null; + } + } + if (errorMessage != null) { + if (mStorageHint == null) { + mStorageHint = OnScreenHint.makeText(this, errorMessage); + } else { + mStorageHint.setText(errorMessage); + } + mStorageHint.show(); + } else if (mStorageHint != null) { + mStorageHint.cancel(); + mStorageHint = null; } } @@ -431,6 +452,11 @@ public class VideoCamera extends Activity implements View.OnClickListener, } mBlackout.setVisibility(View.VISIBLE); setScreenTimeoutSystemDefault(); + + if (mStorageHint != null) { + mStorageHint.cancel(); + mStorageHint = null; + } } @Override @@ -576,53 +602,7 @@ public class VideoCamera extends Activity implements View.OnClickListener, int resultCode; if (success) { resultCode = RESULT_OK; - Uri saveUri = null; - - Bundle myExtras = getIntent().getExtras(); - if (myExtras != null) { - saveUri = (Uri) myExtras.getParcelable(MediaStore.EXTRA_OUTPUT); - } - - if (saveUri != null) { - // TODO: Record the video directly into the content provider stream when - // bug 1582062 is fixed. Until then we copy the video data from the - // original location to the requested location and then delete the original. - OutputStream outputStream = null; - InputStream inputStream = null; - - try { - inputStream = mContentResolver.openInputStream(mCurrentVideoUri); - outputStream = mContentResolver.openOutputStream(saveUri); - byte[] buffer = new byte[64*1024]; - while(true) { - int bytesRead = inputStream.read(buffer); - if (bytesRead < 0) { - break; - } - outputStream.write(buffer, 0, bytesRead); - } - } catch (IOException ex) { - Log.e(TAG, "Could not copy video file to Uri", ex); - } finally { - if (inputStream != null) { - try { - inputStream.close(); - } catch (IOException ex) { - Log.e(TAG, "Could not close video file", ex); - } - } - if (outputStream != null) { - try { - outputStream.close(); - } catch (IOException ex) { - Log.e(TAG, "Could not close output uri", ex); - } - } - deleteCurrentVideo(); - } - } else { - resultIntent.setData(mCurrentVideoUri); - } + resultIntent.setData(mCurrentVideoUri); } else { resultCode = RESULT_CANCELED; } @@ -651,8 +631,36 @@ public class VideoCamera extends Activity implements View.OnClickListener, } } + private void cleanupEmptyFile() { + if (mCameraVideoFilename != null) { + File f = new File(mCameraVideoFilename); + if (f.length() == 0 && f.delete()) { + Log.v(TAG, "Empty video file deleted: " + mCameraVideoFilename); + mCameraVideoFilename = null; + } + } + } + private void initializeVideo() { Log.v(TAG, "initializeVideo"); + boolean isCaptureIntent = isVideoCaptureIntent(); + Intent intent = getIntent(); + Bundle myExtras = intent.getExtras(); + + if (isCaptureIntent && myExtras != null) { + Uri saveUri = (Uri) myExtras.getParcelable(MediaStore.EXTRA_OUTPUT); + if (saveUri != null) { + try { + mCameraVideoFileDescriptor = mContentResolver. + openFileDescriptor(saveUri, "rw").getFileDescriptor(); + mCurrentVideoUri = saveUri; + } + catch (java.io.FileNotFoundException ex) { + // invalid uri + Log.e(TAG, ex.toString()); + } + } + } releaseMediaRecorder(); if (mSurfaceHolder == null) { @@ -670,17 +678,22 @@ public class VideoCamera extends Activity implements View.OnClickListener, } mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); - createVideoPath(); - mMediaRecorder.setOutputFile(mCameraVideoFilename); + + // We try Uri in intent first. If it doesn't work, use our own instead. + if (mCameraVideoFileDescriptor != null) { + mMediaRecorder.setOutputFile(mCameraVideoFileDescriptor); + } else { + createVideoPath(); + mMediaRecorder.setOutputFile(mCameraVideoFilename); + } + boolean videoQualityHigh = getBooleanPreference(CameraSettings.KEY_VIDEO_QUALITY, CameraSettings.DEFAULT_VIDEO_QUALITY_VALUE); - { - Intent intent = getIntent(); - if (intent.hasExtra(MediaStore.EXTRA_VIDEO_QUALITY)) { - int extraVideoQuality = intent.getIntExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0); - videoQualityHigh = (extraVideoQuality > 0); - } + + if (intent.hasExtra(MediaStore.EXTRA_VIDEO_QUALITY)) { + int extraVideoQuality = intent.getIntExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0); + videoQualityHigh = (extraVideoQuality > 0); } // Use the same frame rate for both, since internally @@ -712,6 +725,7 @@ public class VideoCamera extends Activity implements View.OnClickListener, private void releaseMediaRecorder() { Log.v(TAG, "Releasing media recorder."); if (mMediaRecorder != null) { + cleanupEmptyFile(); mMediaRecorder.reset(); mMediaRecorder.release(); mMediaRecorder = null; @@ -773,10 +787,12 @@ public class VideoCamera extends Activity implements View.OnClickListener, } private void registerVideo() { - Uri videoTable = Uri.parse("content://media/external/video/media"); - mCurrentVideoUri = mContentResolver.insert(videoTable, - mCurrentVideoValues); - Log.v(TAG, "Current video URI: " + mCurrentVideoUri); + if (mCameraVideoFileDescriptor == null) { + Uri videoTable = Uri.parse("content://media/external/video/media"); + mCurrentVideoUri = mContentResolver.insert(videoTable, + mCurrentVideoValues); + Log.v(TAG, "Current video URI: " + mCurrentVideoUri); + } mCurrentVideoValues = null; } @@ -837,10 +853,8 @@ public class VideoCamera extends Activity implements View.OnClickListener, Log.v(TAG, "startVideoRecording"); if (!mMediaRecorderRecording) { - if (!mHasSdCard) { - Toast.makeText(this, getString( - R.string.no_storage), Toast.LENGTH_LONG).show(); - Log.v(TAG, "No SD card, ignore start recording"); + if (mStorageHint != null) { + Log.v(TAG, "Storage issue, ignore the start request"); return; } @@ -882,7 +896,7 @@ public class VideoCamera extends Activity implements View.OnClickListener, private void showPostRecordingAlert() { int[] pickIds = {R.id.attach, R.id.cancel}; - int[] normalIds = {R.id.share, R.id.discard}; + int[] normalIds = {R.id.gallery, R.id.share, R.id.discard}; int[] alwaysOnIds = {R.id.play}; int[] hideIds = pickIds; int[] connectIds = normalIds; @@ -923,7 +937,6 @@ public class VideoCamera extends Activity implements View.OnClickListener, mMediaRecorder.stop(); mCurrentVideoFilename = mCameraVideoFilename; Log.v(TAG, "Setting current video filename: " + mCurrentVideoFilename); - mCameraVideoFilename = null; mNeedToRegisterRecording = true; mMediaRecorderRecording = false; } @@ -937,6 +950,7 @@ public class VideoCamera extends Activity implements View.OnClickListener, mNeedToRegisterRecording = false; } mCameraVideoFilename = null; + mCameraVideoFileDescriptor = null; } private void setScreenTimeoutSystemDefault() { diff --git a/src/com/android/camera/ViewImage.java b/src/com/android/camera/ViewImage.java index 56150ac..57d7051 100644 --- a/src/com/android/camera/ViewImage.java +++ b/src/com/android/camera/ViewImage.java @@ -39,6 +39,7 @@ import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; +import android.view.ViewConfiguration; import android.view.Window; import android.view.WindowManager; import android.view.animation.AlphaAnimation; @@ -237,7 +238,36 @@ public class ViewImage extends Activity implements View.OnClickListener // The event time of the previous touch up. private long mPreviousUpTime; // The duration in milliseconds we will wait to see if it is a double tap. - private static final int DOUBLE_TAP_TIMEOUT = 200; + private static final int DOUBLE_TAP_TIMEOUT = ViewConfiguration.getDoubleTapTimeout(); + + // Returns current scale step (numbered from 0 to 10). + private int getCurrentStep() { + float s = getScale(); + float b = sScaleRate; + int step = (int)Math.round(Math.log(s) / Math.log(b)); + return Math.max(0, Math.min(10, step)); + } + + // Returns the max scale step this image can use. + private int getMaxStep() { + float s = maxZoom(); + float b = sScaleRate; + int step = (int)Math.ceil(Math.log(s) / Math.log(b)); + return Math.max(0, Math.min(10, step)); + } + + // The setup we use here is to have 12 steps (only 0 to 10 are used), + // each separated by angle PI/6. We allow clockwise rotation (zoom-in) + // from the beginning position only. So we set counter clockwise bound + // to 0 and set clockwise bound to (2 - N/6) * PI. (clockwise angle + // is negative, and we need to mod 2*PI for the API to work.) + private void setZoomRingBounds() { + int max_step = getMaxStep(); + float max_angle = (2 - max_step / 6F) * (float)Math.PI; + mZoomRingController.setResetThumbAutomatically(false); + mZoomRingController.setThumbClockwiseBound(max_angle); + mZoomRingController.setThumbCounterclockwiseBound(0); + } // The zoom ring is set to visible by a double tap. private ZoomRingController mZoomRingController; @@ -246,38 +276,69 @@ public class ViewImage extends Activity implements View.OnClickListener public void onCenter(int x, int y) { } + public void onBeginPan() { + } + public boolean onPan(int deltaX, int deltaY) { postTranslate(-deltaX, -deltaY, sUseBounce); ImageViewTouch.this.center(true, true, false); return true; } + public void onEndPan() { + } + + // The clockwise angle is negative, so we need to mod 2*PI + private float stepToAngle(int step) { + float angle = step * (float)Math.PI / 6; + angle = (float)Math.PI * 2 - angle; + return angle; + } + + private int angleToStep(double angle) { + angle = Math.PI * 2 - angle; + int step = (int)Math.round(angle / (Math.PI / 6)); + return step; + } + public void onVisibilityChanged(boolean visible) { + if (visible) { + int step = getCurrentStep(); + float angle = stepToAngle(step); + mZoomRingController.setThumbAngle(angle); + } } - public void onBeginDrag(float startAngle) { + public void onBeginDrag() { + setZoomRingBounds(); } - public void onEndDrag(float endAngle) { + public void onEndDrag() { } public boolean onDragZoom(int deltaZoomLevel, int centerX, int centerY, float startAngle, float curAngle) { + setZoomRingBounds(); + int deltaStep = angleToStep(curAngle) - getCurrentStep(); + if ((deltaZoomLevel > 0) && (deltaStep < 0)) return false; + if ((deltaZoomLevel < 0) && (deltaStep > 0)) return false; + if ((deltaZoomLevel == 0) || (deltaStep == 0)) return false; + float oldScale = getScale(); // First move centerX/centerY to the center of the view. int deltaX = getWidth() / 2 - centerX; int deltaY = getHeight() / 2 - centerY; panBy(deltaX, deltaY); - + // Do zoom in/out. - while (deltaZoomLevel > 0) { + while (deltaStep > 0) { zoomIn(); - deltaZoomLevel--; + deltaStep--; } - while (deltaZoomLevel < 0) { + while (deltaStep < 0) { zoomOut(); - deltaZoomLevel++; + deltaStep++; } // Reverse the first centering. @@ -335,11 +396,16 @@ public class ViewImage extends Activity implements View.OnClickListener switch (m.getAction()) { case MotionEvent.ACTION_DOWN: - viewImage.setMode(MODE_NORMAL); - viewImage.showOnScreenControls(); - mLastXTouchPos = x; - mLastYTouchPos = y; - mTouchState = TOUCH_STATE_REST; + long downTime = m.getEventTime(); + if ((downTime - mPreviousUpTime) < DOUBLE_TAP_TIMEOUT) { + mZoomRingController.setVisible(true); + } else { + viewImage.setMode(MODE_NORMAL); + viewImage.showOnScreenControls(); + mLastXTouchPos = x; + mLastYTouchPos = y; + mTouchState = TOUCH_STATE_REST; + } break; case MotionEvent.ACTION_MOVE: if (x < TOUCH_AREA_WIDTH) { @@ -413,15 +479,7 @@ public class ViewImage extends Activity implements View.OnClickListener viewImage.mPrevImageView.setPressed(false); viewImage.mNextImageView.setPressed(false); mTouchState = TOUCH_STATE_REST; - - long eventTime = m.getEventTime(); - if (eventTime - mPreviousUpTime < DOUBLE_TAP_TIMEOUT) { - mZoomRingController.setVisible(true); - mPreviousUpTime = 0; - } else { - mPreviousUpTime = eventTime; - } - + mPreviousUpTime = m.getEventTime(); break; case MotionEvent.ACTION_CANCEL: viewImage.mPrevImageView.setPressed(false); @@ -530,6 +588,11 @@ public class ViewImage extends Activity implements View.OnClickListener return scrollHandler().getScrollX(); } + @Override + protected void onDetachedFromWindow() { + mZoomRingController.setVisible(false); + } + } static class ScrollHandler extends LinearLayout { @@ -1544,12 +1607,12 @@ public class ViewImage extends Activity implements View.OnClickListener mAllImages.deactivate(); - for (ImageViewTouchBase iv: mImageViews) { + for (ImageViewTouch iv: mImageViews) { iv.recycleBitmaps(); iv.setImageBitmap(null, true); } - for (ImageViewTouchBase iv: mSlideShowImageViews) { + for (ImageViewTouch iv: mSlideShowImageViews) { iv.recycleBitmaps(); iv.setImageBitmap(null, true); } |