summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/anim/on_screen_hint_accelerate.xml21
-rw-r--r--res/anim/on_screen_hint_decelerate.xml20
-rw-r--r--res/anim/on_screen_hint_enter.xml22
-rw-r--r--res/anim/on_screen_hint_exit.xml23
-rwxr-xr-xres/drawable/on_screen_hint_frame.9.pngbin0 -> 4328 bytes
-rw-r--r--res/layout/camera.xml70
-rw-r--r--res/layout/on_screen_hint.xml38
-rw-r--r--res/layout/post_picture_panel.xml39
-rw-r--r--res/layout/video_camera.xml12
-rw-r--r--res/layout/viewimage.xml4
-rw-r--r--res/values-cs/strings.xml87
-rw-r--r--res/values-de/strings.xml87
-rw-r--r--res/values-es/strings.xml97
-rw-r--r--res/values-fr/strings.xml87
-rw-r--r--res/values-it/strings.xml87
-rw-r--r--res/values-ja/strings.xml101
-rw-r--r--res/values-ko/strings.xml87
-rw-r--r--res/values-nl/strings.xml87
-rw-r--r--res/values-pl/strings.xml87
-rw-r--r--res/values-ru/strings.xml87
-rw-r--r--res/values-zh-rCN/strings.xml87
-rw-r--r--res/values-zh-rTW/strings.xml87
-rw-r--r--res/values/dimens.xml22
-rw-r--r--res/values/styles.xml20
-rw-r--r--src/com/android/camera/Camera.java215
-rw-r--r--src/com/android/camera/ImageGallery2.java5
-rwxr-xr-xsrc/com/android/camera/ImageManager.java82
-rw-r--r--src/com/android/camera/OnScreenHint.java296
-rw-r--r--src/com/android/camera/VideoCamera.java164
-rw-r--r--src/com/android/camera/ViewImage.java111
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
new file mode 100755
index 0000000..08c4f86
--- /dev/null
+++ b/res/drawable/on_screen_hint_frame.9.png
Binary files differ
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);
}