auto import from //branches/cupcake/...@130745
diff --git a/res/drawable/btn_camera_arrow_left.xml b/res/drawable/btn_camera_arrow_left.xml
index 9d7dcdd..494899b 100644
--- a/res/drawable/btn_camera_arrow_left.xml
+++ b/res/drawable/btn_camera_arrow_left.xml
@@ -16,12 +16,12 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_window_focused="false"
- android:drawable="@drawable/btn_camera_arrow_left_default" />
-
<item android:state_pressed="true"
android:drawable="@drawable/btn_camera_arrow_left_press" />
+ <item android:state_window_focused="true" android:state_focused="true"
+ android:drawable="@drawable/btn_camera_arrow_left_selected" />
+
<item
android:drawable="@drawable/btn_camera_arrow_left_default" />
diff --git a/res/drawable/btn_camera_arrow_left_selected.png b/res/drawable/btn_camera_arrow_left_selected.png
new file mode 100644
index 0000000..839704f
--- /dev/null
+++ b/res/drawable/btn_camera_arrow_left_selected.png
Binary files differ
diff --git a/res/drawable/btn_camera_arrow_right.xml b/res/drawable/btn_camera_arrow_right.xml
index cc6ee2d..1d0cc0c 100644
--- a/res/drawable/btn_camera_arrow_right.xml
+++ b/res/drawable/btn_camera_arrow_right.xml
@@ -16,12 +16,13 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_window_focused="false"
- android:drawable="@drawable/btn_camera_arrow_right_default" />
<item android:state_pressed="true"
android:drawable="@drawable/btn_camera_arrow_right_press" />
+ <item android:state_window_focused="true" android:state_focused="true"
+ android:drawable="@drawable/btn_camera_arrow_right_selected" />
+
<item
android:drawable="@drawable/btn_camera_arrow_right_default" />
diff --git a/res/drawable/btn_camera_arrow_right_selected.png b/res/drawable/btn_camera_arrow_right_selected.png
new file mode 100644
index 0000000..630a606
--- /dev/null
+++ b/res/drawable/btn_camera_arrow_right_selected.png
Binary files differ
diff --git a/res/drawable/frame_thumbnail_default.png b/res/drawable/frame_thumbnail_default.png
index 50f2ecf..3db932e 100644
--- a/res/drawable/frame_thumbnail_default.png
+++ b/res/drawable/frame_thumbnail_default.png
Binary files differ
diff --git a/res/drawable/frame_thumbnail_pressed.png b/res/drawable/frame_thumbnail_pressed.png
index f46ad06..b15aea7 100644
--- a/res/drawable/frame_thumbnail_pressed.png
+++ b/res/drawable/frame_thumbnail_pressed.png
Binary files differ
diff --git a/res/drawable/frame_thumbnail_selected.png b/res/drawable/frame_thumbnail_selected.png
index 2d32aa2..408b14a 100644
--- a/res/drawable/frame_thumbnail_selected.png
+++ b/res/drawable/frame_thumbnail_selected.png
Binary files differ
diff --git a/res/drawable/ic_btn_camera_default_background.png b/res/drawable/ic_btn_camera_default_background.png
index 68bdefd..c37a86e 100644
--- a/res/drawable/ic_btn_camera_default_background.png
+++ b/res/drawable/ic_btn_camera_default_background.png
Binary files differ
diff --git a/res/drawable/ic_btn_camera_pressed_background.png b/res/drawable/ic_btn_camera_pressed_background.png
index e5543e1..8707b8a 100644
--- a/res/drawable/ic_btn_camera_pressed_background.png
+++ b/res/drawable/ic_btn_camera_pressed_background.png
Binary files differ
diff --git a/res/drawable/ic_btn_camera_selected_background.png b/res/drawable/ic_btn_camera_selected_background.png
index 0d4ff1a..a6bbdb1 100644
--- a/res/drawable/ic_btn_camera_selected_background.png
+++ b/res/drawable/ic_btn_camera_selected_background.png
Binary files differ
diff --git a/res/drawable/ic_camera_bar_indicator_record_combo.xml b/res/drawable/ic_camera_bar_indicator_record_combo.xml
deleted file mode 100644
index 0b01f2e..0000000
--- a/res/drawable/ic_camera_bar_indicator_record_combo.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_pressed="true"
- android:drawable="@drawable/ic_camera_bar_indicator_record_pressed" />
- <item android:state_window_focused="true" android:state_focused="true"
- android:drawable="@drawable/ic_camera_bar_indicator_record_selected" />
- <item android:drawable="@drawable/ic_camera_bar_indicator_record" />
-
-</selector>
diff --git a/res/drawable/ic_camera_bar_indicator_record_pressed.png b/res/drawable/ic_camera_bar_indicator_record_pressed.png
deleted file mode 100644
index 517a973..0000000
--- a/res/drawable/ic_camera_bar_indicator_record_pressed.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/ic_camera_bar_indicator_record_selected.png b/res/drawable/ic_camera_bar_indicator_record_selected.png
deleted file mode 100644
index 4965401..0000000
--- a/res/drawable/ic_camera_bar_indicator_record_selected.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/popup_camera_toast.9.png b/res/drawable/popup_camera_toast.9.png
deleted file mode 100644
index c1f0c1f..0000000
--- a/res/drawable/popup_camera_toast.9.png
+++ /dev/null
Binary files differ
diff --git a/res/layout/camera.xml b/res/layout/camera.xml
index 46eba7f..340a08c 100644
--- a/res/layout/camera.xml
+++ b/res/layout/camera.xml
@@ -32,7 +32,7 @@
android:visibility="invisible" />
<com.android.camera.ShutterButton
- android:id="@+id/mode_indicator"
+ android:id="@+id/shutter_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_camera_indicator_photo"
@@ -42,7 +42,7 @@
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginRight="50dip"
- android:layout_marginTop="10dip"
+ android:layout_marginTop="12dip"
android:scaleType="center" />
<ImageView
@@ -50,33 +50,46 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_camera_indicator_auto_focus_green"
- android:layout_alignLeft="@id/mode_indicator"
- android:layout_alignTop="@id/mode_indicator"
+ android:layout_alignLeft="@id/shutter_button"
+ android:layout_alignTop="@id/shutter_button"
android:layout_marginLeft="39dip"
android:layout_marginTop="16dip"
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="75dip"
- android:layout_height="75dip"
+ android:layout_width="72dip"
+ android:layout_height="72dip"
android:clickable="true"
android:focusable="true"
- android:layout_alignParentLeft="true"
- android:layout_alignParentBottom="true"
- android:layout_marginLeft="10dip"
- android:layout_marginBottom="10dip" />
-
- <TextView
- android:id="@+id/hint_toast"
- android:layout_alignParentRight="true"
- android:layout_alignParentTop="true"
- android:background="@drawable/popup_camera_toast"
- android:layout_width="200dip"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:text="@string/camera_button_hint"
- android:textSize="18sp" />
+ android:layout_alignTop="@id/shutter_button"
+ android:layout_toLeftOf="@id/shutter_button"
+ android:layout_marginRight="20dip" />
</RelativeLayout>
diff --git a/res/layout/video_camera.xml b/res/layout/video_camera.xml
index 0ffaf5a..e853e02 100644
--- a/res/layout/video_camera.xml
+++ b/res/layout/video_camera.xml
@@ -40,8 +40,8 @@
android:visibility="invisible"
/>
- <ImageView
- android:id="@+id/mode_indicator"
+ <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_video"
@@ -50,7 +50,7 @@
android:focusable="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
- android:layout_marginRight="50dip"
+ android:layout_marginRight="55dip"
android:layout_marginTop="10dip"
android:scaleType="center"/>
@@ -61,8 +61,8 @@
android:id="@+id/recording_time"
android:layout_width="90dip"
android:layout_height="wrap_content"
- android:layout_toLeftOf="@id/mode_indicator"
- android:layout_alignTop="@id/mode_indicator"
+ android:layout_toLeftOf="@id/shutter_button"
+ android:layout_alignTop="@id/shutter_button"
android:layout_marginTop="20dip"
android:layout_marginRight="6dip"
android:paddingRight="2dip"
@@ -75,25 +75,13 @@
android:textSize="20dip"
android:textStyle="bold"
android:visibility="gone"/>
-
- <TextView
- android:id="@+id/hint_toast"
- android:layout_alignParentRight="true"
- android:layout_alignParentTop="true"
- android:background="@drawable/popup_camera_toast"
- android:layout_width="200dip"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:text="@string/video_camera_button_hint"
- android:textSize="18sp"/>
<LinearLayout
android:visibility="gone"
android:id="@+id/post_picture_panel"
- android:layout_alignTop="@id/mode_indicator"
- android:layout_toLeftOf="@id/mode_indicator"
- android:paddingLeft="7dip"
- android:paddingRight="15dip"
+ android:layout_alignTop="@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">
@@ -101,40 +89,30 @@
<com.android.camera.ActionMenuButton
android:id="@+id/play"
android:drawableTop="@drawable/ic_menu_camera_play"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
android:text="@string/camera_play"
style="@style/OnscreenActionIcon"
/>
<com.android.camera.ActionMenuButton
android:id="@+id/share"
android:drawableTop="@drawable/ic_menu_share"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
android:text="@string/camera_share"
style="@style/OnscreenActionIcon"
/>
<com.android.camera.ActionMenuButton
android:id="@+id/discard"
android:drawableTop="@drawable/ic_menu_delete"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
android:text="@string/camera_toss"
style="@style/OnscreenActionIcon"
/>
<com.android.camera.ActionMenuButton
android:id="@+id/attach"
android:drawableTop="@drawable/ic_menu_attach"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
android:text="@string/camera_attach"
style="@style/OnscreenActionIcon"
/>
<com.android.camera.ActionMenuButton
android:id="@+id/cancel"
android:drawableTop="@drawable/ic_menu_cancel"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
android:text="@string/camera_cancel"
style="@style/OnscreenActionIcon"
/>
diff --git a/res/layout/viewimage.xml b/res/layout/viewimage.xml
index 6ba66d1..8d52ea1 100644
--- a/res/layout/viewimage.xml
+++ b/res/layout/viewimage.xml
@@ -76,15 +76,27 @@
</view>
</AbsoluteLayout>
+ <ImageView
+ android:visibility="gone"
+ 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:clickable="true"
+ android:focusable="true"
+ android:layout_alignParentRight="true"
+ android:layout_alignParentTop="true"
+ android:layout_marginRight="50dip"
+ android:layout_marginTop="12dip"
+ android:scaleType="center"/>
+
<LinearLayout
android:visibility="gone"
android:id="@+id/action_icon_panel"
- android:layout_alignParentTop="true"
- android:layout_alignParentRight="true"
- android:paddingLeft="7dip"
- android:paddingRight="18dip"
- android:paddingTop="6dip"
- android:paddingBottom="6dip"
+ 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">
@@ -92,66 +104,40 @@
<com.android.camera.ActionMenuButton
android:id="@+id/gallery"
android:drawableTop="@drawable/ic_menu_gallery"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
android:text="@string/camera_gallery"
style="@style/OnscreenActionIcon"
/>
<com.android.camera.ActionMenuButton
android:id="@+id/setas"
android:drawableTop="@drawable/ic_menu_set_as"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
android:text="@string/camera_set"
style="@style/OnscreenActionIcon"
/>
<com.android.camera.ActionMenuButton
android:id="@+id/share"
android:drawableTop="@drawable/ic_menu_share"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
android:text="@string/camera_share"
style="@style/OnscreenActionIcon"
/>
<com.android.camera.ActionMenuButton
android:id="@+id/discard"
android:drawableTop="@drawable/ic_menu_delete"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
android:text="@string/camera_toss"
style="@style/OnscreenActionIcon"
/>
<com.android.camera.ActionMenuButton
android:id="@+id/attach"
android:drawableTop="@drawable/ic_menu_attach"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
android:text="@string/camera_attach"
style="@style/OnscreenActionIcon"
/>
<com.android.camera.ActionMenuButton
android:id="@+id/cancel"
android:drawableTop="@drawable/ic_menu_cancel"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
android:text="@string/camera_cancel"
style="@style/OnscreenActionIcon"
/>
- <ImageView
- android:id="@+id/mode_indicator"
- 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:clickable="true"
- android:focusable="true"
- android:layout_alignParentRight="true"
- android:layout_alignParentTop="true"
- android:layout_marginRight="5dip"
- android:layout_marginTop="15dip"
- android:scaleType="center"/>
</LinearLayout>
-
<ImageView android:id="@+id/prev_image"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 705dbf2..8062838 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -29,6 +29,8 @@
<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="wallpaper">"Nastavování tapety, čekejte prosím..."</string>
<string name="savingImage">"Ukládání fotografie..."</string>
<string name="runningFaceDetection">"Čekejte prosím..."</string>
@@ -64,21 +66,22 @@
<string name="camera_gallery_photos_text">"Galerie"</string>
<string name="camera_pick_wallpaper">"Fotografie"</string>
<string name="camera_setas_wallpaper">"Tapeta"</string>
- <string name="camera_setas_wallpaper_drm">"Zakoupené fotografie"</string>
- <string name="camera_selectphoto">"Vybrat tuto fotografii"</string>
- <string name="camera_takenewphoto">"Pořídit novou fotografii"</string>
<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>
- <string name="pref_gallery_size_title">"Velikost fotografie"</string>
- <string name="pref_gallery_size_summary">"Vyberte velikost zobrazených fotografií"</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_dialogtitle">"Velikost fotografie"</string>
<string-array name="pref_gallery_size_choices">
<item>"Velké"</item>
<item>"Malé"</item>
</string-array>
- <string name="pref_gallery_sort_title">"Řazení fotografií"</string>
- <string name="pref_gallery_sort_summary">"Vyberte pořadí fotografií"</string>
+ <!-- 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_dialogtitle">"Řazení fotografií"</string>
<string-array name="pref_gallery_sort_choices">
<item>"Od nejnovějších"</item>
@@ -107,8 +110,6 @@
<string name="pref_gallery_slideshow_shuffle_summary">"Zobrazit fotografie v náhodném pořadí"</string>
<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_postpicturemenu_title">"Po pořízení obrázku zobrazit výzvu"</string>
- <string name="pref_camera_postpicturemenu_summary">"Po pořízení fotografie zobrazit nabídku činností (uložit, smazat, ...)"</string>
<string name="pref_camera_videoquality_category">"Kvalita videa"</string>
<!-- no translation found for pref_camera_videoquality_title (3836197291744160920) -->
<skip />
@@ -119,7 +120,8 @@
<!-- no translation found for image_gallery_NoImageView_text (409595259802877447) -->
<skip />
<string name="pref_gallery_confirm_delete_title">"Potvrdit smazání"</string>
- <string name="pref_gallery_confirm_delete_summary">"Před smazáním fotografií zobrazit potvrzení"</string>
+ <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) -->
+ <skip />
<string name="details_panel_title">"Podrobnosti"</string>
<string name="details_file_size">"Velikost souboru:"</string>
<string name="details_image_resolution">"Rozlišení:"</string>
@@ -151,8 +153,6 @@
<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>
- <string name="camera_button_hint">"Chcete-li pořídit fotografii, stiskněte tlačítko pro fotografování."</string>
- <string name="video_camera_button_hint">"Chcete-li zaznamenat video, stiskněte spoušť."</string>
<string name="photos_gallery_title">"Galerie"</string>
<string name="pick_photos_gallery_title">"Vyberte fotografii"</string>
<string name="videos_gallery_title">"Galerie"</string>
@@ -163,10 +163,6 @@
<string name="sendVideo">"Sdílet video pomocí"</string>
<string name="movieviewlabel">"Filmy"</string>
<string name="loading_video">"Načítání videa..."</string>
- <string name="picture_saved">"Fotografie byla uložena na kartu SD."</string>
- <string name="picture_deleted">"Fotografie byla odstraněna."</string>
- <string name="video_saved">"Video bylo uloženo na kartu SD."</string>
- <string name="video_deleted">"Video bylo smazáno."</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) -->
@@ -177,4 +173,6 @@
<skip />
<!-- no translation found for resume_playing_restart (5471008499835769292) -->
<skip />
+ <!-- no translation found for gadget_title (259405922673466798) -->
+ <skip />
</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 06a2588..12a4f88 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -29,6 +29,8 @@
<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="wallpaper">"Hintergrund wird eingestellt, bitte warten..."</string>
<string name="savingImage">"Bild wird gespeichert..."</string>
<string name="runningFaceDetection">"Bitte warten..."</string>
@@ -64,21 +66,22 @@
<string name="camera_gallery_photos_text">"Galerie"</string>
<string name="camera_pick_wallpaper">"Bilder"</string>
<string name="camera_setas_wallpaper">"Hintergrund"</string>
- <string name="camera_setas_wallpaper_drm">"Gekaufte Bilder"</string>
- <string name="camera_selectphoto">"Dieses Bild auswählen"</string>
- <string name="camera_takenewphoto">"Neues Bild aufnehmen"</string>
<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>
- <string name="pref_gallery_size_title">"Bildgröße"</string>
- <string name="pref_gallery_size_summary">"Anzeigegröße für Bilder auswählen"</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_dialogtitle">"Bildgröße"</string>
<string-array name="pref_gallery_size_choices">
<item>"Groß"</item>
<item>"Klein"</item>
</string-array>
- <string name="pref_gallery_sort_title">"Sortierreihenfolge für Bilder"</string>
- <string name="pref_gallery_sort_summary">"Sortierreihenfolge für Bilder auswählen"</string>
+ <!-- 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_dialogtitle">"Sortierreihenfolge für Bilder"</string>
<string-array name="pref_gallery_sort_choices">
<item>"Neue zuerst"</item>
@@ -107,8 +110,6 @@
<string name="pref_gallery_slideshow_shuffle_summary">"Bilder in zufälliger Reihenfolge anzeigen"</string>
<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_postpicturemenu_title">"Eingabeaufforderung nach Aufnahme"</string>
- <string name="pref_camera_postpicturemenu_summary">"Aktionsmenü (Speichern, Löschen...) nach Aufnahme anzeigen"</string>
<string name="pref_camera_videoquality_category">"Videoqualität"</string>
<!-- no translation found for pref_camera_videoquality_title (3836197291744160920) -->
<skip />
@@ -119,7 +120,8 @@
<!-- no translation found for image_gallery_NoImageView_text (409595259802877447) -->
<skip />
<string name="pref_gallery_confirm_delete_title">"Löschvorgang bestätigen"</string>
- <string name="pref_gallery_confirm_delete_summary">"Bestätigung vor dem Löschen von Bildern anzeigen"</string>
+ <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) -->
+ <skip />
<string name="details_panel_title">"Details"</string>
<string name="details_file_size">"Dateigröße:"</string>
<string name="details_image_resolution">"Auflösung:"</string>
@@ -151,8 +153,6 @@
<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>
- <string name="camera_button_hint">"Drücken Sie zum Fotografieren auf die Aufnahmetaste."</string>
- <string name="video_camera_button_hint">"Drücken Sie die Schaltfläche für die Aufnahme, um ein Video aufzuzeichnen."</string>
<string name="photos_gallery_title">"Galerie"</string>
<string name="pick_photos_gallery_title">"Bild auswählen"</string>
<string name="videos_gallery_title">"Galerie"</string>
@@ -163,10 +163,6 @@
<string name="sendVideo">"Video weiterleiten via"</string>
<string name="movieviewlabel">"Filme"</string>
<string name="loading_video">"Video wird geladen..."</string>
- <string name="picture_saved">"Bild auf SD-Karte gespeichert."</string>
- <string name="picture_deleted">"Bild gelöscht."</string>
- <string name="video_saved">"Video auf SD-Karte gespeichert."</string>
- <string name="video_deleted">"Video gelöscht."</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) -->
@@ -177,4 +173,6 @@
<skip />
<!-- no translation found for resume_playing_restart (5471008499835769292) -->
<skip />
+ <!-- no translation found for gadget_title (259405922673466798) -->
+ <skip />
</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
deleted file mode 100644
index 9a382bc..0000000
--- a/res/values-es-rUS/strings.xml
+++ /dev/null
@@ -1,140 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for all_images (7177582020160054334) -->
- <skip />
- <string name="camera_label">"Cámara"</string>
- <string name="gallery_picker_label">"Álbumes"</string>
- <!-- no translation found for gallery_camera_bucket_name (8410686962557494439) -->
- <skip />
- <!-- no translation found for switch_to_video_lable (1350915759804484157) -->
- <skip />
- <!-- no translation found for switch_to_camera_lable (1823306882227066007) -->
- <skip />
- <string name="crop_label">"Recortar imagen"</string>
- <string name="view_label">"Ver imagen"</string>
- <string name="preferences_label">"Configuración de la cámara"</string>
- <string name="wait">"Por favor, espere…"</string>
- <string name="no_storage">"Inserte una tarjeta SD antes de usar la cámara"</string>
- <string name="not_enough_space">"Su tarjeta de almacenamiento está llena"</string>
- <string name="wallpaper">"Estableciendo papel tapiz. Por favor, espere…"</string>
- <string name="savingImage">"Guardando imagen"</string>
- <string name="runningFaceDetection">"Por favor, espere…"</string>
- <!-- no translation found for flip_orientation (2488284515852888409) -->
- <skip />
- <string name="settings">"Configuración"</string>
- <!-- no translation found for view (4639715088471766970) -->
- <skip />
- <string name="details">"Detalles"</string>
- <string name="rotate">"Girar"</string>
- <string name="rotate_left">"Girar a la izquierda"</string>
- <string name="rotate_right">"Girar a la derecha"</string>
- <string name="slide_show">"Presentación de diapositivas"</string>
- <string name="crop_save_text">"Guardar"</string>
- <string name="crop_discard_text">"Descartar"</string>
- <!-- no translation found for camera_keep (4046418310305917657) -->
- <skip />
- <!-- no translation found for confirm_delete_title (8942471980646707642) -->
- <skip />
- <!-- no translation found for confirm_delete_message (6944545476499253074) -->
- <skip />
- <string name="camera_toss">"Eliminar"</string>
- <string name="camera_share">"Compartir"</string>
- <string name="camera_set">"Establecer como…"</string>
- <!-- no translation found for camera_play (6388821030721929966) -->
- <skip />
- <string name="camera_crop">"Recorte automático"</string>
- <string name="camera_tossing">"Eliminando…"</string>
- <string name="no_way_to_share_image">"Esta imagen no se puede guardar"</string>
- <string name="no_way_to_share_video">"Este vídeo no se puede compartir"</string>
- <string name="camera_gallery_photos_text">"Imágenes"</string>
- <!-- no translation found for camera_pick_wallpaper (2052155470431167023) -->
- <skip />
- <string name="camera_setas_wallpaper">"Papel tapiz"</string>
- <!-- no translation found for camera_setas_wallpaper_drm (787462863614664620) -->
- <skip />
- <string name="camera_selectphoto">"Seleccionar esta imagen"</string>
- <string name="camera_takenewphoto">"Capturar nueva imagen"</string>
- <string name="pref_gallery_category">"Vista de álbum de imágenes"</string>
- <string name="pref_slideshow_category">"Presentación de diapositivas"</string>
- <!-- no translation found for pref_camera_general_settings_category (1720434593482716214) -->
- <skip />
- <string name="pref_gallery_size_title">"Tamaño de imagen"</string>
- <string name="pref_gallery_size_summary">"Seleccione el tamaño de visualización de las imágenes en los álbumes"</string>
- <string name="pref_gallery_size_dialogtitle">"Tamaño de imagen"</string>
- <!-- no translation found for pref_gallery_size_choices:0 (3341375119334343613) -->
- <!-- no translation found for pref_gallery_size_choices:1 (979877976111629768) -->
- <string name="pref_gallery_sort_title">"Orden de las imágenes"</string>
- <string name="pref_gallery_sort_summary">"Seleccionar el orden de las imágenes en los álbumes"</string>
- <string name="pref_gallery_sort_dialogtitle">"Orden de las imágenes"</string>
- <!-- no translation found for pref_gallery_sort_choices:0 (2009184885742004467) -->
- <!-- no translation found for pref_gallery_sort_choices:1 (7253524441061782381) -->
- <string name="pref_gallery_slideshow_interval_title">"Intervalo en presentación de diapositivas"</string>
- <string name="pref_gallery_slideshow_interval_summary">"Seleccione el intervalo entre diapositiva y diapositiva en la presentación"</string>
- <string name="pref_gallery_slideshow_interval_dialogtitle">"Intervalo en presentación de diapositivas"</string>
- <!-- no translation found for pref_gallery_slideshow_interval_choices:0 (3293392256331071955) -->
- <!-- no translation found for pref_gallery_slideshow_interval_choices:1 (6762163459545768561) -->
- <!-- no translation found for pref_gallery_slideshow_interval_choices:2 (3999753648109312132) -->
- <string name="pref_gallery_slideshow_transition_title">"Transición de diapositivas"</string>
- <string name="pref_gallery_slideshow_transition_summary">"Seleccione el efecto que desea usar al pasar de una diapositiva a otra"</string>
- <string name="pref_gallery_slideshow_transition_dialogtitle">"Transición de diapositivas"</string>
- <!-- no translation found for pref_gallery_slideshow_transition_choices:0 (1917959322875321005) -->
- <!-- no translation found for pref_gallery_slideshow_transition_choices:1 (6508707204357284687) -->
- <!-- no translation found for pref_gallery_slideshow_transition_choices:2 (5628742586795545287) -->
- <!-- no translation found for pref_gallery_slideshow_transition_choices:3 (3350644769941682805) -->
- <string name="pref_gallery_slideshow_repeat_title">"Repetir presentación de diapositivas"</string>
- <string name="pref_gallery_slideshow_repeat_summary">"Seleccione esta opción para reproducir la presentación de diapositivas más de una vez"</string>
- <string name="pref_gallery_slideshow_shuffle_title">"Mostrar diapositivas aleatoriamente"</string>
- <string name="pref_gallery_slideshow_shuffle_summary">"Seleccione esta opción para mostrar las imágenes en orden aleatorio"</string>
- <string name="pref_camera_recordlocation_title">"Registrar ubicación en imágenes"</string>
- <string name="pref_camera_recordlocation_summary">"Seleccione esta opción para registrar automáticamente la ubicación en las imágenes"</string>
- <!-- no translation found for pref_camera_postpicturemenu_title (6273327212867896720) -->
- <skip />
- <!-- no translation found for pref_camera_postpicturemenu_summary (7911699118676137405) -->
- <skip />
- <!-- no translation found for pref_camera_videoquality_category (7460987936373873411) -->
- <skip />
- <!-- no translation found for pref_camera_videoquality_title (2766490880685686012) -->
- <skip />
- <!-- no translation found for pref_camera_videoquality_summary (6370975165195010636) -->
- <skip />
- <!-- no translation found for pref_camera_videoquality_entry_0 (8088669040921661814) -->
- <skip />
- <!-- no translation found for pref_camera_videoquality_entry_1 (3505027746158170269) -->
- <skip />
- <!-- no translation found for pref_camera_videoquality_dialogtitle (1836746975783096625) -->
- <skip />
- <!-- no translation found for pref_camera_videocodec_category (907203894431470628) -->
- <skip />
- <!-- no translation found for pref_camera_videocodec_title (3330800694130697647) -->
- <skip />
- <!-- no translation found for pref_camera_videocodec_summary (8269173339100296159) -->
- <skip />
- <!-- no translation found for pref_camera_videocodec_dialogtitle (5759217298675791948) -->
- <skip />
- <!-- no translation found for pref_camera_videocodec_entry_0 (6259385536148037705) -->
- <skip />
- <!-- no translation found for pref_camera_videocodec_entry_1 (3178021263058501227) -->
- <skip />
- <string name="camerasettings">"Configuración"</string>
- <string name="image_gallery_NoImageView_text">"Ninguna imagen"</string>
- <!-- no translation found for pref_gallery_confirm_delete_title (201485251343856203) -->
- <skip />
- <!-- no translation found for pref_gallery_confirm_delete_summary (7235236977784533739) -->
- <skip />
- <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>
- <string name="details_date_taken">"Fecha de captura:"</string>
- <string name="context_menu_header">"Opciones de imagen"</string>
- <string name="multiface_crop_help">"Seleccionar cara para empezar"</string>
- <string name="camera_button_hint">"Pulse el botón Capturar para sacar una foto"</string>
- <string name="photos_gallery_title">"Imágenes"</string>
- <string name="pick_photos_gallery_title">"Seleccionar imagen"</string>
- <!-- no translation found for loading_progress_format_string (4252016560676330797) -->
- <skip />
- <string name="sendImage">"Compartir esta imagen por"</string>
- <!-- no translation found for setImage (6676791915351726249) -->
- <skip />
- <string name="sendVideo">"Compartir este vídeo por"</string>
-</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 0ef0a73..b826de9 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -29,6 +29,8 @@
<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="savingImage">"Guardando imagen..."</string>
<string name="runningFaceDetection">"Por favor, espera..."</string>
@@ -64,21 +66,22 @@
<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_drm">"Imágenes compradas"</string>
- <string name="camera_selectphoto">"Seleccionar esta imagen"</string>
- <string name="camera_takenewphoto">"Hacer otra fotografía"</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>
- <string name="pref_gallery_size_title">"Tamaño de imagen"</string>
- <string name="pref_gallery_size_summary">"Seleccionar el tamaño de visualización de las imágenes"</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_dialogtitle">"Tamaño de imagen"</string>
<string-array name="pref_gallery_size_choices">
<item>"Grande"</item>
<item>"Pequeña"</item>
</string-array>
- <string name="pref_gallery_sort_title">"Orden de imágenes"</string>
- <string name="pref_gallery_sort_summary">"Seleccionar el orden de las imágenes"</string>
+ <!-- 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_dialogtitle">"Ordenación de imágenes"</string>
<string-array name="pref_gallery_sort_choices">
<item>"Más recientes primero"</item>
@@ -107,8 +110,6 @@
<string name="pref_gallery_slideshow_shuffle_summary">"Mostrar imágenes en orden aleatorio"</string>
<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_postpicturemenu_title">"Mensaje tras la fotografía"</string>
- <string name="pref_camera_postpicturemenu_summary">"Mostrar el menú de acción (guardar, eliminar...) tras realizar la fotografía"</string>
<string name="pref_camera_videoquality_category">"Calidad de vídeo"</string>
<!-- no translation found for pref_camera_videoquality_title (3836197291744160920) -->
<skip />
@@ -119,7 +120,8 @@
<!-- no translation found for image_gallery_NoImageView_text (409595259802877447) -->
<skip />
<string name="pref_gallery_confirm_delete_title">"Confirmar eliminaciones"</string>
- <string name="pref_gallery_confirm_delete_summary">"Mostrar confirmación antes de eliminar imágenes"</string>
+ <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) -->
+ <skip />
<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>
@@ -151,8 +153,6 @@
<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>
- <string name="camera_button_hint">"Pulsa el botón de captura para realizar la fotografía."</string>
- <string name="video_camera_button_hint">"Pulsa el botón de captura para grabar un vídeo."</string>
<string name="photos_gallery_title">"Galería"</string>
<string name="pick_photos_gallery_title">"Seleccionar imagen"</string>
<string name="videos_gallery_title">"Galería"</string>
@@ -163,10 +163,6 @@
<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="picture_saved">"La imagen se ha guardado en la tarjeta SD."</string>
- <string name="picture_deleted">"La imagen se ha eliminado."</string>
- <string name="video_saved">"El vídeo se ha guardado en la tarjeta SD."</string>
- <string name="video_deleted">"El vídeo se ha eliminado"</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) -->
@@ -177,4 +173,6 @@
<skip />
<!-- no translation found for resume_playing_restart (5471008499835769292) -->
<skip />
+ <!-- no translation found for gadget_title (259405922673466798) -->
+ <skip />
</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index f60340c..d2c6e3d 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -29,6 +29,8 @@
<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="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>
@@ -64,21 +66,22 @@
<string name="camera_gallery_photos_text">"Galerie"</string>
<string name="camera_pick_wallpaper">"Images"</string>
<string name="camera_setas_wallpaper">"Arrière-plan"</string>
- <string name="camera_setas_wallpaper_drm">"Images achetées"</string>
- <string name="camera_selectphoto">"Sélectionner cette image"</string>
- <string name="camera_takenewphoto">"Prendre une nouvelle photo"</string>
<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>
- <string name="pref_gallery_size_title">"Taille de l\'image"</string>
- <string name="pref_gallery_size_summary">"Sélectionner la taille d\'affichage des images"</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_dialogtitle">"Taille de l\'image"</string>
<string-array name="pref_gallery_size_choices">
<item>"Grande"</item>
<item>"Petite"</item>
</string-array>
- <string name="pref_gallery_sort_title">"Trier les images"</string>
- <string name="pref_gallery_sort_summary">"Sélectionner l\'ordre de tri des images"</string>
+ <!-- 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_dialogtitle">"Trier les images"</string>
<string-array name="pref_gallery_sort_choices">
<item>"Les plus récentes d\'abord"</item>
@@ -107,8 +110,6 @@
<string name="pref_gallery_slideshow_shuffle_summary">"Afficher les images"</string>
<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_postpicturemenu_title">"Demander après la capture"</string>
- <string name="pref_camera_postpicturemenu_summary">"Afficher l\'option de menu (enregistrer, supprimer, ...) après la capture"</string>
<string name="pref_camera_videoquality_category">"Qualité vidéo"</string>
<!-- no translation found for pref_camera_videoquality_title (3836197291744160920) -->
<skip />
@@ -119,7 +120,8 @@
<!-- no translation found for image_gallery_NoImageView_text (409595259802877447) -->
<skip />
<string name="pref_gallery_confirm_delete_title">"Confirmer les suppressions"</string>
- <string name="pref_gallery_confirm_delete_summary">"Afficher la confirmation avant de supprimer les images"</string>
+ <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) -->
+ <skip />
<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>
@@ -151,8 +153,6 @@
<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>
- <string name="camera_button_hint">"Appuyez sur Capture pour prendre la photo."</string>
- <string name="video_camera_button_hint">"Appuyez sur le bouton Déclencher pour enregistrer une vidéo."</string>
<string name="photos_gallery_title">"Galerie"</string>
<string name="pick_photos_gallery_title">"Sélectionner l\'image"</string>
<string name="videos_gallery_title">"Galerie"</string>
@@ -163,10 +163,6 @@
<string name="sendVideo">"Partager la vidéo via"</string>
<string name="movieviewlabel">"Films"</string>
<string name="loading_video">"Chargement de la vidéo..."</string>
- <string name="picture_saved">"Photo sauvegardée sur la carte SD."</string>
- <string name="picture_deleted">"Photo supprimée."</string>
- <string name="video_saved">"Vidéo enregistrée sur la carte SD."</string>
- <string name="video_deleted">"Vidéo supprimée."</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) -->
@@ -177,4 +173,6 @@
<skip />
<!-- no translation found for resume_playing_restart (5471008499835769292) -->
<skip />
+ <!-- no translation found for gadget_title (259405922673466798) -->
+ <skip />
</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 41ba4a3..15f6136 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -29,6 +29,8 @@
<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="wallpaper">"Impostazione sfondo, attendi..."</string>
<string name="savingImage">"Salvataggio foto..."</string>
<string name="runningFaceDetection">"Attendere..."</string>
@@ -64,21 +66,22 @@
<string name="camera_gallery_photos_text">"Galleria"</string>
<string name="camera_pick_wallpaper">"Foto"</string>
<string name="camera_setas_wallpaper">"Sfondo"</string>
- <string name="camera_setas_wallpaper_drm">"Foto acquistate"</string>
- <string name="camera_selectphoto">"Seleziona questa foto"</string>
- <string name="camera_takenewphoto">"Scatta nuova foto"</string>
<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>
- <string name="pref_gallery_size_title">"Dimensioni foto"</string>
- <string name="pref_gallery_size_summary">"Seleziona dimensioni di visualizz. delle foto"</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_dialogtitle">"Dimensioni foto"</string>
<string-array name="pref_gallery_size_choices">
<item>"Grandi"</item>
<item>"Piccole"</item>
</string-array>
- <string name="pref_gallery_sort_title">"Ordine foto"</string>
- <string name="pref_gallery_sort_summary">"Seleziona l\'ordine delle foto"</string>
+ <!-- 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_dialogtitle">"Ordine foto"</string>
<string-array name="pref_gallery_sort_choices">
<item>"Da più recente"</item>
@@ -107,8 +110,6 @@
<string name="pref_gallery_slideshow_shuffle_summary">"Mostra le foto in ordine casuale"</string>
<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_postpicturemenu_title">"Chiedi dopo scatto"</string>
- <string name="pref_camera_postpicturemenu_summary">"Visualizza menu di azioni (salva, elimina etc.) dopo lo scatto"</string>
<string name="pref_camera_videoquality_category">"Qualità video"</string>
<!-- no translation found for pref_camera_videoquality_title (3836197291744160920) -->
<skip />
@@ -119,7 +120,8 @@
<!-- no translation found for image_gallery_NoImageView_text (409595259802877447) -->
<skip />
<string name="pref_gallery_confirm_delete_title">"Conferma eliminazioni"</string>
- <string name="pref_gallery_confirm_delete_summary">"Mostra conferma prima di eliminare le foto"</string>
+ <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) -->
+ <skip />
<string name="details_panel_title">"Dettagli"</string>
<string name="details_file_size">"Dim. file:"</string>
<string name="details_image_resolution">"Risoluzione:"</string>
@@ -151,8 +153,6 @@
<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>
- <string name="camera_button_hint">"Premi Scatta per scattare la foto."</string>
- <string name="video_camera_button_hint">"Premi Registra per registrare il video."</string>
<string name="photos_gallery_title">"Galleria"</string>
<string name="pick_photos_gallery_title">"Seleziona foto"</string>
<string name="videos_gallery_title">"Galleria"</string>
@@ -163,10 +163,6 @@
<string name="sendVideo">"Condividi video via"</string>
<string name="movieviewlabel">"Film"</string>
<string name="loading_video">"Caricamento video..."</string>
- <string name="picture_saved">"Foto salvata su scheda SD."</string>
- <string name="picture_deleted">"Foto eliminata."</string>
- <string name="video_saved">"Video salvato su scheda SD."</string>
- <string name="video_deleted">"Video eliminato."</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) -->
@@ -177,4 +173,6 @@
<skip />
<!-- no translation found for resume_playing_restart (5471008499835769292) -->
<skip />
+ <!-- no translation found for gadget_title (259405922673466798) -->
+ <skip />
</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 0cc6f37..329e51b 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -29,6 +29,8 @@
<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="wallpaper">"壁紙を設定しています。しばらくお待ちください..."</string>
<string name="savingImage">"写真を保存中..."</string>
<string name="runningFaceDetection">"お待ちください..."</string>
@@ -64,21 +66,22 @@
<string name="camera_gallery_photos_text">"ギャラリー"</string>
<string name="camera_pick_wallpaper">"写真"</string>
<string name="camera_setas_wallpaper">"壁紙"</string>
- <string name="camera_setas_wallpaper_drm">"購入した写真"</string>
- <string name="camera_selectphoto">"この写真を選択"</string>
- <string name="camera_takenewphoto">"新しい写真を撮る"</string>
<string name="pref_gallery_category">"全般設定"</string>
<string name="pref_slideshow_category">"スライドショー設定"</string>
<string name="pref_camera_general_settings_category">"全般設定"</string>
- <string name="pref_gallery_size_title">"写真サイズ"</string>
- <string name="pref_gallery_size_summary">"写真の表示サイズを選択"</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_dialogtitle">"写真サイズ"</string>
<string-array name="pref_gallery_size_choices">
<item>"大"</item>
<item>"小"</item>
</string-array>
- <string name="pref_gallery_sort_title">"写真の並べ替え"</string>
- <string name="pref_gallery_sort_summary">"写真の表示順を選択"</string>
+ <!-- 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_dialogtitle">"写真の並べ替え"</string>
<string-array name="pref_gallery_sort_choices">
<item>"日付の新しい順"</item>
@@ -107,8 +110,6 @@
<string name="pref_gallery_slideshow_shuffle_summary">"写真をランダムに表示"</string>
<string name="pref_camera_recordlocation_title">"位置を写真に保存"</string>
<string name="pref_camera_recordlocation_summary">"写真データに位置情報を記録します"</string>
- <string name="pref_camera_postpicturemenu_title">"撮影後に確認"</string>
- <string name="pref_camera_postpicturemenu_summary">"撮影後に操作メニュー (保存や削除など) を表示"</string>
<string name="pref_camera_videoquality_category">"動画のクオリティ"</string>
<!-- no translation found for pref_camera_videoquality_title (3836197291744160920) -->
<skip />
@@ -119,7 +120,8 @@
<!-- no translation found for image_gallery_NoImageView_text (409595259802877447) -->
<skip />
<string name="pref_gallery_confirm_delete_title">"削除を確認"</string>
- <string name="pref_gallery_confirm_delete_summary">"写真を削除する前に確認メッセージを表示"</string>
+ <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) -->
+ <skip />
<string name="details_panel_title">"詳細"</string>
<string name="details_file_size">"ファイルサイズ:"</string>
<string name="details_image_resolution">"解像度:"</string>
@@ -151,8 +153,6 @@
<string name="context_menu_header">"写真オプション"</string>
<string name="video_context_menu_header">"動画オプション"</string>
<string name="multiface_crop_help">"顔を選択して開始します。"</string>
- <string name="camera_button_hint">"写真を撮るには[撮影]ボタンを押してください。"</string>
- <string name="video_camera_button_hint">"動画を録画するには[録画]ボタンを押してください。"</string>
<string name="photos_gallery_title">"ギャラリー"</string>
<string name="pick_photos_gallery_title">"写真を選択"</string>
<string name="videos_gallery_title">"ギャラリー"</string>
@@ -163,10 +163,6 @@
<string name="sendVideo">"動画を共有"</string>
<string name="movieviewlabel">"映画"</string>
<string name="loading_video">"動画を読み込み中..."</string>
- <string name="picture_saved">"写真をSDカードに保存しました。"</string>
- <string name="picture_deleted">"写真を削除しました。"</string>
- <string name="video_saved">"動画をSDカードに保存しました。"</string>
- <string name="video_deleted">"動画を削除しました。"</string>
<string name="spaceIsLow_title">"空き容量が残り少なくなっています"</string>
<string name="spaceIsLow_content">"SDカードの容量が足りません。クオリティ設定を変更するか、ギャラリーからアイテムを削除してください。"</string>
<!-- no translation found for resume_playing_title (8996677350649355013) -->
@@ -177,4 +173,6 @@
<skip />
<!-- no translation found for resume_playing_restart (5471008499835769292) -->
<skip />
+ <!-- no translation found for gadget_title (259405922673466798) -->
+ <skip />
</resources>
diff --git a/res/values-ko/arrays.xml b/res/values-ko/arrays.xml
new file mode 100644
index 0000000..dfbf090
--- /dev/null
+++ b/res/values-ko/arrays.xml
@@ -0,0 +1,24 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- no translation found for pref_camera_videoquality_entries:0 (4155278146225809483) -->
+ <!-- no translation found for pref_camera_videoquality_entries:1 (2439895494739176281) -->
+ <string-array name="pref_camera_videoquality_entryvalues">
+ <item>"0"</item>
+ <item>"1"</item>
+ </string-array>
+</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
new file mode 100644
index 0000000..72e8d2e
--- /dev/null
+++ b/res/values-ko/strings.xml
@@ -0,0 +1,178 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="all_images">"모든 사진"</string>
+ <string name="all_videos">"모든 동영상"</string>
+ <string name="camera_label">"카메라"</string>
+ <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="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="wallpaper">"배경화면 설정 중. 잠시 기다려 주세요..."</string>
+ <string name="savingImage">"사진 저장 중..."</string>
+ <string name="runningFaceDetection">"잠시 기다려 주세요..."</string>
+ <string name="flip_orientation">"방향 바꾸기"</string>
+ <string name="settings">"설정"</string>
+ <string name="view">"보기"</string>
+ <string name="details">"상세정보"</string>
+ <string name="rotate">"회전"</string>
+ <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="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_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_crop">"자르기"</string>
+ <string name="camera_tossing">"삭제 중..."</string>
+ <string name="no_way_to_share_image">"공유할 수 없는 사진입니다."</string>
+ <string name="no_way_to_share_video">"공유할 수 없는 동영상입니다."</string>
+ <string name="camera_gallery_photos_text">"갤러리"</string>
+ <string name="camera_pick_wallpaper">"사진"</string>
+ <string name="camera_setas_wallpaper">"배경화면"</string>
+ <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_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_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_dialogtitle">"슬라이드쇼 간격"</string>
+ <string-array name="pref_gallery_slideshow_interval_choices">
+ <item>"2초"</item>
+ <item>"3초"</item>
+ <item>"4초"</item>
+ </string-array>
+ <string name="pref_gallery_slideshow_transition_title">"슬라이드쇼 화면전환"</string>
+ <string name="pref_gallery_slideshow_transition_summary">"슬라이드 간에 이동할 때 사용할 효과 선택"</string>
+ <string name="pref_gallery_slideshow_transition_dialogtitle">"슬라이드쇼 화면전환"</string>
+ <string-array name="pref_gallery_slideshow_transition_choices">
+ <item>"페이드 인/아웃"</item>
+ <item>"왼쪽에서 오른쪽으로/오른쪽에서 왼쪽으로"</item>
+ <item>"위에서 아래로/아래에서 위로"</item>
+ <item>"무작위 선택"</item>
+ </string-array>
+ <string name="pref_gallery_slideshow_repeat_title">"슬라이드쇼 반복"</string>
+ <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_summary">"사진 데이터에 위치 기록"</string>
+ <string name="pref_camera_videoquality_category">"동영상 화질"</string>
+ <!-- no translation found for pref_camera_videoquality_title (3836197291744160920) -->
+ <skip />
+ <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="pref_gallery_confirm_delete_title">"삭제 확인"</string>
+ <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) -->
+ <skip />
+ <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_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="context_menu_header">"사진 옵션"</string>
+ <string name="video_context_menu_header">"동영상 옵션"</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>
+ <string name="pick_videos_gallery_title">"동영상 선택"</string>
+ <string name="loading_progress_format_string">"<xliff:g id="COUNTER">%d</xliff:g>개 남음"</string>
+ <string name="sendImage">"사진 공유 응용프로그램"</string>
+ <string name="setImage">"사진 설정"</string>
+ <string name="sendVideo">"동영상 공유 응용프로그램"</string>
+ <string name="movieviewlabel">"영화"</string>
+ <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 />
+</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
new file mode 100644
index 0000000..1ec9c8a
--- /dev/null
+++ b/res/values-nb/strings.xml
@@ -0,0 +1,161 @@
+<?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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="all_images">"Alle bilder"</string>
+ <string name="all_videos">"Alle videoer"</string>
+ <string name="camera_label">"Kamera"</string>
+ <string name="gallery_picker_label">"Galleri"</string>
+ <string name="gallery_camera_bucket_name">"Bilder fra kamera"</string>
+ <string name="gallery_camera_videos_bucket_name">"Videoer fra kamera"</string>
+ <string name="switch_to_video_lable">"Bytt til video"</string>
+ <string name="switch_to_camera_lable">"Bytt til kamera"</string>
+ <string name="crop_label">"Beskjær bilde"</string>
+ <string name="view_label">"Se på bilde"</string>
+ <string name="preferences_label">"Kamerainnstillinger"</string>
+ <string name="wait">"Vent litt…"</string>
+ <string name="no_storage">"Sett inn et minnekort før du bruker kameraet."</string>
+ <string name="not_enough_space">"Minnekortet er fullt."</string>
+ <!-- no translation found for preparing_sd (2914969119574812666) -->
+ <skip />
+ <string name="wallpaper">"Setter bakgrunnsbilde, vent litt…"</string>
+ <string name="savingImage">"Lagrer bilde…"</string>
+ <string name="runningFaceDetection">"Vent litt…"</string>
+ <string name="flip_orientation">"Roter skjerm"</string>
+ <string name="settings">"Innstillinger"</string>
+ <string name="view">"Vis"</string>
+ <string name="details">"Detaljer"</string>
+ <string name="rotate">"Roter"</string>
+ <string name="rotate_left">"Roter mot venstre"</string>
+ <string name="rotate_right">"Roter mot høyre"</string>
+ <string name="slide_show">"Lysbildevisning"</string>
+ <string name="capture_picture">"Ta bilde"</string>
+ <string name="capture_video">"Ta opp video"</string>
+ <string name="crop_save_text">"Lagre"</string>
+ <string name="crop_discard_text">"Forkast"</string>
+ <string name="confirm_delete_title">"Slett"</string>
+ <string name="confirm_delete_message">"Bildet vil bli slettet."</string>
+ <string name="confirm_delete_video_message">"Videoen vil bli slettet."</string>
+ <string name="camera_toss">"Slett"</string>
+ <!-- no translation found for camera_gallery (815753042966032398) -->
+ <skip />
+ <string name="camera_share">"Del"</string>
+ <string name="camera_set">"Bruk som"</string>
+ <string name="camera_play">"Spill"</string>
+ <!-- no translation found for camera_attach (4048659554893435232) -->
+ <skip />
+ <!-- no translation found for camera_cancel (8203341746672085747) -->
+ <skip />
+ <string name="camera_crop">"Beskjær"</string>
+ <string name="camera_tossing">"Sletter…"</string>
+ <string name="no_way_to_share_image">"Bildet kan ikke deles."</string>
+ <string name="no_way_to_share_video">"Videoen kan ikke deles."</string>
+ <string name="camera_gallery_photos_text">"Galleri"</string>
+ <string name="camera_pick_wallpaper">"Bilder"</string>
+ <string name="camera_setas_wallpaper">"Bakgrunnsbilder"</string>
+ <string name="pref_gallery_category">"Generelle innstillinger"</string>
+ <string name="pref_slideshow_category">"Innstillinger for lysbildevisning"</string>
+ <string name="pref_camera_general_settings_category">"Generelle innstillinger"</string>
+ <string name="pref_gallery_size_title">"Bildestørrelse"</string>
+ <string name="pref_gallery_size_summary">"Velg hvor stort bilder skal vises"</string>
+ <string name="pref_gallery_size_dialogtitle">"Bildestørrelse"</string>
+ <string-array name="pref_gallery_size_choices">
+ <item>"Stor"</item>
+ <item>"Liten"</item>
+ </string-array>
+ <string name="pref_gallery_sort_title">"Bildesortering"</string>
+ <string name="pref_gallery_sort_summary">"Velg i hvilken rekkefølge bildene skal sorteres"</string>
+ <string name="pref_gallery_sort_dialogtitle">"Bildesortering"</string>
+ <string-array name="pref_gallery_sort_choices">
+ <item>"Nyeste først"</item>
+ <item>"Nyeste sist"</item>
+ </string-array>
+ <string name="pref_gallery_slideshow_interval_title">"Pause i lysbildevisning"</string>
+ <string name="pref_gallery_slideshow_interval_summary">"Velg hvor lenge hvert lysbilde skal vises"</string>
+ <string name="pref_gallery_slideshow_interval_dialogtitle">"Pause i lysbildevisning"</string>
+ <string-array name="pref_gallery_slideshow_interval_choices">
+ <item>"2 sekunder"</item>
+ <item>"3 sekunder"</item>
+ <item>"4 sekunder"</item>
+ </string-array>
+ <string name="pref_gallery_slideshow_transition_title">"Lysbildeovergang"</string>
+ <string name="pref_gallery_slideshow_transition_summary">"Velg effekten som skal brukes mellom lysbilder"</string>
+ <string name="pref_gallery_slideshow_transition_dialogtitle">"Lysbildevergang"</string>
+ <string-array name="pref_gallery_slideshow_transition_choices">
+ <item>"Ton inn og ut"</item>
+ <item>"Skli venstre - høyre"</item>
+ <item>"Skli opp - ned"</item>
+ <item>"Tilfeldig"</item>
+ </string-array>
+ <string name="pref_gallery_slideshow_repeat_title">"Gjenta lysbildeserie"</string>
+ <string name="pref_gallery_slideshow_repeat_summary">"Vis lydbildeserie mer enn en gang"</string>
+ <string name="pref_gallery_slideshow_shuffle_title">"Stokk lysbilder"</string>
+ <string name="pref_gallery_slideshow_shuffle_summary">"Vis bilder i tilfeldig rekkefølge"</string>
+ <string name="pref_camera_recordlocation_title">"Lagre sted i bilder"</string>
+ <string name="pref_camera_recordlocation_summary">"Lagre sted i bildedata"</string>
+ <string name="pref_camera_videoquality_category">"Videokvalitet"</string>
+ <string name="pref_camera_videoquality_title">"Videokvalitet"</string>
+ <string name="pref_camera_videoquality_entry_0">"Lav (for MMS-meldinger)"</string>
+ <string name="pref_camera_videoquality_entry_1">"Høy (for minnekort)"</string>
+ <string name="pref_camera_videoquality_dialogtitle">"Videokvalitet"</string>
+ <string name="camerasettings">"Innstillinger"</string>
+ <string name="image_gallery_NoImageView_text">"Fant ingen bilder."</string>
+ <string name="pref_gallery_confirm_delete_title">"Bekreft sletting"</string>
+ <string name="pref_gallery_confirm_delete_summary">"Vis bekreftelse før bilder slettes"</string>
+ <string name="details_panel_title">"Detaljer"</string>
+ <string name="details_file_size">"Filstørrelse:"</string>
+ <string name="details_image_resolution">"Oppløsning:"</string>
+ <string name="details_duration">"Varighet:"</string>
+ <string name="details_date_taken">"Dato tatt:"</string>
+ <string name="details_frame_rate">"Bildefrekvens:"</string>
+ <string name="details_bit_rate">"Bitrate:"</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 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">"Bildeinnstillinger"</string>
+ <string name="video_context_menu_header">"Videoinnstillinger"</string>
+ <string name="multiface_crop_help">"Trykk på et ansikt for å begynne."</string>
+ <string name="photos_gallery_title">"Galleri"</string>
+ <string name="pick_photos_gallery_title">"Velg bilde"</string>
+ <string name="videos_gallery_title">"Galleri"</string>
+ <string name="pick_videos_gallery_title">"Velg video"</string>
+ <string name="loading_progress_format_string">"<xliff:g id="COUNTER">%d</xliff:g> gjenstår"</string>
+ <string name="sendImage">"Del bilde via"</string>
+ <string name="setImage">"Bruk bilde som"</string>
+ <string name="sendVideo">"Del video via"</string>
+ <string name="movieviewlabel">"Filmer"</string>
+ <string name="loading_video">"Laster video…"</string>
+ <string name="spaceIsLow_title">"Lite plass"</string>
+ <string name="spaceIsLow_content">"Minnekortet begynner å gå tom for plass. Endre kvalitetsinnstillingen eller slett bilder fra galleriet."</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 />
+</resources>
diff --git a/res/values-nl-rNL/strings.xml b/res/values-nl-rNL/strings.xml
deleted file mode 100644
index 7ac8784..0000000
--- a/res/values-nl-rNL/strings.xml
+++ /dev/null
@@ -1,140 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for all_images (7177582020160054334) -->
- <skip />
- <string name="camera_label">"Camera"</string>
- <string name="gallery_picker_label">"Albums"</string>
- <!-- no translation found for gallery_camera_bucket_name (8410686962557494439) -->
- <skip />
- <!-- no translation found for switch_to_video_lable (1350915759804484157) -->
- <skip />
- <!-- no translation found for switch_to_camera_lable (1823306882227066007) -->
- <skip />
- <string name="crop_label">"Afbeelding inkorten"</string>
- <string name="view_label">"Afbeelding weergeven"</string>
- <string name="preferences_label">"Camera-instellingen"</string>
- <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">"Deze geheugenkaart is vol"</string>
- <string name="wallpaper">"Achtergrond wordt ingesteld, een ogenblik geduld…"</string>
- <string name="savingImage">"Afbeelding opslaan"</string>
- <string name="runningFaceDetection">"Een ogenblik geduld…"</string>
- <!-- no translation found for flip_orientation (2488284515852888409) -->
- <skip />
- <string name="settings">"Instellingen"</string>
- <!-- no translation found for view (4639715088471766970) -->
- <skip />
- <string name="details">"Details"</string>
- <string name="rotate">"Draaien"</string>
- <string name="rotate_left">"Links draaien"</string>
- <string name="rotate_right">"Rechts draaien"</string>
- <string name="slide_show">"Diavoorstelling"</string>
- <string name="crop_save_text">"Opslaan"</string>
- <string name="crop_discard_text">"Wissen"</string>
- <!-- no translation found for camera_keep (4046418310305917657) -->
- <skip />
- <!-- no translation found for confirm_delete_title (8942471980646707642) -->
- <skip />
- <!-- no translation found for confirm_delete_message (6944545476499253074) -->
- <skip />
- <string name="camera_toss">"Verwijderen"</string>
- <string name="camera_share">"Delen"</string>
- <string name="camera_set">"Instellen als…"</string>
- <!-- no translation found for camera_play (6388821030721929966) -->
- <skip />
- <string name="camera_crop">"Automatisch inkorten"</string>
- <string name="camera_tossing">"Bezig met verwijderen…"</string>
- <string name="no_way_to_share_image">"De afbeelding kan niet worden opgeslagen"</string>
- <string name="no_way_to_share_video">"Deze video kan niet worden gedeeld"</string>
- <string name="camera_gallery_photos_text">"Afbeeldingen"</string>
- <!-- no translation found for camera_pick_wallpaper (2052155470431167023) -->
- <skip />
- <string name="camera_setas_wallpaper">"Achtergrond"</string>
- <!-- no translation found for camera_setas_wallpaper_drm (787462863614664620) -->
- <skip />
- <string name="camera_selectphoto">"Dit beeld selecteren"</string>
- <string name="camera_takenewphoto">"Nieuwe afbeelding maken"</string>
- <string name="pref_gallery_category">"Fotoalbumweergave"</string>
- <string name="pref_slideshow_category">"Diavoorstelling"</string>
- <!-- no translation found for pref_camera_general_settings_category (1720434593482716214) -->
- <skip />
- <string name="pref_gallery_size_title">"Afbeeldinggrootte"</string>
- <string name="pref_gallery_size_summary">"Selecteer de grootte van afbeeldingen in albums"</string>
- <string name="pref_gallery_size_dialogtitle">"Afbeeldinggrootte"</string>
- <!-- no translation found for pref_gallery_size_choices:0 (3341375119334343613) -->
- <!-- no translation found for pref_gallery_size_choices:1 (979877976111629768) -->
- <string name="pref_gallery_sort_title">"Afbeelding sorteren"</string>
- <string name="pref_gallery_sort_summary">"Selecteer de volgorde van afbeeldingen in albums"</string>
- <string name="pref_gallery_sort_dialogtitle">"Afbeelding sorteren"</string>
- <!-- no translation found for pref_gallery_sort_choices:0 (2009184885742004467) -->
- <!-- no translation found for pref_gallery_sort_choices:1 (7253524441061782381) -->
- <string name="pref_gallery_slideshow_interval_title">"Diashowinterval"</string>
- <string name="pref_gallery_slideshow_interval_summary">"Kies hoe lang elke dia wordt weergegeven"</string>
- <string name="pref_gallery_slideshow_interval_dialogtitle">"Diashowinterval"</string>
- <!-- no translation found for pref_gallery_slideshow_interval_choices:0 (3293392256331071955) -->
- <!-- no translation found for pref_gallery_slideshow_interval_choices:1 (6762163459545768561) -->
- <!-- no translation found for pref_gallery_slideshow_interval_choices:2 (3999753648109312132) -->
- <string name="pref_gallery_slideshow_transition_title">"Diashowovergang"</string>
- <string name="pref_gallery_slideshow_transition_summary">"Kies het effect als van de ene naar de andere dia wordt gewisseld"</string>
- <string name="pref_gallery_slideshow_transition_dialogtitle">"Diashowovergang"</string>
- <!-- no translation found for pref_gallery_slideshow_transition_choices:0 (1917959322875321005) -->
- <!-- no translation found for pref_gallery_slideshow_transition_choices:1 (6508707204357284687) -->
- <!-- no translation found for pref_gallery_slideshow_transition_choices:2 (5628742586795545287) -->
- <!-- no translation found for pref_gallery_slideshow_transition_choices:3 (3350644769941682805) -->
- <string name="pref_gallery_slideshow_repeat_title">"Diashow herhalen"</string>
- <string name="pref_gallery_slideshow_repeat_summary">"Selecteren om de diashow meer dan eenmaal af te spelen"</string>
- <string name="pref_gallery_slideshow_shuffle_title">"Willekeurige volgorde"</string>
- <string name="pref_gallery_slideshow_shuffle_summary">"Selecteren om afbeeldingen in willekeurige volgorde af te spelen"</string>
- <string name="pref_camera_recordlocation_title">"Locatie in afbeeldingen opnemen"</string>
- <string name="pref_camera_recordlocation_summary">"Selecteren om de locatie automatisch op te nemen bij fotos"</string>
- <!-- no translation found for pref_camera_postpicturemenu_title (6273327212867896720) -->
- <skip />
- <!-- no translation found for pref_camera_postpicturemenu_summary (7911699118676137405) -->
- <skip />
- <!-- no translation found for pref_camera_videoquality_category (7460987936373873411) -->
- <skip />
- <!-- no translation found for pref_camera_videoquality_title (2766490880685686012) -->
- <skip />
- <!-- no translation found for pref_camera_videoquality_summary (6370975165195010636) -->
- <skip />
- <!-- no translation found for pref_camera_videoquality_entry_0 (8088669040921661814) -->
- <skip />
- <!-- no translation found for pref_camera_videoquality_entry_1 (3505027746158170269) -->
- <skip />
- <!-- no translation found for pref_camera_videoquality_dialogtitle (1836746975783096625) -->
- <skip />
- <!-- no translation found for pref_camera_videocodec_category (907203894431470628) -->
- <skip />
- <!-- no translation found for pref_camera_videocodec_title (3330800694130697647) -->
- <skip />
- <!-- no translation found for pref_camera_videocodec_summary (8269173339100296159) -->
- <skip />
- <!-- no translation found for pref_camera_videocodec_dialogtitle (5759217298675791948) -->
- <skip />
- <!-- no translation found for pref_camera_videocodec_entry_0 (6259385536148037705) -->
- <skip />
- <!-- no translation found for pref_camera_videocodec_entry_1 (3178021263058501227) -->
- <skip />
- <string name="camerasettings">"Instellingen"</string>
- <string name="image_gallery_NoImageView_text">"Geen afbeeldingen"</string>
- <!-- no translation found for pref_gallery_confirm_delete_title (201485251343856203) -->
- <skip />
- <!-- no translation found for pref_gallery_confirm_delete_summary (7235236977784533739) -->
- <skip />
- <string name="details_panel_title">"Details"</string>
- <string name="details_file_size">"Bestandsgrootte:"</string>
- <string name="details_image_resolution">"Resolutie:"</string>
- <string name="details_date_taken">"Genomen op:"</string>
- <string name="context_menu_header">"Beeldopties"</string>
- <string name="multiface_crop_help">"Gezicht kiezen om te starten"</string>
- <string name="camera_button_hint">"Druk op de Vastlegtoets om een foto te maken"</string>
- <string name="photos_gallery_title">"Afbeeldingen"</string>
- <string name="pick_photos_gallery_title">"Afbeelding selecteren"</string>
- <!-- no translation found for loading_progress_format_string (4252016560676330797) -->
- <skip />
- <string name="sendImage">"Deze afbeelding delen via"</string>
- <!-- no translation found for setImage (6676791915351726249) -->
- <skip />
- <string name="sendVideo">"Deze video delen via"</string>
-</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index b580d7c..9f7aa3b 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -29,6 +29,8 @@
<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="wallpaper">"Achtergrond wordt ingesteld. Een ogenblik geduld..."</string>
<string name="savingImage">"Foto opslaan..."</string>
<string name="runningFaceDetection">"Een ogenblik geduld..."</string>
@@ -64,21 +66,22 @@
<string name="camera_gallery_photos_text">"Galerij"</string>
<string name="camera_pick_wallpaper">"Foto\'s"</string>
<string name="camera_setas_wallpaper">"Achtergrond"</string>
- <string name="camera_setas_wallpaper_drm">"Aangeschafte foto\'s"</string>
- <string name="camera_selectphoto">"Deze foto selecteren"</string>
- <string name="camera_takenewphoto">"Nieuwe foto vastleggen"</string>
<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>
- <string name="pref_gallery_size_title">"Grootte van foto"</string>
- <string name="pref_gallery_size_summary">"De weergavegrootte van foto\'s selecteren"</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_dialogtitle">"Grootte van foto"</string>
<string-array name="pref_gallery_size_choices">
<item>"Groot"</item>
<item>"Klein"</item>
</string-array>
- <string name="pref_gallery_sort_title">"Foto\'s sorteren"</string>
- <string name="pref_gallery_sort_summary">"De sorteervolgorde van foto\'s selecteren"</string>
+ <!-- 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_dialogtitle">"Foto\'s sorteren"</string>
<string-array name="pref_gallery_sort_choices">
<item>"Nieuwste eerst"</item>
@@ -107,8 +110,6 @@
<string name="pref_gallery_slideshow_shuffle_summary">"Foto\'s in willekeurige volgorde weergeven"</string>
<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_postpicturemenu_title">"Vragen na vastleggen"</string>
- <string name="pref_camera_postpicturemenu_summary">"Menu met acties (opslaan, verwijderen, enz.) weergeven na vastleggen"</string>
<string name="pref_camera_videoquality_category">"Videokwaliteit"</string>
<!-- no translation found for pref_camera_videoquality_title (3836197291744160920) -->
<skip />
@@ -119,7 +120,8 @@
<!-- no translation found for image_gallery_NoImageView_text (409595259802877447) -->
<skip />
<string name="pref_gallery_confirm_delete_title">"Verwijderen bevestigen"</string>
- <string name="pref_gallery_confirm_delete_summary">"Vragen om bevestiging voordat foto\'s worden verwijderd"</string>
+ <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) -->
+ <skip />
<string name="details_panel_title">"Details"</string>
<string name="details_file_size">"Bestandsgrootte:"</string>
<string name="details_image_resolution">"Resolutie:"</string>
@@ -151,8 +153,6 @@
<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>
- <string name="camera_button_hint">"Druk op de knop Vastleggen om de foto te maken."</string>
- <string name="video_camera_button_hint">"Druk op de knop \'Opnemen\' om videomateriaal op te nemen."</string>
<string name="photos_gallery_title">"Galerij"</string>
<string name="pick_photos_gallery_title">"Foto selecteren"</string>
<string name="videos_gallery_title">"Galerij"</string>
@@ -163,10 +163,6 @@
<string name="sendVideo">"Video delen via"</string>
<string name="movieviewlabel">"Films"</string>
<string name="loading_video">"Video laden..."</string>
- <string name="picture_saved">"Foto opgeslagen op SD-kaart."</string>
- <string name="picture_deleted">"Foto verwijderd."</string>
- <string name="video_saved">"Video opgeslagen op SD-kaart."</string>
- <string name="video_deleted">"Video verwijderd."</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) -->
@@ -177,4 +173,6 @@
<skip />
<!-- no translation found for resume_playing_restart (5471008499835769292) -->
<skip />
+ <!-- no translation found for gadget_title (259405922673466798) -->
+ <skip />
</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 973ea61..882ae3b 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -29,6 +29,8 @@
<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="wallpaper">"Ustawianie tapety, poczekaj…"</string>
<string name="savingImage">"Trwa zapisywanie zdjęcia…"</string>
<string name="runningFaceDetection">"Poczekaj…"</string>
@@ -64,21 +66,22 @@
<string name="camera_gallery_photos_text">"Galeria"</string>
<string name="camera_pick_wallpaper">"Zdjęcia"</string>
<string name="camera_setas_wallpaper">"Tapeta"</string>
- <string name="camera_setas_wallpaper_drm">"Zakupione zdjęcia"</string>
- <string name="camera_selectphoto">"Wybierz to zdjęcie"</string>
- <string name="camera_takenewphoto">"Zrób nowe zdjęcie"</string>
<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>
- <string name="pref_gallery_size_title">"Rozmiar zdjęć"</string>
- <string name="pref_gallery_size_summary">"Ustaw wyświetlany rozmiar zdjęć"</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_dialogtitle">"Rozmiar zdjęć"</string>
<string-array name="pref_gallery_size_choices">
<item>"Duży"</item>
<item>"Mały"</item>
</string-array>
- <string name="pref_gallery_sort_title">"Sortowanie zdjęć"</string>
- <string name="pref_gallery_sort_summary">"Wybierz kolejność sortowania zdjęć"</string>
+ <!-- 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_dialogtitle">"Sortowanie zdjęć"</string>
<string-array name="pref_gallery_sort_choices">
<item>"Najpierw najnowsze"</item>
@@ -107,8 +110,6 @@
<string name="pref_gallery_slideshow_shuffle_summary">"Wyświetlaj zdjęcia w kolejności losowej"</string>
<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_postpicturemenu_title">"Monit po zrobieniu zdjęcia"</string>
- <string name="pref_camera_postpicturemenu_summary">"Wyświetlaj menu działań (zapisz, usuń…) po zrobieniu zdjęcia"</string>
<string name="pref_camera_videoquality_category">"Jakość wideo"</string>
<!-- no translation found for pref_camera_videoquality_title (3836197291744160920) -->
<skip />
@@ -119,7 +120,8 @@
<!-- no translation found for image_gallery_NoImageView_text (409595259802877447) -->
<skip />
<string name="pref_gallery_confirm_delete_title">"Potwierdzanie usuwania"</string>
- <string name="pref_gallery_confirm_delete_summary">"Prośba o potwierdzenie przy usuwaniu zdjęć"</string>
+ <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) -->
+ <skip />
<string name="details_panel_title">"Szczegóły"</string>
<string name="details_file_size">"Rozmiar pliku:"</string>
<string name="details_image_resolution">"Rozdzielczość:"</string>
@@ -151,8 +153,6 @@
<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>
- <string name="camera_button_hint">"Naciśnij przycisk „Zrób zdjęcie”, aby zrobić zdjęcie."</string>
- <string name="video_camera_button_hint">"Naciśnij przycisk robienia zdjęć, aby nagrać film wideo."</string>
<string name="photos_gallery_title">"Galeria"</string>
<string name="pick_photos_gallery_title">"Wybierz zdjęcie"</string>
<string name="videos_gallery_title">"Galeria"</string>
@@ -163,10 +163,6 @@
<string name="sendVideo">"Prześlij film następującą drogą:"</string>
<string name="movieviewlabel">"Filmy"</string>
<string name="loading_video">"Ładowanie filmu wideo..."</string>
- <string name="picture_saved">"Zapisano zdjęcie na karcie SD."</string>
- <string name="picture_deleted">"Usunięto zdjęcie."</string>
- <string name="video_saved">"Zapisano film wideo na karcie SD."</string>
- <string name="video_deleted">"Usunięto film 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) -->
@@ -177,4 +173,6 @@
<skip />
<!-- no translation found for resume_playing_restart (5471008499835769292) -->
<skip />
+ <!-- no translation found for gadget_title (259405922673466798) -->
+ <skip />
</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 6a73575..ef3b196 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -29,6 +29,8 @@
<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="wallpaper">"Установка фонового рисунка, подождите…"</string>
<string name="savingImage">"Идет сохранение изображения…"</string>
<string name="runningFaceDetection">"Подождите…"</string>
@@ -64,21 +66,22 @@
<string name="camera_gallery_photos_text">"Галерея"</string>
<string name="camera_pick_wallpaper">"Изображения"</string>
<string name="camera_setas_wallpaper">"Фоновый рисунок"</string>
- <string name="camera_setas_wallpaper_drm">"Приобретенные изображения"</string>
- <string name="camera_selectphoto">"Выбрать это изображение"</string>
- <string name="camera_takenewphoto">"Сделать новую фотографию"</string>
<string name="pref_gallery_category">"Общие настройки"</string>
<string name="pref_slideshow_category">"Настройки слайд-шоу"</string>
<string name="pref_camera_general_settings_category">"Общие настройки"</string>
- <string name="pref_gallery_size_title">"Размер изображения"</string>
- <string name="pref_gallery_size_summary">"Выбор отображаемого размера изображений"</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_dialogtitle">"Размер изображения"</string>
<string-array name="pref_gallery_size_choices">
<item>"Крупный"</item>
<item>"Мелкий"</item>
</string-array>
- <string name="pref_gallery_sort_title">"Сортировка изображений"</string>
- <string name="pref_gallery_sort_summary">"Выберите порядок сортировки изображений"</string>
+ <!-- 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_dialogtitle">"Сортировка изображений"</string>
<string-array name="pref_gallery_sort_choices">
<item>"Начиная с новых"</item>
@@ -107,8 +110,6 @@
<string name="pref_gallery_slideshow_shuffle_summary">"Показывать изображения в случайном порядке"</string>
<string name="pref_camera_recordlocation_title">"Сохранять адрес в изображениях"</string>
<string name="pref_camera_recordlocation_summary">"Записывать адрес в данные изображения"</string>
- <string name="pref_camera_postpicturemenu_title">"Спрашивать после съемки"</string>
- <string name="pref_camera_postpicturemenu_summary">"Отображать меню действий (сохранение, удаление и т.д.) после съемки"</string>
<string name="pref_camera_videoquality_category">"Качество видео"</string>
<!-- no translation found for pref_camera_videoquality_title (3836197291744160920) -->
<skip />
@@ -119,7 +120,8 @@
<!-- no translation found for image_gallery_NoImageView_text (409595259802877447) -->
<skip />
<string name="pref_gallery_confirm_delete_title">"Подтверждение удаления"</string>
- <string name="pref_gallery_confirm_delete_summary">"Просить подтверждения перед удалением изображений"</string>
+ <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) -->
+ <skip />
<string name="details_panel_title">"Сведения"</string>
<string name="details_file_size">"Размер файла:"</string>
<string name="details_image_resolution">"Разрешение:"</string>
@@ -151,8 +153,6 @@
<string name="context_menu_header">"Параметры изображения"</string>
<string name="video_context_menu_header">"Параметры видео"</string>
<string name="multiface_crop_help">"Чтобы начать, выберите лицо."</string>
- <string name="camera_button_hint">"Чтобы сделать фотографию, нажмите кнопку Снять."</string>
- <string name="video_camera_button_hint">"Нажмите кнопку Съемка для записи видео."</string>
<string name="photos_gallery_title">"Галерея"</string>
<string name="pick_photos_gallery_title">"Выбор изображения"</string>
<string name="videos_gallery_title">"Галерея"</string>
@@ -163,10 +163,6 @@
<string name="sendVideo">"Отправить видео при помощи"</string>
<string name="movieviewlabel">"Фильмы"</string>
<string name="loading_video">"Идет загрузка видео…"</string>
- <string name="picture_saved">"Изображение сохранено на карту SD."</string>
- <string name="picture_deleted">"Изображение удалено."</string>
- <string name="video_saved">"Видео сохранено на карту SD."</string>
- <string name="video_deleted">"Видео удалено."</string>
<string name="spaceIsLow_title">"Осталось мало места"</string>
<string name="spaceIsLow_content">"Место на карте SD заканчивается. Измените настройки качества или удалите элементы из галереи."</string>
<!-- no translation found for resume_playing_title (8996677350649355013) -->
@@ -177,4 +173,6 @@
<skip />
<!-- no translation found for resume_playing_restart (5471008499835769292) -->
<skip />
+ <!-- no translation found for gadget_title (259405922673466798) -->
+ <skip />
</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 4a030c4..324c9e6 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -29,6 +29,8 @@
<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="wallpaper">"正在设置壁纸,请稍候..."</string>
<string name="savingImage">"正在保存图片..."</string>
<string name="runningFaceDetection">"请稍候..."</string>
@@ -64,21 +66,22 @@
<string name="camera_gallery_photos_text">"图片库"</string>
<string name="camera_pick_wallpaper">"图片"</string>
<string name="camera_setas_wallpaper">"壁纸"</string>
- <string name="camera_setas_wallpaper_drm">"购买的图片"</string>
- <string name="camera_selectphoto">"选择该图片"</string>
- <string name="camera_takenewphoto">"拍摄新照片"</string>
<string name="pref_gallery_category">"常规设置"</string>
<string name="pref_slideshow_category">"幻灯片演示设置"</string>
<string name="pref_camera_general_settings_category">"常规设置"</string>
- <string name="pref_gallery_size_title">"图片大小"</string>
- <string name="pref_gallery_size_summary">"选择图片的显示大小"</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_dialogtitle">"图片大小"</string>
<string-array name="pref_gallery_size_choices">
<item>"大"</item>
<item>"小"</item>
</string-array>
- <string name="pref_gallery_sort_title">"图片排序"</string>
- <string name="pref_gallery_sort_summary">"选择图片的排序顺序"</string>
+ <!-- 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_dialogtitle">"图片排序"</string>
<string-array name="pref_gallery_sort_choices">
<item>"最新的在最前面"</item>
@@ -107,8 +110,6 @@
<string name="pref_gallery_slideshow_shuffle_summary">"以随机顺序显示图片"</string>
<string name="pref_camera_recordlocation_title">"在图片中存储位置"</string>
<string name="pref_camera_recordlocation_summary">"通过图片数据记录位置"</string>
- <string name="pref_camera_postpicturemenu_title">"在拍摄后提示"</string>
- <string name="pref_camera_postpicturemenu_summary">"在拍摄后显示操作菜单(保存、删除等等)"</string>
<string name="pref_camera_videoquality_category">"视频质量"</string>
<!-- no translation found for pref_camera_videoquality_title (3836197291744160920) -->
<skip />
@@ -119,7 +120,8 @@
<!-- no translation found for image_gallery_NoImageView_text (409595259802877447) -->
<skip />
<string name="pref_gallery_confirm_delete_title">"确认删除"</string>
- <string name="pref_gallery_confirm_delete_summary">"在删除图片之前显示确认"</string>
+ <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) -->
+ <skip />
<string name="details_panel_title">"详细信息"</string>
<string name="details_file_size">"文件大小:"</string>
<string name="details_image_resolution">"分辨率:"</string>
@@ -151,8 +153,6 @@
<string name="context_menu_header">"图片选项"</string>
<string name="video_context_menu_header">"视频选项"</string>
<string name="multiface_crop_help">"轻击一张脸开始裁切。"</string>
- <string name="camera_button_hint">"按“拍摄”按钮获得该图片。"</string>
- <string name="video_camera_button_hint">"按“拍摄”按钮录制视频。"</string>
<string name="photos_gallery_title">"图片库"</string>
<string name="pick_photos_gallery_title">"选择图片"</string>
<string name="videos_gallery_title">"图片库"</string>
@@ -163,10 +163,6 @@
<string name="sendVideo">"共享视频的方式"</string>
<string name="movieviewlabel">"电影"</string>
<string name="loading_video">"正在载入视频..."</string>
- <string name="picture_saved">"照片已保存到 SD 卡中。"</string>
- <string name="picture_deleted">"照片已删除。"</string>
- <string name="video_saved">"视频已保存到 SD 卡中。"</string>
- <string name="video_deleted">"视频已删除。"</string>
<string name="spaceIsLow_title">"空间不足"</string>
<string name="spaceIsLow_content">"您的 SD 卡已满。请更改质量设置或删除图片库中的内容。"</string>
<!-- no translation found for resume_playing_title (8996677350649355013) -->
@@ -177,4 +173,6 @@
<skip />
<!-- no translation found for resume_playing_restart (5471008499835769292) -->
<skip />
+ <!-- no translation found for gadget_title (259405922673466798) -->
+ <skip />
</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 2fe3a5c..c3243ca 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -29,6 +29,8 @@
<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="wallpaper">"設定桌布中,請稍候…"</string>
<string name="savingImage">"儲存相片中…"</string>
<string name="runningFaceDetection">"請稍候…"</string>
@@ -64,21 +66,22 @@
<string name="camera_gallery_photos_text">"圖庫"</string>
<string name="camera_pick_wallpaper">"相片"</string>
<string name="camera_setas_wallpaper">"桌布"</string>
- <string name="camera_setas_wallpaper_drm">"已購買的相片"</string>
- <string name="camera_selectphoto">"選取此相片"</string>
- <string name="camera_takenewphoto">"拍攝新相片"</string>
<string name="pref_gallery_category">"一般設定"</string>
<string name="pref_slideshow_category">"投影片設定"</string>
<string name="pref_camera_general_settings_category">"一般設定"</string>
- <string name="pref_gallery_size_title">"相片大小"</string>
- <string name="pref_gallery_size_summary">"選取相片顯示大小"</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_dialogtitle">"相片大小"</string>
<string-array name="pref_gallery_size_choices">
<item>"大"</item>
<item>"小"</item>
</string-array>
- <string name="pref_gallery_sort_title">"圖片排序"</string>
- <string name="pref_gallery_sort_summary">"選取相片排序順序"</string>
+ <!-- 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_dialogtitle">"圖片排序"</string>
<string-array name="pref_gallery_sort_choices">
<item>"最新的優先"</item>
@@ -107,8 +110,6 @@
<string name="pref_gallery_slideshow_shuffle_summary">"隨機顯示相片"</string>
<string name="pref_camera_recordlocation_title">"在相片儲存位置資訊"</string>
<string name="pref_camera_recordlocation_summary">"在相片中紀錄位置資訊"</string>
- <string name="pref_camera_postpicturemenu_title">"拍攝後顯示提示"</string>
- <string name="pref_camera_postpicturemenu_summary">"照相後顯示動作選單 (儲存、刪除,…)"</string>
<string name="pref_camera_videoquality_category">"影片品質"</string>
<!-- no translation found for pref_camera_videoquality_title (3836197291744160920) -->
<skip />
@@ -119,7 +120,8 @@
<!-- no translation found for image_gallery_NoImageView_text (409595259802877447) -->
<skip />
<string name="pref_gallery_confirm_delete_title">"刪除確認"</string>
- <string name="pref_gallery_confirm_delete_summary">"刪除相片前顯示確認"</string>
+ <!-- no translation found for pref_gallery_confirm_delete_summary (5253456492765525245) -->
+ <skip />
<string name="details_panel_title">"詳細資料"</string>
<string name="details_file_size">"檔案大小:"</string>
<string name="details_image_resolution">"解析度:"</string>
@@ -151,8 +153,6 @@
<string name="context_menu_header">"圖片選項"</string>
<string name="video_context_menu_header">"影片選項"</string>
<string name="multiface_crop_help">"選取版面開始裁切"</string>
- <string name="camera_button_hint">"按下拍攝鍵進行拍攝。"</string>
- <string name="video_camera_button_hint">"按下 [拍攝] 按鈕可錄製影片。"</string>
<string name="photos_gallery_title">"圖庫"</string>
<string name="pick_photos_gallery_title">"選取相片"</string>
<string name="videos_gallery_title">"圖庫"</string>
@@ -163,10 +163,6 @@
<string name="sendVideo">"透過…分享影片"</string>
<string name="movieviewlabel">"電影"</string>
<string name="loading_video">"正在載入影片…"</string>
- <string name="picture_saved">"儲存至 SD 卡的圖片。"</string>
- <string name="picture_deleted">"已刪除圖片。"</string>
- <string name="video_saved">"已將影片儲存至 SD 卡。"</string>
- <string name="video_deleted">"已刪除影片。"</string>
<string name="spaceIsLow_title">"空間不足"</string>
<string name="spaceIsLow_content">"您的 SD 卡空間已快用完。請變更品質設定或刪除圖庫中的項目。"</string>
<!-- no translation found for resume_playing_title (8996677350649355013) -->
@@ -177,4 +173,6 @@
<skip />
<!-- no translation found for resume_playing_restart (5471008499835769292) -->
<skip />
+ <!-- no translation found for gadget_title (259405922673466798) -->
+ <skip />
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 8482a60..161f960 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -62,6 +62,9 @@
<!-- alert to the user to that the SD card is too full to complete the operation -->
<string name="not_enough_space">Your SD card is full.</string>
+ <!-- alert to the user to that the SD card is being disk-checked -->
+ <string name="preparing_sd">Preparing SD card\u2026</string>
+
<!-- Toast/alert after saving wallpaper -->
<string name="wallpaper">Setting wallpaper, please wait\u2026</string>
@@ -158,18 +161,6 @@
<string name="camera_pick_wallpaper">Pictures</string>
<string name="camera_setas_wallpaper">Wallpaper</string>
- <string name="camera_setas_wallpaper_drm">Purchased pictures</string>
-
- <string name="camera_selectphoto">Select this picture</string>
-
- <!-- Button indicating to skip the picture just taken and take another one (this is used
- when the camera is invoked for the purpose of returning a picture to another activity
- such as a contacts photo). -->
- <string name="camera_takenewphoto">Capture new picture</string>
-
- <!-- Do not translate -->
- <string name="camera_takenewvideo">Capture new video</string>
-
<!-- Settings screen, section heading -->
<string name="pref_gallery_category">General settings</string>
@@ -178,10 +169,10 @@
<string name="pref_camera_general_settings_category">General settings</string>
<!-- Settings screen, setting summary text -->
- <string name="pref_gallery_size_title">Picture size</string>
+ <string name="pref_gallery_size_title">Display size</string>
<!-- Settings screen, title for preference for image size to be used in the im -->
- <string name="pref_gallery_size_summary">Select the display size of pictures</string>
+ <string name="pref_gallery_size_summary">Select the display size of pictures and videos</string>
<!-- Title of dialog that appears after selecting Picture size setting option -->
<string name="pref_gallery_size_dialogtitle">Picture size</string>
<!-- Options in dialog that appears after selecting Picture size setting option -->
@@ -201,9 +192,9 @@
<!-- Do not translate. Default option value in dialog that appears after selecting Picture size setting option -->
<string name="default_value_pref_gallery_size">1</string>
<!-- Settings screen, setting option name -->
- <string name="pref_gallery_sort_title">Picture sort</string>
+ <string name="pref_gallery_sort_title">Sort order</string>
<!-- Settings screen, setting summary text -->
- <string name="pref_gallery_sort_summary">Select the sort order of pictures</string>
+ <string name="pref_gallery_sort_summary">Select the sort order of pictures and videos</string>
<!-- Title of dialog that appears after selecting Picture sort setting option -->
<string name="pref_gallery_sort_dialogtitle">Picture sort</string>
<!-- Options in dialog that appears after selecting Picture sort setting option -->
@@ -308,12 +299,6 @@
<!-- Do not translate -->
<string name="pref_camera_upload_albumname_dialogtitle">Picasa album name</string>
- <!-- [No longer used.] Settings screen, setting title text -->
- <string name="pref_camera_postpicturemenu_title">Prompt after capture</string>
-
- <!-- [No longer used.] Settings screen, setting summary text -->
- <string name="pref_camera_postpicturemenu_summary">Display action menu (save, delete, \u2026) after capture</string>
-
<!-- Settings screen, Video quality category title -->
<string name="pref_camera_videoquality_category">Video quality</string>
@@ -341,7 +326,7 @@
<string name="pref_gallery_confirm_delete_title">Confirm deletions</string>
<!-- Preference summary for whether the user should be prompted form confirmation when deleting images -->
- <string name="pref_gallery_confirm_delete_summary">Show confirmation before deleting pictures</string>
+ <string name="pref_gallery_confirm_delete_summary">Show confirmation before deleting a picture or video</string>
<!-- Details stuff -->
<!-- Do not translate -->
@@ -407,10 +392,6 @@
<string name="video_context_menu_header">Video options</string>
<!-- Hint that appears when cropping an image with more than one face -->
<string name="multiface_crop_help">Tap a face to begin.</string>
- <!-- Hint/toast that appears when user first opens capture screen on still picture camera -->
- <string name="camera_button_hint">Press Capture button to take picture.</string>
- <!-- Hint/toast that appears when user first opens capture screen on video camera -->
- <string name="video_camera_button_hint">Press Capture button to record video.</string>
<!-- Activity title when in the image gallery to see pictures -->
<string name="photos_gallery_title">Gallery</string>
@@ -444,16 +425,6 @@
<!-- shown in the video player view while the video is being loaded, before it starts playing -->
<string name="loading_video">Loading video\u2026</string>
- <!-- Displayed as a toast when a picture is saved -->
- <string name="picture_saved">Picture saved to SD card.</string>
- <!-- Displayed as a toast when a picture is deleted -->
- <string name="picture_deleted">Picture deleted.</string>
-
- <!-- Displayed as a toast when a video is saved -->
- <string name="video_saved">Video saved to SD card.</string>
- <!-- Displayed as a toast when a video is deleted -->
- <string name="video_deleted">Video deleted.</string>
-
<!-- Low-memory dialog title -->
<string name="spaceIsLow_title">Space is low</string>
<!-- Low-memory dialog message -->
@@ -471,4 +442,11 @@
<!-- Movie View Start Playing button "Beginning" -->
<string name="resume_playing_restart">Start over</string>
+ <!-- Title for picture frame gadget to show in list of all available gadgets -->
+ <string name="gadget_title">Picture frame</string>
+
+ <!-- Video Camera format string for new video files. Passed to java.text.SimpleDateFormat.
+ Do not localize -->
+ <string name="video_file_name_format">"'video'-yyyy-MM-dd-HH-mm-ss"</string>
+
</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 726a952..2000bf9 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -28,13 +28,9 @@
<item name="android:shadowRadius">2.0</item>
<item name="android:textColor">#FFF</item>
<item name="android:gravity">center_horizontal</item>
- <item name="android:layout_width">fill_parent</item>
- <item name="android:layout_height">fill_parent</item>
- <item name="android:paddingLeft">5dip</item>
- <item name="android:paddingRight">5dip</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:drawablePadding">3dip</item>
- <item name="android:paddingTop">2dip</item>
- <item name="android:layout_marginLeft">10dip</item>
- <item name="android:layout_marginRight">10dip</item>
</style>
</resources>
diff --git a/src/com/android/camera/Camera.java b/src/com/android/camera/Camera.java
index 11b1ccd..a6775ae 100644
--- a/src/com/android/camera/Camera.java
+++ b/src/com/android/camera/Camera.java
@@ -34,6 +34,7 @@
import android.content.pm.ActivityInfo;
import android.content.res.AssetFileDescriptor;
import android.content.res.Resources;
+import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
@@ -41,6 +42,7 @@
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
+import android.graphics.drawable.TransitionDrawable;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.Size;
import android.location.Location;
@@ -73,6 +75,7 @@
import android.view.WindowManager;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.ViewGroup.LayoutParams;
+import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
@@ -86,6 +89,8 @@
private static final String TAG = "camera";
private static final boolean DEBUG = false;
+ private static final boolean DEBUG_TIME_OPERATIONS = DEBUG && false;
+ private static final boolean DEBUG_FAKE_GPS_LOCATION = DEBUG && false;
private static final int CROP_MSG = 1;
private static final int KEEP = 2;
@@ -124,6 +129,7 @@
private static final String sTempCropFilename = "crop-temp";
private android.hardware.Camera mCameraDevice;
+ private android.hardware.Camera.Parameters mParameters;
private VideoPreview mSurfaceView;
private SurfaceHolder mSurfaceHolder = null;
private ImageView mBlackout = null;
@@ -152,6 +158,12 @@
private boolean mMenuSelectionMade;
private ImageView mLastPictureButton;
+ private LayerDrawable mVignette;
+ private Animation mShowLastPictureButtonAnimation = new AlphaAnimation(0F, 1F);
+ private boolean mShouldShowLastPictureButton;
+ private TransitionDrawable mThumbnailTransition;
+ private Drawable[] mThumbnails;
+ private boolean mShouldTransitionThumbnails;
private Uri mLastPictureUri;
private LocationManager mLocationManager = null;
@@ -170,6 +182,9 @@
private boolean mKeepAndRestartPreview;
+ private View mPostCaptureAlert;
+
+
private Handler mHandler = new MainHandler();
private ProgressDialog mSavingProgress;
@@ -217,6 +232,7 @@
mHandler.sendEmptyMessageDelayed(RESTART_PREVIEW, 100);
} else if (mStatus == SNAPSHOT_COMPLETED){
mCaptureObject.dismissFreezeFrame(true);
+ hidePostCaptureAlert();
}
break;
}
@@ -244,9 +260,11 @@
// TODO put up a "please wait" message
// TODO also listen for the media scanner finished message
showStorageToast();
- } else if (action.equals(Intent.ACTION_MEDIA_UNMOUNTED)) {
+ } else if (action.equals(Intent.ACTION_MEDIA_UNMOUNTED) ||
+ action.equals(Intent.ACTION_MEDIA_CHECKING)) {
// SD card unavailable
- showStorageToast();
+ mPicturesRemaining = MenuHelper.NO_STORAGE_ERROR;
+ showStorageToast(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)) {
@@ -298,7 +316,7 @@
private final class ShutterCallback implements android.hardware.Camera.ShutterCallback {
public void onShutter() {
- if (DEBUG) {
+ if (DEBUG_TIME_OPERATIONS) {
long now = System.currentTimeMillis();
Log.v(TAG, "********** Total shutter lag " + (now - mShutterPressTime) + " ms");
}
@@ -314,7 +332,7 @@
if (Config.LOGV)
Log.v(TAG, "got RawPictureCallback...");
mRawPictureCallbackTime = System.currentTimeMillis();
- mBlackout.setVisibility(View.INVISIBLE);
+ mBlackout.setVisibility(View.GONE);
}
};
@@ -428,7 +446,7 @@
private void storeImage(byte[] data, Location loc) {
try {
- if (DEBUG) {
+ if (DEBUG_TIME_OPERATIONS) {
startTiming();
}
long dateTaken = System.currentTimeMillis();
@@ -455,7 +473,7 @@
mAddImageCancelable = null;
}
- if (DEBUG) {
+ if (DEBUG_TIME_OPERATIONS) {
stopTiming();
Log.d(TAG, "Storing image took " + (mWallTimeEnd - mWallTimeStart) + " ms. " +
"Thread time was " + ((mThreadTimeEnd - mThreadTimeStart) / 1000000) +
@@ -472,19 +490,19 @@
if (!captureOnly) {
storeImage(data, loc);
sendBroadcast(new Intent("com.android.camera.NEW_PICTURE", mLastContentUri));
- setLastPictureThumb(data);
+ setLastPictureThumb(data, mCaptureObject.getLastCaptureUri());
dismissFreezeFrame(true);
} else {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;
- if (DEBUG) {
+ if (DEBUG_TIME_OPERATIONS) {
startTiming();
}
mCaptureOnlyBitmap = BitmapFactory.decodeByteArray(data, 0, data.length, options);
- if (DEBUG) {
+ if (DEBUG_TIME_OPERATIONS) {
stopTiming();
Log.d(TAG, "Decoded mCaptureOnly bitmap (" + mCaptureOnlyBitmap.getWidth() +
"x" + mCaptureOnlyBitmap.getHeight() + " ) in " +
@@ -492,56 +510,16 @@
((mThreadTimeEnd - mThreadTimeStart) / 1000000) + " ms.");
}
- openOptionsMenu();
+ showPostCaptureAlert();
+ cancelAutomaticPreviewRestart();
}
-
mCapturing = false;
if (mPausing) {
closeCamera();
}
}
- private void setLastPictureThumb(byte[] data) {
- BitmapFactory.Options options = new BitmapFactory.Options();
- options.inSampleSize = 16;
-
- if (DEBUG) {
- startTiming();
- }
-
- Bitmap lastPictureThumb = BitmapFactory.decodeByteArray(data, 0, data.length, options);
-
- if (DEBUG) {
- stopTiming();
- Log.d(TAG, "Decoded lastPictureThumb bitmap (" + lastPictureThumb.getWidth() +
- "x" + lastPictureThumb.getHeight() + " ) in " +
- (mWallTimeEnd - mWallTimeStart) + " ms. Thread time was " +
- ((mThreadTimeEnd - mThreadTimeStart) / 1000000) + " ms.");
- }
-
- final int PADDING_WIDTH = 2;
- final int PADDING_HEIGHT = 2;
- LayoutParams layoutParams = mLastPictureButton.getLayoutParams();
- // Make the mini-thumbnail size smaller than the button size so that the image corners
- // don't peek out from the rounded corners of the frame_thumbnail graphic:
- final int miniThumbWidth = layoutParams.width - 2 * PADDING_WIDTH;
- final int miniThumbHeight = layoutParams.height - 2 * PADDING_HEIGHT;
-
- lastPictureThumb = ImageManager.extractMiniThumb(lastPictureThumb,
- miniThumbWidth, miniThumbHeight);
-
- Drawable[] layers = new Drawable[2];
- layers[0] = new BitmapDrawable(lastPictureThumb);
- layers[1] = getResources().getDrawable(R.drawable.frame_thumbnail);
- LayerDrawable layerDrawable = new LayerDrawable(layers);
- layerDrawable.setLayerInset(0, PADDING_WIDTH, PADDING_HEIGHT,
- PADDING_WIDTH, PADDING_HEIGHT);
- mLastPictureButton.setImageDrawable(layerDrawable);
- mLastPictureButton.setVisibility(View.VISIBLE);
- mLastPictureUri = mCaptureObject.getLastCaptureUri();
- }
-
/*
* Tells the image capture thread to abort the capture of the
* current image.
@@ -589,44 +567,63 @@
Boolean recordLocation = mPreferences.getBoolean("pref_camera_recordlocation_key", false);
Location loc = recordLocation ? getCurrentLocation() : null;
- android.hardware.Camera.Parameters parameters = mCameraDevice.getParameters();
// Quality 75 has visible artifacts, and quality 90 looks great but the files begin to
// get large. 85 is a good compromise between the two.
- parameters.set("jpeg-quality", 85);
- parameters.set("rotation", latchedOrientation);
+ mParameters.set("jpeg-quality", 85);
+ mParameters.set("rotation", latchedOrientation);
- parameters.remove("gps-latitude");
- parameters.remove("gps-longitude");
- parameters.remove("gps-altitude");
- parameters.remove("gps-timestamp");
+ mParameters.remove("gps-latitude");
+ mParameters.remove("gps-longitude");
+ mParameters.remove("gps-altitude");
+ mParameters.remove("gps-timestamp");
- if (loc != null) {
+ if (DEBUG_FAKE_GPS_LOCATION) {
+ // Google London office, having trouble encoding longitude
+
+ if (false) {
+ // This fails:
+ mParameters.set("gps-latitude", "51.49473309516907");
+ mParameters.set("gps-longitude", "-0.14598190784454346");
+ mParameters.set("gps-altitude", "71.0"); // meters
+ mParameters.set("gps-timestamp", "1233744883");
+ } else {
+ // This works OK:
+ mParameters.set("gps-latitude", "51.49473309516907");
+ mParameters.set("gps-longitude", "-1.0");
+ mParameters.set("gps-altitude", "71.0"); // meters
+ mParameters.set("gps-timestamp", "1233744883");
+ }
+ } else if (loc != null) {
double lat = loc.getLatitude();
double lon = loc.getLongitude();
+ boolean hasLatLon = (lat != 0.0d) || (lon != 0.0d);
- if (lat != 0D && lon != 0d) {
- parameters.set("gps-latitude", String.valueOf(lat));
- parameters.set("gps-longitude", String.valueOf(lon));
+ if (hasLatLon) {
+ String latString = String.valueOf(lat);
+ String lonString = String.valueOf(lon);
+ mParameters.set("gps-latitude", latString);
+ mParameters.set("gps-longitude", lonString);
if (loc.hasAltitude())
- parameters.set("gps-altitude", String.valueOf(loc.getAltitude()));
+ mParameters.set("gps-altitude", String.valueOf(loc.getAltitude()));
if (loc.getTime() != 0) {
// Location.getTime() is UTC in milliseconds.
// gps-timestamp is UTC in seconds.
long utcTimeSeconds = loc.getTime() / 1000;
- parameters.set("gps-timestamp", String.valueOf(utcTimeSeconds));
+ mParameters.set("gps-timestamp", String.valueOf(utcTimeSeconds));
}
} else {
loc = null;
}
}
- Size pictureSize = parameters.getPictureSize();
+
+ Size pictureSize = mParameters.getPictureSize();
// resize the SurfaceView to the aspect-ratio of the still image
// and so that we can see the full image that was taken
mSurfaceView.setAspectRatio(pictureSize.width, pictureSize.height);
- mCameraDevice.setParameters(parameters);
+ mCameraDevice.setParameters(mParameters);
mCameraDevice.takePicture(mShutterCallback, mRawPictureCallback, new JpegPictureCallback(loc));
@@ -653,9 +650,9 @@
// Don't check the filesystem here, we can't afford the latency. Instead, check the
// cached value which was calculated when the preview was restarted.
- if (DEBUG) mShutterPressTime = System.currentTimeMillis();
+ if (DEBUG_TIME_OPERATIONS) mShutterPressTime = System.currentTimeMillis();
if (mPicturesRemaining < 1) {
- showStorageToast();
+ showStorageToast(mPicturesRemaining);
return;
}
@@ -672,6 +669,52 @@
}
}
+ private void setLastPictureThumb(byte[] data, Uri uri) {
+ BitmapFactory.Options options = new BitmapFactory.Options();
+ options.inSampleSize = 16;
+
+ Bitmap lastPictureThumb = BitmapFactory.decodeByteArray(data, 0, data.length, options);
+
+ setLastPictureThumb(lastPictureThumb, uri);
+ }
+
+ private void setLastPictureThumb(Bitmap lastPictureThumb, Uri uri) {
+
+ final int PADDING_WIDTH = 2;
+ final int PADDING_HEIGHT = 2;
+ LayoutParams layoutParams = mLastPictureButton.getLayoutParams();
+ // Make the mini-thumbnail size smaller than the button size so that the image corners
+ // don't peek out from the rounded corners of the frame_thumbnail graphic:
+ final int miniThumbWidth = layoutParams.width - 2 * PADDING_WIDTH;
+ final int miniThumbHeight = layoutParams.height - 2 * PADDING_HEIGHT;
+
+ lastPictureThumb = ImageManager.extractMiniThumb(lastPictureThumb,
+ miniThumbWidth, miniThumbHeight);
+
+ Drawable[] vignetteLayers = new Drawable[2];
+ vignetteLayers[1] = getResources().getDrawable(R.drawable.frame_thumbnail);
+ if (mThumbnails == null) {
+ mThumbnails = new Drawable[2];
+ mThumbnails[1] = new BitmapDrawable(lastPictureThumb);
+ vignetteLayers[0] = mThumbnails[1];
+ } else {
+ mThumbnails[0] = mThumbnails[1];
+ mThumbnails[1] = new BitmapDrawable(lastPictureThumb);
+ mThumbnailTransition = new TransitionDrawable(mThumbnails);
+ mShouldTransitionThumbnails = true;
+ vignetteLayers[0] = mThumbnailTransition;
+ }
+
+ mVignette = new LayerDrawable(vignetteLayers);
+ mVignette.setLayerInset(0, PADDING_WIDTH, PADDING_HEIGHT,
+ PADDING_WIDTH, PADDING_HEIGHT);
+ mLastPictureButton.setImageDrawable(mVignette);
+
+ if (mLastPictureButton.getVisibility() != View.VISIBLE) {
+ mShouldShowLastPictureButton = true;
+ }
+ mLastPictureUri = uri;
+ }
static private String createName(long dateTaken) {
return DateFormat.format("yyyy-MM-dd kk.mm.ss", dateTaken).toString();
@@ -741,10 +784,27 @@
mBlackout.setBackgroundDrawable(new ColorDrawable(0xFF000000));
mLastPictureButton = (ImageView) findViewById(R.id.last_picture_button);
- mLastPictureButton.setOnClickListener(this);
- mLastPictureButton.setVisibility(View.INVISIBLE);
+ 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.setOnClickListener(this);
+ if (lastPicture == null) {
+ mLastPictureButton.setVisibility(View.GONE);
+ } else {
+ Bitmap miniThumb = lastPicture.miniThumbBitmap();
+ setLastPictureThumb(miniThumb, lastPicture.fullSizeImageUri());
+ }
+ images.deactivate();
+ }
- mShutterButton = (ShutterButton) findViewById(R.id.mode_indicator);
+ mShutterButton = (ShutterButton) findViewById(R.id.shutter_button);
mShutterButton.setOnShutterButtonListener(this);
try {
@@ -773,42 +833,22 @@
mFocusBlinkAnimation = AnimationUtils.loadAnimation(this, R.anim.auto_focus_blink);
mFocusBlinkAnimation.setRepeatCount(Animation.INFINITE);
mFocusBlinkAnimation.setRepeatMode(Animation.REVERSE);
+
+ mPostCaptureAlert = findViewById(R.id.post_picture_panel);
}
@Override
public void onStart() {
super.onStart();
- final View hintView = findViewById(R.id.hint_toast);
- if (hintView != null)
- hintView.setVisibility(View.GONE);
-
Thread t = new Thread(new Runnable() {
public void run() {
final boolean storageOK = calculatePicturesRemaining() > 0;
- if (hintView == null)
- return;
- if (storageOK) {
+ if (!storageOK) {
mHandler.post(new Runnable() {
public void run() {
- hintView.setVisibility(View.VISIBLE);
- }
- });
- mHandler.postDelayed(new Runnable() {
- public void run() {
- Animation a = new android.view.animation.AlphaAnimation(1F, 0F);
- a.setDuration(500);
- a.startNow();
- hintView.setAnimation(a);
- hintView.setVisibility(View.GONE);
- }
- }, 3000);
- } else {
- mHandler.post(new Runnable() {
- public void run() {
- hintView.setVisibility(View.GONE);
- showStorageToast();
+ showStorageToast(mPicturesRemaining);
}
});
}
@@ -822,12 +862,124 @@
case R.id.last_picture_button:
viewLastImage();
break;
+ case R.id.attach:
+ doAttach();
+ break;
+ case R.id.cancel:
+ doCancel();
}
}
+ private void doAttach() {
+ Bitmap bitmap = mImageCapture.getLastBitmap();
+ mCaptureObject.setDone(true);
+
+ String cropValue = null;
+ Uri saveUri = null;
+
+ Bundle myExtras = getIntent().getExtras();
+ if (myExtras != null) {
+ saveUri = (Uri) myExtras.getParcelable(MediaStore.EXTRA_OUTPUT);
+ cropValue = myExtras.getString("crop");
+ }
+
+
+ if (cropValue == null) {
+ /*
+ * First handle the no crop case -- just return the value. If the caller
+ * specifies a "save uri" then write the data to it's stream. Otherwise,
+ * pass back a scaled down version of the bitmap directly in the extras.
+ */
+ if (saveUri != null) {
+ OutputStream outputStream = null;
+ try {
+ outputStream = mContentResolver.openOutputStream(saveUri);
+ bitmap.compress(Bitmap.CompressFormat.JPEG, 75, outputStream);
+ outputStream.close();
+
+ setResult(RESULT_OK);
+ finish();
+ } catch (IOException ex) {
+ //
+ } finally {
+ if (outputStream != null) {
+ try {
+ outputStream.close();
+ } catch (IOException ex) {
+
+ }
+ }
+ }
+ } else {
+ float scale = .5F;
+ Matrix m = new Matrix();
+ m.setScale(scale, scale);
+
+ bitmap = Bitmap.createBitmap(bitmap, 0, 0,
+ bitmap.getWidth(),
+ bitmap.getHeight(),
+ m, true);
+
+ setResult(RESULT_OK, new Intent("inline-data").putExtra("data", bitmap));
+ finish();
+ }
+ }
+ else {
+ /*
+ * Save the image to a temp file and invoke the cropper
+ */
+ Uri tempUri = null;
+ FileOutputStream tempStream = null;
+ try {
+ File path = getFileStreamPath(sTempCropFilename);
+ path.delete();
+ tempStream = openFileOutput(sTempCropFilename, 0);
+ bitmap.compress(Bitmap.CompressFormat.JPEG, 75, tempStream);
+ tempStream.close();
+ tempUri = Uri.fromFile(path);
+ } catch (FileNotFoundException ex) {
+ setResult(Activity.RESULT_CANCELED);
+ finish();
+ return;
+ } catch (IOException ex) {
+ setResult(Activity.RESULT_CANCELED);
+ finish();
+ return;
+ } finally {
+ if (tempStream != null) {
+ try {
+ tempStream.close();
+ } catch (IOException ex) {
+
+ }
+ }
+ }
+
+ Bundle newExtras = new Bundle();
+ if (cropValue.equals("circle"))
+ newExtras.putString("circleCrop", "true");
+ if (saveUri != null)
+ newExtras.putParcelable(MediaStore.EXTRA_OUTPUT, saveUri);
+ else
+ newExtras.putBoolean("return-data", true);
+
+ Intent cropIntent = new Intent();
+ cropIntent.setClass(Camera.this, CropImage.class);
+ cropIntent.setData(tempUri);
+ cropIntent.putExtras(newExtras);
+
+ startActivityForResult(cropIntent, CROP_MSG);
+ }
+ }
+
+ private void doCancel() {
+ setResult(RESULT_CANCELED, new Intent());
+ finish();
+ }
+
public void onShutterButtonFocus(ShutterButton button, boolean pressed) {
switch (button.getId()) {
- case R.id.mode_indicator:
+ case R.id.shutter_button:
doFocus(pressed);
break;
}
@@ -835,7 +987,7 @@
public void onShutterButtonClick(ShutterButton button) {
switch (button.getId()) {
- case R.id.mode_indicator:
+ case R.id.shutter_button:
doSnap(false);
break;
}
@@ -845,6 +997,10 @@
MenuHelper.showStorageToast(this);
}
+ private void showStorageToast(int remainingPictures) {
+ MenuHelper.showStorageToast(this, remainingPictures);
+ }
+
@Override
public void onResume() {
super.onResume();
@@ -858,6 +1014,7 @@
intentFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_STARTED);
intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);
+ intentFilter.addAction(Intent.ACTION_MEDIA_CHECKING);
intentFilter.addDataScheme("file");
registerReceiver(mReceiver, intentFilter);
mDidRegister = true;
@@ -878,14 +1035,14 @@
mFocusToneGenerator = null;
}
- mBlackout.setVisibility(View.INVISIBLE);
+ 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.INVISIBLE);
+ mLastPictureButton.setVisibility(View.GONE);
}
list.deactivate();
}
@@ -996,7 +1153,7 @@
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
- if (mStatus == SNAPSHOT_IN_PROGRESS || mStatus == SNAPSHOT_COMPLETED) {
+ if (mStatus == SNAPSHOT_IN_PROGRESS) {
// ignore backs while we're taking a picture
return true;
}
@@ -1011,6 +1168,18 @@
doSnap(false);
}
return true;
+ case KeyEvent.KEYCODE_DPAD_CENTER:
+ // 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) {
+ if (mShutterButton.isInTouchMode()) {
+ mShutterButton.requestFocusFromTouch();
+ } else {
+ mShutterButton.requestFocus();
+ }
+ mShutterButton.setPressed(true);
+ }
+ return true;
}
return super.onKeyDown(keyCode, event);
@@ -1053,6 +1222,7 @@
private void doFocus(boolean pressed) {
if (pressed) {
mIsFocusButtonPressed = true;
+ mCaptureOnFocus = false;
if (mPreviewing) {
autoFocus();
} else if (mCaptureObject != null) {
@@ -1113,6 +1283,17 @@
// TODO: The best longterm solution is to write a reserve file of maximum JPEG size, always
// let the user take a picture, and delete that file if needed to save the new photo.
calculatePicturesRemaining();
+
+ if (mShouldShowLastPictureButton) {
+ mShouldShowLastPictureButton = false;
+ mLastPictureButton.setVisibility(View.VISIBLE);
+ Animation a = mShowLastPictureButtonAnimation;
+ a.setDuration(500);
+ mLastPictureButton.setAnimation(a);
+ } else if (mShouldTransitionThumbnails) {
+ mShouldTransitionThumbnails = false;
+ mThumbnailTransition.reverseTransition(500);
+ }
}
private void setViewFinder(int w, int h, boolean startPreview) {
@@ -1169,10 +1350,10 @@
// request the preview size, the hardware may not honor it,
// if we depended on it we would have to query the size again
- android.hardware.Camera.Parameters p = mCameraDevice.getParameters();
- p.setPreviewSize(w, h);
+ mParameters = mCameraDevice.getParameters();
+ mParameters.setPreviewSize(w, h);
try {
- mCameraDevice.setParameters(p);
+ mCameraDevice.setParameters(mParameters);
} catch (IllegalArgumentException e) {
// Ignore this error, it happens in the simulator.
}
@@ -1266,6 +1447,7 @@
ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
intent.putExtra(MediaStore.EXTRA_FULL_SCREEN, true);
intent.putExtra(MediaStore.EXTRA_SHOW_ACTION_ICONS, true);
+ intent.putExtra("com.android.camera.ReviewMode", true);
try {
startActivity(intent);
@@ -1374,8 +1556,7 @@
public boolean onMenuOpened(int featureId, Menu menu) {
if (featureId == Window.FEATURE_OPTIONS_PANEL) {
if (mStatus == SNAPSHOT_IN_PROGRESS) {
- mKeepAndRestartPreview = false;
- mHandler.removeMessages(RESTART_PREVIEW);
+ cancelAutomaticPreviewRestart();
mMenuSelectionMade = false;
}
}
@@ -1408,127 +1589,43 @@
return true;
}
+ private void cancelAutomaticPreviewRestart() {
+ mKeepAndRestartPreview = false;
+ mHandler.removeMessages(RESTART_PREVIEW);
+ }
+
private boolean isImageCaptureIntent() {
String action = getIntent().getAction();
return (MediaStore.ACTION_IMAGE_CAPTURE.equals(action));
}
+ private void showPostCaptureAlert() {
+ boolean isPick = isImageCaptureIntent();
+ int pickVisible = isPick ? View.VISIBLE : View.GONE;
+ mPostCaptureAlert.setVisibility(pickVisible);
+ if (isPick) {
+ int[] pickIds = {R.id.attach, R.id.cancel};
+ for(int id : pickIds) {
+ View view = mPostCaptureAlert.findViewById(id);
+ view.setOnClickListener(this);
+ Animation animation = new AlphaAnimation(0F, 1F);
+ animation.setDuration(500);
+ view.setAnimation(animation);
+ }
+ }
+ }
+
+ private void hidePostCaptureAlert() {
+ mPostCaptureAlert.setVisibility(View.GONE);
+ }
+
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
if (isImageCaptureIntent()) {
- menu.add(MenuHelper.IMAGE_SAVING_ITEM, MENU_SAVE_SELECT_PHOTOS , 0, R.string.camera_selectphoto).setOnMenuItemClickListener(new OnMenuItemClickListener() {
- public boolean onMenuItemClick(MenuItem item) {
- Bitmap bitmap = mImageCapture.getLastBitmap();
- mCaptureObject.setDone(true);
-
- String cropValue = null;
- Uri saveUri = null;
-
- Bundle myExtras = getIntent().getExtras();
- if (myExtras != null) {
- saveUri = (Uri) myExtras.getParcelable(MediaStore.EXTRA_OUTPUT);
- cropValue = myExtras.getString("crop");
- }
-
-
- if (cropValue == null) {
- /*
- * First handle the no crop case -- just return the value. If the caller
- * specifies a "save uri" then write the data to it's stream. Otherwise,
- * pass back a scaled down version of the bitmap directly in the extras.
- */
- if (saveUri != null) {
- OutputStream outputStream = null;
- try {
- outputStream = mContentResolver.openOutputStream(saveUri);
- bitmap.compress(Bitmap.CompressFormat.JPEG, 75, outputStream);
- outputStream.close();
-
- setResult(RESULT_OK);
- finish();
- } catch (IOException ex) {
- //
- } finally {
- if (outputStream != null) {
- try {
- outputStream.close();
- } catch (IOException ex) {
-
- }
- }
- }
- } else {
- float scale = .5F;
- Matrix m = new Matrix();
- m.setScale(scale, scale);
-
- bitmap = Bitmap.createBitmap(bitmap, 0, 0,
- bitmap.getWidth(),
- bitmap.getHeight(),
- m, true);
-
- setResult(RESULT_OK, new Intent("inline-data").putExtra("data", bitmap));
- finish();
- }
- }
- else {
- /*
- * Save the image to a temp file and invoke the cropper
- */
- Uri tempUri = null;
- FileOutputStream tempStream = null;
- try {
- File path = getFileStreamPath(sTempCropFilename);
- path.delete();
- tempStream = openFileOutput(sTempCropFilename, 0);
- bitmap.compress(Bitmap.CompressFormat.JPEG, 75, tempStream);
- tempStream.close();
- tempUri = Uri.fromFile(path);
- } catch (FileNotFoundException ex) {
- setResult(Activity.RESULT_CANCELED);
- finish();
- return true;
- } catch (IOException ex) {
- setResult(Activity.RESULT_CANCELED);
- finish();
- return true;
- } finally {
- if (tempStream != null) {
- try {
- tempStream.close();
- } catch (IOException ex) {
-
- }
- }
- }
-
- Bundle newExtras = new Bundle();
- if (cropValue.equals("circle"))
- newExtras.putString("circleCrop", "true");
- if (saveUri != null)
- newExtras.putParcelable(MediaStore.EXTRA_OUTPUT, saveUri);
- else
- newExtras.putBoolean("return-data", true);
-
- Intent cropIntent = new Intent();
- cropIntent.setClass(Camera.this, CropImage.class);
- cropIntent.setData(tempUri);
- cropIntent.putExtras(newExtras);
-
- startActivityForResult(cropIntent, CROP_MSG);
- }
- return true;
- }
- });
-
- menu.add(MenuHelper.IMAGE_SAVING_ITEM, MENU_SAVE_NEW_PHOTO, 0, R.string.camera_takenewphoto).setOnMenuItemClickListener(new OnMenuItemClickListener() {
- public boolean onMenuItemClick(MenuItem item) {
- keep();
- return true;
- }
- });
+ // No options menu for attach mode.
+ return false;
} else {
addBaseMenuItems(menu);
MenuHelper.addImageMenuItems(
@@ -1627,10 +1724,5 @@
});
item.setIcon(android.R.drawable.ic_menu_preferences);
}
-
- private void cancelRestartPreviewTimeout() {
- mHandler.removeMessages(RESTART_PREVIEW);
- }
-
}
diff --git a/src/com/android/camera/CropImage.java b/src/com/android/camera/CropImage.java
index 9542ce0..5250b56 100644
--- a/src/com/android/camera/CropImage.java
+++ b/src/com/android/camera/CropImage.java
@@ -434,6 +434,7 @@
findViewById(R.id.discard).setOnClickListener(new android.view.View.OnClickListener() {
public void onClick(View v) {
+ setResult(RESULT_CANCELED);
finish();
}
});
diff --git a/src/com/android/camera/GalleryPicker.java b/src/com/android/camera/GalleryPicker.java
index 44f8fc2..cf883dd 100644
--- a/src/com/android/camera/GalleryPicker.java
+++ b/src/com/android/camera/GalleryPicker.java
@@ -73,7 +73,6 @@
Dialog mMediaScanningDialog;
- MenuItem mFlipItem;
SharedPreferences mPrefs;
boolean mPausing = false;
@@ -96,8 +95,49 @@
true,
true);
}
- mAdapter.notifyDataSetChanged();
- mAdapter.init(!unmounted && !scanning);
+ if (mAdapter != null) {
+ mAdapter.notifyDataSetChanged();
+ mAdapter.init(!unmounted && !scanning);
+ }
+
+ if (!unmounted) {
+ // Warn the user if space is getting low
+ Thread t = new Thread(new Runnable() {
+ public void run() {
+
+ // Check available space only if we are writable
+ if (ImageManager.hasStorage()) {
+ String storageDirectory = Environment.getExternalStorageDirectory().toString();
+ StatFs stat = new StatFs(storageDirectory);
+ long remaining = (long)stat.getAvailableBlocks() * (long)stat.getBlockSize();
+ if (remaining < LOW_STORAGE_THRESHOLD) {
+
+ mHandler.post(new Runnable() {
+ public void run() {
+ Toast.makeText(GalleryPicker.this.getApplicationContext(),
+ R.string.not_enough_space, 5000).show();
+ }
+ });
+ }
+ }
+ }
+ });
+ t.start();
+ }
+
+ // If we just have zero or one folder, open it. (We shouldn't have just one folder
+ // any more, but we can have zero folders.)
+ mNoImagesView.setVisibility(View.GONE);
+ if (!scanning) {
+ int numItems = mAdapter.mItems.size();
+ if (numItems == 0) {
+ mNoImagesView.setVisibility(View.VISIBLE);
+ } else if (numItems == 1) {
+ mAdapter.mItems.get(0).launch(this);
+ finish();
+ return;
+ }
+ }
}
@Override
@@ -201,6 +241,7 @@
static class Item implements Comparable<Item>{
// The type is also used as the sort order
+ public final static int TYPE_NONE = -1;
public final static int TYPE_ALL_IMAGES = 0;
public final static int TYPE_ALL_VIDEOS = 1;
public final static int TYPE_CAMERA_IMAGES = 2;
@@ -329,14 +370,16 @@
images.deactivate();
notifyDataSetInvalidated();
- // If just one
- addBucketIfNotEmpty(Item.TYPE_ALL_IMAGES, null, R.string.all_images);
- addBucketIfNotEmpty(Item.TYPE_ALL_VIDEOS, null, R.string.all_videos);
+ // Conditionally add all-images and all-videos folders.
+ addBucket(Item.TYPE_ALL_IMAGES, null,
+ Item.TYPE_CAMERA_IMAGES, cameraBucketId, R.string.all_images);
+ addBucket(Item.TYPE_ALL_VIDEOS, null,
+ Item.TYPE_CAMERA_VIDEOS, cameraBucketId, R.string.all_videos);
if (cameraBucketId != null) {
- addBucketIfNotEmpty(Item.TYPE_CAMERA_IMAGES, cameraBucketId,
+ addBucket(Item.TYPE_CAMERA_IMAGES, cameraBucketId,
R.string.gallery_camera_bucket_name);
- addBucketIfNotEmpty(Item.TYPE_CAMERA_VIDEOS, cameraBucketId,
+ addBucket(Item.TYPE_CAMERA_VIDEOS, cameraBucketId,
R.string.gallery_camera_videos_bucket_name);
}
@@ -401,7 +444,36 @@
mWorkerThread.toBackground();
}
- private void addBucketIfNotEmpty(int itemType, String bucketId, int labelId) {
+ /**
+ * Add a bucket, but only if it's interesting.
+ * Interesting means non-empty and not duplicated by the
+ * corresponding camera bucket.
+ */
+ private void addBucket(int itemType, String bucketId,
+ int cameraItemType, String cameraBucketId,
+ int labelId) {
+ int itemCount = bucketItemCount(
+ Item.convertItemTypeToIncludedMediaType(itemType), bucketId);
+ if (itemCount == 0) {
+ return; // Bucket is empty, so don't show it.
+ }
+ int cameraItemCount = 0;
+ if (cameraBucketId != null) {
+ cameraItemCount = bucketItemCount(
+ Item.convertItemTypeToIncludedMediaType(cameraItemType), cameraBucketId);
+ }
+ if (cameraItemCount == itemCount) {
+ return; // Bucket is the same as the camera bucket, so don't show it.
+ }
+ mItems.add(new Item(itemType, bucketId, getResources().getString(labelId)));
+ }
+
+ /**
+ * Add a bucket, but only if it's interesting.
+ * Interesting means non-empty.
+ */
+ private void addBucket(int itemType, String bucketId,
+ int labelId) {
if (!isEmptyBucket(Item.convertItemTypeToIncludedMediaType(itemType), bucketId)) {
mItems.add(new Item(itemType, bucketId, getResources().getString(labelId)));
}
@@ -489,49 +561,10 @@
registerReceiver(mReceiver, intentFilter);
MenuHelper.requestOrientation(this, mPrefs);
-
- // Warn the user if space is getting low
- Thread t = new Thread(new Runnable() {
- public void run() {
-
- // Check available space only if we are writable
- if (ImageManager.hasStorage()) {
- String storageDirectory = Environment.getExternalStorageDirectory().toString();
- StatFs stat = new StatFs(storageDirectory);
- long remaining = (long)stat.getAvailableBlocks() * (long)stat.getBlockSize();
- if (remaining < LOW_STORAGE_THRESHOLD) {
-
- mHandler.post(new Runnable() {
- public void run() {
- Toast.makeText(GalleryPicker.this.getApplicationContext(),
- R.string.not_enough_space, 5000).show();
- }
- });
- }
- }
- }
- });
- t.start();
-
- // If we just have zero or one folder, open it. (We shouldn't have just one folder
- // any more, but we can have zero folders.)
- mNoImagesView.setVisibility(View.GONE);
- if (!scanning) {
- int numItems = mAdapter.mItems.size();
- if (numItems == 0) {
- mNoImagesView.setVisibility(View.VISIBLE);
- } else if (numItems == 1) {
- // Not sure we can ever get here any more.
- android.net.Uri uri = Images.Media.INTERNAL_CONTENT_URI;
- Intent intent = new Intent(Intent.ACTION_VIEW, uri);
- startActivity(intent);
- finish();
- return;
- }
- }
}
+
private void setBackgrounds(Resources r) {
mFrameGalleryMask = r.getDrawable(R.drawable.frame_gallery_preview_album_mask);
@@ -644,7 +677,6 @@
super.onCreateOptionsMenu(menu);
MenuHelper.addCaptureMenuItems(menu, this);
- mFlipItem = MenuHelper.addFlipOrientation(menu, this, mPrefs);
menu.add(0, 0, 5, R.string.camerasettings)
.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@@ -661,12 +693,6 @@
return true;
}
- @Override
- public boolean onPrepareOptionsMenu(android.view.Menu menu) {
- MenuHelper.setFlipOrientationEnabled(this, mFlipItem);
- return true;
- }
-
private boolean isEmptyBucket(int mediaTypes, String bucketId) {
// TODO: Find a more efficient way of calculating this
ImageManager.IImageList list = createImageList(mediaTypes, bucketId);
@@ -678,6 +704,16 @@
}
}
+ private int bucketItemCount(int mediaTypes, String bucketId) {
+ // TODO: Find a more efficient way of calculating this
+ ImageManager.IImageList list = createImageList(mediaTypes, bucketId);
+ try {
+ return list.getCount();
+ }
+ finally {
+ list.deactivate();
+ }
+ }
private ImageManager.IImageList createImageList(int mediaTypes, String bucketId) {
return ImageManager.instance().allImages(
this,
diff --git a/src/com/android/camera/ImageGallery2.java b/src/com/android/camera/ImageGallery2.java
index 92e9c57..d58f04c 100644
--- a/src/com/android/camera/ImageGallery2.java
+++ b/src/com/android/camera/ImageGallery2.java
@@ -73,7 +73,6 @@
private Dialog mMediaScanningDialog;
- private MenuItem mFlipItem;
private MenuItem mSlideShowItem;
private SharedPreferences mPrefs;
@@ -187,7 +186,10 @@
private Runnable mDeletePhotoRunnable = new Runnable() {
public void run() {
mGvs.clearCache();
- mAllImages.removeImage(mSelectedImageGetter.getCurrentImage());
+ IImage currentImage = mSelectedImageGetter.getCurrentImage();
+ if (currentImage != null) {
+ mAllImages.removeImage(currentImage);
+ }
mGvs.invalidate();
mGvs.requestLayout();
mGvs.start();
@@ -356,8 +358,10 @@
switch (requestCode) {
case CROP_MSG: {
if (Config.LOGV) Log.v(TAG, "onActivityResult " + data);
- setResult(resultCode, data);
- finish();
+ if (resultCode == RESULT_OK) {
+ setResult(resultCode, data);
+ finish();
+ }
break;
}
case VIEW_MSG: {
@@ -504,7 +508,6 @@
mThumbnailCheckThread = new CameraThread(new Runnable() {
public void run() {
android.content.res.Resources resources = getResources();
- boolean loadingVideos = mInclusion == ImageManager.INCLUDE_VIDEOS;
final TextView progressTextView = (TextView) findViewById(R.id.loading_text);
final String progressTextFormatString = resources.getString(R.string.loading_progress_format_string);
@@ -547,7 +550,8 @@
return !mPausing;
}
};
- allImages(true).checkThumbnails(r);
+ ImageManager.IImageList imageList = allImages(true);
+ imageList.checkThumbnails(r, imageList.getCount());
mWakeLock.release();
mThumbnailCheckThread = null;
mHandler.post(new Runnable() {
@@ -572,12 +576,13 @@
@Override
public boolean onCreateOptionsMenu(android.view.Menu menu) {
MenuItem item;
- MenuHelper.addCaptureMenuItems(menu, this);
- if ((mInclusion & ImageManager.INCLUDE_IMAGES) != 0) {
- mSlideShowItem = addSlideShowMenu(menu, 5);
+ if (! isPickIntent()) {
+ MenuHelper.addCaptureMenuItems(menu, this);
+ if ((mInclusion & ImageManager.INCLUDE_IMAGES) != 0) {
+ mSlideShowItem = addSlideShowMenu(menu, 5);
+ }
}
- mFlipItem = MenuHelper.addFlipOrientation(menu, this, mPrefs);
item = menu.add(0, 0, 1000, R.string.camerasettings);
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@@ -599,9 +604,10 @@
if ((mInclusion & ImageManager.INCLUDE_IMAGES) != 0) {
boolean videoSelected = isVideoSelected();
// TODO: Only enable slide show if there is at least one image in the folder.
- mSlideShowItem.setEnabled(!videoSelected);
+ if (mSlideShowItem != null) {
+ mSlideShowItem.setEnabled(!videoSelected);
+ }
}
- MenuHelper.setFlipOrientationEnabled(this, mFlipItem);
return true;
}
@@ -745,7 +751,7 @@
setVerticalScrollBarEnabled(true);
initializeScrollbars(context.obtainStyledAttributes(android.R.styleable.View));
- mGestureDetector = new GestureDetector(new SimpleOnGestureListener() {
+ mGestureDetector = new GestureDetector(context, new SimpleOnGestureListener() {
@Override
public boolean onDown(MotionEvent e) {
if (mScroller != null && !mScroller.isFinished()) {
@@ -1037,7 +1043,7 @@
loadNext();
synchronized (ImageBlockManager.this) {
- if (workCounter == mWorkCounter) {
+ if ((workCounter == mWorkCounter) && (! mDone)) {
try {
ImageBlockManager.this.wait();
} catch (InterruptedException ex) {
diff --git a/src/com/android/camera/ImageManager.java b/src/com/android/camera/ImageManager.java
index 4354e92..b21b243 100755
--- a/src/com/android/camera/ImageManager.java
+++ b/src/com/android/camera/ImageManager.java
@@ -63,7 +63,7 @@
*/
public class ImageManager {
public static final String CAMERA_IMAGE_BUCKET_NAME =
- Environment.getExternalStorageDirectory().toString() + "/dcim/Camera";
+ Environment.getExternalStorageDirectory().toString() + "/DCIM/Camera";
public static final String CAMERA_IMAGE_BUCKET_ID = getBucketId(CAMERA_IMAGE_BUCKET_NAME);
/**
@@ -830,7 +830,7 @@
}
String randomAccessFilePath(int version) {
- String directoryName = Environment.getExternalStorageDirectory().toString() + "/dcim/.thumbnails";
+ String directoryName = Environment.getExternalStorageDirectory().toString() + "/DCIM/.thumbnails";
String path = directoryName + "/.thumbdata" + version + "-" + mUri.hashCode();
return path;
}
@@ -1035,25 +1035,6 @@
return bitmap;
}
- private Bitmap createVideoThumbnail(String filePath) {
- Bitmap bitmap = null;
- MediaMetadataRetriever retriever = new MediaMetadataRetriever();
- try {
- retriever.setMode(MediaMetadataRetriever.MODE_CAPTURE_FRAME_ONLY);
- retriever.setDataSource(filePath);
- bitmap = retriever.captureFrame();
- } catch (RuntimeException ex) {
- // Assume this is a corrupt video file.
- } finally {
- try {
- retriever.release();
- } catch (RuntimeException ex) {
- // Ignore failures while cleaning up.
- }
- }
- return bitmap;
- }
-
// returns id
public long checkThumbnail(BaseImage existingImage, Cursor c, int i) {
long magic, fileMagic = 0, id;
@@ -1114,13 +1095,13 @@
}
}
if (filePath != null) {
- bitmap = createThumbnailFromEXIF(filePath, id);
- if (bitmap == null) {
- String mimeType = c.getString(indexMimeType());
- boolean isVideo = isVideoMimeType(mimeType);
- if (isVideo) {
- bitmap = createVideoThumbnail(filePath);
- } else {
+ String mimeType = c.getString(indexMimeType());
+ boolean isVideo = isVideoMimeType(mimeType);
+ if (isVideo) {
+ bitmap = createVideoThumbnail(filePath);
+ } else {
+ bitmap = createThumbnailFromEXIF(filePath, id);
+ if (bitmap == null) {
bitmap = createThumbnailFromUri(c, id);
}
}
@@ -1166,13 +1147,13 @@
}
}
- public void checkThumbnails(ThumbCheckCallback cb) {
+ public void checkThumbnails(ThumbCheckCallback cb, int totalThumbnails) {
Cursor c = Images.Media.query(
mContentResolver,
mBaseUri,
new String[] { "_id", "mini_thumb_magic" },
- "mini_thumb_magic isnull and " + sWhereClause,
- sAcceptableImageTypes,
+ thumbnailWhereClause(),
+ thumbnailWhereClauseArgs(),
"_id ASC");
int count = c.getCount();
@@ -1201,7 +1182,6 @@
c = getCursor();
try {
if (VERBOSE) Log.v(TAG, "checkThumbnails found " + c.getCount());
- int max = c.getCount();
int current = 0;
for (int i = 0; i < c.getCount(); i++) {
try {
@@ -1211,7 +1191,7 @@
break;
}
if (cb != null) {
- if (!cb.checking(current, max)) {
+ if (!cb.checking(current, totalThumbnails)) {
if (VERBOSE) Log.v(TAG, "got false from checking... break <<<<<<<<<<<<<<<<<<<<<<<<");
break;
}
@@ -1228,6 +1208,14 @@
}
}
+ protected String thumbnailWhereClause() {
+ return sMiniThumbIsNull + " and " + sWhereClause;
+ }
+
+ protected String[] thumbnailWhereClauseArgs() {
+ return sAcceptableImageTypes;
+ }
+
public void commitChanges() {
synchronized (mCursor) {
mCursor.commitUpdates();
@@ -1696,7 +1684,7 @@
public boolean checking(int current, int count);
}
- public abstract void checkThumbnails(ThumbCheckCallback cb);
+ public abstract void checkThumbnails(ThumbCheckCallback cb, int totalCount);
public abstract void commitChanges();
@@ -2085,6 +2073,7 @@
final static private String sWhereClause = "(" + Images.Media.MIME_TYPE + "=? or " + Images.Media.MIME_TYPE + "=?" + ")";
final static private String[] sAcceptableImageTypes = new String[] { "image/jpeg", "image/png" };
+ final static private String sMiniThumbIsNull = "mini_thumb_magic isnull";
private static final String[] IMAGE_PROJECTION = new String[] {
"_id",
@@ -2362,7 +2351,7 @@
}
@Override
- public void checkThumbnails(ThumbCheckCallback cb) {
+ public void checkThumbnails(ThumbCheckCallback cb, int totalCount) {
// do nothing
}
@@ -2465,13 +2454,12 @@
}
}
- public void checkThumbnails(ThumbCheckCallback cb) {
- // TODO this isn't quite right because we need to get the
- // total from each sub item and provide that in the callback
- final IImageList sublist[] = mSubList;
- final int length = sublist.length;
- for (int i = 0; i < length; i++)
- sublist[i].checkThumbnails(cb);
+ public void checkThumbnails(ThumbCheckCallback cb, int totalThumbnails) {
+ for (IImageList i : mSubList) {
+ int count = i.getCount();
+ i.checkThumbnails(cb, totalThumbnails);
+ totalThumbnails -= count;
+ }
}
public void commitChanges() {
@@ -3284,7 +3272,6 @@
HashMap<String, String> hash = new HashMap<String, String>();
if (c != null && c.moveToFirst()) {
do {
- Log.e(TAG, "id: " + c.getString(1) + " display_name: " + c.getString(0));
hash.put(c.getString(1), c.getString(0));
} while (c.moveToNext());
}
@@ -3303,6 +3290,16 @@
return null;
}
+ @Override
+ protected String thumbnailWhereClause() {
+ return sMiniThumbIsNull;
+ }
+
+ @Override
+ protected String[] thumbnailWhereClauseArgs() {
+ return null;
+ }
+
protected Cursor createCursor() {
Cursor c =
Images.Media.query(
@@ -3366,13 +3363,14 @@
return thumbnail;
}
- private final Bitmap sDefaultThumbnail = Bitmap.createBitmap(32, 32, Bitmap.Config.RGB_565);
private String sortOrder() {
- return Video.Media.DATE_MODIFIED + (mSort == SORT_ASCENDING ? " ASC " : " DESC");
+ return Video.Media.DATE_TAKEN + (mSort == SORT_ASCENDING ? " ASC " : " DESC");
}
}
+ private final static Bitmap sDefaultThumbnail = Bitmap.createBitmap(32, 32, Bitmap.Config.RGB_565);
+
/**
* Represents a particular video and provides access
* to the underlying data and two thumbnail bitmaps
@@ -3537,10 +3535,10 @@
sb.append("" + mId);
return sb.toString();
}
-
- private final Bitmap sNoImageBitmap = Bitmap.createBitmap(128, 128, Bitmap.Config.RGB_565);
}
+ private final static Bitmap sNoImageBitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.RGB_565);
+
/*
* How much quality to use when storing the thumbnail.
*/
@@ -3900,7 +3898,8 @@
public IImageList emptyImageList() {
return
new IImageList() {
- public void checkThumbnails(com.android.camera.ImageManager.IImageList.ThumbCheckCallback cb) {
+ public void checkThumbnails(ImageManager.IImageList.ThumbCheckCallback cb,
+ int totalThumbnails) {
}
public void commitChanges() {
@@ -3936,10 +3935,11 @@
public void removeImageAt(int i) {
}
- public void removeOnChangeListener(com.android.camera.ImageManager.IImageList.OnChange changeCallback) {
+ public void removeOnChangeListener(ImageManager.IImageList.OnChange changeCallback) {
}
- public void setOnChangeListener(com.android.camera.ImageManager.IImageList.OnChange changeCallback, Handler h) {
+ public void setOnChangeListener(ImageManager.IImageList.OnChange changeCallback,
+ Handler h) {
}
};
@@ -4027,7 +4027,7 @@
// Create a temporary file to see whether a volume is really writeable. It's important not to
// put it in the root directory which may have a limit on the number of files.
static private boolean checkFsWritable() {
- String directoryName = Environment.getExternalStorageDirectory().toString() + "/dcim";
+ String directoryName = Environment.getExternalStorageDirectory().toString() + "/DCIM";
File directory = new File(directoryName);
if (!directory.isDirectory()) {
if (!directory.mkdirs()) {
@@ -4100,4 +4100,30 @@
Log.v(TAG, ">>>>>>>>>>>>>>>>>>>>>>>>> isMediaScannerScanning returning " + result);
return result;
}
+
+ /**
+ * Create a video thumbnail for a video. May return null if the video is corrupt.
+ * @param filePath
+ * @return
+ */
+ public static Bitmap createVideoThumbnail(String filePath) {
+ Bitmap bitmap = null;
+ MediaMetadataRetriever retriever = new MediaMetadataRetriever();
+ try {
+ retriever.setMode(MediaMetadataRetriever.MODE_CAPTURE_FRAME_ONLY);
+ retriever.setDataSource(filePath);
+ bitmap = retriever.captureFrame();
+ } catch(IllegalArgumentException ex) {
+ // Assume this is a corrupt video file
+ } catch (RuntimeException ex) {
+ // Assume this is a corrupt video file.
+ } finally {
+ try {
+ retriever.release();
+ } catch (RuntimeException ex) {
+ // Ignore failures while cleaning up.
+ }
+ }
+ return bitmap;
+ }
}
diff --git a/src/com/android/camera/MenuHelper.java b/src/com/android/camera/MenuHelper.java
index 1976444..d4358f6 100644
--- a/src/com/android/camera/MenuHelper.java
+++ b/src/com/android/camera/MenuHelper.java
@@ -16,13 +16,15 @@
package com.android.camera;
+import java.util.ArrayList;
+
import android.app.Activity;
import android.app.AlertDialog;
-import android.app.Dialog;
import android.content.ActivityNotFoundException;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
+import android.content.res.Configuration;
import android.media.MediaMetadataRetriever;
import android.net.Uri;
import android.os.Environment;
@@ -37,16 +39,10 @@
import android.view.SubMenu;
import android.view.View;
import android.view.MenuItem.OnMenuItemClickListener;
-import android.widget.Button;
-import android.widget.CheckBox;
-import android.widget.EditText;
import android.widget.ImageView;
-import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
-import java.util.ArrayList;
-
import com.android.camera.ImageManager.IImage;
public class MenuHelper {
@@ -357,8 +353,14 @@
String codec = retriever.extractMetadata(
MediaMetadataRetriever.METADATA_KEY_CODEC);
- ((TextView)d.findViewById(R.id.details_codec_value))
- .setText(codec);
+
+ if (codec == null) {
+ d.findViewById(R.id.details_codec_row).
+ setVisibility(View.GONE);
+ } else {
+ ((TextView)d.findViewById(R.id.details_codec_value))
+ .setText(codec);
+ }
} catch(RuntimeException ex) {
// Assume this is a corrupt video file.
} finally {
@@ -531,9 +533,26 @@
}
static void gotoCameraImageGallery(Activity activity) {
+ gotoGallery(activity, R.string.gallery_camera_bucket_name, ImageManager.INCLUDE_IMAGES);
+ }
+
+ static void gotoCameraVideoGallery(Activity activity) {
+ gotoGallery(activity, R.string.gallery_camera_videos_bucket_name,
+ ImageManager.INCLUDE_VIDEOS);
+ }
+
+ static private void gotoGallery(Activity activity, int windowTitleId, int mediaTypes) {
Uri target = Images.Media.INTERNAL_CONTENT_URI.buildUpon().appendQueryParameter("bucketId",
ImageManager.CAMERA_IMAGE_BUCKET_ID).build();
Intent intent = new Intent(Intent.ACTION_VIEW, target);
+ intent.putExtra("windowTitle", activity.getString(windowTitleId));
+ intent.putExtra("mediaTypes", mediaTypes);
+ // Request unspecified so that we match the current camera orientation rather than
+ // matching the "flip orientation" preference.
+ // Disabled because people don't care for it. Also it's
+ // not as compelling now that we have implemented have quick orientation flipping.
+ // intent.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION,
+ // android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
try {
activity.startActivity(intent);
} catch (ActivityNotFoundException e) {
@@ -575,20 +594,22 @@
}
static MenuItem addFlipOrientation(Menu menu, final Activity activity, final SharedPreferences prefs) {
// position 41 after rotate
+ // D
return menu
.add(Menu.CATEGORY_SECONDARY, 304, 41, R.string.flip_orientation)
.setOnMenuItemClickListener(
new MenuItem.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
- int current = activity.getRequestedOrientation();
+ // Check what our actual orientation is
+ int current = activity.getResources().getConfiguration().orientation;
int newOrientation = android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
- if (current == android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
+ if (current == Configuration.ORIENTATION_LANDSCAPE) {
newOrientation = android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
}
SharedPreferences.Editor editor = prefs.edit();
editor.putInt("nuorientation", newOrientation);
editor.commit();
- requestOrientation(activity, prefs);
+ requestOrientation(activity, prefs, true);
return true;
}
})
@@ -596,15 +617,24 @@
}
static void requestOrientation(Activity activity, SharedPreferences prefs) {
+ requestOrientation(activity, prefs, false);
+ }
+
+ static private void requestOrientation(Activity activity, SharedPreferences prefs,
+ boolean ignoreIntentExtra) {
int req = prefs.getInt("nuorientation",
android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
// A little trick: use USER instead of UNSPECIFIED, so we ignore the
// orientation set by the activity below. It may have forced a landscape
// orientation, which the user has now cleared here.
- activity.setRequestedOrientation(
- req == android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
- ? android.content.pm.ActivityInfo.SCREEN_ORIENTATION_USER
- : req);
+ if (req == android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) {
+ req = android.content.pm.ActivityInfo.SCREEN_ORIENTATION_USER;
+ }
+ if (! ignoreIntentExtra) {
+ Intent intent = activity.getIntent();
+ req = intent.getIntExtra(MediaStore.EXTRA_SCREEN_ORIENTATION, req);
+ }
+ activity.setRequestedOrientation(req);
}
static void setFlipOrientationEnabled(Activity activity, MenuItem flipItem) {
@@ -628,13 +658,20 @@
return durationValue;
}
-
public static void showStorageToast(Activity activity) {
+ showStorageToast(activity, calculatePicturesRemaining());
+ }
+
+ public static void showStorageToast(Activity activity, int remaining) {
String noStorageText = null;
- int remaining = calculatePicturesRemaining();
if (remaining == MenuHelper.NO_STORAGE_ERROR) {
- noStorageText = activity.getString(R.string.no_storage);
+ String state = Environment.getExternalStorageState();
+ if (state == Environment.MEDIA_CHECKING) {
+ noStorageText = activity.getString(R.string.preparing_sd);
+ } else {
+ noStorageText = activity.getString(R.string.no_storage);
+ }
} else if (remaining < 1) {
noStorageText = activity.getString(R.string.not_enough_space);
}
diff --git a/src/com/android/camera/MovieView.java b/src/com/android/camera/MovieView.java
index b93336c..091cc28 100644
--- a/src/com/android/camera/MovieView.java
+++ b/src/com/android/camera/MovieView.java
@@ -50,6 +50,11 @@
private View mProgressView;
private boolean mFinishOnCompletion;
private Uri mUri;
+
+ // State maintained for proper onPause/OnResume behaviour.
+ private int mPositionWhenPaused = -1;
+ private boolean mWasPlayingWhenPaused = false;
+
public MovieView()
{
}
@@ -172,17 +177,42 @@
if ("content".equalsIgnoreCase(scheme)) {
ContentValues values = new ContentValues();
values.put(Video.VideoColumns.BOOKMARK, Integer.toString(bookmark));
- getContentResolver().update(mUri, values, null, null);
- }
+ try {
+ getContentResolver().update(mUri, values, null, null);
+ } catch (SecurityException ex) {
+ // Ignore, can happen if we try to set the bookmark on a read-only resource
+ // such as a video attached to GMail.
+ } catch (SQLiteException e) {
+ // ignore. can happen if the content doesn't support a bookmark column.
+ }
+ }
}
@Override
public void onPause() {
mHandler.removeCallbacksAndMessages(null);
setBookmark(mVideoView.getCurrentPosition());
+
+ mPositionWhenPaused = mVideoView.getCurrentPosition();
+ mWasPlayingWhenPaused = mVideoView.isPlaying();
+ mVideoView.stopPlayback();
+
super.onPause();
}
+ @Override
+ public void onResume() {
+ if (mPositionWhenPaused >= 0) {
+ mVideoView.setVideoURI(mUri);
+ mVideoView.seekTo(mPositionWhenPaused);
+ if (mWasPlayingWhenPaused) {
+ mVideoView.start();
+ }
+ }
+
+ super.onResume();
+ }
+
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
diff --git a/src/com/android/camera/SlideShow.java b/src/com/android/camera/SlideShow.java
index 2be99ac..23c7d4a 100644
--- a/src/com/android/camera/SlideShow.java
+++ b/src/com/android/camera/SlideShow.java
@@ -284,7 +284,7 @@
throw new UnsupportedOperationException();
}
- public void checkThumbnails(ThumbCheckCallback cb) {
+ public void checkThumbnails(ThumbCheckCallback cb, int totalThumbnails) {
// TODO Auto-generated method stub
}
diff --git a/src/com/android/camera/VideoCamera.java b/src/com/android/camera/VideoCamera.java
index 4828b71..3474da6 100644
--- a/src/com/android/camera/VideoCamera.java
+++ b/src/com/android/camera/VideoCamera.java
@@ -20,11 +20,12 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Date;
import android.app.Activity;
import android.app.AlertDialog;
-import android.content.ActivityNotFoundException;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.ContentValues;
@@ -58,12 +59,14 @@
import android.view.Window;
import android.view.WindowManager;
import android.view.MenuItem.OnMenuItemClickListener;
+import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
-public class VideoCamera extends Activity implements View.OnClickListener, SurfaceHolder.Callback {
+public class VideoCamera extends Activity implements View.OnClickListener,
+ ShutterButton.OnShutterButtonListener, SurfaceHolder.Callback {
private static final String TAG = "videocamera";
@@ -119,8 +122,9 @@
int mCurrentZoomIndex = 0;
- private ImageView mModeIndicatorView;
+ private ShutterButton mShutterButton;
private TextView mRecordingTimeView;
+ private boolean mHasSdCard;
ArrayList<MenuItem> mGalleryItems = new ArrayList<MenuItem>();
@@ -136,7 +140,7 @@
switch (msg.what) {
case CLEAR_SCREEN_DELAY: {
- getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+ clearScreenOnFlag();
break;
}
@@ -185,9 +189,11 @@
// TODO put up a "please wait" message
// TODO also listen for the media scanner finished message
showStorageToast();
+ mHasSdCard = true;
} else if (action.equals(Intent.ACTION_MEDIA_UNMOUNTED)) {
// SD card unavailable
showStorageToast();
+ 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)) {
@@ -215,9 +221,6 @@
//setDefaultKeyMode(DEFAULT_KEYS_SHORTCUT);
requestWindowFeature(Window.FEATURE_PROGRESS);
-
- Window win = getWindow();
- win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setContentView(R.layout.video_camera);
mVideoPreview = (VideoPreview) findViewById(R.id.camera_preview);
@@ -236,12 +239,13 @@
mPostPictureAlert = findViewById(R.id.post_picture_panel);
int[] ids = new int[]{R.id.play, R.id.share, R.id.discard,
- R.id.cancel, R.id.attach, R.id.mode_indicator};
+ R.id.cancel, R.id.attach};
for (int id : ids) {
findViewById(id).setOnClickListener(this);
}
- mModeIndicatorView = (ImageView) findViewById(R.id.mode_indicator);
+ mShutterButton = (ShutterButton) findViewById(R.id.shutter_button);
+ mShutterButton.setOnShutterButtonListener(this);
mRecordingTimeView = (TextView) findViewById(R.id.recording_time);
mVideoFrame = (ImageView) findViewById(R.id.video_frame);
}
@@ -253,35 +257,13 @@
}
super.onStart();
- final View hintView = findViewById(R.id.hint_toast);
- if (hintView != null)
- hintView.setVisibility(View.GONE);
-
Thread t = new Thread(new Runnable() {
public void run() {
final boolean storageOK = getAvailableStorage() >= LOW_STORAGE_THRESHOLD;
- if (hintView == null)
- return;
- if (storageOK) {
+ if (!storageOK) {
mHandler.post(new Runnable() {
public void run() {
- hintView.setVisibility(View.VISIBLE);
- }
- });
- mHandler.postDelayed(new Runnable() {
- public void run() {
- Animation a = new android.view.animation.AlphaAnimation(1F, 0F);
- a.setDuration(500);
- a.startNow();
- hintView.setAnimation(a);
- hintView.setVisibility(View.GONE);
- }
- }, 3000);
- } else {
- mHandler.post(new Runnable() {
- public void run() {
- hintView.setVisibility(View.GONE);
showStorageToast();
}
});
@@ -325,19 +307,29 @@
doPlayCurrentVideo();
break;
}
+ }
+ }
- case R.id.mode_indicator:
- if (mMediaRecorderRecording) {
- stopVideoRecordingAndDisplayDialog();
- } else if (mVideoFrame.getVisibility() == View.VISIBLE) {
- doStartCaptureMode();
- } else {
- startVideoRecording();
+ public void onShutterButtonFocus(ShutterButton button, boolean pressed) {
+ switch (button.getId()) {
+ case R.id.shutter_button:
+ if (pressed) {
+ if (mMediaRecorderRecording) {
+ stopVideoRecordingAndDisplayDialog();
+ } else if (mVideoFrame.getVisibility() == View.VISIBLE) {
+ doStartCaptureMode();
+ } else {
+ startVideoRecording();
+ }
}
break;
}
}
+ public void onShutterButtonClick(ShutterButton button) {
+ // Do nothing (everything happens in onShutterButtonFocus).
+ }
+
private void doStartCaptureMode() {
if (isVideoCaptureIntent()) {
discardCurrentVideoAndStartPreview();
@@ -379,7 +371,8 @@
Log.v(TAG, "onResume " + this.hashCode());
}
super.onResume();
- mHandler.sendEmptyMessageDelayed(CLEAR_SCREEN_DELAY, SCREEN_DELAY);
+
+ setScreenTimeoutLong();
mPausing = false;
@@ -391,6 +384,7 @@
intentFilter.addDataScheme("file");
registerReceiver(mReceiver, intentFilter);
mDidRegister = true;
+ mHasSdCard = ImageManager.hasStorage();
mBlackout.setVisibility(View.INVISIBLE);
if (mVideoFrameBitmap == null) {
@@ -406,7 +400,7 @@
Log.v(TAG, "onStop " + this.hashCode());
}
stopVideoRecording();
- mHandler.removeMessages(CLEAR_SCREEN_DELAY);
+ setScreenTimeoutSystemDefault();
super.onStop();
}
@@ -427,12 +421,12 @@
mDidRegister = false;
}
mBlackout.setVisibility(View.VISIBLE);
+ setScreenTimeoutSystemDefault();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
- mHandler.sendEmptyMessageDelayed(CLEAR_SCREEN_DELAY, SCREEN_DELAY);
- getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+ setScreenTimeoutLong();
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
@@ -445,19 +439,31 @@
return true;
}
break;
- case KeyEvent.KEYCODE_FOCUS:
- return true;
case KeyEvent.KEYCODE_CAMERA:
- case KeyEvent.KEYCODE_DPAD_CENTER:
if (event.getRepeatCount() == 0) {
- if (!mMediaRecorderRecording) {
- startVideoRecording();
+ // If we get a dpad center event without any focused view, move the
+ // focus to the shutter button and press it.
+ if (mShutterButton.isInTouchMode()) {
+ mShutterButton.requestFocusFromTouch();
} else {
- stopVideoRecordingAndDisplayDialog();
+ mShutterButton.requestFocus();
}
+ mShutterButton.setPressed(true);
return true;
}
return true;
+ case KeyEvent.KEYCODE_DPAD_CENTER:
+ if (event.getRepeatCount() == 0) {
+ // If we get a dpad center event without any focused view, move the
+ // focus to the shutter button and press it.
+ if (mShutterButton.isInTouchMode()) {
+ mShutterButton.requestFocusFromTouch();
+ } else {
+ mShutterButton.requestFocus();
+ }
+ mShutterButton.setPressed(true);
+ }
+ break;
case KeyEvent.KEYCODE_MENU:
if (mMediaRecorderRecording) {
stopVideoRecordingAndDisplayDialog();
@@ -469,6 +475,16 @@
return super.onKeyDown(keyCode, event);
}
+ @Override
+ public boolean onKeyUp(int keyCode, KeyEvent event) {
+ switch(keyCode) {
+ case KeyEvent.KEYCODE_CAMERA:
+ mShutterButton.setPressed(false);
+ return true;
+ }
+ return super.onKeyUp(keyCode, event);
+ }
+
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
stopVideoRecording();
initializeVideo();
@@ -483,13 +499,7 @@
}
void gotoGallery() {
- Uri target = Video.Media.INTERNAL_CONTENT_URI;
- Intent intent = new Intent(Intent.ACTION_VIEW, target);
- try {
- startActivity(intent);
- } catch (ActivityNotFoundException e) {
- Log.e(TAG, "Could not start gallery activity", e);
- }
+ MenuHelper.gotoCameraVideoGallery(this);
}
@Override
@@ -509,36 +519,41 @@
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
- addBaseMenuItems(menu);
- MenuHelper.addImageMenuItems(
- menu,
- MenuHelper.INCLUDE_ALL & ~MenuHelper.INCLUDE_ROTATE_MENU,
- false,
- VideoCamera.this,
- mHandler,
- // Handler for deletion
- new Runnable() {
- public void run() {
- // What do we do here?
- // mContentResolver.delete(uri, null, null);
- }
- },
- new MenuHelper.MenuInvoker() {
- public void run(final MenuHelper.MenuCallback cb) {
- }
- });
+ if (isVideoCaptureIntent()) {
+ // No options menu for attach mode.
+ return false;
+ } else {
+ addBaseMenuItems(menu);
+ MenuHelper.addImageMenuItems(
+ menu,
+ MenuHelper.INCLUDE_ALL & ~MenuHelper.INCLUDE_ROTATE_MENU,
+ false,
+ VideoCamera.this,
+ mHandler,
- MenuItem gallery = menu.add(MenuHelper.IMAGE_SAVING_ITEM, MENU_SAVE_GALLERY_PHOTO, 0,
- R.string.camera_gallery_photos_text).setOnMenuItemClickListener(
- new MenuItem.OnMenuItemClickListener() {
- public boolean onMenuItemClick(MenuItem item) {
- gotoGallery();
- return true;
- }
- });
- gallery.setIcon(android.R.drawable.ic_menu_gallery);
+ // Handler for deletion
+ new Runnable() {
+ public void run() {
+ // What do we do here?
+ // mContentResolver.delete(uri, null, null);
+ }
+ },
+ new MenuHelper.MenuInvoker() {
+ public void run(final MenuHelper.MenuCallback cb) {
+ }
+ });
+ MenuItem gallery = menu.add(MenuHelper.IMAGE_SAVING_ITEM, MENU_SAVE_GALLERY_PHOTO, 0,
+ R.string.camera_gallery_photos_text).setOnMenuItemClickListener(
+ new MenuItem.OnMenuItemClickListener() {
+ public boolean onMenuItemClick(MenuItem item) {
+ gotoGallery();
+ return true;
+ }
+ });
+ gallery.setIcon(android.R.drawable.ic_menu_gallery);
+ }
return true;
}
@@ -731,7 +746,11 @@
String cameraDirPath = ImageManager.CAMERA_IMAGE_BUCKET_NAME;
File cameraDir = new File(cameraDirPath);
cameraDir.mkdirs();
- String filename = cameraDirPath + "/" + Long.toString(dateTaken) + ".3gp";
+ SimpleDateFormat dateFormat = new SimpleDateFormat(
+ getString(R.string.video_file_name_format));
+ Date date = new Date(dateTaken);
+ String filepart = dateFormat.format(date);
+ String filename = cameraDirPath + "/" + filepart + ".3gp";
ContentValues values = new ContentValues(7);
values.put(Video.Media.TITLE, title);
values.put(Video.Media.DISPLAY_NAME, displayName);
@@ -809,11 +828,17 @@
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");
+ return;
+ }
+
// Check mMediaRecorder to see whether it is initialized or not.
if (mMediaRecorder == null) {
initializeVideo();
}
- getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
try {
mMediaRecorder.start(); // Recording is now started
} catch (RuntimeException e) {
@@ -826,6 +851,7 @@
mRecordingTimeView.setText("");
mRecordingTimeView.setVisibility(View.VISIBLE);
mHandler.sendEmptyMessage(UPDATE_RECORD_TIME);
+ setScreenTimeoutInfinite();
}
}
@@ -833,7 +859,7 @@
int drawableId = showRecording ? R.drawable.ic_camera_bar_indicator_record
: R.drawable.ic_camera_indicator_video;
Drawable drawable = getResources().getDrawable(drawableId);
- mModeIndicatorView.setImageDrawable(drawable);
+ mShutterButton.setImageDrawable(drawable);
}
private void stopVideoRecordingAndDisplayDialog() {
@@ -846,16 +872,33 @@
}
private void showPostRecordingAlert() {
- boolean isPick = isVideoCaptureIntent();
- int pickVisible = isPick ? View.VISIBLE : View.GONE;
- int normalVisible = ! isPick ? View.VISIBLE : View.GONE;
- mPostPictureAlert.findViewById(R.id.share).setVisibility(normalVisible);
- mPostPictureAlert.findViewById(R.id.discard).setVisibility(normalVisible);
- mPostPictureAlert.findViewById(R.id.attach).setVisibility(pickVisible);
- mPostPictureAlert.findViewById(R.id.cancel).setVisibility(pickVisible);
+ int[] pickIds = {R.id.attach, R.id.cancel};
+ int[] normalIds = {R.id.share, R.id.discard};
+ int[] alwaysOnIds = {R.id.play};
+ int[] hideIds = pickIds;
+ int[] connectIds = normalIds;
+ if (isVideoCaptureIntent()) {
+ hideIds = normalIds;
+ connectIds = pickIds;
+ }
+ for(int id : hideIds) {
+ mPostPictureAlert.findViewById(id).setVisibility(View.GONE);
+ }
+ connectAndFadeIn(connectIds);
+ connectAndFadeIn(alwaysOnIds);
mPostPictureAlert.setVisibility(View.VISIBLE);
}
+ private void connectAndFadeIn(int[] connectIds) {
+ for(int id : connectIds) {
+ View view = mPostPictureAlert.findViewById(id);
+ view.setOnClickListener(this);
+ Animation animation = new AlphaAnimation(0F, 1F);
+ animation.setDuration(500);
+ view.setAnimation(animation);
+ }
+ }
+
private void hidePostPictureAlert() {
mPostPictureAlert.setVisibility(View.INVISIBLE);
}
@@ -878,14 +921,44 @@
releaseMediaRecorder();
updateRecordingIndicator(false);
mRecordingTimeView.setVisibility(View.GONE);
- getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+ setScreenTimeoutLong();
}
if (mNeedToRegisterRecording) {
registerVideo();
mNeedToRegisterRecording = false;
}
- if (mCameraVideoFilename != null){
- deleteVideoFile(mCameraVideoFilename);
+ mCameraVideoFilename = null;
+ }
+
+ private void setScreenTimeoutSystemDefault() {
+ mHandler.removeMessages(CLEAR_SCREEN_DELAY);
+ clearScreenOnFlag();
+ }
+
+ private void setScreenTimeoutLong() {
+ mHandler.removeMessages(CLEAR_SCREEN_DELAY);
+ setScreenOnFlag();
+ mHandler.sendEmptyMessageDelayed(CLEAR_SCREEN_DELAY, SCREEN_DELAY);
+ }
+
+ private void setScreenTimeoutInfinite() {
+ mHandler.removeMessages(CLEAR_SCREEN_DELAY);
+ setScreenOnFlag();
+ }
+
+ private void clearScreenOnFlag() {
+ Window w = getWindow();
+ final int keepScreenOnFlag = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
+ if ((w.getAttributes().flags & keepScreenOnFlag) != 0) {
+ w.clearFlags(keepScreenOnFlag);
+ }
+ }
+
+ private void setScreenOnFlag() {
+ Window w = getWindow();
+ final int keepScreenOnFlag = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
+ if ((w.getAttributes().flags & keepScreenOnFlag) == 0) {
+ w.addFlags(keepScreenOnFlag);
}
}
@@ -897,7 +970,7 @@
private void acquireAndShowVideoFrame() {
recycleVideoFrameBitmap();
- mVideoFrameBitmap = createVideoThumbnail(mCurrentVideoFilename);
+ mVideoFrameBitmap = ImageManager.createVideoThumbnail(mCurrentVideoFilename);
mVideoFrame.setImageBitmap(mVideoFrameBitmap);
mVideoFrame.setVisibility(View.VISIBLE);
}
@@ -914,19 +987,5 @@
mVideoFrameBitmap = null;
}
}
-
- private Bitmap createVideoThumbnail(String filePath) {
- Bitmap bitmap = null;
- MediaMetadataRetriever retriever = new MediaMetadataRetriever();
- try {
- retriever.setMode(MediaMetadataRetriever.MODE_CAPTURE_FRAME_ONLY);
- retriever.setDataSource(filePath);
- bitmap = retriever.captureFrame();
- } finally {
- retriever.release();
- }
- return bitmap;
- }
-
}
diff --git a/src/com/android/camera/ViewImage.java b/src/com/android/camera/ViewImage.java
index 9760562..293f26b 100644
--- a/src/com/android/camera/ViewImage.java
+++ b/src/com/android/camera/ViewImage.java
@@ -16,8 +16,9 @@
package com.android.camera;
+import java.util.Random;
+
import android.app.Activity;
-import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
@@ -28,12 +29,11 @@
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
-import android.os.PowerManager;
+import android.preference.PreferenceManager;
import android.provider.MediaStore;
import android.util.AttributeSet;
import android.util.Config;
import android.util.Log;
-import android.view.GestureDetector;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
@@ -43,21 +43,17 @@
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
-import android.view.animation.Animation;
import android.view.animation.AlphaAnimation;
+import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.Scroller;
-import android.widget.TextView;
import android.widget.Toast;
import android.widget.ZoomControls;
-import android.preference.PreferenceManager;
import com.android.camera.ImageManager.IImage;
-import java.util.Random;
-
public class ViewImage extends Activity implements View.OnClickListener
{
static final String TAG = "ViewImage";
@@ -86,6 +82,7 @@
private boolean mFullScreenInNormalMode;
private boolean mShowActionIcons;
private View mActionIconPanel;
+ private View mShutterButton;
private boolean mSortAscending = false;
private int mSlideShowInterval;
@@ -100,7 +97,6 @@
private Animation [] mSlideShowOutAnimation;
private SharedPreferences mPrefs;
- private MenuItem mFlipItem;
private View mNextImageView, mPrevImageView;
private Animation mHideNextImageViewAnimation = new AlphaAnimation(1F, 0F);
@@ -130,8 +126,9 @@
private MenuHelper.MenuItemsResult mImageMenuRunnable;
- Runnable mDismissOnScreenControlsRunnable;
- ZoomControls mZoomControls;
+ private Runnable mDismissOnScreenControlsRunnable;
+ private ZoomControls mZoomControls;
+ private boolean mCameraReviewMode;
public ViewImage() {
}
@@ -176,7 +173,9 @@
if (mZoomControls != null) {
if (mZoomControls.getVisibility() == View.GONE) {
mZoomControls.show();
- mZoomControls.requestFocus(); // this shouldn't be necessary
+ if (! mShowActionIcons) {
+ mZoomControls.requestFocus(); // this shouldn't be necessary
+ }
}
updateNextPrevControls();
scheduleDismissOnScreenControls();
@@ -210,21 +209,22 @@
mDismissOnScreenControlsRunnable = new Runnable() {
public void run() {
mZoomControls.hide();
+ if (!mShowActionIcons) {
+ if (mNextImageView.getVisibility() == View.VISIBLE) {
+ Animation a = mHideNextImageViewAnimation;
+ a.setDuration(500);
+ a.startNow();
+ mNextImageView.setAnimation(a);
+ mNextImageView.setVisibility(View.INVISIBLE);
+ }
- if (mNextImageView.getVisibility() == View.VISIBLE) {
- Animation a = mHideNextImageViewAnimation;
- a.setDuration(500);
- a.startNow();
- mNextImageView.setAnimation(a);
- mNextImageView.setVisibility(View.INVISIBLE);
- }
-
- if (mPrevImageView.getVisibility() == View.VISIBLE) {
- Animation a = mHidePrevImageViewAnimation;
- a.setDuration(500);
- a.startNow();
- mPrevImageView.setAnimation(a);
- mPrevImageView.setVisibility(View.INVISIBLE);
+ if (mPrevImageView.getVisibility() == View.VISIBLE) {
+ Animation a = mHidePrevImageViewAnimation;
+ a.setDuration(500);
+ a.startNow();
+ mPrevImageView.setAnimation(a);
+ mPrevImageView.setVisibility(View.INVISIBLE);
+ }
}
}
};
@@ -251,12 +251,12 @@
return (Intent.ACTION_PICK.equals(action) || Intent.ACTION_GET_CONTENT.equals(action));
}
- private static final boolean sDragLeftRight = false;
private static final boolean sUseBounce = false;
private static final boolean sAnimateTransitions = false;
static public class ImageViewTouch extends ImageViewTouchBase {
private ViewImage mViewImage;
+ private boolean mEnableTrackballScroll;
private static int TOUCH_STATE_REST = 0;
private static int TOUCH_STATE_LEFT_PRESS = 1;
@@ -277,6 +277,10 @@
mViewImage = (ViewImage) context;
}
+ public void setEnableTrackballScroll(boolean enable) {
+ mEnableTrackballScroll = enable;
+ }
+
protected void postTranslate(float dx, float dy, boolean bounceOK) {
super.postTranslate(dx, dy);
if (dx != 0F || dy != 0F)
@@ -390,6 +394,14 @@
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
+ // Don't respond to arrow keys if trackball scrolling is not enabled
+ if (!mEnableTrackballScroll) {
+ if ((keyCode >= KeyEvent.KEYCODE_DPAD_UP)
+ && (keyCode <= KeyEvent.KEYCODE_DPAD_RIGHT)) {
+ return super.onKeyDown(keyCode, event);
+ }
+ }
+
int current = mViewImage.mCurrentPosition;
int nextImagePos = -2; // default no next image
@@ -557,7 +569,7 @@
{
super.onCreateOptionsMenu(menu);
- if (true) {
+ if (! mCameraReviewMode) {
MenuItem item = menu.add(Menu.CATEGORY_SECONDARY, 203, 0, R.string.slide_show);
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
@@ -570,8 +582,6 @@
item.setIcon(android.R.drawable.ic_menu_slideshow);
}
- mFlipItem = MenuHelper.addFlipOrientation(menu, ViewImage.this, mPrefs);
-
final SelectedImageGetter selectedImageGetter = new SelectedImageGetter() {
public ImageManager.IImage getCurrentImage() {
return mAllImages.getImageAt(mCurrentPosition);
@@ -657,8 +667,6 @@
mImageMenuRunnable.gettingReadyToOpen(menu, mAllImages.getImageAt(mCurrentPosition));
}
- MenuHelper.setFlipOrientationEnabled(this, mFlipItem);
-
menu.findItem(MenuHelper.MENU_IMAGE_SHARE).setEnabled(isCurrentImageShareable());
return true;
@@ -986,8 +994,10 @@
ImageGetterCallback cb = new ImageGetterCallback() {
public void completed(boolean wasCanceled) {
- mImageViews[1].setFocusableInTouchMode(true);
- mImageViews[1].requestFocus();
+ if (!mShowActionIcons) {
+ mImageViews[1].setFocusableInTouchMode(true);
+ mImageViews[1].requestFocus();
+ }
}
public boolean wantsThumbnail(int pos, int offset) {
@@ -1037,6 +1047,11 @@
public void onCreate(Bundle instanceState)
{
super.onCreate(instanceState);
+ Intent intent = getIntent();
+ mCameraReviewMode = intent.getBooleanExtra("com.android.camera.ReviewMode", false);
+ mFullScreenInNormalMode = intent.getBooleanExtra(MediaStore.EXTRA_FULL_SCREEN, true);
+ mShowActionIcons = intent.getBooleanExtra(MediaStore.EXTRA_SHOW_ACTION_ICONS, false);
+
mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
setDefaultKeyMode(DEFAULT_KEYS_SHORTCUT);
@@ -1047,6 +1062,10 @@
mImageViews[1] = (ImageViewTouch) findViewById(R.id.image2);
mImageViews[2] = (ImageViewTouch) findViewById(R.id.image3);
+ for(ImageViewTouch v : mImageViews) {
+ v.setEnableTrackballScroll(!mShowActionIcons);
+ }
+
mScroller = (ScrollHandler)findViewById(R.id.scroller);
makeGetter();
@@ -1066,16 +1085,16 @@
mSlideShowImageViews[0] = (ImageViewTouch) findViewById(R.id.image1_slideShow);
mSlideShowImageViews[1] = (ImageViewTouch) findViewById(R.id.image2_slideShow);
- for (int i = 0; i < mSlideShowImageViews.length; i++) {
- mSlideShowImageViews[i].setImageBitmapResetBase(null, true, true);
- mSlideShowImageViews[i].setVisibility(View.INVISIBLE);
+ for (ImageViewTouch v : mSlideShowImageViews) {
+ v.setImageBitmapResetBase(null, true, true);
+ v.setVisibility(View.INVISIBLE);
+ v.setEnableTrackballScroll(!mShowActionIcons);
}
mActionIconPanel = findViewById(R.id.action_icon_panel);
{
int[] pickIds = {R.id.attach, R.id.cancel};
int[] normalIds = {R.id.gallery, R.id.setas, R.id.share, R.id.discard};
- int[] alwaysOnIds = {R.id.mode_indicator };
int[] hideIds = pickIds;
int[] connectIds = normalIds;
if (isPickIntent()) {
@@ -1083,15 +1102,18 @@
connectIds = pickIds;
}
for(int id : hideIds) {
- findViewById(id).setVisibility(View.GONE);
+ mActionIconPanel.findViewById(id).setVisibility(View.GONE);
}
for(int id : connectIds) {
- findViewById(id).setOnClickListener(this);
- }
- for(int id : alwaysOnIds) {
- findViewById(id).setOnClickListener(this);
+ View view = mActionIconPanel.findViewById(id);
+ view.setOnClickListener(this);
+ Animation animation = new AlphaAnimation(0F, 1F);
+ animation.setDuration(500);
+ view.setAnimation(animation);
}
}
+ mShutterButton = findViewById(R.id.shutter_button);
+ mShutterButton.setOnClickListener(this);
Uri uri = getIntent().getData();
@@ -1107,10 +1129,6 @@
return;
}
init(uri);
- mFullScreenInNormalMode = getIntent().getBooleanExtra(
- MediaStore.EXTRA_SHOW_ACTION_ICONS, false);
- mShowActionIcons = getIntent().getBooleanExtra(
- MediaStore.EXTRA_SHOW_ACTION_ICONS, false);
Bundle b = getIntent().getExtras();
@@ -1124,6 +1142,7 @@
}
if (mShowActionIcons) {
mActionIconPanel.setVisibility(View.VISIBLE);
+ mShutterButton.setVisibility(View.VISIBLE);
}
}
@@ -1140,6 +1159,12 @@
mNextImageView = findViewById(R.id.next_image);
mPrevImageView = findViewById(R.id.prev_image);
+ if (mShowActionIcons) {
+ mNextImageView.setOnClickListener(this);
+ mNextImageView.setFocusable(true);
+ mPrevImageView.setOnClickListener(this);
+ mPrevImageView.setFocusable(true);
+ }
setOrientation();
}
@@ -1186,6 +1211,7 @@
ivt.clear();
}
mActionIconPanel.setVisibility(View.GONE);
+ mShutterButton.setVisibility(View.GONE);
if (false) {
Log.v(TAG, "current is " + this.mSlideShowImageCurrent);
@@ -1237,6 +1263,7 @@
}
if (mShowActionIcons) {
mActionIconPanel.setVisibility(View.VISIBLE);
+ mShutterButton.setVisibility(View.VISIBLE);
}
ImageViewTouchBase dst = mImageViews[1];
@@ -1381,12 +1408,21 @@
mGetter = new ImageGetter();
}
- private void init(Uri uri) {
+ private boolean desiredSortOrder() {
String sortOrder = mPrefs.getString("pref_gallery_sort_key", null);
- mSortAscending = false;
+ boolean sortAscending = false;
if (sortOrder != null) {
- mSortAscending = sortOrder.equals("ascending");
+ sortAscending = sortOrder.equals("ascending");
}
+ if (mCameraReviewMode) {
+ // Force left-arrow older pictures, right-arrow newer pictures.
+ sortAscending = true;
+ }
+ return sortAscending;
+ }
+
+ private void init(Uri uri) {
+ mSortAscending = desiredSortOrder();
int sort = mSortAscending ? ImageManager.SORT_ASCENDING : ImageManager.SORT_DESCENDING;
mAllImages = ImageManager.makeImageList(uri, this, sort);
@@ -1436,12 +1472,7 @@
ImageManager.IImage image = mAllImages.getImageAt(mCurrentPosition);
- String sortOrder = mPrefs.getString("pref_gallery_sort_key", null);
- boolean sortAscending = false;
- if (sortOrder != null) {
- sortAscending = sortOrder.equals("ascending");
- }
- if (sortAscending != mSortAscending) {
+ if (desiredSortOrder() != mSortAscending) {
init(image.fullSizeImageUri());
}
@@ -1496,8 +1527,12 @@
public void onClick(View v) {
switch (v.getId()) {
- case R.id.mode_indicator: {
- MenuHelper.gotoStillImageCapture(this);
+ case R.id.shutter_button: {
+ if (mCameraReviewMode) {
+ finish();
+ } else {
+ MenuHelper.gotoStillImageCapture(this);
+ }
}
break;
@@ -1507,7 +1542,11 @@
break;
case R.id.discard: {
- MenuHelper.displayDeleteDialog(this, mDeletePhotoRunnable, true);
+ if (mCameraReviewMode) {
+ mDeletePhotoRunnable.run();
+ } else {
+ MenuHelper.deletePhoto(this, mDeletePhotoRunnable);
+ }
}
break;
@@ -1535,6 +1574,23 @@
}
}
break;
+
+ case R.id.next_image: {
+ moveNextOrPrevious(1);
+ }
+ break;
+
+ case R.id.prev_image: {
+ moveNextOrPrevious(-1);
+ }
+ break;
+ }
+ }
+
+ private void moveNextOrPrevious(int delta) {
+ int nextImagePos = mCurrentPosition + delta;
+ if ((0 <= nextImagePos) && (nextImagePos < mAllImages.getCount())) {
+ setImage(nextImagePos);
}
}
}
diff --git a/tests/Android.mk b/tests/Android.mk
index 714e078..f5972cb 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -1,3 +1,4 @@
+LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
# We only want this apk build for tests.
@@ -14,3 +15,5 @@
LOCAL_INSTRUMENTATION_FOR := Camera
include $(BUILD_PACKAGE)
+
+
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
index b8074f5..1b7abd2 100644
--- a/tests/AndroidManifest.xml
+++ b/tests/AndroidManifest.xml
@@ -25,5 +25,10 @@
android:targetPackage="com.android.camera"
android:label="Camera Launch Performance">
</instrumentation>
+
+ <instrumentation android:name=".CameraStressTestRunner"
+ android:targetPackage="com.android.camera"
+ android:label="Camera Stress Test InstrumentationRunner">
+ </instrumentation>
</manifest>
diff --git a/tests/src/com/android/camera/CameraStressTestRunner.java b/tests/src/com/android/camera/CameraStressTestRunner.java
new file mode 100755
index 0000000..e34204c
--- /dev/null
+++ b/tests/src/com/android/camera/CameraStressTestRunner.java
@@ -0,0 +1,50 @@
+/*
+ * 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.tests;
+
+import android.test.InstrumentationTestRunner;
+import android.test.InstrumentationTestSuite;
+import com.android.camera.tests.stress.SwitchPreview;
+import com.android.camera.tests.stress.ImageCapture;
+
+import junit.framework.TestSuite;
+
+
+/**
+ * Instrumentation Test Runner for all Camera tests.
+ *
+ * Running all tests:
+ *
+ * adb shell am instrument -w \
+ * com.android.camera.tests/.CameraStressTestRunner
+ */
+
+public class CameraStressTestRunner extends InstrumentationTestRunner {
+
+ @Override
+ public TestSuite getAllTests() {
+ TestSuite suite = new InstrumentationTestSuite(this);
+ suite.addTestSuite(SwitchPreview.class);
+ suite.addTestSuite(ImageCapture.class);
+ return suite;
+ }
+
+ @Override
+ public ClassLoader getLoader() {
+ return CameraStressTestRunner.class.getClassLoader();
+ }
+}
diff --git a/tests/src/com/android/camera/stress/ImageCapture.java b/tests/src/com/android/camera/stress/ImageCapture.java
new file mode 100755
index 0000000..dbb1f64
--- /dev/null
+++ b/tests/src/com/android/camera/stress/ImageCapture.java
@@ -0,0 +1,96 @@
+/*
+ * 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.tests.stress;
+
+import android.app.Activity;
+import android.app.Instrumentation;
+import android.test.ActivityInstrumentationTestCase2;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.test.suitebuilder.annotation.LargeTest;
+
+import com.android.camera.Camera;
+
+/**
+ * Junit / Instrumentation test case for camera test
+ *
+ */
+
+public class ImageCapture extends ActivityInstrumentationTestCase2 <Camera> {
+ private String TAG = "ImageCapture";
+ private static final int TOTAL_NUMBER_OF_IMAGECAPTURE = 100;
+ private static final int TOTAL_NUMBER_OF_VIDEOCAPTURE = 100;
+ private static final long WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN = 1000;
+ private static final long WAIT_FOR_VIDEO_CAPTURE_TO_BE_TAKEN = 50000; //50seconds
+ private static final long WAIT_FOR_PREVIEW = 1000; //1 seconds
+
+ public ImageCapture() {
+ super("com.android.camera", Camera.class);
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ getActivity();
+ super.setUp();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ @LargeTest
+ public void testImageCapture() {
+ Instrumentation inst = getInstrumentation();
+ try {
+ for (int i = 0; i < TOTAL_NUMBER_OF_IMAGECAPTURE; i++) {
+ Thread.sleep(WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN);
+ inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_UP);
+ inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
+ Thread.sleep(WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN);
+ }
+ } catch (Exception e) {
+ Log.v(TAG, e.toString());
+ }
+ assertTrue("testImageCapture", true);
+ }
+
+ @LargeTest
+ public void testVideoCapture() {
+ Instrumentation inst = getInstrumentation();
+ //Switch to the video mode
+ inst.sendKeyDownUpSync(KeyEvent.KEYCODE_MENU);
+ inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
+ try {
+ for (int i = 0; i < TOTAL_NUMBER_OF_VIDEOCAPTURE; i++) {
+ Thread.sleep(WAIT_FOR_PREVIEW);
+ inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_UP);
+ //record an video
+ inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
+ Thread.sleep(WAIT_FOR_VIDEO_CAPTURE_TO_BE_TAKEN);
+ inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
+ Thread.sleep(WAIT_FOR_PREVIEW);
+ inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
+ }
+ } catch (Exception e) {
+ Log.v(TAG, e.toString());
+ }
+ assertTrue("testVideoCapture", true);
+ }
+
+}
+
diff --git a/tests/src/com/android/camera/stress/SwitchPreview.java b/tests/src/com/android/camera/stress/SwitchPreview.java
new file mode 100755
index 0000000..c00e553
--- /dev/null
+++ b/tests/src/com/android/camera/stress/SwitchPreview.java
@@ -0,0 +1,74 @@
+/*
+ * 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.tests.stress;
+
+import android.app.Activity;
+import android.app.Instrumentation;
+import android.test.ActivityInstrumentationTestCase2;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.test.suitebuilder.annotation.LargeTest;
+
+import com.android.camera.Camera;
+import com.android.camera.VideoCamera;
+
+/**
+ * Junit / Instrumentation test case for camera test
+ *
+ */
+
+public class SwitchPreview extends ActivityInstrumentationTestCase2 <VideoCamera>{
+ private String TAG = "SwitchPreview";
+ private static final int TOTAL_NUMBER_OF_SWITCHING = 200;
+ private static final long WAIT_FOR_PREVIEW = 2000;
+
+
+ public SwitchPreview() {
+ super("com.android.camera", VideoCamera.class);
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ getActivity();
+ super.setUp();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ getActivity().finish();
+ super.tearDown();
+ }
+
+ @LargeTest
+ public void testSwitchMode() {
+ //Switching the video and the video recorder mode
+ Instrumentation inst = getInstrumentation();
+ try{
+ for (int i=0; i< TOTAL_NUMBER_OF_SWITCHING; i++) {
+ Thread.sleep(WAIT_FOR_PREVIEW);
+ inst.sendKeyDownUpSync(KeyEvent.KEYCODE_MENU);
+ inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_LEFT);
+ inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
+ Thread.sleep(WAIT_FOR_PREVIEW);
+ }
+ } catch (Exception e){
+ Log.v(TAG, e.toString());
+ }
+ assertTrue("testSwitchMode",true);
+ }
+}
+