Merge "Attachments now show in a grid-like view." into jb-ub-mail
diff --git a/res/color-sw600dp/folder_name_color_primary_invertible.xml b/res/color-sw600dp/folder_name_color_primary_invertible.xml
index 9f57209..18367c7 100644
--- a/res/color-sw600dp/folder_name_color_primary_invertible.xml
+++ b/res/color-sw600dp/folder_name_color_primary_invertible.xml
@@ -19,6 +19,8 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false"
android:color="#ff999999"/>
+ <item android:state_checked="true"
+ android:color="@android:color/white" />
<item android:state_activated="true"
android:color="@android:color/white" />
<item
diff --git a/res/color/folder_name_color_primary_invertible.xml b/res/color/folder_name_color_primary_invertible.xml
index 96172af..81e0e73 100644
--- a/res/color/folder_name_color_primary_invertible.xml
+++ b/res/color/folder_name_color_primary_invertible.xml
@@ -20,9 +20,9 @@
<item android:state_enabled="false"
android:color="#ff999999"/>
<item android:state_checked="true"
- android:color="@android:color/black" />
- <item android:state_activated="true"
android:color="@android:color/white" />
+ <item android:state_activated="true"
+ android:color="@android:color/black" />
<item
android:color="@android:color/black" />
</selector>
diff --git a/res/drawable-sw600dp/widget_conversation_read_selector.xml b/res/drawable-sw600dp/widget_conversation_read_selector.xml
new file mode 100644
index 0000000..5302741
--- /dev/null
+++ b/res/drawable-sw600dp/widget_conversation_read_selector.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2012 Google Inc.
+ Licensed to 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_focused="true"
+ android:drawable="@drawable/list_conversation_wide_read_focused_holo" />
+ <item android:state_activated="true"
+ android:drawable="@drawable/list_conversation_wide_read_pressed_holo" />
+ <item android:state_pressed="true"
+ android:drawable="@drawable/list_conversation_wide_read_pressed_holo" />
+ <item android:state_selected="true"
+ android:drawable="@drawable/list_conversation_wide_read_selected_holo" />
+ <item android:state_selected="true"
+ android:state_activated="true"
+ android:drawable="@drawable/list_conversation_wide_read_selected_holo" />
+ <item android:drawable="@drawable/list_conversation_wide_read_normal_holo" />
+</selector>
diff --git a/res/drawable-sw600dp/widget_conversation_unread_selector.xml b/res/drawable-sw600dp/widget_conversation_unread_selector.xml
new file mode 100644
index 0000000..179a398
--- /dev/null
+++ b/res/drawable-sw600dp/widget_conversation_unread_selector.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2012 Google Inc.
+ Licensed to 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_focused="true"
+ android:drawable="@drawable/list_conversation_wide_unread_focused_holo" />
+ <item android:state_activated="true"
+ android:drawable="@drawable/list_conversation_wide_unread_pressed_holo" />
+ <item android:state_pressed="true"
+ android:drawable="@drawable/list_conversation_wide_unread_pressed_holo" />
+ <item android:state_selected="true"
+ android:drawable="@drawable/list_conversation_wide_unread_selected_holo" />
+ <item android:state_selected="true"
+ android:state_activated="true"
+ android:drawable="@drawable/list_conversation_wide_unread_selected_holo" />
+ <item android:drawable="@drawable/list_conversation_wide_unread_normal_holo" />
+</selector>
\ No newline at end of file
diff --git a/res/layout/folder_item.xml b/res/layout/folder_item.xml
index 4958b48..09a6f15 100644
--- a/res/layout/folder_item.xml
+++ b/res/layout/folder_item.xml
@@ -45,7 +45,7 @@
android:layout_alignWithParentIfMissing="true"
android:layout_alignParentRight="true"
android:layout_toLeftOf="@id/folder_parent_icon"
- android:textColor="@color/text_color_unread_invertible" />
+ android:textColor="@color/folder_name_color_primary_invertible" />
<RelativeLayout
android:layout_width="match_parent"
@@ -70,7 +70,7 @@
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_below="@id/name"
- android:textColor="@color/text_color_primary_invertible"
+ android:textColor="@color/folder_name_color_primary_invertible"
android:textAppearance="?android:attr/textAppearanceSmall"
android:visibility="gone" />
diff --git a/res/raw/template_conversation_upper.html b/res/raw/template_conversation_upper.html
index b4abb38..1beb249 100644
--- a/res/raw/template_conversation_upper.html
+++ b/res/raw/template_conversation_upper.html
@@ -13,5 +13,4 @@
</style>
</head>
<body style="margin: 0;">
-<!-- TODO: promote this to a spacer so its overlay can scroll like the other adapter views -->
<div id="conversation-header" style="height: %spx;"></div>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index dfedca5..78a9d7e 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -302,46 +302,35 @@
<string name="wait_for_manual_sync_body" msgid="2003192935254244968">"لم يتم تعيين هذا الحساب على المزامنة تلقائيًا."\n"يمكنك لمس "<b>"المزامنة الآن"</b>" لمزامنة البريد مرة واحدة أو "<b>"تغيير إعدادات المزامنة"</b>" لإعداد هذا الحساب على مزامنة البريد تلقائيًا."</string>
<string name="manual_sync" msgid="6743983544685622800">"مزامنة الآن"</string>
<string name="change_sync_settings" msgid="5514293926214426577">"تغيير إعدادات المزامنة"</string>
- <!-- no translation found for photo_view_default_title (305616940993932174) -->
- <skip />
- <!-- no translation found for photo_view_load_error (1802859675974843136) -->
- <skip />
- <!-- no translation found for photo_view_video_not_ready (8488887700991406631) -->
- <skip />
- <!-- no translation found for photo_view_placeholder_image (465734985000555852) -->
- <skip />
- <!-- no translation found for photo_network_error (6545183306958652345) -->
- <skip />
- <!-- no translation found for loading_photo (6784297653634402137) -->
- <skip />
- <!-- no translation found for post_operation_pending (1312168212880219407) -->
- <skip />
- <!-- no translation found for download_photo_retry (1894223549069749239) -->
- <skip />
- <!-- no translation found for download_photo_error (7511376299526085797) -->
- <skip />
- <!-- no translation found for yes (7474216525286833848) -->
- <skip />
- <!-- no translation found for no (427548507197604096) -->
- <skip />
- <!-- no translation found for camera_photo_error (653424229752191252) -->
- <skip />
- <!-- no translation found for photo_view_count (1568865177363028519) -->
- <skip />
- <!-- no translation found for truncated_info (4901078975545890098) -->
- <skip />
- <!-- no translation found for truncated_info_see_more (2068973974507128729) -->
- <skip />
- <!-- no translation found for posted_just_now (7872790861965011674) -->
- <skip />
- <!-- no translation found for num_minutes_ago:one (4750191148321568233) -->
- <!-- no translation found for num_minutes_ago:other (4976118461634588647) -->
- <!-- no translation found for num_hours_ago:one (2178354472031148118) -->
- <!-- no translation found for num_hours_ago:other (1470820825143524326) -->
- <!-- no translation found for num_days_ago:one (5538890823169916595) -->
- <!-- no translation found for num_days_ago:other (2756574969735638578) -->
- <!-- no translation found for dialog_inserting_camera_photo (2711654208680211224) -->
- <skip />
+ <string name="photo_view_default_title" msgid="305616940993932174">"صور من الرسالة"</string>
+ <string name="photo_view_load_error" msgid="1802859675974843136">"تعذر تحميل الصورة."</string>
+ <string name="photo_view_video_not_ready" msgid="8488887700991406631">"الفيديو ليس متوفرًا في الوقت الحالي. يرجى التحديث."</string>
+ <string name="photo_view_placeholder_image" msgid="465734985000555852">"العنصر ليس متوفرًا في الوقت الحالي. يرجى التحديث."</string>
+ <string name="photo_network_error" msgid="6545183306958652345">"الصورة ليست متاحة حاليًا."</string>
+ <string name="loading_photo" msgid="6784297653634402137">"جارٍ التحميل…"</string>
+ <string name="post_operation_pending" msgid="1312168212880219407">"جارٍ الإرسال…"</string>
+ <string name="download_photo_retry" msgid="1894223549069749239">"هذه الصورة كبيرة جدًا ولا يمكن تنزيلها، فهل تريد إعادة المحاولة باستخدام درجة دقة أقل؟"</string>
+ <string name="download_photo_error" msgid="7511376299526085797">"تعذر حفظ الصورة في الجهاز."</string>
+ <string name="yes" msgid="7474216525286833848">"نعم"</string>
+ <string name="no" msgid="427548507197604096">"لا"</string>
+ <string name="camera_photo_error" msgid="653424229752191252">"يتعذر العثور على الصورة."</string>
+ <string name="photo_view_count" msgid="1568865177363028519">"<xliff:g id="CURRENT_POS">%d</xliff:g> من <xliff:g id="COUNT">%d</xliff:g>"</string>
+ <string name="truncated_info" msgid="4901078975545890098">"..."</string>
+ <string name="truncated_info_see_more" msgid="2068973974507128729">" المزيد »"</string>
+ <string name="posted_just_now" msgid="7872790861965011674">"للتو"</string>
+ <plurals name="num_minutes_ago">
+ <item quantity="one" msgid="4750191148321568233">"<xliff:g id="COUNT">%d</xliff:g> دقيقة"</item>
+ <item quantity="other" msgid="4976118461634588647">"<xliff:g id="COUNT">%d</xliff:g> دقائق"</item>
+ </plurals>
+ <plurals name="num_hours_ago">
+ <item quantity="one" msgid="2178354472031148118">"<xliff:g id="COUNT">%d</xliff:g> ساعة"</item>
+ <item quantity="other" msgid="1470820825143524326">"<xliff:g id="COUNT">%d</xliff:g> ساعات"</item>
+ </plurals>
+ <plurals name="num_days_ago">
+ <item quantity="one" msgid="5538890823169916595">"<xliff:g id="COUNT">%d</xliff:g> يوم"</item>
+ <item quantity="other" msgid="2756574969735638578">"<xliff:g id="COUNT">%d</xliff:g> أيام"</item>
+ </plurals>
+ <string name="dialog_inserting_camera_photo" msgid="2711654208680211224">"جارٍ إدراج الصورة..."</string>
<!-- no translation found for cant_move_or_change_labels (7997792014816166601) -->
<skip />
</resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index e4f1882..f3f1b3e 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -331,6 +331,5 @@
<item quantity="other" msgid="2756574969735638578">"<xliff:g id="COUNT">%d</xliff:g> days"</item>
</plurals>
<string name="dialog_inserting_camera_photo" msgid="2711654208680211224">"Inserting photo…"</string>
- <!-- no translation found for cant_move_or_change_labels (7997792014816166601) -->
- <skip />
+ <string name="cant_move_or_change_labels" msgid="7997792014816166601">"Can\'t move because selection contains multiple accounts."</string>
</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index dc34d37..bc88a31 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -302,46 +302,35 @@
<string name="wait_for_manual_sync_body" msgid="2003192935254244968">"Esta cuenta no está configurada para sincronizar el correo automáticamente."\n"Toca "<b>"Sincronizar ahora"</b>" para sincronizar el correo una vez o "<b>"Cambiar la configuración de sincronización"</b>" para que esta cuenta sincronice el correo automáticamente."</string>
<string name="manual_sync" msgid="6743983544685622800">"Sincr. ahora"</string>
<string name="change_sync_settings" msgid="5514293926214426577">"Cambiar conf. de sinc."</string>
- <!-- no translation found for photo_view_default_title (305616940993932174) -->
- <skip />
- <!-- no translation found for photo_view_load_error (1802859675974843136) -->
- <skip />
- <!-- no translation found for photo_view_video_not_ready (8488887700991406631) -->
- <skip />
- <!-- no translation found for photo_view_placeholder_image (465734985000555852) -->
- <skip />
- <!-- no translation found for photo_network_error (6545183306958652345) -->
- <skip />
- <!-- no translation found for loading_photo (6784297653634402137) -->
- <skip />
- <!-- no translation found for post_operation_pending (1312168212880219407) -->
- <skip />
- <!-- no translation found for download_photo_retry (1894223549069749239) -->
- <skip />
- <!-- no translation found for download_photo_error (7511376299526085797) -->
- <skip />
- <!-- no translation found for yes (7474216525286833848) -->
- <skip />
- <!-- no translation found for no (427548507197604096) -->
- <skip />
- <!-- no translation found for camera_photo_error (653424229752191252) -->
- <skip />
- <!-- no translation found for photo_view_count (1568865177363028519) -->
- <skip />
- <!-- no translation found for truncated_info (4901078975545890098) -->
- <skip />
- <!-- no translation found for truncated_info_see_more (2068973974507128729) -->
- <skip />
- <!-- no translation found for posted_just_now (7872790861965011674) -->
- <skip />
- <!-- no translation found for num_minutes_ago:one (4750191148321568233) -->
- <!-- no translation found for num_minutes_ago:other (4976118461634588647) -->
- <!-- no translation found for num_hours_ago:one (2178354472031148118) -->
- <!-- no translation found for num_hours_ago:other (1470820825143524326) -->
- <!-- no translation found for num_days_ago:one (5538890823169916595) -->
- <!-- no translation found for num_days_ago:other (2756574969735638578) -->
- <!-- no translation found for dialog_inserting_camera_photo (2711654208680211224) -->
- <skip />
+ <string name="photo_view_default_title" msgid="305616940993932174">"Fotos del mensaje"</string>
+ <string name="photo_view_load_error" msgid="1802859675974843136">"No se pudo cargar la foto."</string>
+ <string name="photo_view_video_not_ready" msgid="8488887700991406631">"Video no disponible en este momento. Actualiza la página."</string>
+ <string name="photo_view_placeholder_image" msgid="465734985000555852">"Elemento no disponible. Actualiza la página."</string>
+ <string name="photo_network_error" msgid="6545183306958652345">"La foto no está disponible en este momento."</string>
+ <string name="loading_photo" msgid="6784297653634402137">"Cargando..."</string>
+ <string name="post_operation_pending" msgid="1312168212880219407">"Enviando..."</string>
+ <string name="download_photo_retry" msgid="1894223549069749239">"Esta imagen es demasiado grande para descargarla, ¿quieres descargarla con una resolución menor?"</string>
+ <string name="download_photo_error" msgid="7511376299526085797">"No se pudo guardar la foto en el dispositivo."</string>
+ <string name="yes" msgid="7474216525286833848">"Sí"</string>
+ <string name="no" msgid="427548507197604096">"No"</string>
+ <string name="camera_photo_error" msgid="653424229752191252">"No se encontró la foto."</string>
+ <string name="photo_view_count" msgid="1568865177363028519">"<xliff:g id="CURRENT_POS">%d</xliff:g> de <xliff:g id="COUNT">%d</xliff:g>"</string>
+ <string name="truncated_info" msgid="4901078975545890098">"..."</string>
+ <string name="truncated_info_see_more" msgid="2068973974507128729">" Ver más »"</string>
+ <string name="posted_just_now" msgid="7872790861965011674">"Ahora"</string>
+ <plurals name="num_minutes_ago">
+ <item quantity="one" msgid="4750191148321568233">"<xliff:g id="COUNT">%d</xliff:g> minuto"</item>
+ <item quantity="other" msgid="4976118461634588647">"<xliff:g id="COUNT">%d</xliff:g> minutos"</item>
+ </plurals>
+ <plurals name="num_hours_ago">
+ <item quantity="one" msgid="2178354472031148118">"<xliff:g id="COUNT">%d</xliff:g> hora"</item>
+ <item quantity="other" msgid="1470820825143524326">"<xliff:g id="COUNT">%d</xliff:g> horas"</item>
+ </plurals>
+ <plurals name="num_days_ago">
+ <item quantity="one" msgid="5538890823169916595">"<xliff:g id="COUNT">%d</xliff:g> día"</item>
+ <item quantity="other" msgid="2756574969735638578">"<xliff:g id="COUNT">%d</xliff:g> días"</item>
+ </plurals>
+ <string name="dialog_inserting_camera_photo" msgid="2711654208680211224">"Insertando foto…"</string>
<!-- no translation found for cant_move_or_change_labels (7997792014816166601) -->
<skip />
</resources>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 77aa5b3..326acf6 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -302,46 +302,35 @@
<string name="wait_for_manual_sync_body" msgid="2003192935254244968">"See konto ei ole seadistatud automaatseks sünkroonimiseks."\n"Puudutage käsku "<b>"Sünkrooni kohe"</b>", et meile üks kord sünkroonida, või käsku "<b>"Muuda sünkroonimisseadeid"</b>", et seadistada see konto meilide automaatseks sünkroonimiseks."</string>
<string name="manual_sync" msgid="6743983544685622800">"Sünkr. kohe"</string>
<string name="change_sync_settings" msgid="5514293926214426577">"Muuda sünkroonimisseadeid"</string>
- <!-- no translation found for photo_view_default_title (305616940993932174) -->
- <skip />
- <!-- no translation found for photo_view_load_error (1802859675974843136) -->
- <skip />
- <!-- no translation found for photo_view_video_not_ready (8488887700991406631) -->
- <skip />
- <!-- no translation found for photo_view_placeholder_image (465734985000555852) -->
- <skip />
- <!-- no translation found for photo_network_error (6545183306958652345) -->
- <skip />
- <!-- no translation found for loading_photo (6784297653634402137) -->
- <skip />
- <!-- no translation found for post_operation_pending (1312168212880219407) -->
- <skip />
- <!-- no translation found for download_photo_retry (1894223549069749239) -->
- <skip />
- <!-- no translation found for download_photo_error (7511376299526085797) -->
- <skip />
- <!-- no translation found for yes (7474216525286833848) -->
- <skip />
- <!-- no translation found for no (427548507197604096) -->
- <skip />
- <!-- no translation found for camera_photo_error (653424229752191252) -->
- <skip />
- <!-- no translation found for photo_view_count (1568865177363028519) -->
- <skip />
- <!-- no translation found for truncated_info (4901078975545890098) -->
- <skip />
- <!-- no translation found for truncated_info_see_more (2068973974507128729) -->
- <skip />
- <!-- no translation found for posted_just_now (7872790861965011674) -->
- <skip />
- <!-- no translation found for num_minutes_ago:one (4750191148321568233) -->
- <!-- no translation found for num_minutes_ago:other (4976118461634588647) -->
- <!-- no translation found for num_hours_ago:one (2178354472031148118) -->
- <!-- no translation found for num_hours_ago:other (1470820825143524326) -->
- <!-- no translation found for num_days_ago:one (5538890823169916595) -->
- <!-- no translation found for num_days_ago:other (2756574969735638578) -->
- <!-- no translation found for dialog_inserting_camera_photo (2711654208680211224) -->
- <skip />
+ <string name="photo_view_default_title" msgid="305616940993932174">"Fotod sõnumist"</string>
+ <string name="photo_view_load_error" msgid="1802859675974843136">"Fotot ei saanud laadida."</string>
+ <string name="photo_view_video_not_ready" msgid="8488887700991406631">"Video pole praegu saadaval. Värskendage."</string>
+ <string name="photo_view_placeholder_image" msgid="465734985000555852">"Üksus pole praegu saadaval. Värskendage."</string>
+ <string name="photo_network_error" msgid="6545183306958652345">"Foto pole praegu saadaval."</string>
+ <string name="loading_photo" msgid="6784297653634402137">"Laadimine …"</string>
+ <string name="post_operation_pending" msgid="1312168212880219407">"Saatmine ..."</string>
+ <string name="download_photo_retry" msgid="1894223549069749239">"See kujutis on allalaadimiseks liiga suur. Kas soovite proovida laadida seda alla väiksema eraldusvõimega?"</string>
+ <string name="download_photo_error" msgid="7511376299526085797">"Fotot ei saanud seadmesse salvestada."</string>
+ <string name="yes" msgid="7474216525286833848">"Jah"</string>
+ <string name="no" msgid="427548507197604096">"Ei"</string>
+ <string name="camera_photo_error" msgid="653424229752191252">"Fotot ei leitud."</string>
+ <string name="photo_view_count" msgid="1568865177363028519">"<xliff:g id="CURRENT_POS">%d</xliff:g>/<xliff:g id="COUNT">%d</xliff:g>"</string>
+ <string name="truncated_info" msgid="4901078975545890098">"..."</string>
+ <string name="truncated_info_see_more" msgid="2068973974507128729">" Kuva rohkem »"</string>
+ <string name="posted_just_now" msgid="7872790861965011674">"Äsja"</string>
+ <plurals name="num_minutes_ago">
+ <item quantity="one" msgid="4750191148321568233">"<xliff:g id="COUNT">%d</xliff:g> minut tagasi"</item>
+ <item quantity="other" msgid="4976118461634588647">"<xliff:g id="COUNT">%d</xliff:g> minutit tagasi"</item>
+ </plurals>
+ <plurals name="num_hours_ago">
+ <item quantity="one" msgid="2178354472031148118">"<xliff:g id="COUNT">%d</xliff:g> tund tagasi"</item>
+ <item quantity="other" msgid="1470820825143524326">"<xliff:g id="COUNT">%d</xliff:g> tundi tagasi"</item>
+ </plurals>
+ <plurals name="num_days_ago">
+ <item quantity="one" msgid="5538890823169916595">"<xliff:g id="COUNT">%d</xliff:g> päev tagasi"</item>
+ <item quantity="other" msgid="2756574969735638578">"<xliff:g id="COUNT">%d</xliff:g> päeva tagasi"</item>
+ </plurals>
+ <string name="dialog_inserting_camera_photo" msgid="2711654208680211224">"Foto sisestamine …"</string>
<!-- no translation found for cant_move_or_change_labels (7997792014816166601) -->
<skip />
</resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 25e6202..53b418c 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -302,46 +302,35 @@
<string name="wait_for_manual_sync_body" msgid="2003192935254244968">"این حساب برای همگامسازی به طور خودکار تنظیم نشده است."\n"برای یکبار همگامسازی نامه، "<b>"اکنون همگامسازی شود"</b>" را لمس کنید، یا برای تنظیم این حساب برای همگامسازی نامه به طور خودکار، "<b>"تنظیمات همگامسازی را تغییر دهید"</b>"."</string>
<string name="manual_sync" msgid="6743983544685622800">"اکنون همگامسازی شود"</string>
<string name="change_sync_settings" msgid="5514293926214426577">"تغییر تنظیمات همگامسازی"</string>
- <!-- no translation found for photo_view_default_title (305616940993932174) -->
- <skip />
- <!-- no translation found for photo_view_load_error (1802859675974843136) -->
- <skip />
- <!-- no translation found for photo_view_video_not_ready (8488887700991406631) -->
- <skip />
- <!-- no translation found for photo_view_placeholder_image (465734985000555852) -->
- <skip />
- <!-- no translation found for photo_network_error (6545183306958652345) -->
- <skip />
- <!-- no translation found for loading_photo (6784297653634402137) -->
- <skip />
- <!-- no translation found for post_operation_pending (1312168212880219407) -->
- <skip />
- <!-- no translation found for download_photo_retry (1894223549069749239) -->
- <skip />
- <!-- no translation found for download_photo_error (7511376299526085797) -->
- <skip />
- <!-- no translation found for yes (7474216525286833848) -->
- <skip />
- <!-- no translation found for no (427548507197604096) -->
- <skip />
- <!-- no translation found for camera_photo_error (653424229752191252) -->
- <skip />
- <!-- no translation found for photo_view_count (1568865177363028519) -->
- <skip />
- <!-- no translation found for truncated_info (4901078975545890098) -->
- <skip />
- <!-- no translation found for truncated_info_see_more (2068973974507128729) -->
- <skip />
- <!-- no translation found for posted_just_now (7872790861965011674) -->
- <skip />
- <!-- no translation found for num_minutes_ago:one (4750191148321568233) -->
- <!-- no translation found for num_minutes_ago:other (4976118461634588647) -->
- <!-- no translation found for num_hours_ago:one (2178354472031148118) -->
- <!-- no translation found for num_hours_ago:other (1470820825143524326) -->
- <!-- no translation found for num_days_ago:one (5538890823169916595) -->
- <!-- no translation found for num_days_ago:other (2756574969735638578) -->
- <!-- no translation found for dialog_inserting_camera_photo (2711654208680211224) -->
- <skip />
+ <string name="photo_view_default_title" msgid="305616940993932174">"عکس از پیام"</string>
+ <string name="photo_view_load_error" msgid="1802859675974843136">"عکس بارگیری نشد."</string>
+ <string name="photo_view_video_not_ready" msgid="8488887700991406631">"ویدیو در حال حاضر موجود نیست. لطفاً بازخوانی کنید."</string>
+ <string name="photo_view_placeholder_image" msgid="465734985000555852">"این مورد در حال حاضر در دسترس نیست. لطفا بازخوانی کنید."</string>
+ <string name="photo_network_error" msgid="6545183306958652345">"عکس در حال حاضر موجود نیست."</string>
+ <string name="loading_photo" msgid="6784297653634402137">"درحال بارگیری..."</string>
+ <string name="post_operation_pending" msgid="1312168212880219407">"درحال ارسال ..."</string>
+ <string name="download_photo_retry" msgid="1894223549069749239">"این تصویر برای دانلود خیلی بزرگ است، آیا میخواهید با وضوح کمتر دوباره امتحان کنید؟"</string>
+ <string name="download_photo_error" msgid="7511376299526085797">"ذخیره عکس در دستگاه امکانپذیر نیست."</string>
+ <string name="yes" msgid="7474216525286833848">"بله"</string>
+ <string name="no" msgid="427548507197604096">"خیر"</string>
+ <string name="camera_photo_error" msgid="653424229752191252">"عکس یافت نمیشود."</string>
+ <string name="photo_view_count" msgid="1568865177363028519">"<xliff:g id="CURRENT_POS">%d</xliff:g> از <xliff:g id="COUNT">%d</xliff:g>"</string>
+ <string name="truncated_info" msgid="4901078975545890098">"..."</string>
+ <string name="truncated_info_see_more" msgid="2068973974507128729">" مشاهده موارد بیشتر »"</string>
+ <string name="posted_just_now" msgid="7872790861965011674">"هم اکنون"</string>
+ <plurals name="num_minutes_ago">
+ <item quantity="one" msgid="4750191148321568233">"<xliff:g id="COUNT">%d</xliff:g> دقیقه"</item>
+ <item quantity="other" msgid="4976118461634588647">"<xliff:g id="COUNT">%d</xliff:g> دقیقه"</item>
+ </plurals>
+ <plurals name="num_hours_ago">
+ <item quantity="one" msgid="2178354472031148118">"<xliff:g id="COUNT">%d</xliff:g> ساعت"</item>
+ <item quantity="other" msgid="1470820825143524326">"<xliff:g id="COUNT">%d</xliff:g> ساعت"</item>
+ </plurals>
+ <plurals name="num_days_ago">
+ <item quantity="one" msgid="5538890823169916595">"<xliff:g id="COUNT">%d</xliff:g> روز"</item>
+ <item quantity="other" msgid="2756574969735638578">"<xliff:g id="COUNT">%d</xliff:g> روز"</item>
+ </plurals>
+ <string name="dialog_inserting_camera_photo" msgid="2711654208680211224">"در حال درج عکس…"</string>
<!-- no translation found for cant_move_or_change_labels (7997792014816166601) -->
<skip />
</resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 860d6fd..1ec03e4 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -302,46 +302,35 @@
<string name="wait_for_manual_sync_body" msgid="2003192935254244968">"Akun ini tidak disiapkan untuk menyinkronkan secara otomatis."\n"Sentuh "<b>"Sinkronkan Sekarang"</b>" untuk menyinkronkan surat, atau "<b>"Ubah Setelan Sinkronisasi"</b>" untuk menyiapkan akun ini untuk sinkronisasi secara otomatis."</string>
<string name="manual_sync" msgid="6743983544685622800">"Sinkron skrg"</string>
<string name="change_sync_settings" msgid="5514293926214426577">"Ubah setelan sinkronisasi"</string>
- <!-- no translation found for photo_view_default_title (305616940993932174) -->
- <skip />
- <!-- no translation found for photo_view_load_error (1802859675974843136) -->
- <skip />
- <!-- no translation found for photo_view_video_not_ready (8488887700991406631) -->
- <skip />
- <!-- no translation found for photo_view_placeholder_image (465734985000555852) -->
- <skip />
- <!-- no translation found for photo_network_error (6545183306958652345) -->
- <skip />
- <!-- no translation found for loading_photo (6784297653634402137) -->
- <skip />
- <!-- no translation found for post_operation_pending (1312168212880219407) -->
- <skip />
- <!-- no translation found for download_photo_retry (1894223549069749239) -->
- <skip />
- <!-- no translation found for download_photo_error (7511376299526085797) -->
- <skip />
- <!-- no translation found for yes (7474216525286833848) -->
- <skip />
- <!-- no translation found for no (427548507197604096) -->
- <skip />
- <!-- no translation found for camera_photo_error (653424229752191252) -->
- <skip />
- <!-- no translation found for photo_view_count (1568865177363028519) -->
- <skip />
- <!-- no translation found for truncated_info (4901078975545890098) -->
- <skip />
- <!-- no translation found for truncated_info_see_more (2068973974507128729) -->
- <skip />
- <!-- no translation found for posted_just_now (7872790861965011674) -->
- <skip />
- <!-- no translation found for num_minutes_ago:one (4750191148321568233) -->
- <!-- no translation found for num_minutes_ago:other (4976118461634588647) -->
- <!-- no translation found for num_hours_ago:one (2178354472031148118) -->
- <!-- no translation found for num_hours_ago:other (1470820825143524326) -->
- <!-- no translation found for num_days_ago:one (5538890823169916595) -->
- <!-- no translation found for num_days_ago:other (2756574969735638578) -->
- <!-- no translation found for dialog_inserting_camera_photo (2711654208680211224) -->
- <skip />
+ <string name="photo_view_default_title" msgid="305616940993932174">"Foto dari pesan"</string>
+ <string name="photo_view_load_error" msgid="1802859675974843136">"Foto tidak dapat dimuat."</string>
+ <string name="photo_view_video_not_ready" msgid="8488887700991406631">"Video tidak tersedia saat ini. Segarkan."</string>
+ <string name="photo_view_placeholder_image" msgid="465734985000555852">"Item tidak tersedia saat ini. Segarkan."</string>
+ <string name="photo_network_error" msgid="6545183306958652345">"Foto tidak tersedia saat ini."</string>
+ <string name="loading_photo" msgid="6784297653634402137">"Memuat..."</string>
+ <string name="post_operation_pending" msgid="1312168212880219407">"Mengirim..."</string>
+ <string name="download_photo_retry" msgid="1894223549069749239">"Gambar terlalu besar untuk diunduh. Ingin mencoba lagi dengan resolusi yang lebih kecil?"</string>
+ <string name="download_photo_error" msgid="7511376299526085797">"Foto tidak dapat disimpan ke perangkat."</string>
+ <string name="yes" msgid="7474216525286833848">"Ya"</string>
+ <string name="no" msgid="427548507197604096">"Tidak"</string>
+ <string name="camera_photo_error" msgid="653424229752191252">"Tidak dapat menemukan foto."</string>
+ <string name="photo_view_count" msgid="1568865177363028519">"<xliff:g id="CURRENT_POS">%d</xliff:g> dari <xliff:g id="COUNT">%d</xliff:g>"</string>
+ <string name="truncated_info" msgid="4901078975545890098">"..."</string>
+ <string name="truncated_info_see_more" msgid="2068973974507128729">" Lihat lainnya »"</string>
+ <string name="posted_just_now" msgid="7872790861965011674">"Baru saja"</string>
+ <plurals name="num_minutes_ago">
+ <item quantity="one" msgid="4750191148321568233">"<xliff:g id="COUNT">%d</xliff:g> mnt"</item>
+ <item quantity="other" msgid="4976118461634588647">"<xliff:g id="COUNT">%d</xliff:g> mnt"</item>
+ </plurals>
+ <plurals name="num_hours_ago">
+ <item quantity="one" msgid="2178354472031148118">"<xliff:g id="COUNT">%d</xliff:g> jam"</item>
+ <item quantity="other" msgid="1470820825143524326">"<xliff:g id="COUNT">%d</xliff:g> jam"</item>
+ </plurals>
+ <plurals name="num_days_ago">
+ <item quantity="one" msgid="5538890823169916595">"<xliff:g id="COUNT">%d</xliff:g> hari"</item>
+ <item quantity="other" msgid="2756574969735638578">"<xliff:g id="COUNT">%d</xliff:g> hari"</item>
+ </plurals>
+ <string name="dialog_inserting_camera_photo" msgid="2711654208680211224">"Menyisipkan foto…"</string>
<!-- no translation found for cant_move_or_change_labels (7997792014816166601) -->
<skip />
</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 8a81614..135faaa 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -342,6 +342,5 @@
<!-- no translation found for num_days_ago:other (2756574969735638578) -->
<!-- no translation found for dialog_inserting_camera_photo (2711654208680211224) -->
<skip />
- <!-- no translation found for cant_move_or_change_labels (7997792014816166601) -->
- <skip />
+ <string name="cant_move_or_change_labels" msgid="7997792014816166601">"Impossibile spostare i messaggi perché la selezione contiene più account."</string>
</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 24e6a18..fccedaf 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -302,46 +302,35 @@
<string name="wait_for_manual_sync_body" msgid="2003192935254244968">"이 계정은 자동으로 동기화되도록 설정되지 않았습니다."\n<b>"지금 동기화"</b>"를 터치하여 메일을 한 번 동기화하거나 "<b>"동기화 설정 변경"</b>"을 터치하여 이 계정이 메일을 자동으로 동기화하도록 설정하세요."</string>
<string name="manual_sync" msgid="6743983544685622800">"지금 동기화"</string>
<string name="change_sync_settings" msgid="5514293926214426577">"동기화 설정 변경"</string>
- <!-- no translation found for photo_view_default_title (305616940993932174) -->
- <skip />
- <!-- no translation found for photo_view_load_error (1802859675974843136) -->
- <skip />
- <!-- no translation found for photo_view_video_not_ready (8488887700991406631) -->
- <skip />
- <!-- no translation found for photo_view_placeholder_image (465734985000555852) -->
- <skip />
- <!-- no translation found for photo_network_error (6545183306958652345) -->
- <skip />
- <!-- no translation found for loading_photo (6784297653634402137) -->
- <skip />
- <!-- no translation found for post_operation_pending (1312168212880219407) -->
- <skip />
- <!-- no translation found for download_photo_retry (1894223549069749239) -->
- <skip />
- <!-- no translation found for download_photo_error (7511376299526085797) -->
- <skip />
- <!-- no translation found for yes (7474216525286833848) -->
- <skip />
- <!-- no translation found for no (427548507197604096) -->
- <skip />
- <!-- no translation found for camera_photo_error (653424229752191252) -->
- <skip />
- <!-- no translation found for photo_view_count (1568865177363028519) -->
- <skip />
- <!-- no translation found for truncated_info (4901078975545890098) -->
- <skip />
- <!-- no translation found for truncated_info_see_more (2068973974507128729) -->
- <skip />
- <!-- no translation found for posted_just_now (7872790861965011674) -->
- <skip />
- <!-- no translation found for num_minutes_ago:one (4750191148321568233) -->
- <!-- no translation found for num_minutes_ago:other (4976118461634588647) -->
- <!-- no translation found for num_hours_ago:one (2178354472031148118) -->
- <!-- no translation found for num_hours_ago:other (1470820825143524326) -->
- <!-- no translation found for num_days_ago:one (5538890823169916595) -->
- <!-- no translation found for num_days_ago:other (2756574969735638578) -->
- <!-- no translation found for dialog_inserting_camera_photo (2711654208680211224) -->
- <skip />
+ <string name="photo_view_default_title" msgid="305616940993932174">"메일의 사진"</string>
+ <string name="photo_view_load_error" msgid="1802859675974843136">"사진을 로드하지 못했습니다."</string>
+ <string name="photo_view_video_not_ready" msgid="8488887700991406631">"현재 동영상을 볼 수 없습니다. 새로고침하세요."</string>
+ <string name="photo_view_placeholder_image" msgid="465734985000555852">"현재 사용할 수 없는 항목입니다. 새로고침하세요."</string>
+ <string name="photo_network_error" msgid="6545183306958652345">"지금은 사진을 사용할 수 없습니다."</string>
+ <string name="loading_photo" msgid="6784297653634402137">"로드 중…"</string>
+ <string name="post_operation_pending" msgid="1312168212880219407">"전송 중…"</string>
+ <string name="download_photo_retry" msgid="1894223549069749239">"이 이미지는 다운로드하기에 너무 큽니다. 더 낮은 해상도로 다시 시도하시겠습니까?"</string>
+ <string name="download_photo_error" msgid="7511376299526085797">"사진을 기기에 저장하지 못했습니다."</string>
+ <string name="yes" msgid="7474216525286833848">"예"</string>
+ <string name="no" msgid="427548507197604096">"아니요"</string>
+ <string name="camera_photo_error" msgid="653424229752191252">"사진을 찾을 수 없음"</string>
+ <string name="photo_view_count" msgid="1568865177363028519">"<xliff:g id="COUNT">%d</xliff:g>장 중 <xliff:g id="CURRENT_POS">%d</xliff:g>"</string>
+ <string name="truncated_info" msgid="4901078975545890098">"..."</string>
+ <string name="truncated_info_see_more" msgid="2068973974507128729">"더보기 »"</string>
+ <string name="posted_just_now" msgid="7872790861965011674">"방금 전"</string>
+ <plurals name="num_minutes_ago">
+ <item quantity="one" msgid="4750191148321568233">"<xliff:g id="COUNT">%d</xliff:g>분"</item>
+ <item quantity="other" msgid="4976118461634588647">"<xliff:g id="COUNT">%d</xliff:g>분"</item>
+ </plurals>
+ <plurals name="num_hours_ago">
+ <item quantity="one" msgid="2178354472031148118">"<xliff:g id="COUNT">%d</xliff:g>시간"</item>
+ <item quantity="other" msgid="1470820825143524326">"<xliff:g id="COUNT">%d</xliff:g>시간"</item>
+ </plurals>
+ <plurals name="num_days_ago">
+ <item quantity="one" msgid="5538890823169916595">"<xliff:g id="COUNT">%d</xliff:g>일"</item>
+ <item quantity="other" msgid="2756574969735638578">"<xliff:g id="COUNT">%d</xliff:g>일"</item>
+ </plurals>
+ <string name="dialog_inserting_camera_photo" msgid="2711654208680211224">"사진 추가 중…"</string>
<!-- no translation found for cant_move_or_change_labels (7997792014816166601) -->
<skip />
</resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 3019daf..fe0efb7 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -302,46 +302,35 @@
<string name="wait_for_manual_sync_body" msgid="2003192935254244968">"Ši paskyra nenustatyta automatiškai sinchronizuoti."\n"Jei norite vieną kartą sinchronizuoti paštą, palieskite "<b>"Sinch. dabar"</b>" arba palieskite "<b>"Keisti sinchronizavimo nustat."</b>", kad nustatytumėte šią paskyrą automatiškai sinchronizuoti paštą."</string>
<string name="manual_sync" msgid="6743983544685622800">"Sinch. dabar"</string>
<string name="change_sync_settings" msgid="5514293926214426577">"Keisti sinchronizavimo nustat."</string>
- <!-- no translation found for photo_view_default_title (305616940993932174) -->
- <skip />
- <!-- no translation found for photo_view_load_error (1802859675974843136) -->
- <skip />
- <!-- no translation found for photo_view_video_not_ready (8488887700991406631) -->
- <skip />
- <!-- no translation found for photo_view_placeholder_image (465734985000555852) -->
- <skip />
- <!-- no translation found for photo_network_error (6545183306958652345) -->
- <skip />
- <!-- no translation found for loading_photo (6784297653634402137) -->
- <skip />
- <!-- no translation found for post_operation_pending (1312168212880219407) -->
- <skip />
- <!-- no translation found for download_photo_retry (1894223549069749239) -->
- <skip />
- <!-- no translation found for download_photo_error (7511376299526085797) -->
- <skip />
- <!-- no translation found for yes (7474216525286833848) -->
- <skip />
- <!-- no translation found for no (427548507197604096) -->
- <skip />
- <!-- no translation found for camera_photo_error (653424229752191252) -->
- <skip />
- <!-- no translation found for photo_view_count (1568865177363028519) -->
- <skip />
- <!-- no translation found for truncated_info (4901078975545890098) -->
- <skip />
- <!-- no translation found for truncated_info_see_more (2068973974507128729) -->
- <skip />
- <!-- no translation found for posted_just_now (7872790861965011674) -->
- <skip />
- <!-- no translation found for num_minutes_ago:one (4750191148321568233) -->
- <!-- no translation found for num_minutes_ago:other (4976118461634588647) -->
- <!-- no translation found for num_hours_ago:one (2178354472031148118) -->
- <!-- no translation found for num_hours_ago:other (1470820825143524326) -->
- <!-- no translation found for num_days_ago:one (5538890823169916595) -->
- <!-- no translation found for num_days_ago:other (2756574969735638578) -->
- <!-- no translation found for dialog_inserting_camera_photo (2711654208680211224) -->
- <skip />
+ <string name="photo_view_default_title" msgid="305616940993932174">"Nuotraukos iš pranešimo"</string>
+ <string name="photo_view_load_error" msgid="1802859675974843136">"Nepavyko įkelti nuotraukos."</string>
+ <string name="photo_view_video_not_ready" msgid="8488887700991406631">"Šiuo metu vaizdo įrašas nepasiekiamas. Atnaujinkite."</string>
+ <string name="photo_view_placeholder_image" msgid="465734985000555852">"Šiuo metu elementas nepasiekiamas. Atnaujinkite."</string>
+ <string name="photo_network_error" msgid="6545183306958652345">"Šiuo metu nuotrauka nepasiekiama."</string>
+ <string name="loading_photo" msgid="6784297653634402137">"Įkeliama…"</string>
+ <string name="post_operation_pending" msgid="1312168212880219407">"Siunčiama…"</string>
+ <string name="download_photo_retry" msgid="1894223549069749239">"Norimas atsisiųsti vaizdas per didelis. Ar norėtumėte pabandyti nustatę mažesnę skyrą?"</string>
+ <string name="download_photo_error" msgid="7511376299526085797">"Nepavyko išsaugoti nuotraukos įrenginyje."</string>
+ <string name="yes" msgid="7474216525286833848">"Taip"</string>
+ <string name="no" msgid="427548507197604096">"Ne"</string>
+ <string name="camera_photo_error" msgid="653424229752191252">"Nepavyksta rasti nuotraukos."</string>
+ <string name="photo_view_count" msgid="1568865177363028519">"<xliff:g id="CURRENT_POS">%d</xliff:g> iš <xliff:g id="COUNT">%d</xliff:g>"</string>
+ <string name="truncated_info" msgid="4901078975545890098">"..."</string>
+ <string name="truncated_info_see_more" msgid="2068973974507128729">" Žr. daugiau »"</string>
+ <string name="posted_just_now" msgid="7872790861965011674">"Ką tik"</string>
+ <plurals name="num_minutes_ago">
+ <item quantity="one" msgid="4750191148321568233">"<xliff:g id="COUNT">%d</xliff:g> min."</item>
+ <item quantity="other" msgid="4976118461634588647">"<xliff:g id="COUNT">%d</xliff:g> min."</item>
+ </plurals>
+ <plurals name="num_hours_ago">
+ <item quantity="one" msgid="2178354472031148118">"<xliff:g id="COUNT">%d</xliff:g> val."</item>
+ <item quantity="other" msgid="1470820825143524326">"<xliff:g id="COUNT">%d</xliff:g> val."</item>
+ </plurals>
+ <plurals name="num_days_ago">
+ <item quantity="one" msgid="5538890823169916595">"<xliff:g id="COUNT">%d</xliff:g> d."</item>
+ <item quantity="other" msgid="2756574969735638578">"<xliff:g id="COUNT">%d</xliff:g> d."</item>
+ </plurals>
+ <string name="dialog_inserting_camera_photo" msgid="2711654208680211224">"Įterpiama nuotrauka…"</string>
<!-- no translation found for cant_move_or_change_labels (7997792014816166601) -->
<skip />
</resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index c6162a5..c59cc36 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -302,46 +302,35 @@
<string name="wait_for_manual_sync_body" msgid="2003192935254244968">"Šajā kontā nav iestatīta automātiskā sinhronizācija."\n"Pieskarieties vienumam "<b>"Sinhronizēt tūlīt"</b>", lai vienreiz sinhronizētu pastu, vai vienumam "<b>"Mainīt sinhronizācijas iestatījumus"</b>", lai šajā kontā iestatītu automātisku pasta sinhronizāciju."</string>
<string name="manual_sync" msgid="6743983544685622800">"Sinhr. tūlīt"</string>
<string name="change_sync_settings" msgid="5514293926214426577">"Mainīt sinhronizācijas iestat."</string>
- <!-- no translation found for photo_view_default_title (305616940993932174) -->
- <skip />
- <!-- no translation found for photo_view_load_error (1802859675974843136) -->
- <skip />
- <!-- no translation found for photo_view_video_not_ready (8488887700991406631) -->
- <skip />
- <!-- no translation found for photo_view_placeholder_image (465734985000555852) -->
- <skip />
- <!-- no translation found for photo_network_error (6545183306958652345) -->
- <skip />
- <!-- no translation found for loading_photo (6784297653634402137) -->
- <skip />
- <!-- no translation found for post_operation_pending (1312168212880219407) -->
- <skip />
- <!-- no translation found for download_photo_retry (1894223549069749239) -->
- <skip />
- <!-- no translation found for download_photo_error (7511376299526085797) -->
- <skip />
- <!-- no translation found for yes (7474216525286833848) -->
- <skip />
- <!-- no translation found for no (427548507197604096) -->
- <skip />
- <!-- no translation found for camera_photo_error (653424229752191252) -->
- <skip />
- <!-- no translation found for photo_view_count (1568865177363028519) -->
- <skip />
- <!-- no translation found for truncated_info (4901078975545890098) -->
- <skip />
- <!-- no translation found for truncated_info_see_more (2068973974507128729) -->
- <skip />
- <!-- no translation found for posted_just_now (7872790861965011674) -->
- <skip />
- <!-- no translation found for num_minutes_ago:one (4750191148321568233) -->
- <!-- no translation found for num_minutes_ago:other (4976118461634588647) -->
- <!-- no translation found for num_hours_ago:one (2178354472031148118) -->
- <!-- no translation found for num_hours_ago:other (1470820825143524326) -->
- <!-- no translation found for num_days_ago:one (5538890823169916595) -->
- <!-- no translation found for num_days_ago:other (2756574969735638578) -->
- <!-- no translation found for dialog_inserting_camera_photo (2711654208680211224) -->
- <skip />
+ <string name="photo_view_default_title" msgid="305616940993932174">"Fotoattēli no ziņojuma"</string>
+ <string name="photo_view_load_error" msgid="1802859675974843136">"Fotoattēlu nevarēja ielādēt."</string>
+ <string name="photo_view_video_not_ready" msgid="8488887700991406631">"Videoklips pašlaik nav pieejams. Lūdzu, atsvaidziniet."</string>
+ <string name="photo_view_placeholder_image" msgid="465734985000555852">"Vien. pašlaik nav pieejams. Lūdzu, atsvaidziniet."</string>
+ <string name="photo_network_error" msgid="6545183306958652345">"Fotoattēls pašlaik nav pieejams."</string>
+ <string name="loading_photo" msgid="6784297653634402137">"Notiek ielāde…"</string>
+ <string name="post_operation_pending" msgid="1312168212880219407">"Notiek sūtīšana..."</string>
+ <string name="download_photo_retry" msgid="1894223549069749239">"Šis attēls ir pārāk liels, lai to lejupielādētu. Vai vēlaties izmantot mazākas izšķirtspējas attēlu?"</string>
+ <string name="download_photo_error" msgid="7511376299526085797">"Fotoattēlu nevarēja saglabāt ierīcē."</string>
+ <string name="yes" msgid="7474216525286833848">"Jā"</string>
+ <string name="no" msgid="427548507197604096">"Nē"</string>
+ <string name="camera_photo_error" msgid="653424229752191252">"Nevar atrast fotoattēlu."</string>
+ <string name="photo_view_count" msgid="1568865177363028519">"<xliff:g id="CURRENT_POS">%d</xliff:g>. no <xliff:g id="COUNT">%d</xliff:g>"</string>
+ <string name="truncated_info" msgid="4901078975545890098">"..."</string>
+ <string name="truncated_info_see_more" msgid="2068973974507128729">" Skatīt vairāk »"</string>
+ <string name="posted_just_now" msgid="7872790861965011674">"Tikko"</string>
+ <plurals name="num_minutes_ago">
+ <item quantity="one" msgid="4750191148321568233">"pirms <xliff:g id="COUNT">%d</xliff:g> minūtes"</item>
+ <item quantity="other" msgid="4976118461634588647">"pirms <xliff:g id="COUNT">%d</xliff:g> minūtēm"</item>
+ </plurals>
+ <plurals name="num_hours_ago">
+ <item quantity="one" msgid="2178354472031148118">"pirms <xliff:g id="COUNT">%d</xliff:g> stundas"</item>
+ <item quantity="other" msgid="1470820825143524326">"pirms <xliff:g id="COUNT">%d</xliff:g> stundām"</item>
+ </plurals>
+ <plurals name="num_days_ago">
+ <item quantity="one" msgid="5538890823169916595">"pirms <xliff:g id="COUNT">%d</xliff:g> dienas"</item>
+ <item quantity="other" msgid="2756574969735638578">"pirms <xliff:g id="COUNT">%d</xliff:g> dienām"</item>
+ </plurals>
+ <string name="dialog_inserting_camera_photo" msgid="2711654208680211224">"Notiek fotoattēla ievietošana…"</string>
<!-- no translation found for cant_move_or_change_labels (7997792014816166601) -->
<skip />
</resources>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index aa86262..5a3a8cb 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -302,46 +302,35 @@
<string name="wait_for_manual_sync_body" msgid="2003192935254244968">"Akaun ini tidak ditetapkan untuk disegerakkan secara automatik."\n"Sentuh "<b>"Segerakkan Sekarang"</b>" untuk menyegerakkan e-mel sekali, atau "<b>"Tukar Tetapan Penyegerakan"</b>" untuk menyediakan akaun ini agar menyegerakkan e-mel secara automatik."</string>
<string name="manual_sync" msgid="6743983544685622800">"Segerakkan sekarang"</string>
<string name="change_sync_settings" msgid="5514293926214426577">"Tukar tetapan penyegerakan"</string>
- <!-- no translation found for photo_view_default_title (305616940993932174) -->
- <skip />
- <!-- no translation found for photo_view_load_error (1802859675974843136) -->
- <skip />
- <!-- no translation found for photo_view_video_not_ready (8488887700991406631) -->
- <skip />
- <!-- no translation found for photo_view_placeholder_image (465734985000555852) -->
- <skip />
- <!-- no translation found for photo_network_error (6545183306958652345) -->
- <skip />
- <!-- no translation found for loading_photo (6784297653634402137) -->
- <skip />
- <!-- no translation found for post_operation_pending (1312168212880219407) -->
- <skip />
- <!-- no translation found for download_photo_retry (1894223549069749239) -->
- <skip />
- <!-- no translation found for download_photo_error (7511376299526085797) -->
- <skip />
- <!-- no translation found for yes (7474216525286833848) -->
- <skip />
- <!-- no translation found for no (427548507197604096) -->
- <skip />
- <!-- no translation found for camera_photo_error (653424229752191252) -->
- <skip />
- <!-- no translation found for photo_view_count (1568865177363028519) -->
- <skip />
- <!-- no translation found for truncated_info (4901078975545890098) -->
- <skip />
- <!-- no translation found for truncated_info_see_more (2068973974507128729) -->
- <skip />
- <!-- no translation found for posted_just_now (7872790861965011674) -->
- <skip />
- <!-- no translation found for num_minutes_ago:one (4750191148321568233) -->
- <!-- no translation found for num_minutes_ago:other (4976118461634588647) -->
- <!-- no translation found for num_hours_ago:one (2178354472031148118) -->
- <!-- no translation found for num_hours_ago:other (1470820825143524326) -->
- <!-- no translation found for num_days_ago:one (5538890823169916595) -->
- <!-- no translation found for num_days_ago:other (2756574969735638578) -->
- <!-- no translation found for dialog_inserting_camera_photo (2711654208680211224) -->
- <skip />
+ <string name="photo_view_default_title" msgid="305616940993932174">"Foto dari mesej"</string>
+ <string name="photo_view_load_error" msgid="1802859675974843136">"Foto tidak dapat dimuatkan."</string>
+ <string name="photo_view_video_not_ready" msgid="8488887700991406631">"Video tidak tersedia pada masa ini. Sila muat semula."</string>
+ <string name="photo_view_placeholder_image" msgid="465734985000555852">"Item tidak tersedia pada masa ini. Sila muat semula."</string>
+ <string name="photo_network_error" msgid="6545183306958652345">"Foto tidak tersedia sekarang."</string>
+ <string name="loading_photo" msgid="6784297653634402137">"Memuatkan…"</string>
+ <string name="post_operation_pending" msgid="1312168212880219407">"Menghantar…"</string>
+ <string name="download_photo_retry" msgid="1894223549069749239">"Imej ini terlalu besar untuk dimuat turun, adakah anda mahu mencuba semula pada resolusi yang lebih kecil?"</string>
+ <string name="download_photo_error" msgid="7511376299526085797">"Foto tidak dapat disimpan ke peranti."</string>
+ <string name="yes" msgid="7474216525286833848">"Ya"</string>
+ <string name="no" msgid="427548507197604096">"Tiada"</string>
+ <string name="camera_photo_error" msgid="653424229752191252">"Tidak menjumpai foto."</string>
+ <string name="photo_view_count" msgid="1568865177363028519">"<xliff:g id="CURRENT_POS">%d</xliff:g> daripada <xliff:g id="COUNT">%d</xliff:g>"</string>
+ <string name="truncated_info" msgid="4901078975545890098">"..."</string>
+ <string name="truncated_info_see_more" msgid="2068973974507128729">" Lihat lagi »"</string>
+ <string name="posted_just_now" msgid="7872790861965011674">"Sebentar tadi"</string>
+ <plurals name="num_minutes_ago">
+ <item quantity="one" msgid="4750191148321568233">"<xliff:g id="COUNT">%d</xliff:g> min"</item>
+ <item quantity="other" msgid="4976118461634588647">"<xliff:g id="COUNT">%d</xliff:g> mins"</item>
+ </plurals>
+ <plurals name="num_hours_ago">
+ <item quantity="one" msgid="2178354472031148118">"<xliff:g id="COUNT">%d</xliff:g> jam"</item>
+ <item quantity="other" msgid="1470820825143524326">"<xliff:g id="COUNT">%d</xliff:g> jam"</item>
+ </plurals>
+ <plurals name="num_days_ago">
+ <item quantity="one" msgid="5538890823169916595">"<xliff:g id="COUNT">%d</xliff:g> hari"</item>
+ <item quantity="other" msgid="2756574969735638578">"<xliff:g id="COUNT">%d</xliff:g> hari"</item>
+ </plurals>
+ <string name="dialog_inserting_camera_photo" msgid="2711654208680211224">"Menyisipkan foto..."</string>
<!-- no translation found for cant_move_or_change_labels (7997792014816166601) -->
<skip />
</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 4ca1fec..85d29dd 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -302,46 +302,35 @@
<string name="wait_for_manual_sync_body" msgid="2003192935254244968">"Konto nie jest skonfigurowane do automatycznej synchronizacji."\n"Kliknij "<b>"Synchronizuj"</b>", by zsynchronizować pocztę jeden raz, lub "<b>"Zmień ustawienia synchronizacji"</b>", by skonfigurować konto do automatycznej synchronizacji wiadomości."</string>
<string name="manual_sync" msgid="6743983544685622800">"Synchronizuj"</string>
<string name="change_sync_settings" msgid="5514293926214426577">"Zmień ustawienia synchronizacji"</string>
- <!-- no translation found for photo_view_default_title (305616940993932174) -->
- <skip />
- <!-- no translation found for photo_view_load_error (1802859675974843136) -->
- <skip />
- <!-- no translation found for photo_view_video_not_ready (8488887700991406631) -->
- <skip />
- <!-- no translation found for photo_view_placeholder_image (465734985000555852) -->
- <skip />
- <!-- no translation found for photo_network_error (6545183306958652345) -->
- <skip />
- <!-- no translation found for loading_photo (6784297653634402137) -->
- <skip />
- <!-- no translation found for post_operation_pending (1312168212880219407) -->
- <skip />
- <!-- no translation found for download_photo_retry (1894223549069749239) -->
- <skip />
- <!-- no translation found for download_photo_error (7511376299526085797) -->
- <skip />
- <!-- no translation found for yes (7474216525286833848) -->
- <skip />
- <!-- no translation found for no (427548507197604096) -->
- <skip />
- <!-- no translation found for camera_photo_error (653424229752191252) -->
- <skip />
- <!-- no translation found for photo_view_count (1568865177363028519) -->
- <skip />
- <!-- no translation found for truncated_info (4901078975545890098) -->
- <skip />
- <!-- no translation found for truncated_info_see_more (2068973974507128729) -->
- <skip />
- <!-- no translation found for posted_just_now (7872790861965011674) -->
- <skip />
- <!-- no translation found for num_minutes_ago:one (4750191148321568233) -->
- <!-- no translation found for num_minutes_ago:other (4976118461634588647) -->
- <!-- no translation found for num_hours_ago:one (2178354472031148118) -->
- <!-- no translation found for num_hours_ago:other (1470820825143524326) -->
- <!-- no translation found for num_days_ago:one (5538890823169916595) -->
- <!-- no translation found for num_days_ago:other (2756574969735638578) -->
- <!-- no translation found for dialog_inserting_camera_photo (2711654208680211224) -->
- <skip />
+ <string name="photo_view_default_title" msgid="305616940993932174">"Zdjęcia z wiadomości"</string>
+ <string name="photo_view_load_error" msgid="1802859675974843136">"Nie można wczytać zdjęcia."</string>
+ <string name="photo_view_video_not_ready" msgid="8488887700991406631">"Film jest teraz niedostępny. Odśwież stronę."</string>
+ <string name="photo_view_placeholder_image" msgid="465734985000555852">"Element jest teraz niedostępny. Odśwież stronę."</string>
+ <string name="photo_network_error" msgid="6545183306958652345">"Zdjęcie jest teraz niedostępne."</string>
+ <string name="loading_photo" msgid="6784297653634402137">"Wczytuję…"</string>
+ <string name="post_operation_pending" msgid="1312168212880219407">"Wysyłam…"</string>
+ <string name="download_photo_retry" msgid="1894223549069749239">"Obraz jest za duży, by go pobrać. Chcesz spróbować po zmniejszeniu rozdzielczości?"</string>
+ <string name="download_photo_error" msgid="7511376299526085797">"Nie można zapisać zdjęcia na urządzeniu."</string>
+ <string name="yes" msgid="7474216525286833848">"Tak"</string>
+ <string name="no" msgid="427548507197604096">"Nie"</string>
+ <string name="camera_photo_error" msgid="653424229752191252">"Nie można znaleźć zdjęcia."</string>
+ <string name="photo_view_count" msgid="1568865177363028519">"<xliff:g id="CURRENT_POS">%d</xliff:g> z <xliff:g id="COUNT">%d</xliff:g>"</string>
+ <string name="truncated_info" msgid="4901078975545890098">"..."</string>
+ <string name="truncated_info_see_more" msgid="2068973974507128729">" Zobacz więcej »"</string>
+ <string name="posted_just_now" msgid="7872790861965011674">"Teraz"</string>
+ <plurals name="num_minutes_ago">
+ <item quantity="one" msgid="4750191148321568233">"<xliff:g id="COUNT">%d</xliff:g> min"</item>
+ <item quantity="other" msgid="4976118461634588647">"<xliff:g id="COUNT">%d</xliff:g> min"</item>
+ </plurals>
+ <plurals name="num_hours_ago">
+ <item quantity="one" msgid="2178354472031148118">"<xliff:g id="COUNT">%d</xliff:g> godz."</item>
+ <item quantity="other" msgid="1470820825143524326">"<xliff:g id="COUNT">%d</xliff:g> godz."</item>
+ </plurals>
+ <plurals name="num_days_ago">
+ <item quantity="one" msgid="5538890823169916595">"<xliff:g id="COUNT">%d</xliff:g> dzień"</item>
+ <item quantity="other" msgid="2756574969735638578">"<xliff:g id="COUNT">%d</xliff:g> dni"</item>
+ </plurals>
+ <string name="dialog_inserting_camera_photo" msgid="2711654208680211224">"Wstawiam zdjęcie…"</string>
<!-- no translation found for cant_move_or_change_labels (7997792014816166601) -->
<skip />
</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 85cb04b..f34f402 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -302,46 +302,35 @@
<string name="wait_for_manual_sync_body" msgid="2003192935254244968">"Esta conta não está configurada para sincronizar automaticamente."\n"Toque em "<b>"Sincronizar agora"</b>" para sincronizar os e-mails uma vez ou em "<b>"Alterar configurações de sincronização"</b>" para configurar a sincronização automática de e-mails desta conta."</string>
<string name="manual_sync" msgid="6743983544685622800">"Sincr. agora"</string>
<string name="change_sync_settings" msgid="5514293926214426577">"Alterar config. de sincr."</string>
- <!-- no translation found for photo_view_default_title (305616940993932174) -->
- <skip />
- <!-- no translation found for photo_view_load_error (1802859675974843136) -->
- <skip />
- <!-- no translation found for photo_view_video_not_ready (8488887700991406631) -->
- <skip />
- <!-- no translation found for photo_view_placeholder_image (465734985000555852) -->
- <skip />
- <!-- no translation found for photo_network_error (6545183306958652345) -->
- <skip />
- <!-- no translation found for loading_photo (6784297653634402137) -->
- <skip />
- <!-- no translation found for post_operation_pending (1312168212880219407) -->
- <skip />
- <!-- no translation found for download_photo_retry (1894223549069749239) -->
- <skip />
- <!-- no translation found for download_photo_error (7511376299526085797) -->
- <skip />
- <!-- no translation found for yes (7474216525286833848) -->
- <skip />
- <!-- no translation found for no (427548507197604096) -->
- <skip />
- <!-- no translation found for camera_photo_error (653424229752191252) -->
- <skip />
- <!-- no translation found for photo_view_count (1568865177363028519) -->
- <skip />
- <!-- no translation found for truncated_info (4901078975545890098) -->
- <skip />
- <!-- no translation found for truncated_info_see_more (2068973974507128729) -->
- <skip />
- <!-- no translation found for posted_just_now (7872790861965011674) -->
- <skip />
- <!-- no translation found for num_minutes_ago:one (4750191148321568233) -->
- <!-- no translation found for num_minutes_ago:other (4976118461634588647) -->
- <!-- no translation found for num_hours_ago:one (2178354472031148118) -->
- <!-- no translation found for num_hours_ago:other (1470820825143524326) -->
- <!-- no translation found for num_days_ago:one (5538890823169916595) -->
- <!-- no translation found for num_days_ago:other (2756574969735638578) -->
- <!-- no translation found for dialog_inserting_camera_photo (2711654208680211224) -->
- <skip />
+ <string name="photo_view_default_title" msgid="305616940993932174">"Fotos de mensagem"</string>
+ <string name="photo_view_load_error" msgid="1802859675974843136">"Não foi possível carregar a foto."</string>
+ <string name="photo_view_video_not_ready" msgid="8488887700991406631">"O vídeo não está disponível no momento. Atualize."</string>
+ <string name="photo_view_placeholder_image" msgid="465734985000555852">"O item não está disponível no momento. Atualize."</string>
+ <string name="photo_network_error" msgid="6545183306958652345">"A foto não está disponível no momento."</string>
+ <string name="loading_photo" msgid="6784297653634402137">"Carregando..."</string>
+ <string name="post_operation_pending" msgid="1312168212880219407">"Enviando..."</string>
+ <string name="download_photo_retry" msgid="1894223549069749239">"Esta imagem é grande demais para fazer o download. Deseja tentar novamente com uma resolução menor?"</string>
+ <string name="download_photo_error" msgid="7511376299526085797">"Não foi possível salvar a foto no dispositivo."</string>
+ <string name="yes" msgid="7474216525286833848">"Sim"</string>
+ <string name="no" msgid="427548507197604096">"Não"</string>
+ <string name="camera_photo_error" msgid="653424229752191252">"Não é possível encontrar a foto."</string>
+ <string name="photo_view_count" msgid="1568865177363028519">"<xliff:g id="CURRENT_POS">%d</xliff:g> de <xliff:g id="COUNT">%d</xliff:g>"</string>
+ <string name="truncated_info" msgid="4901078975545890098">"..."</string>
+ <string name="truncated_info_see_more" msgid="2068973974507128729">" Ver mais »"</string>
+ <string name="posted_just_now" msgid="7872790861965011674">"Agora"</string>
+ <plurals name="num_minutes_ago">
+ <item quantity="one" msgid="4750191148321568233">"<xliff:g id="COUNT">%d</xliff:g> min"</item>
+ <item quantity="other" msgid="4976118461634588647">"<xliff:g id="COUNT">%d</xliff:g> min"</item>
+ </plurals>
+ <plurals name="num_hours_ago">
+ <item quantity="one" msgid="2178354472031148118">"<xliff:g id="COUNT">%d</xliff:g> hora"</item>
+ <item quantity="other" msgid="1470820825143524326">"<xliff:g id="COUNT">%d</xliff:g> horas"</item>
+ </plurals>
+ <plurals name="num_days_ago">
+ <item quantity="one" msgid="5538890823169916595">"<xliff:g id="COUNT">%d</xliff:g> dia"</item>
+ <item quantity="other" msgid="2756574969735638578">"<xliff:g id="COUNT">%d</xliff:g> dias"</item>
+ </plurals>
+ <string name="dialog_inserting_camera_photo" msgid="2711654208680211224">"Inserindo foto..."</string>
<!-- no translation found for cant_move_or_change_labels (7997792014816166601) -->
<skip />
</resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index f991fda..2922952 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -302,46 +302,35 @@
<string name="wait_for_manual_sync_body" msgid="2003192935254244968">"Hindi naka-set up ang account na ito upang awtomatikong mag-sync."\n"Pindutin ang "<b>"I-sync Ngayon"</b>" upang i-sync ang mail nang isang beses, o "<b>"Baguhin ang Mga Setting ng Pag-sync"</b>" upang i-set up ang account na ito upang awtomatikong i-sync ang mail."</string>
<string name="manual_sync" msgid="6743983544685622800">"I-sync na"</string>
<string name="change_sync_settings" msgid="5514293926214426577">"Baguhin mga setting ng sync"</string>
- <!-- no translation found for photo_view_default_title (305616940993932174) -->
- <skip />
- <!-- no translation found for photo_view_load_error (1802859675974843136) -->
- <skip />
- <!-- no translation found for photo_view_video_not_ready (8488887700991406631) -->
- <skip />
- <!-- no translation found for photo_view_placeholder_image (465734985000555852) -->
- <skip />
- <!-- no translation found for photo_network_error (6545183306958652345) -->
- <skip />
- <!-- no translation found for loading_photo (6784297653634402137) -->
- <skip />
- <!-- no translation found for post_operation_pending (1312168212880219407) -->
- <skip />
- <!-- no translation found for download_photo_retry (1894223549069749239) -->
- <skip />
- <!-- no translation found for download_photo_error (7511376299526085797) -->
- <skip />
- <!-- no translation found for yes (7474216525286833848) -->
- <skip />
- <!-- no translation found for no (427548507197604096) -->
- <skip />
- <!-- no translation found for camera_photo_error (653424229752191252) -->
- <skip />
- <!-- no translation found for photo_view_count (1568865177363028519) -->
- <skip />
- <!-- no translation found for truncated_info (4901078975545890098) -->
- <skip />
- <!-- no translation found for truncated_info_see_more (2068973974507128729) -->
- <skip />
- <!-- no translation found for posted_just_now (7872790861965011674) -->
- <skip />
- <!-- no translation found for num_minutes_ago:one (4750191148321568233) -->
- <!-- no translation found for num_minutes_ago:other (4976118461634588647) -->
- <!-- no translation found for num_hours_ago:one (2178354472031148118) -->
- <!-- no translation found for num_hours_ago:other (1470820825143524326) -->
- <!-- no translation found for num_days_ago:one (5538890823169916595) -->
- <!-- no translation found for num_days_ago:other (2756574969735638578) -->
- <!-- no translation found for dialog_inserting_camera_photo (2711654208680211224) -->
- <skip />
+ <string name="photo_view_default_title" msgid="305616940993932174">"Mga larawan mula sa mensahe"</string>
+ <string name="photo_view_load_error" msgid="1802859675974843136">"Hindi ma-load ang larawan."</string>
+ <string name="photo_view_video_not_ready" msgid="8488887700991406631">"Hindi available ang video ngayon. Mangyaring mag-refresh."</string>
+ <string name="photo_view_placeholder_image" msgid="465734985000555852">"Di available item ngayon. Mangyaring mag-refresh."</string>
+ <string name="photo_network_error" msgid="6545183306958652345">"Hindi available ang larawan ngayon."</string>
+ <string name="loading_photo" msgid="6784297653634402137">"Naglo-load..."</string>
+ <string name="post_operation_pending" msgid="1312168212880219407">"Ipinapadala..."</string>
+ <string name="download_photo_retry" msgid="1894223549069749239">"Masyadong malaki ang larawang ito upang i-download, gusto mo bang muling subukan sa mas maliit na resolusyon?"</string>
+ <string name="download_photo_error" msgid="7511376299526085797">"Hindi ma-save ang larawan sa device."</string>
+ <string name="yes" msgid="7474216525286833848">"Oo"</string>
+ <string name="no" msgid="427548507197604096">"Hindi"</string>
+ <string name="camera_photo_error" msgid="653424229752191252">"Hindi mahanap ang larawan."</string>
+ <string name="photo_view_count" msgid="1568865177363028519">"<xliff:g id="CURRENT_POS">%d</xliff:g> ng <xliff:g id="COUNT">%d</xliff:g>"</string>
+ <string name="truncated_info" msgid="4901078975545890098">"..."</string>
+ <string name="truncated_info_see_more" msgid="2068973974507128729">" Makakita ng higit pa »"</string>
+ <string name="posted_just_now" msgid="7872790861965011674">"Ngayon lang"</string>
+ <plurals name="num_minutes_ago">
+ <item quantity="one" msgid="4750191148321568233">"<xliff:g id="COUNT">%d</xliff:g> min"</item>
+ <item quantity="other" msgid="4976118461634588647">"<xliff:g id="COUNT">%d</xliff:g> (na) min"</item>
+ </plurals>
+ <plurals name="num_hours_ago">
+ <item quantity="one" msgid="2178354472031148118">"<xliff:g id="COUNT">%d</xliff:g> oras"</item>
+ <item quantity="other" msgid="1470820825143524326">"<xliff:g id="COUNT">%d</xliff:g> (na) oras"</item>
+ </plurals>
+ <plurals name="num_days_ago">
+ <item quantity="one" msgid="5538890823169916595">"<xliff:g id="COUNT">%d</xliff:g> araw"</item>
+ <item quantity="other" msgid="2756574969735638578">"<xliff:g id="COUNT">%d</xliff:g> (na) araw"</item>
+ </plurals>
+ <string name="dialog_inserting_camera_photo" msgid="2711654208680211224">"Ipinapasok ang larawan..."</string>
<!-- no translation found for cant_move_or_change_labels (7997792014816166601) -->
<skip />
</resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 1d97960..b7237f1 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -302,46 +302,35 @@
<string name="wait_for_manual_sync_body" msgid="2003192935254244968">"Цей обліковий запис не налаштовано для автоматичної синхронізації."\n"Виберіть "<b>"Синхронізувати зараз"</b>", щоб синхронізувати пошту один раз, або "<b>"Змінити налаштування синхронізації"</b>", щоб налаштувати цей обліковий запис для автоматичної синхронізації пошти."</string>
<string name="manual_sync" msgid="6743983544685622800">"Синхр. зараз"</string>
<string name="change_sync_settings" msgid="5514293926214426577">"Змінити налашт. синхронізації"</string>
- <!-- no translation found for photo_view_default_title (305616940993932174) -->
- <skip />
- <!-- no translation found for photo_view_load_error (1802859675974843136) -->
- <skip />
- <!-- no translation found for photo_view_video_not_ready (8488887700991406631) -->
- <skip />
- <!-- no translation found for photo_view_placeholder_image (465734985000555852) -->
- <skip />
- <!-- no translation found for photo_network_error (6545183306958652345) -->
- <skip />
- <!-- no translation found for loading_photo (6784297653634402137) -->
- <skip />
- <!-- no translation found for post_operation_pending (1312168212880219407) -->
- <skip />
- <!-- no translation found for download_photo_retry (1894223549069749239) -->
- <skip />
- <!-- no translation found for download_photo_error (7511376299526085797) -->
- <skip />
- <!-- no translation found for yes (7474216525286833848) -->
- <skip />
- <!-- no translation found for no (427548507197604096) -->
- <skip />
- <!-- no translation found for camera_photo_error (653424229752191252) -->
- <skip />
- <!-- no translation found for photo_view_count (1568865177363028519) -->
- <skip />
- <!-- no translation found for truncated_info (4901078975545890098) -->
- <skip />
- <!-- no translation found for truncated_info_see_more (2068973974507128729) -->
- <skip />
- <!-- no translation found for posted_just_now (7872790861965011674) -->
- <skip />
- <!-- no translation found for num_minutes_ago:one (4750191148321568233) -->
- <!-- no translation found for num_minutes_ago:other (4976118461634588647) -->
- <!-- no translation found for num_hours_ago:one (2178354472031148118) -->
- <!-- no translation found for num_hours_ago:other (1470820825143524326) -->
- <!-- no translation found for num_days_ago:one (5538890823169916595) -->
- <!-- no translation found for num_days_ago:other (2756574969735638578) -->
- <!-- no translation found for dialog_inserting_camera_photo (2711654208680211224) -->
- <skip />
+ <string name="photo_view_default_title" msgid="305616940993932174">"Фотографії з повідомлення"</string>
+ <string name="photo_view_load_error" msgid="1802859675974843136">"Не вдалося завантажити фотографію."</string>
+ <string name="photo_view_video_not_ready" msgid="8488887700991406631">"Відео зараз не доступне. Оновіть його."</string>
+ <string name="photo_view_placeholder_image" msgid="465734985000555852">"Елемент зараз не доступний. Оновіть його."</string>
+ <string name="photo_network_error" msgid="6545183306958652345">"Фотографія зараз не доступна."</string>
+ <string name="loading_photo" msgid="6784297653634402137">"Завантаження…"</string>
+ <string name="post_operation_pending" msgid="1312168212880219407">"Надсилання…"</string>
+ <string name="download_photo_retry" msgid="1894223549069749239">"Це зображення завелике для завантаження. Повторити спробу, зменшивши роздільну здатність?"</string>
+ <string name="download_photo_error" msgid="7511376299526085797">"Не вдалося зберегти фотографію на пристрій."</string>
+ <string name="yes" msgid="7474216525286833848">"Так"</string>
+ <string name="no" msgid="427548507197604096">"Ні"</string>
+ <string name="camera_photo_error" msgid="653424229752191252">"Неможливо знайти фотографію."</string>
+ <string name="photo_view_count" msgid="1568865177363028519">"<xliff:g id="CURRENT_POS">%d</xliff:g> з <xliff:g id="COUNT">%d</xliff:g>"</string>
+ <string name="truncated_info" msgid="4901078975545890098">"..."</string>
+ <string name="truncated_info_see_more" msgid="2068973974507128729">" Докладніше »"</string>
+ <string name="posted_just_now" msgid="7872790861965011674">"Щойно"</string>
+ <plurals name="num_minutes_ago">
+ <item quantity="one" msgid="4750191148321568233">"<xliff:g id="COUNT">%d</xliff:g> хв."</item>
+ <item quantity="other" msgid="4976118461634588647">"<xliff:g id="COUNT">%d</xliff:g> хв."</item>
+ </plurals>
+ <plurals name="num_hours_ago">
+ <item quantity="one" msgid="2178354472031148118">"<xliff:g id="COUNT">%d</xliff:g> год."</item>
+ <item quantity="other" msgid="1470820825143524326">"<xliff:g id="COUNT">%d</xliff:g> год."</item>
+ </plurals>
+ <plurals name="num_days_ago">
+ <item quantity="one" msgid="5538890823169916595">"<xliff:g id="COUNT">%d</xliff:g> дн."</item>
+ <item quantity="other" msgid="2756574969735638578">"<xliff:g id="COUNT">%d</xliff:g> дн."</item>
+ </plurals>
+ <string name="dialog_inserting_camera_photo" msgid="2711654208680211224">"Вставлення фотографії…"</string>
<!-- no translation found for cant_move_or_change_labels (7997792014816166601) -->
<skip />
</resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 4c60a7c..30467e4 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -302,46 +302,35 @@
<string name="wait_for_manual_sync_body" msgid="2003192935254244968">"Tài khoản này không được thiết lập để tự động đồng bộ hóa."\n"Chạm vào "<b>"Đồng bộ hóa ngay bây giờ"</b>" để đồng bộ hóa thư một lần hoặc "<b>"Thay đổi cài đặt đồng bộ hóa"</b>" để thiết lập tài khoản này tự động đồng bộ hóa thư."</string>
<string name="manual_sync" msgid="6743983544685622800">"Đồng bộ hóa ngay bây giờ"</string>
<string name="change_sync_settings" msgid="5514293926214426577">"Thay đổi cài đặt đồng bộ hóa"</string>
- <!-- no translation found for photo_view_default_title (305616940993932174) -->
- <skip />
- <!-- no translation found for photo_view_load_error (1802859675974843136) -->
- <skip />
- <!-- no translation found for photo_view_video_not_ready (8488887700991406631) -->
- <skip />
- <!-- no translation found for photo_view_placeholder_image (465734985000555852) -->
- <skip />
- <!-- no translation found for photo_network_error (6545183306958652345) -->
- <skip />
- <!-- no translation found for loading_photo (6784297653634402137) -->
- <skip />
- <!-- no translation found for post_operation_pending (1312168212880219407) -->
- <skip />
- <!-- no translation found for download_photo_retry (1894223549069749239) -->
- <skip />
- <!-- no translation found for download_photo_error (7511376299526085797) -->
- <skip />
- <!-- no translation found for yes (7474216525286833848) -->
- <skip />
- <!-- no translation found for no (427548507197604096) -->
- <skip />
- <!-- no translation found for camera_photo_error (653424229752191252) -->
- <skip />
- <!-- no translation found for photo_view_count (1568865177363028519) -->
- <skip />
- <!-- no translation found for truncated_info (4901078975545890098) -->
- <skip />
- <!-- no translation found for truncated_info_see_more (2068973974507128729) -->
- <skip />
- <!-- no translation found for posted_just_now (7872790861965011674) -->
- <skip />
- <!-- no translation found for num_minutes_ago:one (4750191148321568233) -->
- <!-- no translation found for num_minutes_ago:other (4976118461634588647) -->
- <!-- no translation found for num_hours_ago:one (2178354472031148118) -->
- <!-- no translation found for num_hours_ago:other (1470820825143524326) -->
- <!-- no translation found for num_days_ago:one (5538890823169916595) -->
- <!-- no translation found for num_days_ago:other (2756574969735638578) -->
- <!-- no translation found for dialog_inserting_camera_photo (2711654208680211224) -->
- <skip />
+ <string name="photo_view_default_title" msgid="305616940993932174">"Ảnh từ thư"</string>
+ <string name="photo_view_load_error" msgid="1802859675974843136">"Không thể tải ảnh."</string>
+ <string name="photo_view_video_not_ready" msgid="8488887700991406631">"Hiện tại, không có video nào. Vui lòng làm mới."</string>
+ <string name="photo_view_placeholder_image" msgid="465734985000555852">"Hiện tại, không có mục nào. Vui lòng làm mới."</string>
+ <string name="photo_network_error" msgid="6545183306958652345">"Ảnh không sẵn có ngay lúc này."</string>
+ <string name="loading_photo" msgid="6784297653634402137">"Đang tải…"</string>
+ <string name="post_operation_pending" msgid="1312168212880219407">"Đang gửi…"</string>
+ <string name="download_photo_retry" msgid="1894223549069749239">"Hình ảnh này quá lớn để tải xuống, bạn có muốn thử lại ở độ phân giải thấp hơn không?"</string>
+ <string name="download_photo_error" msgid="7511376299526085797">"Không thể lưu ảnh vào thiết bị."</string>
+ <string name="yes" msgid="7474216525286833848">"Có"</string>
+ <string name="no" msgid="427548507197604096">"Không"</string>
+ <string name="camera_photo_error" msgid="653424229752191252">"Không thể tìm thấy ảnh."</string>
+ <string name="photo_view_count" msgid="1568865177363028519">"<xliff:g id="CURRENT_POS">%d</xliff:g> trong số <xliff:g id="COUNT">%d</xliff:g>"</string>
+ <string name="truncated_info" msgid="4901078975545890098">"..."</string>
+ <string name="truncated_info_see_more" msgid="2068973974507128729">" Xem thêm »"</string>
+ <string name="posted_just_now" msgid="7872790861965011674">"Vừa mới"</string>
+ <plurals name="num_minutes_ago">
+ <item quantity="one" msgid="4750191148321568233">"<xliff:g id="COUNT">%d</xliff:g> phút"</item>
+ <item quantity="other" msgid="4976118461634588647">"<xliff:g id="COUNT">%d</xliff:g> phút"</item>
+ </plurals>
+ <plurals name="num_hours_ago">
+ <item quantity="one" msgid="2178354472031148118">"<xliff:g id="COUNT">%d</xliff:g> giờ"</item>
+ <item quantity="other" msgid="1470820825143524326">"<xliff:g id="COUNT">%d</xliff:g> giờ"</item>
+ </plurals>
+ <plurals name="num_days_ago">
+ <item quantity="one" msgid="5538890823169916595">"<xliff:g id="COUNT">%d</xliff:g> ngày"</item>
+ <item quantity="other" msgid="2756574969735638578">"<xliff:g id="COUNT">%d</xliff:g> ngày"</item>
+ </plurals>
+ <string name="dialog_inserting_camera_photo" msgid="2711654208680211224">"Đang chèn ảnh…"</string>
<!-- no translation found for cant_move_or_change_labels (7997792014816166601) -->
<skip />
</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index d39d508..f16497b 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -52,7 +52,7 @@
<string name="send" msgid="8242003661397555986">"傳送"</string>
<string name="mark_read" msgid="8438349154394313195">"標示為已讀取"</string>
<string name="mark_unread" msgid="6231373939351125713">"標示為未讀取"</string>
- <string name="mute" msgid="1995954983688603977">"忽略"</string>
+ <string name="mute" msgid="1995954983688603977">"略過"</string>
<string name="add_star" msgid="2866003744391266498">"加上星號"</string>
<string name="remove_star" msgid="4372327933122106128">"移除星號"</string>
<string name="archive" msgid="847250094775910499">"封存"</string>
@@ -175,8 +175,8 @@
<item quantity="other" msgid="850868849811019745">"正在等待系統開始處理 <xliff:g id="COUNT">%1$d</xliff:g> 個會話群組。"</item>
</plurals>
<plurals name="conversation_muted">
- <item quantity="one" msgid="3197365771487542615">"已忽略 <b><xliff:g id="COUNT">%1$d</xliff:g></b> 個會話群組。"</item>
- <item quantity="other" msgid="1941193356069303587">"已忽略 <b><xliff:g id="COUNT">%1$d</xliff:g></b> 個會話群組。"</item>
+ <item quantity="one" msgid="3197365771487542615">"已略過 <b><xliff:g id="COUNT">%1$d</xliff:g></b> 個會話群組。"</item>
+ <item quantity="other" msgid="1941193356069303587">"已略過 <b><xliff:g id="COUNT">%1$d</xliff:g></b> 個會話群組。"</item>
</plurals>
<plurals name="conversation_spammed">
<item quantity="one" msgid="3060864972122279220">"已將 <b><xliff:g id="COUNT">%1$d</xliff:g></b> 個會話群組回報為垃圾郵件。"</item>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index de4db27..a3a3b1a 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -302,46 +302,35 @@
<string name="wait_for_manual_sync_body" msgid="2003192935254244968">"Le akhawunti ayisethiwe kufika ekuvumelaniseni kokuzenzakalela."\n"Thinta u-"<b>"Vumelanisa manje"</b>" ukuze uvumelanise imeyila kanye, noma "<b>"shintsha izilungiselelo zokuvumelanisa"</b>" ukuze usethe le akhawunti ukuze ivumelanise imeyili ngokuzenzakalela."</string>
<string name="manual_sync" msgid="6743983544685622800">"Vumelanisa manje"</string>
<string name="change_sync_settings" msgid="5514293926214426577">"Shintsha izilungiselelo zokuvumelanisa"</string>
- <!-- no translation found for photo_view_default_title (305616940993932174) -->
- <skip />
- <!-- no translation found for photo_view_load_error (1802859675974843136) -->
- <skip />
- <!-- no translation found for photo_view_video_not_ready (8488887700991406631) -->
- <skip />
- <!-- no translation found for photo_view_placeholder_image (465734985000555852) -->
- <skip />
- <!-- no translation found for photo_network_error (6545183306958652345) -->
- <skip />
- <!-- no translation found for loading_photo (6784297653634402137) -->
- <skip />
- <!-- no translation found for post_operation_pending (1312168212880219407) -->
- <skip />
- <!-- no translation found for download_photo_retry (1894223549069749239) -->
- <skip />
- <!-- no translation found for download_photo_error (7511376299526085797) -->
- <skip />
- <!-- no translation found for yes (7474216525286833848) -->
- <skip />
- <!-- no translation found for no (427548507197604096) -->
- <skip />
- <!-- no translation found for camera_photo_error (653424229752191252) -->
- <skip />
- <!-- no translation found for photo_view_count (1568865177363028519) -->
- <skip />
- <!-- no translation found for truncated_info (4901078975545890098) -->
- <skip />
- <!-- no translation found for truncated_info_see_more (2068973974507128729) -->
- <skip />
- <!-- no translation found for posted_just_now (7872790861965011674) -->
- <skip />
- <!-- no translation found for num_minutes_ago:one (4750191148321568233) -->
- <!-- no translation found for num_minutes_ago:other (4976118461634588647) -->
- <!-- no translation found for num_hours_ago:one (2178354472031148118) -->
- <!-- no translation found for num_hours_ago:other (1470820825143524326) -->
- <!-- no translation found for num_days_ago:one (5538890823169916595) -->
- <!-- no translation found for num_days_ago:other (2756574969735638578) -->
- <!-- no translation found for dialog_inserting_camera_photo (2711654208680211224) -->
- <skip />
+ <string name="photo_view_default_title" msgid="305616940993932174">"Izithombe ezivela emlayezweni"</string>
+ <string name="photo_view_load_error" msgid="1802859675974843136">"Isithombe asikwazanga ukulayishwa."</string>
+ <string name="photo_view_video_not_ready" msgid="8488887700991406631">"Ividiyo ayitholakali ngalesi sikhathi. Sicela uqale kabusha."</string>
+ <string name="photo_view_placeholder_image" msgid="465734985000555852">"Into ayitholakali ngalesi sikhathi. Sicela uqale kabusha."</string>
+ <string name="photo_network_error" msgid="6545183306958652345">"Isithombe asitholakali okwamanje."</string>
+ <string name="loading_photo" msgid="6784297653634402137">"Iyalayisha…"</string>
+ <string name="post_operation_pending" msgid="1312168212880219407">"Iyathumela..."</string>
+ <string name="download_photo_retry" msgid="1894223549069749239">"Lesi sithombe sikhulu kakhulu ukuthi singalandwa, ingabe ungathanda ukuzama kabusha ngokulungiswa okuncane?"</string>
+ <string name="download_photo_error" msgid="7511376299526085797">"Isithombe asikwazanga ukulondolozwa kudivayisi."</string>
+ <string name="yes" msgid="7474216525286833848">"Yebo"</string>
+ <string name="no" msgid="427548507197604096">"Cha"</string>
+ <string name="camera_photo_error" msgid="653424229752191252">"Ayikwazi ukuthola isithombe."</string>
+ <string name="photo_view_count" msgid="1568865177363028519">"<xliff:g id="CURRENT_POS">%d</xliff:g> kwe-<xliff:g id="COUNT">%d</xliff:g>"</string>
+ <string name="truncated_info" msgid="4901078975545890098">"..."</string>
+ <string name="truncated_info_see_more" msgid="2068973974507128729">" Bona okungaphezulu »"</string>
+ <string name="posted_just_now" msgid="7872790861965011674">"Khona manje"</string>
+ <plurals name="num_minutes_ago">
+ <item quantity="one" msgid="4750191148321568233">"Iminithi elingu-<xliff:g id="COUNT">%d</xliff:g>"</item>
+ <item quantity="other" msgid="4976118461634588647">"Amaminithi angu-<xliff:g id="COUNT">%d</xliff:g>"</item>
+ </plurals>
+ <plurals name="num_hours_ago">
+ <item quantity="one" msgid="2178354472031148118">"Ihora elingu-<xliff:g id="COUNT">%d</xliff:g>"</item>
+ <item quantity="other" msgid="1470820825143524326">"Amahora angu-<xliff:g id="COUNT">%d</xliff:g>"</item>
+ </plurals>
+ <plurals name="num_days_ago">
+ <item quantity="one" msgid="5538890823169916595">"Usuku olungu-<xliff:g id="COUNT">%d</xliff:g>"</item>
+ <item quantity="other" msgid="2756574969735638578">"Izinsuku ezingu-<xliff:g id="COUNT">%d</xliff:g>"</item>
+ </plurals>
+ <string name="dialog_inserting_camera_photo" msgid="2711654208680211224">"Ifaka isithombe…"</string>
<!-- no translation found for cant_move_or_change_labels (7997792014816166601) -->
<skip />
</resources>
diff --git a/src/com/android/mail/browse/SelectedConversationsActionMenu.java b/src/com/android/mail/browse/SelectedConversationsActionMenu.java
index 13fd7cb..cfcbb1a 100644
--- a/src/com/android/mail/browse/SelectedConversationsActionMenu.java
+++ b/src/com/android/mail/browse/SelectedConversationsActionMenu.java
@@ -36,10 +36,10 @@
import com.android.mail.providers.UIProvider;
import com.android.mail.providers.UIProvider.ConversationColumns;
import com.android.mail.providers.UIProvider.FolderCapabilities;
-import com.android.mail.ui.AbstractActivityController;
-import com.android.mail.ui.AnimatedAdapter;
+import com.android.mail.ui.ControllableActivity;
import com.android.mail.ui.ConversationSelectionSet;
import com.android.mail.ui.ConversationSetObserver;
+import com.android.mail.ui.ConversationUpdater;
import com.android.mail.ui.DestructiveAction;
import com.android.mail.ui.FoldersSelectionDialog;
import com.android.mail.ui.RestrictedActivity;
@@ -74,61 +74,37 @@
private final Context mContext;
@VisibleForTesting
- ActionMode mActionMode;
+ private ActionMode mActionMode;
private boolean mActivated = false;
private Menu mMenu;
- private AnimatedAdapter mListAdapter;
- // TODO(viki): Bad idea. This is a relic of the previous method of having a DestructiveAction.
- // A better implementation is not to have clients know about destructive actions but rather
- // request them from the controller directly. Then, you wouldn't need to know when to commit
- // them.
- private AbstractActivityController mController;
+ /** Object that can update conversation state on our behalf. */
+ private final ConversationUpdater mUpdater;
- private Account mAccount;
+ private final Account mAccount;
- protected int mCheckedItem = 0;
+ private final Folder mFolder;
- private Folder mFolder;
-
- private final ConversationCursor mConversationCursor;
-
- private SwipeableListView mListView;
+ private final SwipeableListView mListView;
public SelectedConversationsActionMenu(RestrictedActivity activity,
- ConversationSelectionSet selectionSet, AnimatedAdapter adapter,
- AbstractActivityController controller, Account account,
+ ConversationSelectionSet selectionSet, Account account,
Folder folder, SwipeableListView list) {
mActivity = activity;
mSelectionSet = selectionSet;
- mListAdapter = adapter;
- mConversationCursor = (ConversationCursor)adapter.getCursor();
- mController = controller;
mAccount = account;
mFolder = folder;
mListView = list;
mContext = mActivity.getActivityContext();
- }
-
- /**
- * Registers a destructive action with the controller and returns it.
- * @param type the resource id of the menu item that corresponds to this action: R.id.delete
- * for example.
- * @return the {@link DestructiveAction} associated with this action.
- */
- // TODO(viki): This is a placeholder during the refactoring. Ideally the controller hands
- // the ID of the action to clients.
- private final DestructiveAction getAction(int type) {
- return mController.getBatchDestruction(type);
+ mUpdater = ((ControllableActivity) mActivity).getConversationUpdater();
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
boolean handled = true;
- Collection<Conversation> conversations = mSelectionSet.values();
switch (item.getItemId()) {
case R.id.delete:
performDestructiveAction(R.id.delete);
@@ -137,10 +113,10 @@
performDestructiveAction(R.id.archive);
break;
case R.id.mute:
- mListAdapter.delete(conversations, getAction(R.id.mute));
+ mUpdater.delete(mSelectionSet.values(), mUpdater.getBatchAction(R.id.mute));
break;
case R.id.report_spam:
- mListAdapter.delete(conversations, getAction(R.id.report_spam));
+ mUpdater.delete(mSelectionSet.values(), mUpdater.getBatchAction(R.id.report_spam));
break;
case R.id.read:
markConversationsRead(true);
@@ -183,7 +159,7 @@
}
}
if (!cantMove) {
- new FoldersSelectionDialog(mContext, acct, mController,
+ new FoldersSelectionDialog(mContext, acct, mUpdater,
mSelectionSet.values(), true).show();
}
break;
@@ -215,7 +191,7 @@
* Update the underlying list adapter and redraw the menus if necessary.
*/
private void updateSelection() {
- mListAdapter.notifyDataSetChanged();
+ mUpdater.refreshConversationList();
if (mActionMode != null) {
// Calling mActivity.invalidateOptionsMenu doesn't have the correct behavior, since
// the action mode is not refreshed when activity's options menu is invalidated.
@@ -226,7 +202,7 @@
}
private void performDestructiveAction(final int id) {
- final DestructiveAction action = getAction(id);
+ final DestructiveAction action = mUpdater.getBatchAction(id);
final Settings settings = mActivity.getSettings();
final Collection<Conversation> conversations = mSelectionSet.values();
final boolean showDialog = (settings != null
@@ -247,7 +223,6 @@
}
}
-
private void destroy(int id, final Collection<Conversation> conversations,
final DestructiveAction listener) {
if (id == R.id.archive) {
@@ -257,35 +232,55 @@
}
mListView.archiveItems(views, listener);
} else {
- mListAdapter.delete(conversations, listener);
+ mUpdater.delete(conversations, listener);
}
}
+ /**
+ * Marks the read state of currently selected conversations (<b>and</b> the backing storage)
+ * to the value provided here.
+ * @param read is true if the conversations are to be marked as read, false if they are to be
+ * marked unread.
+ */
private void markConversationsRead(boolean read) {
- final Collection<Conversation> conversations = mSelectionSet.values();
- mConversationCursor.updateBoolean(mContext, conversations, ConversationColumns.READ, read);
- updateSelection();
- }
-
- private void markConversationsImportant(boolean important) {
- final Collection<Conversation> conversations = mSelectionSet.values();
- final int priority = important ? UIProvider.ConversationPriority.HIGH
- : UIProvider.ConversationPriority.LOW;
- mConversationCursor.updateInt(mContext, conversations, ConversationColumns.PRIORITY,
- priority);
+ final Collection<Conversation> target = mSelectionSet.values();
+ mUpdater.updateConversation(target, ConversationColumns.READ, read);
+ // Update the conversations in the selection too.
+ for (final Conversation c : target) {
+ c.read = read;
+ }
updateSelection();
}
/**
- * Mark the selected conversations with the star setting provided here.
+ * Marks the important state of currently selected conversations (<b>and</b> the backing
+ * storage) to the value provided here.
+ * @param important is true if the conversations are to be marked as important, false if they
+ * are to be marked not important.
+ */
+ private void markConversationsImportant(boolean important) {
+ final Collection<Conversation> target = mSelectionSet.values();
+ final int priority = important ? UIProvider.ConversationPriority.HIGH
+ : UIProvider.ConversationPriority.LOW;
+ mUpdater.updateConversation(target, ConversationColumns.PRIORITY, priority);
+ // Update the conversations in the selection too.
+ for (final Conversation c : target) {
+ c.priority = priority;
+ }
+ updateSelection();
+ }
+
+ /**
+ * Marks the selected conversations with the star setting provided here.
* @param star true if you want all the conversations to have stars, false if you want to remove
* stars from all conversations
*/
private void starConversations(boolean star) {
- final Collection<Conversation> conversations = mSelectionSet.values();
- if (conversations.size() > 0) {
- mConversationCursor.updateBoolean(mContext, conversations, ConversationColumns.STARRED,
- star);
+ final Collection<Conversation> target = mSelectionSet.values();
+ mUpdater.updateConversation(target, ConversationColumns.STARRED, star);
+ // Update the conversations in the selection too.
+ for (final Conversation c : target) {
+ c.starred = star;
}
updateSelection();
}
@@ -431,7 +426,7 @@
deactivate();
mSelectionSet.removeObserver(this);
clearSelection();
- mListAdapter.notifyDataSetChanged();
+ mUpdater.refreshConversationList();
}
/**
diff --git a/src/com/android/mail/compose/ComposeActivity.java b/src/com/android/mail/compose/ComposeActivity.java
index 6324686..0dca32a 100644
--- a/src/com/android/mail/compose/ComposeActivity.java
+++ b/src/com/android/mail/compose/ComposeActivity.java
@@ -527,7 +527,7 @@
message.bodyText = mBodyView.getText().toString();
message.embedsExternalResources = false;
message.refMessageId = mRefMessage != null ? mRefMessage.uri.toString() : null;
- message.draftType = mode;
+ message.draftType = getDraftType(mode);
message.appendRefMessageContent = mQuotedTextView.getQuotedTextIfIncluded() != null;
ArrayList<Attachment> attachments = mAttachmentsView.getAttachments();
message.hasAttachments = attachments != null && attachments.size() > 0;
@@ -803,12 +803,28 @@
addAttachmentAndUpdateView(a);
}
}
-
+ int quotedTextIndex = message.appendRefMessageContent ?
+ message.quotedTextOffset : -1;
// Set the body
+ CharSequence quotedText = null;
if (!TextUtils.isEmpty(message.bodyHtml)) {
- mBodyView.setText(Html.fromHtml(message.bodyHtml));
+ CharSequence htmlText = Html.fromHtml(message.bodyHtml);
+ if (quotedTextIndex > -1) {
+ htmlText = htmlText.subSequence(0, quotedTextIndex);
+ quotedText = message.bodyHtml.subSequence(quotedTextIndex,
+ message.bodyHtml.length());
+ }
+ mBodyView.setText(htmlText);
} else {
- mBodyView.setText(message.bodyText);
+ CharSequence bodyText = quotedTextIndex > -1 ?
+ message.bodyText.substring(0, quotedTextIndex) : message.bodyText;
+ if (quotedTextIndex > -1) {
+ quotedText = message.bodyText.substring(quotedTextIndex);
+ }
+ mBodyView.setText(bodyText);
+ }
+ if (quotedTextIndex > -1 && quotedText != null) {
+ mQuotedTextView.setQuotedTextFromDraft(quotedText, mForward);
}
}
@@ -886,15 +902,23 @@
@VisibleForTesting
protected String decodeEmailInUri(String s) throws UnsupportedEncodingException {
- // TODO: handle the case where there are spaces in the display name as well as the email
- // such as "Guy with spaces <guy+with+spaces@gmail.com>" as they it could be encoded
- // ambiguously.
-
+ // TODO: handle the case where there are spaces in the display name as
+ // well as the email such as "Guy with spaces <guy+with+spaces@gmail.com>"
+ // as they could be encoded ambiguously.
// Since URLDecode.decode changes + into ' ', and + is a valid
// email character, we need to find/ replace these ourselves before
// decoding.
String replacePlus = s.replace("+", "%2B");
- return URLDecoder.decode(replacePlus, UTF8_ENCODING_NAME);
+ try {
+ return URLDecoder.decode(replacePlus, UTF8_ENCODING_NAME);
+ } catch (IllegalArgumentException e) {
+ if (LogUtils.isLoggable(LOG_TAG, LogUtils.VERBOSE)) {
+ LogUtils.e(LOG_TAG, "%s while decoding '%s'", e.getMessage(), s);
+ } else {
+ LogUtils.e(LOG_TAG, e, "Exception while decoding mailto address");
+ }
+ return null;
+ }
}
/**
@@ -915,7 +939,9 @@
} else {
to = decodeEmailInUri(mailToString.substring(length, index));
}
- addToAddresses(Arrays.asList(TextUtils.split(to, ",")));
+ if (!TextUtils.isEmpty(to)) {
+ addToAddresses(Arrays.asList(TextUtils.split(to, ",")));
+ }
} catch (UnsupportedEncodingException e) {
if (LogUtils.isLoggable(LOG_TAG, LogUtils.VERBOSE)) {
LogUtils.e(LOG_TAG, "%s while decoding '%s'", e.getMessage(), mailToString);
@@ -1351,7 +1377,7 @@
showCcBccViews();
break;
case R.id.save:
- doSave(true, false);
+ doSave(true);
break;
case R.id.send:
doSend();
@@ -1383,12 +1409,16 @@
sendOrSaveWithSanityChecks(false, true, false);
}
- private void doSave(boolean showToast, boolean resetIME) {
+ private void doSave(boolean showToast) {
+ // Clear the IME composing suggestions from the body and subject before saving.
+ clearImeText(mBodyView);
+ clearImeText(mSubject);
sendOrSaveWithSanityChecks(true, showToast, false);
- if (resetIME) {
- // Clear the IME composing suggestions from the body.
- BaseInputConnection.removeComposingSpans(mBodyView.getEditableText());
- }
+ }
+
+ private void clearImeText(TextView v) {
+ v.clearComposingText();
+ BaseInputConnection.removeComposingSpans(v.getEditableText());
}
/*package*/ interface SendOrSaveCallback {
@@ -1826,21 +1856,7 @@
fullBody.append(text);
}
}
- int draftType = -1;
- switch (composeMode) {
- case ComposeActivity.COMPOSE:
- draftType = DraftType.COMPOSE;
- break;
- case ComposeActivity.REPLY:
- draftType = DraftType.REPLY;
- break;
- case ComposeActivity.REPLY_ALL:
- draftType = DraftType.REPLY_ALL;
- break;
- case ComposeActivity.FORWARD:
- draftType = DraftType.FORWARD;
- break;
- }
+ int draftType = getDraftType(composeMode);
MessageModification.putDraftType(values, draftType);
if (refMessage != null) {
if (!TextUtils.isEmpty(refMessage.bodyHtml)) {
@@ -1871,6 +1887,25 @@
return sendOrSaveMessage.requestId();
}
+ private static int getDraftType(int mode) {
+ int draftType = -1;
+ switch (mode) {
+ case ComposeActivity.COMPOSE:
+ draftType = DraftType.COMPOSE;
+ break;
+ case ComposeActivity.REPLY:
+ draftType = DraftType.REPLY;
+ break;
+ case ComposeActivity.REPLY_ALL:
+ draftType = DraftType.REPLY_ALL;
+ break;
+ case ComposeActivity.FORWARD:
+ draftType = DraftType.FORWARD;
+ break;
+ }
+ return draftType;
+ }
+
private void sendOrSave(Spanned body, boolean save, boolean showToast,
boolean orientationChanged) {
// Check if user is a monkey. Monkeys can compose and hit send
@@ -2267,7 +2302,7 @@
}
if (shouldSave()) {
- doSave(!mAddingAttachment /* show toast */, true /* reset IME */);
+ doSave(!mAddingAttachment /* show toast */);
}
}
diff --git a/src/com/android/mail/compose/QuotedTextView.java b/src/com/android/mail/compose/QuotedTextView.java
index 5337ca4..69c8296 100644
--- a/src/com/android/mail/compose/QuotedTextView.java
+++ b/src/com/android/mail/compose/QuotedTextView.java
@@ -294,6 +294,15 @@
allowRespondInline(true);
}
+ public void setQuotedTextFromDraft(CharSequence htmlText, boolean forward) {
+ setVisibility(View.VISIBLE);
+ setQuotedText(htmlText);
+ allowQuotedText(!forward);
+ // If there is quoted text, we always allow respond inline, since this
+ // may be a forward.
+ allowRespondInline(true);
+ }
+
/**
* Set quoted text. Some use cases may not want to display the check box (i.e. forwarding) so
* allow control of that.
@@ -315,11 +324,11 @@
}
public static boolean containsQuotedText(String text) {
- int pos = text.indexOf(QuotedTextView.HEADER_SEPARATOR);
+ int pos = text.indexOf(QuotedTextView.QUOTE_BEGIN);
return pos >= 0;
}
public static int getQuotedTextOffset(String text) {
- return text.indexOf(QuotedTextView.HEADER_SEPARATOR) + HEADER_SEPARATOR_LENGTH;
+ return text.indexOf(QuotedTextView.QUOTE_BEGIN);
}
}
diff --git a/src/com/android/mail/providers/UIProvider.java b/src/com/android/mail/providers/UIProvider.java
index d5ef631..c9b1c10 100644
--- a/src/com/android/mail/providers/UIProvider.java
+++ b/src/com/android/mail/providers/UIProvider.java
@@ -740,6 +740,9 @@
public static final int CALENDAR_INVITE = 1<<4;
}
+ /**
+ * Names of columns representing fields in a Conversation.
+ */
public static final class ConversationColumns {
public static final String URI = "conversationUri";
/**
diff --git a/src/com/android/mail/ui/AbstractActivityController.java b/src/com/android/mail/ui/AbstractActivityController.java
index 6de5ce3..32a27a3 100644
--- a/src/com/android/mail/ui/AbstractActivityController.java
+++ b/src/com/android/mail/ui/AbstractActivityController.java
@@ -53,7 +53,6 @@
import com.android.mail.ConversationListContext;
import com.android.mail.R;
import com.android.mail.browse.ConversationCursor;
-import com.android.mail.browse.ConversationCursor.ConversationListener;
import com.android.mail.browse.ConversationPagerController;
import com.android.mail.browse.SelectedConversationsActionMenu;
import com.android.mail.compose.ComposeActivity;
@@ -96,8 +95,7 @@
* In the Gmail codebase, this was called BaseActivityController
* </p>
*/
-public abstract class AbstractActivityController implements ActivityController,
- ConversationListener, OnScrollListener {
+public abstract class AbstractActivityController implements ActivityController {
// Keys for serialization of various information in Bundles.
/** Tag for {@link #mAccount} */
private static final String SAVED_ACCOUNT = "saved-account";
@@ -617,21 +615,24 @@
break;
}
case R.id.mark_important:
- updateCurrentConversation(ConversationColumns.PRIORITY,
- UIProvider.ConversationPriority.HIGH);
+ updateConversation(Conversation.listOf(mCurrentConversation),
+ ConversationColumns.PRIORITY, UIProvider.ConversationPriority.HIGH);
break;
case R.id.mark_not_important:
- updateCurrentConversation(ConversationColumns.PRIORITY,
- UIProvider.ConversationPriority.LOW);
+ updateConversation(Conversation.listOf(mCurrentConversation),
+ ConversationColumns.PRIORITY, UIProvider.ConversationPriority.LOW);
break;
case R.id.mute:
- requestDelete(target, getAction(R.id.mute, target));
+ delete(target, getAction(R.id.mute, target));
break;
case R.id.report_spam:
- requestDelete(target, getAction(R.id.report_spam, target));
+ delete(target, getAction(R.id.report_spam, target));
break;
case R.id.inside_conversation_unread:
- updateCurrentConversation(ConversationColumns.READ, false);
+ // TODO(viki): This is strange, and potentially incorrect. READ is an int column
+ // in the provider.
+ updateConversation(Conversation.listOf(mCurrentConversation),
+ ConversationColumns.READ, false);
mViewMode.enterConversationListMode();
break;
case android.R.id.home:
@@ -673,31 +674,23 @@
return handled;
}
- /**
- * Update the specified column name in conversation for a boolean value.
- * @param columnName
- * @param value
- */
- protected void updateCurrentConversation(String columnName, boolean value) {
- mConversationListCursor.updateBoolean(mContext, Conversation.listOf(mCurrentConversation),
- columnName, value);
+ @Override
+ public void updateConversation(Collection <Conversation> target, String columnName,
+ boolean value) {
+ mConversationListCursor.updateBoolean(mContext, target, columnName, value);
refreshConversationList();
}
- /**
- * Update the specified column name in conversation for an integer value.
- * @param columnName
- * @param value
- */
- protected void updateCurrentConversation(String columnName, int value) {
- mConversationListCursor.updateInt(mContext, Conversation.listOf(mCurrentConversation),
- columnName, value);
+ @Override
+ public void updateConversation(Collection <Conversation> target, String columnName, int value) {
+ mConversationListCursor.updateInt(mContext, target, columnName, value);
refreshConversationList();
}
- protected void updateCurrentConversation(String columnName, String value) {
- mConversationListCursor.updateString(mContext, Conversation.listOf(mCurrentConversation),
- columnName, value);
+ @Override
+ public void updateConversation(Collection <Conversation> target, String columnName,
+ String value) {
+ mConversationListCursor.updateString(mContext, target, columnName, value);
refreshConversationList();
}
@@ -725,7 +718,7 @@
final AlertDialog.OnClickListener onClick = new AlertDialog.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
- requestDelete(target, action);
+ delete(target, action);
}
};
final CharSequence message = Utils.formatPlural(mContext, confirmResource,
@@ -735,16 +728,12 @@
.setNegativeButton(R.string.cancel, null)
.create().show();
} else {
- requestDelete(target, action);
+ delete(target, action);
}
}
- /**
- * Requests the removal of the current conversation with the specified destructive action.
- * @param action
- */
- protected void requestDelete(final Collection<Conversation> target,
- final DestructiveAction action) {
+ @Override
+ public void delete(final Collection<Conversation> target, final DestructiveAction action) {
// The conversation list handles deletion if it exists.
final ConversationListFragment convList = getConversationListFragment();
if (convList != null) {
@@ -770,7 +759,7 @@
* @param target
* @param action
*/
- protected void requestUpdate(final Collection<Conversation> target,
+ private void requestUpdate(final Collection<Conversation> target,
final DestructiveAction action) {
action.performAction();
refreshConversationList();
@@ -1426,7 +1415,7 @@
* clients should only require {@link DestructiveAction}s, not specific implementations of the.
* Only the controllers should know what kind of destructive actions are being created.
*/
- protected class ConversationAction implements DestructiveAction {
+ private class ConversationAction implements DestructiveAction {
/**
* The action to be performed. This is specified as the resource ID of the menu item
* corresponding to this action: R.id.delete, R.id.report_spam, etc.
@@ -1547,7 +1536,7 @@
* @param target the conversations to act upon.
* @return a {@link DestructiveAction} that performs the specified action.
*/
- protected final DestructiveAction getAction(int action, Collection<Conversation> target) {
+ private final DestructiveAction getAction(int action, Collection<Conversation> target) {
final DestructiveAction da = new ConversationAction(action, target, false);
registerDestructiveAction(da);
return da;
@@ -1556,7 +1545,7 @@
// Called from the FolderSelectionDialog after a user is done selecting folders to assign the
// conversations to.
@Override
- public final void onFolderChangesCommit(
+ public final void assignFolder(
Collection<Folder> folders, Collection<Conversation> target, boolean batch) {
final boolean isDestructive = !Folder.containerIncludes(folders, mFolder);
LogUtils.d(LOG_TAG, "onFolderChangesCommit: isDestructive = %b", isDestructive);
@@ -1570,7 +1559,7 @@
// Update the UI elements depending no their visibility and availability
// TODO(viki): Consolidate this into a single method requestDelete.
if (isDestructive) {
- requestDelete(target, folderChange);
+ delete(target, folderChange);
} else {
requestUpdate(target, folderChange);
}
@@ -1688,9 +1677,8 @@
if (convList == null) {
return;
}
- mCabActionMenu = new SelectedConversationsActionMenu(mActivity, set,
- convList.getAnimatedAdapter(), this,
- mAccount, mFolder, (SwipeableListView) convList.getListView());
+ mCabActionMenu = new SelectedConversationsActionMenu(mActivity, set, mAccount, mFolder,
+ (SwipeableListView) convList.getListView());
enableCabMode();
}
@@ -1772,7 +1760,7 @@
final Collection<Folder> dropTarget = Folder.listOf(folder);
// Drag and drop is destructive: we remove conversations from the current folder.
final DestructiveAction action = getFolderChange(conversations, dropTarget, true, true);
- requestDelete(conversations, action);
+ delete(conversations, action);
}
@Override
@@ -1912,12 +1900,8 @@
return;
}
- /**
- * Get a destructive action for selected conversations.
- * @param action
- * @return
- */
- public final DestructiveAction getBatchDestruction(int action) {
+ @Override
+ public final DestructiveAction getBatchAction(int action) {
final DestructiveAction da = new ConversationAction(action, mSelectedSet.values(), true);
registerDestructiveAction(da);
return da;
@@ -1987,10 +1971,8 @@
return da;
}
- /**
- * Safely refresh the conversation list if it exists.
- */
- protected final void refreshConversationList() {
+ @Override
+ public final void refreshConversationList() {
final ConversationListFragment convList = getConversationListFragment();
if (convList == null) {
return;
diff --git a/src/com/android/mail/ui/ActivityController.java b/src/com/android/mail/ui/ActivityController.java
index 1eef46e..ede3a5e 100644
--- a/src/com/android/mail/ui/ActivityController.java
+++ b/src/com/android/mail/ui/ActivityController.java
@@ -27,13 +27,14 @@
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
+import android.widget.AbsListView.OnScrollListener;
import com.android.mail.ConversationListContext;
+import com.android.mail.browse.ConversationCursor.ConversationListener;
import com.android.mail.providers.Account;
import com.android.mail.providers.Conversation;
import com.android.mail.providers.Folder;
import com.android.mail.providers.Settings;
-import com.android.mail.ui.FoldersSelectionDialog.FolderChangeCommitListener;
import com.android.mail.ui.ViewMode.ModeChangeListener;
/**
@@ -42,10 +43,11 @@
* or respond to user action.
*/
public interface ActivityController extends LayoutListener, SubjectDisplayChanger,
- ModeChangeListener, ConversationListCallbacks, FolderChangeCommitListener,
+ ModeChangeListener, ConversationListCallbacks,
FolderChangeListener, AccountChangeListener, LoaderManager.LoaderCallbacks<Cursor>,
- ConversationSetObserver,
- FolderListFragment.FolderListSelectionListener, HelpCallback, UndoBarView.UndoListener {
+ ConversationSetObserver, ConversationListener, OnScrollListener,
+ FolderListFragment.FolderListSelectionListener, HelpCallback, UndoBarView.UndoListener,
+ ConversationUpdater {
// As far as possible, the methods here that correspond to Activity lifecycle have the same name
// as their counterpart in the Activity lifecycle.
diff --git a/src/com/android/mail/ui/ControllableActivity.java b/src/com/android/mail/ui/ControllableActivity.java
index ce573be..689627b 100644
--- a/src/com/android/mail/ui/ControllableActivity.java
+++ b/src/com/android/mail/ui/ControllableActivity.java
@@ -67,6 +67,11 @@
*/
boolean shouldShowFirstConversation();
+ /**
+ * Get the set of currently selected conversations. This method returns a non-null value.
+ * In case no conversation is currently selected, it returns an empty selection set.
+ * @return
+ */
ConversationSelectionSet getSelectedSet();
/**
@@ -82,4 +87,12 @@
* Get the folder currently being accessed by the activity.
*/
Folder getCurrentFolder();
+
+ /**
+ * Returns an object that can update conversation state. Holding a reference to the
+ * ConversationUpdater is safe since the ConversationUpdater is guaranteed to persist across
+ * changes to the conversation cursor.
+ * @return
+ */
+ ConversationUpdater getConversationUpdater();
}
diff --git a/src/com/android/mail/ui/ConversationUpdater.java b/src/com/android/mail/ui/ConversationUpdater.java
new file mode 100644
index 0000000..45dbf91
--- /dev/null
+++ b/src/com/android/mail/ui/ConversationUpdater.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2012 Google Inc.
+ * Licensed to 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.mail.ui;
+
+import com.android.mail.providers.Conversation;
+import com.android.mail.providers.Folder;
+import com.android.mail.providers.UIProvider;
+
+import java.util.Collection;
+
+/**
+ * Classes that can update conversations implement this interface.
+ */
+public interface ConversationUpdater {
+ /**
+ * Modify the given conversation by changing the column provided here to contain the value
+ * provided. Column names are listed in {@link UIProvider.ConversationColumns}, for example
+ * {@link UIProvider.ConversationColumns#FOLDER_LIST}
+ * @param target
+ * @param columnName
+ * @param value
+ */
+ void updateConversation(Collection <Conversation> target, String columnName, String value);
+
+ /**
+ * Modify the given conversation by changing the column provided here to contain the value
+ * provided. Column names are listed in {@link UIProvider.ConversationColumns}, for example
+ * {@link UIProvider.ConversationColumns#READ}
+ * @param target
+ * @param columnName
+ * @param value
+ */
+ void updateConversation(Collection <Conversation> target, String columnName, int value);
+
+ /**
+ * Modify the given conversation by changing the column provided here to contain the value
+ * provided. Column names are listed in {@link UIProvider.ConversationColumns}, for example
+ * {@link UIProvider.ConversationColumns#HAS_ATTACHMENTS}
+ * @param target
+ * @param columnName
+ * @param value
+ */
+ void updateConversation(Collection <Conversation> target, String columnName, boolean value);
+
+ /**
+ * Requests the removal of the current conversation with the specified destructive action.
+ * @param target the conversations to act upon.
+ * @param action to perform after the UI has been updated to remove the conversations
+ */
+ void delete(final Collection<Conversation> target, final DestructiveAction action);
+
+ /**
+ * Get a destructive action for selected conversations. The action corresponds to Menu item
+ * identifiers, for example R.id.unread, or R.id.delete.
+ * @param action
+ * @return
+ */
+ public DestructiveAction getBatchAction(int action);
+
+ /**
+ * Assign the target conversations to the given folders, and remove them from all other
+ * folders that they might be assigned to.
+ * @param folders the folders to assign the conversations to.
+ * @param target the conversations to act upon.
+ * @param batch whether this is a batch operation
+ */
+ public void assignFolder(
+ Collection<Folder> folders, Collection<Conversation> target, boolean batch);
+
+ /**
+ * Refreshes the conversation list, if one exists.
+ */
+ void refreshConversationList();
+}
diff --git a/src/com/android/mail/ui/ConversationViewFragment.java b/src/com/android/mail/ui/ConversationViewFragment.java
index 3260463..b3436f1 100644
--- a/src/com/android/mail/ui/ConversationViewFragment.java
+++ b/src/com/android/mail/ui/ConversationViewFragment.java
@@ -144,6 +144,8 @@
public static final String ARG_CONVERSATION = "conversation";
private static final String ARG_FOLDER = "folder";
+ private static final boolean DEBUG_DUMP_CONVERSATION_HTML = false;
+
/**
* Constructor needs to be public to handle orientation changes and activity lifecycle events.
*/
@@ -403,8 +405,28 @@
}
private void renderConversation(MessageCursor messageCursor) {
- mWebView.loadDataWithBaseURL(mBaseUri, renderMessageBodies(messageCursor), "text/html",
- "utf-8", null);
+ final String convHtml = renderMessageBodies(messageCursor);
+
+ if (DEBUG_DUMP_CONVERSATION_HTML) {
+ java.io.FileWriter fw = null;
+ try {
+ fw = new java.io.FileWriter("/sdcard/conv" + mConversation.id
+ + ".html");
+ fw.write(convHtml);
+ } catch (java.io.IOException e) {
+ e.printStackTrace();
+ } finally {
+ if (fw != null) {
+ try {
+ fw.close();
+ } catch (java.io.IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ mWebView.loadDataWithBaseURL(mBaseUri, convHtml, "text/html", "utf-8", null);
mCursor = messageCursor;
}
diff --git a/src/com/android/mail/ui/FolderSelectionActivity.java b/src/com/android/mail/ui/FolderSelectionActivity.java
index bcf8c6f..6f38925 100644
--- a/src/com/android/mail/ui/FolderSelectionActivity.java
+++ b/src/com/android/mail/ui/FolderSelectionActivity.java
@@ -319,4 +319,9 @@
public Folder getCurrentFolder() {
return null;
}
+
+ @Override
+ public ConversationUpdater getConversationUpdater() {
+ return null;
+ }
}
diff --git a/src/com/android/mail/ui/FoldersSelectionDialog.java b/src/com/android/mail/ui/FoldersSelectionDialog.java
index b971c4c..21ad75e 100644
--- a/src/com/android/mail/ui/FoldersSelectionDialog.java
+++ b/src/com/android/mail/ui/FoldersSelectionDialog.java
@@ -42,29 +42,16 @@
public class FoldersSelectionDialog implements OnClickListener, OnMultiChoiceClickListener {
private AlertDialog mDialog;
- private FolderChangeCommitListener mCommitListener;
+ private ConversationUpdater mUpdater;
private HashMap<Folder, Boolean> mCheckedState;
private boolean mSingle = false;
private FolderSelectorAdapter mAdapter;
private final Collection<Conversation> mTarget;
private boolean mBatch;
- public interface FolderChangeCommitListener {
- /**
- * Assign the target conversations to the given folders, and remove them from all other
- * folders that they might be assigned to.
- * @param folders the folders to assign the conversations to.
- * @param target the conversations to act upon.
- * @param batch whether this is a batch operation
- */
- public void onFolderChangesCommit(
- Collection<Folder> folders, Collection<Conversation> target, boolean batch);
- }
-
public FoldersSelectionDialog(final Context context, Account account,
- final FolderChangeCommitListener commitListener,
- Collection<Conversation> target, boolean isBatch) {
- mCommitListener = commitListener;
+ final ConversationUpdater updater, Collection<Conversation> target, boolean isBatch) {
+ mUpdater = updater;
mTarget = target;
mBatch = isBatch;
@@ -152,8 +139,8 @@
folders.add(entry.getKey());
}
}
- if (mCommitListener != null) {
- mCommitListener.onFolderChangesCommit(folders, mTarget, mBatch);
+ if (mUpdater != null) {
+ mUpdater.assignFolder(folders, mTarget, mBatch);
}
break;
case DialogInterface.BUTTON_NEGATIVE:
diff --git a/src/com/android/mail/ui/MailActivity.java b/src/com/android/mail/ui/MailActivity.java
index d09bb71..af26817 100644
--- a/src/com/android/mail/ui/MailActivity.java
+++ b/src/com/android/mail/ui/MailActivity.java
@@ -300,4 +300,9 @@
public Folder getCurrentFolder() {
return mController.getFolder();
}
+
+ @Override
+ public ConversationUpdater getConversationUpdater() {
+ return mController;
+ }
}
diff --git a/src/com/android/mail/ui/OnePaneController.java b/src/com/android/mail/ui/OnePaneController.java
index e7d8927..7c580bb 100644
--- a/src/com/android/mail/ui/OnePaneController.java
+++ b/src/com/android/mail/ui/OnePaneController.java
@@ -93,9 +93,7 @@
@Override
public void resetActionBarIcon() {
final int mode = mViewMode.getMode();
- // If the settings aren't loaded yet, we may not know what the default
- // inbox is, so err toward this being the account inbox.
- if ((mAccount.settings != null && mConvListContext != null && !inInbox())
+ if (!inInbox(mAccount, mConvListContext)
|| mode == ViewMode.SEARCH_RESULTS_LIST
|| mode == ViewMode.SEARCH_RESULTS_CONVERSATION
|| mode == ViewMode.CONVERSATION
@@ -111,10 +109,14 @@
* inbox.
* @return
*/
- private boolean inInbox() {
- final Uri inboxUri = Settings.getDefaultInboxUri(mAccount.settings);
- return mConvListContext != null && mConvListContext.folder != null ? (!mConvListContext
- .isSearchResult() && mConvListContext.folder.uri.equals(inboxUri)) : false;
+ private static boolean inInbox(final Account account, final ConversationListContext context) {
+ // If we don't have valid state, then we are not in the inbox.
+ if (account == null || context == null || context.folder == null
+ || account.settings == null) {
+ return false;
+ }
+ final Uri inboxUri = Settings.getDefaultInboxUri(account.settings);
+ return !context.isSearchResult() && context.folder.uri.equals(inboxUri);
}
@Override
@@ -165,7 +167,7 @@
: FragmentTransaction.TRANSIT_FRAGMENT_OPEN;
Fragment conversationListFragment = ConversationListFragment.newInstance(listContext);
- if (!inInbox()) {
+ if (!inInbox(mAccount, mConvListContext)) {
// Maintain fragment transaction history so we can get back to the
// fragment used to launch this list.
mLastConversationListTransactionId = replaceFragment(conversationListFragment,
@@ -290,13 +292,13 @@
*/
@Override
public boolean onBackPressed() {
- int mode = mViewMode.getMode();
+ final int mode = mViewMode.getMode();
if (mode == ViewMode.FOLDER_LIST) {
mLastFolderListTransactionId = INVALID_ID;
transitionToInbox();
} else if (mode == ViewMode.SEARCH_RESULTS_LIST) {
mActivity.finish();
- } else if (mode == ViewMode.CONVERSATION_LIST && !inInbox()) {
+ } else if (mode == ViewMode.CONVERSATION_LIST && !inInbox(mAccount, mConvListContext)) {
if (isTransactionIdValid(mLastFolderListTransactionId)) {
// Go back to previous folder list.
mViewMode.enterFolderListMode();
@@ -366,7 +368,7 @@
final int mode = mViewMode.getMode();
if (mode == ViewMode.SEARCH_RESULTS_LIST) {
mActivity.finish();
- } else if ((!inInbox() && mode == ViewMode.CONVERSATION_LIST)
+ } else if ((!inInbox(mAccount, mConvListContext) && mode == ViewMode.CONVERSATION_LIST)
|| mode == ViewMode.CONVERSATION
|| mode == ViewMode.FOLDER_LIST
|| mode == ViewMode.SEARCH_RESULTS_CONVERSATION) {