Merge "Hiding add number button in Blocked Management UI" into nyc-dev
diff --git a/InCallUI/res/values-bs-rBA/strings.xml b/InCallUI/res/values-bs-rBA/strings.xml
index 21f4360..b64df21 100644
--- a/InCallUI/res/values-bs-rBA/strings.xml
+++ b/InCallUI/res/values-bs-rBA/strings.xml
@@ -299,7 +299,9 @@
<skip />
<!-- no translation found for default_notification_description (4950807644546509965) -->
<skip />
- <string name="ringtone_title" msgid="835582004693335905">"Melodija zvona telefona"</string>
+ <!-- no translation found for ringtone_title (835582004693335905) -->
+ <!-- no translation found for ringtone_title (5379026328015343686) -->
+ <skip />
<!-- no translation found for vibrate_on_ring_title (5019791043398986665) -->
<skip />
<!-- no translation found for preference_category_ringtone (6246687516643676729) -->
diff --git a/res/layout/lists_fragment.xml b/res/layout/lists_fragment.xml
index 1942a96..bff729c 100644
--- a/res/layout/lists_fragment.xml
+++ b/res/layout/lists_fragment.xml
@@ -58,7 +58,9 @@
android:layout_width="match_parent"
android:layout_height="@dimen/tab_height"
android:layout_marginTop="@dimen/action_bar_height_large"
- android:layout_alignParentTop="true" >
+ android:layout_alignParentTop="true"
+ android:contentDescription="@string/remove_contact"
+ android:visibility="gone" >
<LinearLayout
android:id="@+id/remove_view_content"
@@ -66,8 +68,7 @@
android:layout_width="match_parent"
android:background="@color/actionbar_background_color"
android:gravity="center"
- android:orientation="horizontal"
- android:visibility="gone" >
+ android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
@@ -76,7 +77,6 @@
android:layout_marginBottom="8dp"
android:id="@+id/remove_view_icon"
android:src="@drawable/ic_remove"
- android:contentDescription="@string/remove_contact"
android:tint="@color/remove_text_color" />
<TextView
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index c2975df..eeac1fe 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Vee oproepgeskiedenis uit"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Vee stemboodskap uit"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Argiveer stemboodskap"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Stemboodskap is uitgevee"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Stemboodskap is geargiveer"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"ONTDOEN"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 2f0d644..2e0a092 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"የጥሪ ታሪክን አጽዳ"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"የድምፅ መልዕክት ሰርዝ"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"የድምፅ መልዕክት በማህደር አስቀምጥ"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"የድምጽ ፖስታ ተፈልጎ ተገኝቷል"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"የድምፅ መልዕክት በማህደር ተቀምጧል"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"ቀልብስ"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index e523c75..a32ccab 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"محو سجل المكالمات"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"حذف رسالة البريد الصوتي"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"البريد الصوتي للأرشيف"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"تم حذف الرسالة الصوتية"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"البريد الصوتي المؤرشف"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"تراجع"</string>
diff --git a/res/values-az-rAZ/strings.xml b/res/values-az-rAZ/strings.xml
index 3b0c293..2d68eb2 100644
--- a/res/values-az-rAZ/strings.xml
+++ b/res/values-az-rAZ/strings.xml
@@ -35,6 +35,7 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Zəng tarixçəsini təmizləyin"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Səsli məktubu silin"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Səsli poçtu arxivləşdirin"</string>
+ <string name="call_log_share_voicemail" msgid="7272635349055945546">"Səsli məktubu paylaşın"</string>
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Səsli məktub silindi"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Səsli poçt arxivləşdirildi"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"GERİ ALIN"</string>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 4f11f61..8d0bb47 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Obriši istoriju poziva"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Izbriši govornu poruku"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Arhiviraj govornu poštu"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Gov. pošta je izbrisana"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Govorna pošta je arhivirana"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"OPOZOVI"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 44a115b..721c7ab 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Изчистване на историята на обажданията"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Изтриване на гласова поща"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Архивиране на гласовата поща"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Гл. поща е изтрита"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Гласовата поща бе архивирана"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"ОТМЯНА"</string>
diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml
index 33587a1..965e175 100644
--- a/res/values-bn-rBD/strings.xml
+++ b/res/values-bn-rBD/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"পুরোনো কলের তালিকা সাফ করুন"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"ভয়েসমেল মুছুন"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"ভয়েসমেল সংরক্ষণাগারভুক্ত করুন"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"ভয়েসমেল মোছা হয়েছে"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"ভয়েসমেল সংরক্ষণাগারভুক্ত"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"পূর্বাবস্থায় ফিরুন"</string>
diff --git a/res/values-bs-rBA/strings.xml b/res/values-bs-rBA/strings.xml
index bc05f12..d748b43 100644
--- a/res/values-bs-rBA/strings.xml
+++ b/res/values-bs-rBA/strings.xml
@@ -52,6 +52,8 @@
<!-- no translation found for call_log_trash_voicemail (1283948488625129019) -->
<skip />
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Arhiviraj govornu poštu"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<!-- no translation found for snackbar_voicemail_deleted (5098542835986188582) -->
<skip />
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Govorna pošta arhivirana"</string>
@@ -138,7 +140,9 @@
<skip />
<!-- no translation found for action_menu_call_history_description (9018442816219748968) -->
<skip />
- <string name="action_menu_overflow_description" msgid="2303272250613084574">"Više opcija"</string>
+ <!-- no translation found for action_menu_overflow_description (2303272250613084574) -->
+ <!-- no translation found for action_menu_overflow_description (2295659037509008453) -->
+ <skip />
<!-- no translation found for action_menu_dialpad_button (1425910318049008136) -->
<skip />
<!-- no translation found for menu_show_outgoing_only (1965570298133301970) -->
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 60ce71c..6f5c52e 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Esborra l\'historial de trucades"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Suprimeix la bústia de veu"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Arxiva el missatge de veu"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Correu de veu suprimit"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Missatge de veu arxivat"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"DESFÉS"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index da23df9..0183dd6 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Vymazat historii volání"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Smazat hlasovou zprávu"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Archivovat hlasovou zprávu"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Hlas. zpráva smazána"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Hlasová zpráva archivována"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"VRÁTIT"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 6da57dd..d11664e 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Ryd opkaldshistorik"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Slet talemeddelelsen"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Arkivér talebesked"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Talebeskeden blev slettet"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Talebeskeden blev arkiveret"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"FORTRYD"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 34ecb90..9988a96 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Anrufliste löschen"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Mailbox-Nachricht löschen"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Mailbox-Nachricht archivieren"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Mailbox gelöscht"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Mailbox-Nachricht archiviert"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"Rückgängig"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 1c401c6..462fda4 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -35,6 +35,7 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Εκκαθάριση ιστορικού κλήσεων"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Διαγραφή αυτόματου τηλεφωνητή"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Αρχειοθ. μην. αυτόμ. τηλεφων."</string>
+ <string name="call_log_share_voicemail" msgid="7272635349055945546">"Κοινή χρήση αυτόμ. τηλεφωνητή"</string>
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Μήν.αυτ. τηλ. διαγρ."</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Μήν. αυτ. τηλεφ. αρχειοθετήθ."</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"ΑΝΑΙΡΕΣΗ"</string>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 5ebd6c3..8e065cf 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Clear call history"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Delete voicemail"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Archive voicemail"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Voicemail deleted"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Voicemail archived"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"UNDO"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 5ebd6c3..8e065cf 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Clear call history"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Delete voicemail"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Archive voicemail"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Voicemail deleted"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Voicemail archived"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"UNDO"</string>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 5ebd6c3..8e065cf 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Clear call history"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Delete voicemail"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Archive voicemail"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Voicemail deleted"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Voicemail archived"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"UNDO"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 190aeb7..f9d499a 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Eliminar el historial de llamadas"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Borrar buzón de voz"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Archivar un mensaje de voz"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Buzón de voz borrado"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Se archivó el mensaje de voz"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"DESHACER"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index d5c0e0f..16e91df 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Borrar historial de llamadas"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Eliminar mensaje de voz"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Archivar mensaje de voz"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Buzón voz eliminado"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Mensaje de voz archivado"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"DESHACER"</string>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
index fd742f3..402bb68 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et-rEE/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Kustuta kõneajalugu"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Kustuta kõnepost"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Kõnepostisõnumi arhiivimine"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Kõnepost kustutati"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Kõnepostisõnum arhiiviti"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"VÕTA TAGASI"</string>
diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml
index c612d2d..a83e801 100644
--- a/res/values-eu-rES/strings.xml
+++ b/res/values-eu-rES/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Garbitu deien historia"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Ezabatu ahots-mezua"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Artxibatu ahots-mezua"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Ahots-mezua ezabatzea"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Artxibatu da ahots-mezua"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"DESEGIN"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 6e83947..157e6f6 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"پاک کردن سابقه تماس"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"حذف پست صوتی"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"بایگانی پست صوتی"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"پست صوتی حذف شد"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"پست صوتی بایگانی شد"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"واگرد"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 6ccd419..97a5e78 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Tyhjennä soittohistoria"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Poista vastaajaviesti"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Arkistoi vastaajaviesti"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Viesti poistettiin."</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Vastaajaviesti arkistoitiin."</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"KUMOA"</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 3d36933..b74e463 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -35,6 +35,7 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Effacer l\'historique des appels"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Supprimer le message vocal"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Archiver les messages vocaux"</string>
+ <string name="call_log_share_voicemail" msgid="7272635349055945546">"Partager les messages vocaux"</string>
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Mess. vocal supprimé"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Messages vocaux archivés"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"ANNULER"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 22247ef..48f00c4 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Supprimer l\'historique des appels"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Supprimer le message vocal"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Archiver le message vocal"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Mess. vocal supprimé"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Message vocal archivé"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"ANNULER"</string>
diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml
index e895e2c..a48f01d 100644
--- a/res/values-gl-rES/strings.xml
+++ b/res/values-gl-rES/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Borrar historial de chamadas"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Eliminar correo de voz"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Arquivar correo de voz"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Correo voz eliminado"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Correo de voz arquivado"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"DESFACER"</string>
diff --git a/res/values-gu-rIN/strings.xml b/res/values-gu-rIN/strings.xml
index c33253c..5842fb0 100644
--- a/res/values-gu-rIN/strings.xml
+++ b/res/values-gu-rIN/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"કૉલ ઇતિહાસ સાફ કરો"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"વૉઇસમેઇલ કાઢી નાખો"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"વૉઇસમેઇલને આર્કાઇવ કરો"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"વૉઇસમેઇલ કાઢી નાખ્યો"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"વૉઇસમેઇલ આર્કાઇવ કર્યો"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"પૂર્વવત્ કરો"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 78dd0a3..c9fe997 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"कॉल इतिहास साफ़ करें"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"वॉइसमेल हटाएं"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"वॉइसमेल संग्रहीत करें"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"वॉइसमेल हटाया गया"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"वॉइसमेल संग्रहीत किया गया"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"वापस लाएं"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index b8ceb3f..60436fe 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Izbriši povijest poziva"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Izbriši govornu poštu"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Arhiviranje govorne pošte"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Gov. pošta izbrisana"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Govorna je pošta arhivirana"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"PONIŠTI"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index c952bdb..3c7d859 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"A híváslista törlése"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Hangposta törlése"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Hangpostaüzenet archiválása"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Hangposta törölve"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Hangpostaüzenet archiválva"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"VISSZAVONÁS"</string>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
index 3a99973..b71cb3a 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy-rAM/strings.xml
@@ -35,6 +35,7 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Ջնջել զանգերի պատմությունը"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Ջնջել ձայնային փոստը"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Արխիվացնել ձայնային փոստը"</string>
+ <string name="call_log_share_voicemail" msgid="7272635349055945546">"Ուղարկել ձայնային փոստը"</string>
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Ձայնային փոստը ջնջվեց"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Ձայնային փոստն արխիվացվեց"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"ՀԵՏԱՐԿԵԼ"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 4a48b80..4736d6e 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Hapus riwayat panggilan"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Hapus pesan suara"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Arsipkan pesan suara"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Pesan suara dihapus"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Pesan suara diarsipkan"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"URUNGKAN"</string>
diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml
index 69bc3ea..c0d3a0d 100644
--- a/res/values-is-rIS/strings.xml
+++ b/res/values-is-rIS/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Hreinsa símtalaferil"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Eyða talhólfsskilaboðum"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Setja talhólfsskilaboð í geymslu"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Talhólfi eytt"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Talhólfsskilaboð sett í geymslu"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"AFTURKALLA"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 0fc8c70..6aa8441 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Cancella cronologia chiamate"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Elimina messaggi della segreteria"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Archivia messaggio vocale"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Mes vocali eliminati"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Messaggio vocale archiviato"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"ANNULLA"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index f2ea48e..e7ba54d 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -35,6 +35,7 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"נקה את היסטוריית השיחות"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"מחק דואר קולי"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"העברת דואר קולי לארכיון"</string>
+ <string name="call_log_share_voicemail" msgid="7272635349055945546">"שיתוף של הדואר הקולי"</string>
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"דואר קולי נמחק"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"הדואר הקולי הועבר לארכיון"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"בטל"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index b8b060e..faa1011 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -35,6 +35,7 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"通話履歴を消去"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"ボイスメールを削除"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"ボイスメールをアーカイブする"</string>
+ <string name="call_log_share_voicemail" msgid="7272635349055945546">"ボイスメールを共有"</string>
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"ボイスメールの削除"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"ボイスメールをアーカイブしました"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"元に戻す"</string>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
index 3a13036..0942333 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"საუბრის ისტორიის გასუფთავება"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"ხმოვანი ფოსტის წაშლა"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"ხმოვანი ფოსტის დაარქივება"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"ხმოვანი ფოსტა წაიშალა"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"ხმოვანი ფოსტა დაარქივებულია"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"დაბრუნება"</string>
diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml
index bfeeb96..8d39d66 100644
--- a/res/values-kk-rKZ/strings.xml
+++ b/res/values-kk-rKZ/strings.xml
@@ -35,6 +35,7 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Қоңыраулар тарихын тазалау"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Дауыстық хабарды жою"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Дауыстық поштаны мұрағаттау"</string>
+ <string name="call_log_share_voicemail" msgid="7272635349055945546">"Дауыстық хабармен бөлісу"</string>
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Дауыстық хабар жойылды"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Дауыстық пошта мұрағатталды"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"КЕРІ ҚАЙТАРУ"</string>
diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml
index 785bb31..daffbce 100644
--- a/res/values-km-rKH/strings.xml
+++ b/res/values-km-rKH/strings.xml
@@ -35,6 +35,7 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"ជម្រះប្រវត្តិហៅ"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"លុបសារជាសំឡេង"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"រក្សាទុកសារជាសំឡេងក្នុងប័ណ្ណសារ"</string>
+ <string name="call_log_share_voicemail" msgid="7272635349055945546">"ចែករំលែកសារជាសំឡេង"</string>
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"បានលុបសារសម្លេង"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"បានរក្សាទុកសារជាសំឡេងក្នុងប័ណ្ណសារ"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"មិនធ្វើវិញ"</string>
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml
index 8f916fe..563458e 100644
--- a/res/values-kn-rIN/strings.xml
+++ b/res/values-kn-rIN/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"ಕರೆ ಇತಿಹಾಸವನ್ನು ತೆರವುಗೊಳಿಸಿ"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"ಧ್ವನಿಮೇಲ್ ಅಳಿಸಿ"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"ಧ್ವನಿಮೇಲ್ ಆರ್ಕೈವ್ ಮಾಡಿ"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"ಧ್ವನಿಮೇಲ್ ಅಳಿಸಲಾಗಿದೆ"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"ಧ್ವನಿಮೇಲ್ ಆರ್ಕೈವ್ ಮಾಡಲಾಗಿದೆ"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"ರದ್ದುಮಾಡು"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index ac1f193..b1f05e4 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -35,6 +35,7 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"통화 기록 삭제"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"음성사서함 삭제"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"음성사서함 보관처리"</string>
+ <string name="call_log_share_voicemail" msgid="7272635349055945546">"음성사서함 공유"</string>
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"음성사서함 삭제됨"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"음성사서함 보관처리됨"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"실행취소"</string>
diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml
index 31b4497..ffa3877 100644
--- a/res/values-ky-rKG/strings.xml
+++ b/res/values-ky-rKG/strings.xml
@@ -36,6 +36,7 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Чалуулар таржымалын тазалоо"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Үн почтасын жок кылуу"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Үн каттарын архивдөө"</string>
+ <string name="call_log_share_voicemail" msgid="7272635349055945546">"Үнкатты бөлүшүү"</string>
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Үн почтасы жок кылнд"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Үн каттары архивделди"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"КАЙТАРУУ"</string>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml
index ea15c84..ed7f2a0 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo-rLA/strings.xml
@@ -35,6 +35,7 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"ລຶບປະຫວັດການໂທ"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"ລຶບຂໍ້ຄວາມສຽງ"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"ຈັດເກັບຂໍ້ຄວາມສຽງເຂົ້າແຟ້ມ"</string>
+ <string name="call_log_share_voicemail" msgid="7272635349055945546">"ແບ່ງປັນຂໍ້ຄວາມສຽງ"</string>
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"ລຶບຂໍ້ຄວາມສຽງແລ້ວ"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"ຈັດເກັບຂໍ້ຄວາມສຽງເຂົ້າແຟ້ມແລ້ວ"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"ບໍ່ເຮັດ"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index a5b5719..6773f0e 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Išvalyti skambučių istoriją"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Ištrinti balso pašto pranešim."</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Archyvuoti balso pašto pran."</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Balso pšt. ištrintas"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Balso pašto pran. suarchyvuoti"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"ANULIUOTI"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index ba95ea3..bbf75fd 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Dzēst zvanu vēsturi"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Dzēst balss pasta ziņojumu"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Arhivēt balss pasta ziņojumu"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Balss pasts dzēsts"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Balss pasta ziņojums arhivēts"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"ATSAUKT"</string>
diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml
index 5683b0e..26b25aa 100644
--- a/res/values-mk-rMK/strings.xml
+++ b/res/values-mk-rMK/strings.xml
@@ -35,6 +35,7 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Избришете ја историјата на повици"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Избришете ја говорната пошта"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Архивирајте говорна пошта"</string>
+ <string name="call_log_share_voicemail" msgid="7272635349055945546">"Споделете ја говорната пошта"</string>
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Гов. пошта е избриш."</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Говорната пошта е архивирана"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"ВРАТИ"</string>
diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml
index f4cdad3..af7efaf 100644
--- a/res/values-ml-rIN/strings.xml
+++ b/res/values-ml-rIN/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"കോൾ ചരിത്രം മായ്ക്കുക"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"വോയ്സ്മെയിൽ ഇല്ലാതാക്കുക"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"വോയ്സ്മെയിൽ ആർക്കൈവുചെയ്യുക"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"വോയ്സ്മെയിൽ ഇല്ലാതാക്കി"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"വോയ്സ്മെയിൽ ആർക്കൈവുചെയ്തു"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"പഴയപടിയാക്കുക"</string>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
index ddcfc82..50a3d9f 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn-rMN/strings.xml
@@ -35,6 +35,7 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Дуудлагын түүхийг устгах уу?"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Дуут шууданг устгах"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Дуут шууданг архивлах"</string>
+ <string name="call_log_share_voicemail" msgid="7272635349055945546">"Дуут шууданг хуваалцах"</string>
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Дуут шууданг устгасан"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Дуут шууданг архивласан"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"БУЦААХ"</string>
diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml
index 65fde08..39ed494 100644
--- a/res/values-mr-rIN/strings.xml
+++ b/res/values-mr-rIN/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"कॉल इतिहास साफ करा"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"व्हॉइसमेल हटवा"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"व्हॉइसमेलचे संग्रहण करा"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"व्हॉइसमेल आढळले"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"व्हॉइसमेल संग्रहित केले"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"पूर्ववत करा"</string>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
index cfaee93..f1c63ce 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Kosongkan sejarah panggilan"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Padamkan mel suara"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Arkibkan mel suara"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Mel suara dipadamkan"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Mel suara diarkibkan"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"BUAT ASAL"</string>
diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml
index c44b56c..7459a74 100644
--- a/res/values-my-rMM/strings.xml
+++ b/res/values-my-rMM/strings.xml
@@ -35,6 +35,7 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"ခေါ်ဆိုမှု မှတ်တမ်း ရှင်းရန်"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"အသံပို့စာ အားဖျက်ရန်"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"အသံစာကို သိုလှောင်ထားပါ"</string>
+ <string name="call_log_share_voicemail" msgid="7272635349055945546">"အသံမေးလ်ကို မျှဝေပါ"</string>
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"အသံမေးလ် ရှာတွေ့ခဲ့"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"သိုလှောင်ထားသည့် အသံစာ"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"ပြန်ဖျက်ရန်"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 1de7b92..6f71046 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Slett anropsloggen"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Slett talepost"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Arkivér taleposten"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Taleposten er slettet"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Taleposten ble arkivert"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"ANGRE"</string>
diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml
index 55644c8..528d1d1 100644
--- a/res/values-ne-rNP/strings.xml
+++ b/res/values-ne-rNP/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"कल इतिहास मेटाउनुहोस्"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"भ्वाइसमेल हटाउनुहोस्"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"भ्वाइस मेलको अभिलेख राख्नुहोस्"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"भ्वाइस मेल मेटाइयो"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"भ्वाइस मेलको अभिलेख राखियो"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"अनडू गर्नुहोस्"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 99b41f8..f10a444 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Oproepgeschiedenis wissen"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Voicemail verwijderen"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Voicemail archiveren"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Voicemail verwijderd"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Voicemail gearchiveerd"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"ONGED. MKN"</string>
diff --git a/res/values-pa-rIN/strings.xml b/res/values-pa-rIN/strings.xml
index ae381c5..3c0cb3d 100644
--- a/res/values-pa-rIN/strings.xml
+++ b/res/values-pa-rIN/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"ਕਾਲ ਇਤਿਹਾਸ ਹਟਾਓ"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"ਵੌਇਸਮੇਲ ਮਿਟਾਓ"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"ਵੌਇਸਮੇਲ ਪੁਰਾਲੇਖਬੱਧ ਕਰੋ"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"ਵੌਇਸਮੇਲ ਮਿਟਾਈ ਗਈ"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"ਵੌਇਸਮੇਲ ਪੁਰਾਲੇਖਬੱਧ ਕੀਤੀ ਗਈ"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"ਪਹਿਲਾਂ ਵਰਗਾ ਕਰੋ"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 934b211..4075980 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Wyczyść historię połączeń"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Usuń pocztę głosową"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Archiwizuj pocztę głosową"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Poczta usunięta"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Poczta głosowa zarchiwizowana"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"COFNIJ"</string>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index 8e6d371..08d386b 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Limpar histórico de chamadas"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Excluir mensagem de voz"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Arquivar correio de voz"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Correio de voz excluído"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Correio de voz arquivado"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"DESFAZER"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 6c194e5..28b946e 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Limpar histórico de chamadas"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Eliminar correio de voz"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Arquivar msg. correio de voz"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Correio de voz elim."</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Msg. correio de voz arquivada"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"ANULAR"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 8e6d371..08d386b 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Limpar histórico de chamadas"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Excluir mensagem de voz"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Arquivar correio de voz"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Correio de voz excluído"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Correio de voz arquivado"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"DESFAZER"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index ca45521..c7b2e48 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Ștergeți istoricul apelurilor"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Ștergeți mesajul vocal"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Arhivați mesajul vocal"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Mesaj vocal șters"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Mesajul vocal este arhivat"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"ANULAȚI"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 3e8757f..4cfa7f2 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Очистить журнал звонков"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Удалить голосовое сообщение"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Архивировать голос. сообщение"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Сообщение удалено"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Готово"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"ОТМЕНИТЬ"</string>
diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml
index 8a9f9a2..bd4ddd5 100644
--- a/res/values-si-rLK/strings.xml
+++ b/res/values-si-rLK/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"ඇමතුම් ඉතිහාසය හිස් කරන්න"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"හඬ තැපෑල මකන්න"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"හඬ තැපෑල සංරක්ෂණය කරන්න"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"හඬ තැපෑල මකන ලදී"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"හඬ තැපෑල සංරක්ෂණය කරන ලදී"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"අස් කරන්න"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 86e4692..7f3cd72 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Vymazať históriu hovorov?"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Odstrániť hlasovú správu"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Archivovať hlasovú správu"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Hlas. schránka odstránená"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Hlasová správa bola archiv."</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"SPÄŤ"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 46b66a6..778e0df 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Izbriši zgodovino klicev"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Brisanje sporočil iz odzivnika"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Arhiviraj sporoč. v odzivniku"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Spor. v odziv. izbr."</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Sporoč. v odzivniku arhivirano"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"RAZVELJAVI"</string>
diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq-rAL/strings.xml
index ae34be6..7c9d0ae 100644
--- a/res/values-sq-rAL/strings.xml
+++ b/res/values-sq-rAL/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Pastro historikun e telefonatave"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Fshije postën zanore"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Arkivo postën zanore"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"U zbulua posta zanore"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Posta zanore u arkivua"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"ZHBËJ"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index d98249e..7bf58ad 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Обриши историју позива"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Избриши говорну поруку"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Архивирај говорну пошту"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Гов. пошта је избрисана"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Говорна пошта је архивирана"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"ОПОЗОВИ"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 63aa8ed..592a512 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Rensa samtalshistorik"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Radera röstmeddelande"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Arkivera röstmeddelande"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Röstbrevlåda raderad"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Röstmeddelandet har arkiverats"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"ÅNGRA"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index eafe05c..d29edd6 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Futa rekodi ya simu zilizopigwa"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Futa ujumbe wa sauti"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Weka kwenye kumbukumbu"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Ujumbe wa sauti umefutwa"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Umewekwa kwenye kumbukumbu"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"TENDUA"</string>
diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml
index e68169e..811ad16 100644
--- a/res/values-ta-rIN/strings.xml
+++ b/res/values-ta-rIN/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"அழைப்பு வரலாற்றை அழி"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"குரலஞ்சலை நீக்கு"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"குரலஞ்சலைக் காப்பகப்படுத்து"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"குரலஞ்சல் நீக்கப்பட்டது"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"குரலஞ்சல் காப்பகப்படுத்தப்பட்டது"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"செயல்தவிர்"</string>
diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml
index a7838aa..8a8404d 100644
--- a/res/values-te-rIN/strings.xml
+++ b/res/values-te-rIN/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"కాల్ చరిత్రను తీసివేయి"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"వాయిస్ మెయిల్ను తొలగించు"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"వాయిస్ మెయిల్ను ఆర్కైవ్ చేయి"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"వాయిస్మెయిల్ తొలగించింది"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"వాయిస్ మెయిల్ ఆర్కైవ్ అయింది"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"చర్యరద్దు"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index a062dca..54e0611 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -35,6 +35,7 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"ล้างประวัติการโทร"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"ลบข้อความเสียง"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"เก็บข้อความเสียง"</string>
+ <string name="call_log_share_voicemail" msgid="7272635349055945546">"แชร์ข้อความเสียง"</string>
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"ลบข้อความเสียงแล้ว"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"ข้อความเสียงที่เก็บไว้"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"เลิกทำ"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index bcb33b3..8ea4eb5 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"I-clear ang history ng tawag"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"I-delete ang voicemail"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"I-archive ang voicemail"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Na-delete voicemail"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Na-archive ang voicemail"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"I-UNDO"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index dcd4b82..831e06d 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Çağrı geçmişini temizle"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Sesli mesajı sil"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Sesli mesajı arşivle"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Sesli mesaj silindi"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Sesli mesaj arşivlendi"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"GERİ AL"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 1b5e265..f4f21a3 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Очистити історію дзвінків"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Видалити голосову пошту"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Архівувати голосову пошту"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Видалено"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Голосову пошту заархівовано"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"ВІДМІНИТИ"</string>
diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml
index c4252d3..13ba14b 100644
--- a/res/values-ur-rPK/strings.xml
+++ b/res/values-ur-rPK/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"کال کی سرگزشت صاف کریں"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"صوتی میل حذف کریں"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"صوتی میل کو آرکائیو کریں"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"صوتی میل حذف ہو گئی"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"صوتی میل آرکائیو ہو گئی"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"کالعدم کریں"</string>
diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml
index 29f461d..318407c 100644
--- a/res/values-uz-rUZ/strings.xml
+++ b/res/values-uz-rUZ/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Qo‘ng‘iroqlar tarixini tozalash"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Ovozli xabarni o‘chirish"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Ovozli pochtani arxivlash"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Ovozli pochta o‘chirildi"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Ovozli pochta arxivlandi"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"QAYTARISH"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index cb3085d..86ae725 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Xóa nhật ký cuộc gọi"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Xóa thư thoại"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Lưu trữ thư thoại"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Đã xóa thư thoại"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Đã lưu trữ thư thoại"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"HOÀN TÁC"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 5516a24..6ec5cea 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"清除通话记录"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"删除语音邮件"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"归档语音邮件"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"语音邮件已删除"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"已归档的语音邮件"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"撤消"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 275a847..01c6d7f 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -35,6 +35,7 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"清除通話記錄"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"刪除留言"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"封存留言"</string>
+ <string name="call_log_share_voicemail" msgid="7272635349055945546">"分享留言"</string>
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"已刪除留言信箱"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"已封存留言"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"復原"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index d036bf5..9c8919e 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"清除通話紀錄"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"刪除語音留言"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"封存語音留言"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"已刪除語音留言"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"已封存語音留言"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"復原"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 9a0bcb4..7d197e3 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -35,6 +35,8 @@
<string name="call_log_delete_all" msgid="4677609108288680411">"Sula umlando wekholi"</string>
<string name="call_log_trash_voicemail" msgid="1283948488625129019">"Susa ivoyisimeyili"</string>
<string name="call_log_archive_voicemail" msgid="9072936797223284265">"Faka kungobo yomlando ivoyisimeyili"</string>
+ <!-- no translation found for call_log_share_voicemail (7272635349055945546) -->
+ <skip />
<string name="snackbar_voicemail_deleted" msgid="5098542835986188582">"Ivoyisimeyili isusiwe"</string>
<string name="snackbar_voicemail_archived" msgid="7442340403660554373">"Ivoyisimeyili ifakwe kungobo yomlando"</string>
<string name="snackbar_voicemail_deleted_undo" msgid="3741811385891289167">"HLEHLISA"</string>
diff --git a/res/xml/file_paths.xml b/res/xml/file_paths.xml
index 45caed2..365a603 100644
--- a/res/xml/file_paths.xml
+++ b/res/xml/file_paths.xml
@@ -16,5 +16,7 @@
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Offer access to files under Context.getCacheDir() -->
- <cache-path name="my_cache" />
+ <cache-path name="my_cache" />
+ <!-- Offer access to voicemail folder under Context.getFilesDir() -->
+ <files-path name="voicemails" path="voicemails/" />
</paths>
diff --git a/src/com/android/dialer/database/VoicemailArchiveProvider.java b/src/com/android/dialer/database/VoicemailArchiveProvider.java
index 79b7a76..b3306bc 100644
--- a/src/com/android/dialer/database/VoicemailArchiveProvider.java
+++ b/src/com/android/dialer/database/VoicemailArchiveProvider.java
@@ -28,6 +28,7 @@
import android.os.ParcelFileDescriptor;
import android.support.annotation.Nullable;
import android.text.TextUtils;
+import android.webkit.MimeTypeMap;
import com.android.dialerbind.DatabaseHelperManager;
import com.google.common.annotations.VisibleForTesting;
@@ -119,7 +120,11 @@
// Create new file only if path is not provided to one
if (!values.containsKey(VoicemailArchiveContract.VoicemailArchive._DATA)) {
- File voicemailFile = new File(directory, Long.toString(id));
+ String fileExtension = MimeTypeMap.getSingleton().getExtensionFromMimeType(
+ values.getAsString(VoicemailArchiveContract.VoicemailArchive.MIME_TYPE));
+ File voicemailFile = new File(directory,
+ TextUtils.isEmpty(fileExtension) ? Long.toString(id) :
+ id + "." + fileExtension);
values.put(VoicemailArchiveContract.VoicemailArchive._DATA, voicemailFile.getPath());
}
update(newUri, values, null, null);
diff --git a/src/com/android/dialer/list/ListsFragment.java b/src/com/android/dialer/list/ListsFragment.java
index 52bf3cb..ceed612 100644
--- a/src/com/android/dialer/list/ListsFragment.java
+++ b/src/com/android/dialer/list/ListsFragment.java
@@ -81,7 +81,6 @@
private ViewPagerTabs mViewPagerTabs;
private ViewPagerAdapter mViewPagerAdapter;
private RemoveView mRemoveView;
- private View mRemoveViewContent;
private SpeedDialFragment mSpeedDialFragment;
private CallLogFragment mHistoryFragment;
@@ -252,7 +251,6 @@
addOnPageChangeListener(mViewPagerTabs);
mRemoveView = (RemoveView) parentView.findViewById(R.id.remove_view);
- mRemoveViewContent = parentView.findViewById(R.id.remove_view_content);
Trace.endSection();
Trace.endSection();
@@ -424,7 +422,7 @@
public void showRemoveView(boolean show) {
- mRemoveViewContent.setVisibility(show ? View.VISIBLE : View.GONE);
+ mRemoveView.setVisibility(show ? View.VISIBLE : View.GONE);
mRemoveView.setAlpha(show ? 0 : 1);
mRemoveView.animate().alpha(show ? 1 : 0).start();
}
diff --git a/src/com/android/dialer/list/RemoveView.java b/src/com/android/dialer/list/RemoveView.java
index fdb08f6..41f4175 100644
--- a/src/com/android/dialer/list/RemoveView.java
+++ b/src/com/android/dialer/list/RemoveView.java
@@ -6,6 +6,7 @@
import android.util.AttributeSet;
import android.util.Log;
import android.view.DragEvent;
+import android.view.accessibility.AccessibilityEvent;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
@@ -53,6 +54,9 @@
final int action = event.getAction();
switch (action) {
case DragEvent.ACTION_DRAG_ENTERED:
+ // TODO: This is temporary solution and should be removed once accessibility for
+ // drag and drop is supported by framework(b/26871588).
+ sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT);
setAppearanceHighlighted();
break;
case DragEvent.ACTION_DRAG_EXITED:
@@ -65,6 +69,7 @@
}
break;
case DragEvent.ACTION_DROP:
+ sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT);
if (mDragDropController != null) {
mDragDropController.handleDragFinished((int) event.getX(), (int) event.getY(),
true);
diff --git a/src/com/android/dialer/voicemail/VoicemailArchivePlaybackPresenter.java b/src/com/android/dialer/voicemail/VoicemailArchivePlaybackPresenter.java
index 050b8ac..5f73d16 100644
--- a/src/com/android/dialer/voicemail/VoicemailArchivePlaybackPresenter.java
+++ b/src/com/android/dialer/voicemail/VoicemailArchivePlaybackPresenter.java
@@ -62,7 +62,6 @@
}
} catch (FileNotFoundException e) {
Log.d(TAG, "Voicemail file not found for " + mVoicemailUri);
- handleError(e);
}
return false;
}
@@ -75,11 +74,17 @@
}
@Override
- protected boolean requestContent(int code) {
- if (mContext == null || mVoicemailUri == null) {
- return false;
+ protected void startArchiveVoicemailTask(final Uri voicemailUri, final boolean archivedByUser) {
+ // If a user wants to share an archived voicemail, no need for archiving, just go straight
+ // to share intent.
+ if (!archivedByUser) {
+ sendShareIntent(voicemailUri);
}
- prepareContent();
- return true;
+ }
+
+ @Override
+ protected boolean requestContent(int code) {
+ handleError(new FileNotFoundException("Voicemail archive file does not exist"));
+ return false; // No way for archive tab to request content
}
}
diff --git a/src/com/android/dialer/voicemail/VoicemailAsyncTaskUtil.java b/src/com/android/dialer/voicemail/VoicemailAsyncTaskUtil.java
new file mode 100644
index 0000000..7abf9a7
--- /dev/null
+++ b/src/com/android/dialer/voicemail/VoicemailAsyncTaskUtil.java
@@ -0,0 +1,346 @@
+/*
+ * Copyright (C) 2016 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.dialer.voicemail;
+
+import com.android.contacts.common.testing.NeededForTesting;
+import com.android.dialer.calllog.CallLogQuery;
+import com.android.dialer.database.VoicemailArchiveContract;
+import com.android.dialer.util.AsyncTaskExecutor;
+import com.android.dialer.util.AsyncTaskExecutors;
+import com.google.common.base.Preconditions;
+import com.google.common.io.ByteStreams;
+
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.provider.CallLog;
+import android.provider.VoicemailContract;
+import android.util.Log;
+import com.android.common.io.MoreCloseables;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import javax.annotation.Nullable;
+
+/**
+ * Class containing asynchronous tasks for voicemails.
+ */
+@NeededForTesting
+public class VoicemailAsyncTaskUtil {
+ private static final String TAG = "VoicemailAsyncTaskUtil";
+
+ /** The enumeration of {@link AsyncTask} objects we use in this class. */
+ public enum Tasks {
+ GET_VOICEMAIL_FILE_PATH,
+ SET_VOICEMAIL_ARCHIVE_STATUS,
+ ARCHIVE_VOICEMAIL_CONTENT
+ }
+
+ @NeededForTesting
+ public interface OnArchiveVoicemailListener {
+ /**
+ * Called after the voicemail has been archived.
+ *
+ * @param archivedVoicemailUri the URI of the archived voicemail
+ */
+ void onArchiveVoicemail(@Nullable Uri archivedVoicemailUri);
+ }
+
+ @NeededForTesting
+ public interface OnSetVoicemailArchiveStatusListener {
+ /**
+ * Called after the voicemail archived_by_user column is updated.
+ *
+ * @param success whether the update was successful or not
+ */
+ void onSetVoicemailArchiveStatus(boolean success);
+ }
+
+ @NeededForTesting
+ public interface OnGetArchivedVoicemailFilePathListener {
+ /**
+ * Called after the voicemail file path is obtained.
+ *
+ * @param filePath the file path of the archived voicemail
+ */
+ void onGetArchivedVoicemailFilePath(@Nullable String filePath);
+ }
+
+ private final ContentResolver mResolver;
+ private final AsyncTaskExecutor mAsyncTaskExecutor;
+
+ @NeededForTesting
+ public VoicemailAsyncTaskUtil(ContentResolver contentResolver) {
+ mResolver = Preconditions.checkNotNull(contentResolver);
+ mAsyncTaskExecutor = AsyncTaskExecutors.createThreadPoolExecutor();
+ }
+
+ /**
+ * Returns the archived voicemail file path.
+ */
+ @NeededForTesting
+ public void getVoicemailFilePath(
+ final OnGetArchivedVoicemailFilePathListener listener,
+ final Uri voicemailUri) {
+ Preconditions.checkNotNull(listener);
+ Preconditions.checkNotNull(voicemailUri);
+ mAsyncTaskExecutor.submit(Tasks.GET_VOICEMAIL_FILE_PATH,
+ new AsyncTask<Void, Void, String>() {
+ @Nullable
+ @Override
+ protected String doInBackground(Void... params) {
+ try (Cursor cursor = mResolver.query(voicemailUri,
+ new String[]{VoicemailArchiveContract.VoicemailArchive._DATA},
+ null, null, null)) {
+ if (hasContent(cursor)) {
+ return cursor.getString(cursor.getColumnIndex(
+ VoicemailArchiveContract.VoicemailArchive._DATA));
+ }
+ }
+ return null;
+ }
+
+ @Override
+ protected void onPostExecute(String filePath) {
+ listener.onGetArchivedVoicemailFilePath(filePath);
+ }
+ });
+ }
+
+ /**
+ * Updates the archived_by_user flag of the archived voicemail.
+ */
+ @NeededForTesting
+ public void setVoicemailArchiveStatus(
+ final OnSetVoicemailArchiveStatusListener listener,
+ final Uri voicemailUri,
+ final boolean archivedByUser) {
+ Preconditions.checkNotNull(listener);
+ Preconditions.checkNotNull(voicemailUri);
+ mAsyncTaskExecutor.submit(Tasks.SET_VOICEMAIL_ARCHIVE_STATUS,
+ new AsyncTask<Void, Void, Boolean>() {
+ @Override
+ protected Boolean doInBackground(Void... params) {
+ ContentValues values = new ContentValues(1);
+ values.put(VoicemailArchiveContract.VoicemailArchive.ARCHIVED,
+ archivedByUser);
+ return mResolver.update(voicemailUri, values, null, null) > 0;
+ }
+
+ @Override
+ protected void onPostExecute(Boolean success) {
+ listener.onSetVoicemailArchiveStatus(success);
+ }
+ });
+ }
+
+ /**
+ * Checks if a voicemail has already been archived, if so, return the previously archived URI.
+ * Otherwise, copy the voicemail information to the local dialer database. If archive was
+ * successful, archived voicemail URI is returned to listener, otherwise null.
+ */
+ @NeededForTesting
+ public void archiveVoicemailContent(
+ final OnArchiveVoicemailListener listener,
+ final Uri voicemailUri) {
+ Preconditions.checkNotNull(listener);
+ Preconditions.checkNotNull(voicemailUri);
+ mAsyncTaskExecutor.submit(Tasks.ARCHIVE_VOICEMAIL_CONTENT,
+ new AsyncTask<Void, Void, Uri>() {
+ @Nullable
+ @Override
+ protected Uri doInBackground(Void... params) {
+ Uri archivedVoicemailUri = getArchivedVoicemailUri(voicemailUri);
+
+ // If previously archived, return uri, otherwise archive everything.
+ if (archivedVoicemailUri != null) {
+ return archivedVoicemailUri;
+ }
+
+ // Combine call log and voicemail content info.
+ ContentValues values = getVoicemailContentValues(voicemailUri);
+ if (values == null) {
+ return null;
+ }
+
+ Uri insertedVoicemailUri = mResolver.insert(
+ VoicemailArchiveContract.VoicemailArchive.CONTENT_URI, values);
+ if (insertedVoicemailUri == null) {
+ return null;
+ }
+
+ // Copy voicemail content to a new file.
+ boolean copiedFile = false;
+ try (InputStream inputStream = mResolver.openInputStream(voicemailUri);
+ OutputStream outputStream =
+ mResolver.openOutputStream(insertedVoicemailUri)) {
+ if (inputStream != null && outputStream != null) {
+ ByteStreams.copy(inputStream, outputStream);
+ copiedFile = true;
+ return insertedVoicemailUri;
+ }
+ } catch (IOException e) {
+ Log.w(TAG, "Failed to copy voicemail content to new file: "
+ + e.toString());
+ } finally {
+ if (!copiedFile) {
+ // Roll back insert if the voicemail content was not copied.
+ mResolver.delete(insertedVoicemailUri, null, null);
+ }
+ }
+ return null;
+ }
+
+ @Override
+ protected void onPostExecute(Uri archivedVoicemailUri) {
+ listener.onArchiveVoicemail(archivedVoicemailUri);
+ }
+ });
+ }
+
+ /**
+ * Helper method to get the archived URI of a voicemail.
+ *
+ * @param voicemailUri a {@link android.provider.VoicemailContract.Voicemails#CONTENT_URI} URI.
+ * @return the URI of the archived voicemail or {@code null}
+ */
+ @Nullable
+ private Uri getArchivedVoicemailUri(Uri voicemailUri) {
+ try (Cursor cursor = getArchiveExistsCursor(voicemailUri)) {
+ if (hasContent(cursor)) {
+ return VoicemailArchiveContract.VoicemailArchive
+ .buildWithId(cursor.getInt(cursor.getColumnIndex(
+ VoicemailArchiveContract.VoicemailArchive._ID)));
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Helper method to make a copy of all the values needed to display a voicemail.
+ *
+ * @param voicemailUri a {@link VoicemailContract.Voicemails#CONTENT_URI} URI.
+ * @return the combined call log and voicemail values for the given URI, or {@code null}
+ */
+ @Nullable
+ private ContentValues getVoicemailContentValues(Uri voicemailUri) {
+ try (Cursor callLogInfo = getCallLogInfoCursor(voicemailUri);
+ Cursor contentInfo = getContentInfoCursor(voicemailUri)) {
+
+ if (hasContent(callLogInfo) && hasContent(contentInfo)) {
+ // Create values to insert into database.
+ ContentValues values = new ContentValues();
+
+ // Insert voicemail call log info.
+ values.put(VoicemailArchiveContract.VoicemailArchive.COUNTRY_ISO,
+ callLogInfo.getString(CallLogQuery.COUNTRY_ISO));
+ values.put(VoicemailArchiveContract.VoicemailArchive.GEOCODED_LOCATION,
+ callLogInfo.getString(CallLogQuery.GEOCODED_LOCATION));
+ values.put(VoicemailArchiveContract.VoicemailArchive.CACHED_NAME,
+ callLogInfo.getString(CallLogQuery.CACHED_NAME));
+ values.put(VoicemailArchiveContract.VoicemailArchive.CACHED_NUMBER_TYPE,
+ callLogInfo.getInt(CallLogQuery.CACHED_NUMBER_TYPE));
+ values.put(VoicemailArchiveContract.VoicemailArchive.CACHED_NUMBER_LABEL,
+ callLogInfo.getString(CallLogQuery.CACHED_NUMBER_LABEL));
+ values.put(VoicemailArchiveContract.VoicemailArchive.CACHED_LOOKUP_URI,
+ callLogInfo.getString(CallLogQuery.CACHED_LOOKUP_URI));
+ values.put(VoicemailArchiveContract.VoicemailArchive.CACHED_MATCHED_NUMBER,
+ callLogInfo.getString(CallLogQuery.CACHED_MATCHED_NUMBER));
+ values.put(VoicemailArchiveContract.VoicemailArchive.CACHED_NORMALIZED_NUMBER,
+ callLogInfo.getString(CallLogQuery.CACHED_NORMALIZED_NUMBER));
+ values.put(VoicemailArchiveContract.VoicemailArchive.CACHED_FORMATTED_NUMBER,
+ callLogInfo.getString(CallLogQuery.CACHED_FORMATTED_NUMBER));
+ values.put(VoicemailArchiveContract.VoicemailArchive.NUMBER_PRESENTATION,
+ callLogInfo.getInt(CallLogQuery.NUMBER_PRESENTATION));
+ values.put(VoicemailArchiveContract.VoicemailArchive.ACCOUNT_COMPONENT_NAME,
+ callLogInfo.getString(CallLogQuery.ACCOUNT_COMPONENT_NAME));
+ values.put(VoicemailArchiveContract.VoicemailArchive.ACCOUNT_ID,
+ callLogInfo.getString(CallLogQuery.ACCOUNT_ID));
+ values.put(VoicemailArchiveContract.VoicemailArchive.FEATURES,
+ callLogInfo.getInt(CallLogQuery.FEATURES));
+ values.put(VoicemailArchiveContract.VoicemailArchive.CACHED_PHOTO_URI,
+ callLogInfo.getString(CallLogQuery.CACHED_PHOTO_URI));
+
+ // Insert voicemail content info.
+ values.put(VoicemailArchiveContract.VoicemailArchive.SERVER_ID,
+ contentInfo.getInt(contentInfo.getColumnIndex(
+ VoicemailContract.Voicemails._ID)));
+ values.put(VoicemailArchiveContract.VoicemailArchive.NUMBER,
+ contentInfo.getString(contentInfo.getColumnIndex(
+ VoicemailContract.Voicemails.NUMBER)));
+ values.put(VoicemailArchiveContract.VoicemailArchive.DATE,
+ contentInfo.getLong(contentInfo.getColumnIndex(
+ VoicemailContract.Voicemails.DATE)));
+ values.put(VoicemailArchiveContract.VoicemailArchive.DURATION,
+ contentInfo.getLong(contentInfo.getColumnIndex(
+ VoicemailContract.Voicemails.DURATION)));
+ values.put(VoicemailArchiveContract.VoicemailArchive.MIME_TYPE,
+ contentInfo.getString(contentInfo.getColumnIndex(
+ VoicemailContract.Voicemails.MIME_TYPE)));
+ values.put(VoicemailArchiveContract.VoicemailArchive.TRANSCRIPTION,
+ contentInfo.getString(contentInfo.getColumnIndex(
+ VoicemailContract.Voicemails.TRANSCRIPTION)));
+
+ // Achived is false by default because it is updated after insertion.
+ values.put(VoicemailArchiveContract.VoicemailArchive.ARCHIVED, false);
+
+ return values;
+ }
+ }
+ return null;
+ }
+
+ private boolean hasContent(@Nullable Cursor cursor) {
+ return cursor != null && cursor.moveToFirst();
+ }
+
+ @Nullable
+ private Cursor getCallLogInfoCursor(Uri voicemailUri) {
+ return mResolver.query(
+ ContentUris.withAppendedId(CallLog.Calls.CONTENT_URI_WITH_VOICEMAIL,
+ ContentUris.parseId(voicemailUri)),
+ CallLogQuery._PROJECTION, null, null, null);
+ }
+
+ @Nullable
+ private Cursor getContentInfoCursor(Uri voicemailUri) {
+ return mResolver.query(voicemailUri,
+ new String[] {
+ VoicemailContract.Voicemails._ID,
+ VoicemailContract.Voicemails.NUMBER,
+ VoicemailContract.Voicemails.DATE,
+ VoicemailContract.Voicemails.DURATION,
+ VoicemailContract.Voicemails.MIME_TYPE,
+ VoicemailContract.Voicemails.TRANSCRIPTION,
+ }, null, null, null);
+ }
+
+ @Nullable
+ private Cursor getArchiveExistsCursor(Uri voicemailUri) {
+ return mResolver.query(VoicemailArchiveContract.VoicemailArchive.CONTENT_URI,
+ new String[] {VoicemailArchiveContract.VoicemailArchive._ID},
+ VoicemailArchiveContract.VoicemailArchive.SERVER_ID + "="
+ + ContentUris.parseId(voicemailUri),
+ null,
+ null);
+ }
+}
diff --git a/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java b/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java
index 8c869d1..e5efbec 100644
--- a/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java
+++ b/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java
@@ -258,6 +258,17 @@
}
};
+ private final View.OnClickListener mShareButtonListener = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (mPresenter == null || isArchiving(mVoicemailUri)) {
+ return;
+ }
+ disableUiElements();
+ mPresenter.archiveContent(mVoicemailUri, false);
+ }
+ };
+
private Context mContext;
private VoicemailPlaybackPresenter mPresenter;
private Uri mVoicemailUri;
@@ -339,6 +350,7 @@
mPlaybackSpeakerphone.setOnClickListener(mSpeakerphoneListener);
mDeleteButton.setOnClickListener(mDeleteButtonListener);
mArchiveButton.setOnClickListener(mArchiveButtonListener);
+ mShareButton.setOnClickListener(mShareButtonListener);
mPositionText.setText(formatAsMinutesAndSeconds(0));
mTotalDurationText.setText(formatAsMinutesAndSeconds(0));
diff --git a/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java b/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
index 3151a5e..5924fb4 100644
--- a/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
+++ b/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
@@ -19,11 +19,8 @@
import com.google.common.annotations.VisibleForTesting;
import android.app.Activity;
-import android.content.ContentUris;
-import android.content.ContentValues;
import android.content.Context;
import android.content.ContentResolver;
-import android.content.Context;
import android.content.Intent;
import android.database.ContentObserver;
import android.database.Cursor;
@@ -33,24 +30,19 @@
import android.os.Bundle;
import android.os.Handler;
import android.os.PowerManager;
-import android.provider.CallLog;
import android.provider.VoicemailContract;
-import android.support.annotation.Nullable;
+import android.support.v4.content.FileProvider;
import android.util.Log;
import android.view.WindowManager.LayoutParams;
+import com.android.dialer.R;
import com.android.dialer.calllog.CallLogAsyncTaskUtil;
-import com.android.dialer.calllog.CallLogQuery;
-import com.android.dialer.database.VoicemailArchiveContract;
import com.android.dialer.util.AsyncTaskExecutor;
import com.android.dialer.util.AsyncTaskExecutors;
import com.android.common.io.MoreCloseables;
-import com.android.dialer.util.TelecomUtil;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.io.ByteStreams;
+
+import java.io.File;
import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
@@ -140,6 +132,7 @@
VoicemailPlaybackPresenter.class.getName() + ".IS_SPEAKER_PHONE_ON";
public static final int PLAYBACK_REQUEST = 0;
public static final int ARCHIVE_REQUEST = 1;
+ public static final int SHARE_REQUEST = 2;
/**
* The most recently cached duration. We cache this since we don't want to keep requesting it
@@ -181,6 +174,7 @@
private VoicemailAudioManager mVoicemailAudioManager;
private OnVoicemailDeletedListener mOnVoicemailDeletedListener;
+ private final VoicemailAsyncTaskUtil mVoicemailAsyncTaskUtil;
/**
* Obtain singleton instance of this class. Use a single instance to provide a consistent
@@ -208,6 +202,7 @@
Context context = activity.getApplicationContext();
mAsyncTaskExecutor = AsyncTaskExecutors.createAsyncTaskExecutor();
mVoicemailAudioManager = new VoicemailAudioManager(context, this);
+ mVoicemailAsyncTaskUtil = new VoicemailAsyncTaskUtil(context.getContentResolver());
PowerManager powerManager =
(PowerManager) context.getSystemService(Context.POWER_SERVICE);
if (powerManager.isWakeLockLevelSupported(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK)) {
@@ -493,7 +488,6 @@
private final Handler mFetchResultHandler;
private final Uri mVoicemailUri;
private final int mRequestCode;
- private Uri mArchivedVoicemailUri;
public FetchResultHandler(Handler handler, Uri uri, int code) {
super(handler);
@@ -515,11 +509,7 @@
if (mIsWaitingForResult.getAndSet(false) && mContext != null) {
mContext.getContentResolver().unregisterContentObserver(this);
if (mView != null) {
- if (mRequestCode == ARCHIVE_REQUEST) {
- notifyUiOfArchiveResult(mVoicemailUri, false);
- } else {
- mView.setFetchContentTimeout();
- }
+ mView.setFetchContentTimeout();
}
}
}
@@ -538,13 +528,7 @@
@Override
public Boolean doInBackground(Void... params) {
- boolean hasContent = queryHasContent(mVoicemailUri);
- if (hasContent && mRequestCode == ARCHIVE_REQUEST) {
- mArchivedVoicemailUri =
- performArchiveVoicemailOnBackgroundThread(mVoicemailUri, true);
- return mArchivedVoicemailUri != null;
- }
- return hasContent;
+ return queryHasContent(mVoicemailUri);
}
@Override
@@ -552,11 +536,11 @@
if (hasContent && mContext != null && mIsWaitingForResult.getAndSet(false)) {
mContext.getContentResolver().unregisterContentObserver(
FetchResultHandler.this);
- switch (mRequestCode) {
- case ARCHIVE_REQUEST:
- notifyUiOfArchiveResult(mVoicemailUri, true);
- default:
- prepareContent();
+ prepareContent();
+ if (mRequestCode == ARCHIVE_REQUEST) {
+ startArchiveVoicemailTask(mVoicemailUri, true /* archivedByUser */);
+ } else if (mRequestCode == SHARE_REQUEST) {
+ startArchiveVoicemailTask(mVoicemailUri, false /* archivedByUser */);
}
}
}
@@ -922,148 +906,89 @@
* If voicemail has already been downloaded, go straight to archiving. Otherwise, request
* the voicemail content first.
*/
- public void archiveContent(Uri voicemailUri, boolean archivedByUser) {
- if (!mIsPrepared) {
- requestContent(ARCHIVE_REQUEST);
- } else {
- startArchiveVoicemailTask(voicemailUri, archivedByUser);
- }
- }
-
- /**
- * Asynchronous task used to archive a voicemail given its uri.
- */
- private void startArchiveVoicemailTask(final Uri voicemailUri, final boolean archivedByUser) {
- mAsyncTaskExecutor.submit(Tasks.ARCHIVE_VOICEMAIL, new AsyncTask<Void, Void, Uri>() {
+ public void archiveContent(final Uri voicemailUri, final boolean archivedByUser) {
+ checkForContent(new OnContentCheckedListener() {
@Override
- public Uri doInBackground(Void... params) {
- return performArchiveVoicemailOnBackgroundThread(voicemailUri, archivedByUser);
- }
-
- @Override
- public void onPostExecute(Uri archivedVoicemailUri) {
- notifyUiOfArchiveResult(voicemailUri, archivedVoicemailUri != null);
+ public void onContentChecked(boolean hasContent) {
+ if (!hasContent) {
+ requestContent(archivedByUser ? ARCHIVE_REQUEST : SHARE_REQUEST);
+ } else {
+ startArchiveVoicemailTask(voicemailUri, archivedByUser);
+ }
}
});
}
/**
- * Copy the voicemail information to the local dialer database, and copy
- * the voicemail content to a local file in the dialer application's
- * internal storage (voicemails directory).
- *
- * @param voicemailUri the uri of the voicemail to archive
- * @return If archive was successful, archived voicemail URI, otherwise null.
+ * Asynchronous task used to archive a voicemail given its uri.
*/
- private Uri performArchiveVoicemailOnBackgroundThread(Uri voicemailUri,
- boolean archivedByUser) {
- Cursor callLogInfo = mContext.getContentResolver().query(
- ContentUris.withAppendedId(CallLog.Calls.CONTENT_URI_WITH_VOICEMAIL,
- ContentUris.parseId(mVoicemailUri)),
- CallLogQuery._PROJECTION, null, null, null);
- Cursor contentInfo = mContext.getContentResolver().query(
- voicemailUri, null, null, null, null);
+ protected void startArchiveVoicemailTask(final Uri voicemailUri, final boolean archivedByUser) {
+ mVoicemailAsyncTaskUtil.archiveVoicemailContent(
+ new VoicemailAsyncTaskUtil.OnArchiveVoicemailListener() {
+ @Override
+ public void onArchiveVoicemail(final Uri archivedVoicemailUri) {
+ if (archivedVoicemailUri == null) {
+ notifyUiOfArchiveResult(voicemailUri, false);
+ return;
+ }
- if (callLogInfo == null || contentInfo == null) {
- return null;
- }
+ if (archivedByUser) {
+ setArchivedVoicemailStatusAndUpdateUI(voicemailUri,
+ archivedVoicemailUri, true);
+ } else {
+ sendShareIntent(archivedVoicemailUri);
+ }
+ }
+ }, voicemailUri);
+ }
- callLogInfo.moveToFirst();
- contentInfo.moveToFirst();
+ /**
+ * Sends the intent for sharing the voicemail file.
+ */
+ protected void sendShareIntent(final Uri voicemailUri) {
+ mVoicemailAsyncTaskUtil.getVoicemailFilePath(
+ new VoicemailAsyncTaskUtil.OnGetArchivedVoicemailFilePathListener() {
+ @Override
+ public void onGetArchivedVoicemailFilePath(String filePath) {
+ mView.enableUiElements();
+ if (filePath == null) {
+ mView.setFetchContentTimeout();
+ return;
+ }
+ Uri voicemailFileUri = FileProvider.getUriForFile(
+ mContext,
+ mContext.getString(R.string.contacts_file_provider_authority),
+ new File(filePath));
+ mContext.startActivity(Intent.createChooser(
+ getShareIntent(voicemailFileUri),
+ mContext.getResources().getText(
+ R.string.call_log_share_voicemail)));
+ }
+ }, voicemailUri);
+ }
- // Create values to insert into database
- ContentValues values = new ContentValues();
- values.put(VoicemailArchiveContract.VoicemailArchive.NUMBER,
- contentInfo.getString(contentInfo.getColumnIndex(
- VoicemailContract.Voicemails.NUMBER)));
+ /** Sets archived_by_user field to the given boolean and updates the URI. */
+ private void setArchivedVoicemailStatusAndUpdateUI(
+ final Uri voicemailUri,
+ final Uri archivedVoicemailUri,
+ boolean status) {
+ mVoicemailAsyncTaskUtil.setVoicemailArchiveStatus(
+ new VoicemailAsyncTaskUtil.OnSetVoicemailArchiveStatusListener() {
+ @Override
+ public void onSetVoicemailArchiveStatus(boolean success) {
+ notifyUiOfArchiveResult(voicemailUri, success);
+ }
+ }, archivedVoicemailUri, status);
+ }
- values.put(VoicemailArchiveContract.VoicemailArchive.DATE,
- contentInfo.getLong(contentInfo.getColumnIndex(
- VoicemailContract.Voicemails.DATE)));
-
- values.put(VoicemailArchiveContract.VoicemailArchive.DURATION,
- contentInfo.getLong(contentInfo.getColumnIndex(
- VoicemailContract.Voicemails.DURATION)));
-
- values.put(VoicemailArchiveContract.VoicemailArchive.MIME_TYPE,
- contentInfo.getString(contentInfo.getColumnIndex(
- VoicemailContract.Voicemails.MIME_TYPE)));
-
- values.put(VoicemailArchiveContract.VoicemailArchive.COUNTRY_ISO,
- callLogInfo.getString(CallLogQuery.COUNTRY_ISO));
-
- values.put(VoicemailArchiveContract.VoicemailArchive.GEOCODED_LOCATION,
- callLogInfo.getString(CallLogQuery.GEOCODED_LOCATION));
-
- values.put(VoicemailArchiveContract.VoicemailArchive.CACHED_NAME,
- callLogInfo.getString(CallLogQuery.CACHED_NAME));
-
- values.put(VoicemailArchiveContract.VoicemailArchive.CACHED_NUMBER_TYPE,
- callLogInfo.getInt(CallLogQuery.CACHED_NUMBER_TYPE));
-
- values.put(VoicemailArchiveContract.VoicemailArchive.CACHED_NUMBER_LABEL,
- callLogInfo.getString(CallLogQuery.CACHED_NUMBER_LABEL));
-
- values.put(VoicemailArchiveContract.VoicemailArchive.CACHED_LOOKUP_URI,
- callLogInfo.getString(CallLogQuery.CACHED_LOOKUP_URI));
-
- values.put(VoicemailArchiveContract.VoicemailArchive.CACHED_MATCHED_NUMBER,
- callLogInfo.getString(CallLogQuery.CACHED_MATCHED_NUMBER));
-
- values.put(VoicemailArchiveContract.VoicemailArchive.CACHED_NORMALIZED_NUMBER,
- callLogInfo.getString(CallLogQuery.CACHED_NORMALIZED_NUMBER));
-
- values.put(VoicemailArchiveContract.VoicemailArchive.CACHED_FORMATTED_NUMBER,
- callLogInfo.getString(CallLogQuery.CACHED_FORMATTED_NUMBER));
-
- values.put(VoicemailArchiveContract.VoicemailArchive.ARCHIVED, archivedByUser);
-
- values.put(VoicemailArchiveContract.VoicemailArchive.NUMBER_PRESENTATION,
- callLogInfo.getInt(CallLogQuery.NUMBER_PRESENTATION));
-
- values.put(VoicemailArchiveContract.VoicemailArchive.ACCOUNT_COMPONENT_NAME,
- callLogInfo.getString(CallLogQuery.ACCOUNT_COMPONENT_NAME));
-
- values.put(VoicemailArchiveContract.VoicemailArchive.ACCOUNT_ID,
- callLogInfo.getString(CallLogQuery.ACCOUNT_ID));
-
- values.put(VoicemailArchiveContract.VoicemailArchive.FEATURES,
- callLogInfo.getInt(CallLogQuery.FEATURES));
-
- values.put(VoicemailArchiveContract.VoicemailArchive.SERVER_ID,
- contentInfo.getInt(contentInfo.getColumnIndex(
- VoicemailContract.Voicemails._ID)));
-
- values.put(VoicemailArchiveContract.VoicemailArchive.TRANSCRIPTION,
- contentInfo.getString(contentInfo.getColumnIndex(
- VoicemailContract.Voicemails.TRANSCRIPTION)));
-
- values.put(VoicemailArchiveContract.VoicemailArchive.CACHED_PHOTO_URI,
- callLogInfo.getLong(CallLogQuery.CACHED_PHOTO_URI));
-
- callLogInfo.close();
- contentInfo.close();
-
- // Insert info into dialer database
- Uri archivedVoicemailUri = mContext.getContentResolver().insert(
- VoicemailArchiveContract.VoicemailArchive.CONTENT_URI, values);
- try {
- // Copy voicemail content to a local file
- InputStream inputStream = mContext.getContentResolver()
- .openInputStream(voicemailUri);
- OutputStream outputStream = mContext.getContentResolver()
- .openOutputStream(archivedVoicemailUri);
-
- ByteStreams.copy(inputStream, outputStream);
- inputStream.close();
- outputStream.close();
- } catch (IOException e) {
- // Roll back insert if new file creation failed
- mContext.getContentResolver().delete(archivedVoicemailUri, null, null);
- Log.w(TAG, "Failed to copy voicemail content to temporary file");
- return null;
- }
- return archivedVoicemailUri;
+ private Intent getShareIntent(Uri voicemailFileUri) {
+ Intent shareIntent = new Intent();
+ shareIntent.setAction(Intent.ACTION_SEND);
+ shareIntent.putExtra(Intent.EXTRA_STREAM, voicemailFileUri);
+ shareIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ shareIntent.setType(mContext.getContentResolver()
+ .getType(voicemailFileUri));
+ return shareIntent;
}
@VisibleForTesting
diff --git a/tests/src/com/android/dialer/database/VoicemailArchiveProviderTest.java b/tests/src/com/android/dialer/database/VoicemailArchiveProviderTest.java
index cec7e05..abc2dc5 100644
--- a/tests/src/com/android/dialer/database/VoicemailArchiveProviderTest.java
+++ b/tests/src/com/android/dialer/database/VoicemailArchiveProviderTest.java
@@ -79,6 +79,33 @@
assertTrue(doesFileExist());
}
+ public void testQuery_createFileMimeTypeIsAMR() throws Exception {
+ insertVoicemailWithMimeType("audio/amr");
+ assertTrue(doesRowExist());
+ assertFalse(doesFileExist());
+ createFile();
+ assertTrue(doesFileExist());
+ assertEquals("amr", getFileExtension(getFilePath()));
+ }
+
+ public void testQuery_createFileMimeTypeIsMP3() throws Exception {
+ insertVoicemailWithMimeType("audio/mpeg");
+ assertTrue(doesRowExist());
+ assertFalse(doesFileExist());
+ createFile();
+ assertTrue(doesFileExist());
+ assertEquals("mp3", getFileExtension(getFilePath()));
+ }
+
+ public void testQuery_createFileMimeTypeNotExists() throws Exception {
+ insertVoicemailWithMimeType(TEST_STRING);
+ assertTrue(doesRowExist());
+ assertFalse(doesFileExist());
+ createFile();
+ assertTrue(doesFileExist());
+ assertEquals("", getFileExtension(getFilePath()));
+ }
+
public void testQuery() {
insertVoicemail();
updateCursor();
@@ -179,6 +206,13 @@
return voicemailFile.exists();
}
+ private static String getFileExtension(String filePath) {
+ File file = new File(filePath);
+ String fileName = file.getName();
+ int index = fileName.lastIndexOf(".");
+ return index > 0 ? fileName.substring(index + 1) : "";
+ }
+
private void assertCursorCount(int count) {
assertEquals(count, mCursor.getCount());
}
@@ -196,6 +230,12 @@
mVoicemailUri = mResolver.insert(VoicemailArchive.CONTENT_URI, getTestValues());
}
+ private void insertVoicemailWithMimeType(String mimeType) {
+ ContentValues values = getTestValues();
+ values.put(VoicemailArchive.MIME_TYPE, mimeType);
+ mVoicemailUri = mResolver.insert(VoicemailArchive.CONTENT_URI, values);
+ }
+
private void updateCursor() {
mCursor = mResolver.query(mVoicemailUri, null, null, null, null);
assertEquals(true, mCursor.getCount() > 0);
@@ -226,7 +266,7 @@
return mCursor.getString(mCursor.getColumnIndex(VoicemailArchive._DATA));
}
- private ContentValues getTestValues() {
+ private static ContentValues getTestValues() {
ContentValues values = new ContentValues();
values.put(VoicemailArchive.NUMBER, TEST_NUMBER);
values.put(VoicemailArchive.MIME_TYPE, TEST_MIME_TYPE);
diff --git a/tests/src/com/android/dialer/voicemail/VoicemailActivityInstrumentationTestCase2.java b/tests/src/com/android/dialer/voicemail/VoicemailActivityInstrumentationTestCase2.java
index a992e8b..cabaf67 100644
--- a/tests/src/com/android/dialer/voicemail/VoicemailActivityInstrumentationTestCase2.java
+++ b/tests/src/com/android/dialer/voicemail/VoicemailActivityInstrumentationTestCase2.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright (C) 2016 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.dialer.voicemail;
import android.app.Activity;
@@ -23,7 +39,6 @@
import static com.android.dialer.voicemail.VoicemailPlaybackPresenter.Tasks.CHECK_FOR_CONTENT;
-
/**
* Common methods and attributes between {@link VoicemailArchiveTest} and
* {@link VoicemailPlaybackTest}.
diff --git a/tests/src/com/android/dialer/voicemail/VoicemailArchiveTest.java b/tests/src/com/android/dialer/voicemail/VoicemailArchiveTest.java
index 8cbd344..bbd5edc 100644
--- a/tests/src/com/android/dialer/voicemail/VoicemailArchiveTest.java
+++ b/tests/src/com/android/dialer/voicemail/VoicemailArchiveTest.java
@@ -15,14 +15,12 @@
*/
package com.android.dialer.voicemail;
+
import android.content.ContentUris;
import android.content.ContentValues;
-
-import com.android.dialer.R;
-import com.android.dialer.database.VoicemailArchiveContract.VoicemailArchive;
-
import android.content.res.AssetManager;
-import android.test.suitebuilder.annotation.Suppress;
+
+import com.android.dialer.database.VoicemailArchiveContract.VoicemailArchive;
import java.io.IOException;
import java.io.InputStream;
diff --git a/tests/src/com/android/dialer/voicemail/VoicemailAsyncTaskUtilTest.java b/tests/src/com/android/dialer/voicemail/VoicemailAsyncTaskUtilTest.java
new file mode 100644
index 0000000..d98d9fa
--- /dev/null
+++ b/tests/src/com/android/dialer/voicemail/VoicemailAsyncTaskUtilTest.java
@@ -0,0 +1,388 @@
+/*
+ * Copyright (C) 2016 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.dialer.voicemail;
+
+import android.content.ContentUris;
+import android.content.ContentValues;
+import android.content.res.AssetFileDescriptor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.ParcelFileDescriptor;
+import android.provider.CallLog;
+import android.provider.VoicemailContract;
+import android.test.InstrumentationTestCase;
+import android.test.mock.MockContentResolver;
+
+import com.android.contacts.common.test.mocks.MockContentProvider;
+import com.android.contacts.common.test.mocks.MockContentProvider.Query;
+import com.android.dialer.calllog.CallLogQuery;
+import com.android.dialer.database.VoicemailArchiveContract;
+import com.android.dialer.util.AsyncTaskExecutors;
+import com.android.dialer.util.FakeAsyncTaskExecutor;
+import com.android.dialer.voicemail.VoicemailAsyncTaskUtil.OnGetArchivedVoicemailFilePathListener;
+import com.android.dialer.voicemail.VoicemailAsyncTaskUtil.OnArchiveVoicemailListener;
+import com.android.dialer.voicemail.VoicemailAsyncTaskUtil.OnSetVoicemailArchiveStatusListener;
+
+import org.junit.Rule;
+import org.junit.rules.TemporaryFolder;
+import static org.mockito.Mockito.*;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+public class VoicemailAsyncTaskUtilTest extends InstrumentationTestCase {
+ private static final String TEST_MIME_TYPE = "audio/mp3";
+ private static final String TEST_NUMBER = "+1412555555";
+ private static final String TEST_FILE_PATH = "TEST_PATH";
+ private static final String TEST_TRANSCRIPTION = "TEST_TRANSCRIPTION";
+ private static final long TEST_DATE = 0;
+ private static final long TEST_DURATION = 0;
+ private static final int TEST_SERVER_ID = 1;
+ private static final int TEST_ID = 2;
+ private static final Uri ARCHIVED_VOICEMAIL_URI =
+ VoicemailArchiveContract.VoicemailArchive.buildWithId(TEST_ID);
+ private static final Uri VOICEMAIL_URI = VoicemailContract.Voicemails.CONTENT_URI
+ .buildUpon().appendPath(Integer.toString(TEST_SERVER_ID)).build();
+ private static final String[] CALLLOG_QUERY_PROJECTION = new String[] {
+ CallLog.Calls._ID,
+ CallLog.Calls.NUMBER,
+ CallLog.Calls.DATE,
+ CallLog.Calls.DURATION,
+ CallLog.Calls.TYPE,
+ CallLog.Calls.COUNTRY_ISO,
+ CallLog.Calls.VOICEMAIL_URI,
+ CallLog.Calls.GEOCODED_LOCATION,
+ CallLog.Calls.CACHED_NAME,
+ CallLog.Calls.CACHED_NUMBER_TYPE,
+ CallLog.Calls.CACHED_NUMBER_LABEL,
+ CallLog.Calls.CACHED_LOOKUP_URI,
+ CallLog.Calls.CACHED_MATCHED_NUMBER,
+ CallLog.Calls.CACHED_NORMALIZED_NUMBER,
+ CallLog.Calls.CACHED_PHOTO_ID,
+ CallLog.Calls.CACHED_FORMATTED_NUMBER,
+ CallLog.Calls.IS_READ,
+ CallLog.Calls.NUMBER_PRESENTATION,
+ CallLog.Calls.PHONE_ACCOUNT_COMPONENT_NAME,
+ CallLog.Calls.PHONE_ACCOUNT_ID,
+ CallLog.Calls.FEATURES,
+ CallLog.Calls.DATA_USAGE,
+ CallLog.Calls.TRANSCRIPTION,
+ CallLog.Calls.CACHED_PHOTO_URI
+ };
+ private static final String[] VOICEMAIL_PROJECTION = new String[] {
+ VoicemailContract.Voicemails._ID,
+ VoicemailContract.Voicemails.NUMBER,
+ VoicemailContract.Voicemails.DATE,
+ VoicemailContract.Voicemails.DURATION,
+ VoicemailContract.Voicemails.MIME_TYPE,
+ VoicemailContract.Voicemails.TRANSCRIPTION,
+ };
+
+ private final MockContentResolver mContentResolver = new MockContentResolver();
+ private final MockContentProvider mArchiveContentProvider = new TestVoicemailContentProvider();
+ private final MockContentProvider mVoicemailContentProvider =
+ new TestVoicemailContentProvider();
+ private final MockContentProvider mCallLogContentProvider = new MockContentProvider();
+ @Rule
+ private final TemporaryFolder mTemporaryFolder = new TemporaryFolder();
+
+ private VoicemailAsyncTaskUtil mVoicemailAsyncTaskUtil;
+ private FakeAsyncTaskExecutor mFakeAsyncTaskExecutor;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ mFakeAsyncTaskExecutor = new FakeAsyncTaskExecutor(getInstrumentation());
+ AsyncTaskExecutors.setFactoryForTest(mFakeAsyncTaskExecutor.getFactory());
+ mContentResolver.addProvider(VoicemailArchiveContract.AUTHORITY, mArchiveContentProvider);
+ mContentResolver.addProvider(VoicemailContract.AUTHORITY, mVoicemailContentProvider);
+ mContentResolver.addProvider(CallLog.AUTHORITY, mCallLogContentProvider);
+ mVoicemailAsyncTaskUtil = new VoicemailAsyncTaskUtil(mContentResolver);
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ AsyncTaskExecutors.setFactoryForTest(null);
+ super.tearDown();
+ }
+
+ public void testGetVoicemailFilePath_VoicemailExists() throws Throwable {
+ newVoicemailArchiveQuery().withAnyProjection()
+ .returnRow(getCombinedContentValuesWithData());
+ final OnGetArchivedVoicemailFilePathListener listener =
+ mock(OnGetArchivedVoicemailFilePathListener.class);
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mVoicemailAsyncTaskUtil.getVoicemailFilePath(listener, ARCHIVED_VOICEMAIL_URI);
+ }
+ });
+ mFakeAsyncTaskExecutor.runTask(VoicemailAsyncTaskUtil.Tasks.GET_VOICEMAIL_FILE_PATH);
+ verify(listener).onGetArchivedVoicemailFilePath(TEST_FILE_PATH);
+ verifyQueries();
+ }
+
+ public void testGetVoicemailFilePath_VoicemailNotExists() throws Throwable {
+ newVoicemailArchiveFakeQuery().withAnyProjection().returnEmptyCursor();
+ final OnGetArchivedVoicemailFilePathListener listener =
+ mock(OnGetArchivedVoicemailFilePathListener.class);
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mVoicemailAsyncTaskUtil.getVoicemailFilePath(listener, getFakeVoicemailUri());
+ }
+ });
+ mFakeAsyncTaskExecutor.runTask(VoicemailAsyncTaskUtil.Tasks.GET_VOICEMAIL_FILE_PATH);
+ verify(listener).onGetArchivedVoicemailFilePath(null);
+ verifyQueries();
+ }
+
+ public void testSetVoicemailArchiveStatus_VoicemailNotExists() throws Throwable {
+ newVoicemailArchiveNotExistsUpdateQuery(true);
+ final OnSetVoicemailArchiveStatusListener listener =
+ mock(OnSetVoicemailArchiveStatusListener.class);
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mVoicemailAsyncTaskUtil.setVoicemailArchiveStatus(listener,
+ getFakeVoicemailUri(), true);
+ }
+ });
+ mFakeAsyncTaskExecutor.runTask(VoicemailAsyncTaskUtil.Tasks.SET_VOICEMAIL_ARCHIVE_STATUS);
+ verify(listener).onSetVoicemailArchiveStatus(false);
+ verifyQueries();
+ }
+
+ public void testSetVoicemailArchiveStatus_VoicemailExists() throws Throwable {
+ newVoicemailArchiveExistsUpdateQuery(true);
+ final OnSetVoicemailArchiveStatusListener listener =
+ mock(OnSetVoicemailArchiveStatusListener.class);
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mVoicemailAsyncTaskUtil.setVoicemailArchiveStatus(listener,
+ ARCHIVED_VOICEMAIL_URI, true);
+ }
+ });
+ mFakeAsyncTaskExecutor.runTask(VoicemailAsyncTaskUtil.Tasks.SET_VOICEMAIL_ARCHIVE_STATUS);
+ verify(listener).onSetVoicemailArchiveStatus(true);
+ verifyQueries();
+ }
+
+ public void testArchiveVoicemailContent_ArchiveNotExists() throws Throwable {
+ newVoicemailArchiveExistsQuery().returnEmptyCursor();
+ newQueryCallLogInfo().returnRow(getCallLogContentValues());
+ newVoicemailQuery().returnRow(getVoicemailContentValues());
+ newVoicemailArchiveInsert();
+ final OnArchiveVoicemailListener listener = mock(OnArchiveVoicemailListener.class);
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mVoicemailAsyncTaskUtil.archiveVoicemailContent(listener, VOICEMAIL_URI);
+ }
+ });
+ mFakeAsyncTaskExecutor.runTask(VoicemailAsyncTaskUtil.Tasks.ARCHIVE_VOICEMAIL_CONTENT);
+ verify(listener).onArchiveVoicemail(ARCHIVED_VOICEMAIL_URI);
+ verifyQueries();
+ }
+
+ public void testArchiveVoicemailContent_ArchiveExists() throws Throwable {
+ newVoicemailArchiveExistsQuery().returnRow(getCombinedValuesWithId());
+ final OnArchiveVoicemailListener listener = mock(OnArchiveVoicemailListener.class);
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mVoicemailAsyncTaskUtil.archiveVoicemailContent(listener, VOICEMAIL_URI);
+ }
+ });
+ mFakeAsyncTaskExecutor.runTask(VoicemailAsyncTaskUtil.Tasks.ARCHIVE_VOICEMAIL_CONTENT);
+ verify(listener).onArchiveVoicemail(ARCHIVED_VOICEMAIL_URI);
+ verifyQueries();
+ }
+
+ public void testArchiveVoicemailContent_CallLogInfoNotExists() throws Throwable {
+ newVoicemailArchiveExistsQuery().returnEmptyCursor();
+ newQueryCallLogInfo().returnEmptyCursor();
+ newVoicemailQuery().returnEmptyCursor();
+ final OnArchiveVoicemailListener listener = mock(OnArchiveVoicemailListener.class);
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mVoicemailAsyncTaskUtil.archiveVoicemailContent(listener, VOICEMAIL_URI);
+ }
+ });
+ mFakeAsyncTaskExecutor.runTask(VoicemailAsyncTaskUtil.Tasks.ARCHIVE_VOICEMAIL_CONTENT);
+ verify(listener).onArchiveVoicemail(null);
+ verifyQueries();
+ }
+
+ private Query newVoicemailArchiveQuery() {
+ return mArchiveContentProvider.expectQuery(ARCHIVED_VOICEMAIL_URI);
+ }
+
+ private Query newVoicemailArchiveFakeQuery() {
+ return mArchiveContentProvider.expectQuery(getFakeVoicemailUri());
+ }
+
+ private Query newQueryCallLogInfo() {
+ return mCallLogContentProvider.expectQuery(ContentUris.withAppendedId(
+ CallLog.Calls.CONTENT_URI_WITH_VOICEMAIL, ContentUris.parseId(VOICEMAIL_URI)))
+ .withProjection(CALLLOG_QUERY_PROJECTION);
+ }
+
+ private Query newVoicemailQuery() {
+ return mVoicemailContentProvider.expectQuery(VOICEMAIL_URI).withAnySelection()
+ .withProjection(VOICEMAIL_PROJECTION);
+ }
+
+ private Query newVoicemailArchiveExistsQuery() {
+ return mArchiveContentProvider.expectQuery(
+ VoicemailArchiveContract.VoicemailArchive.CONTENT_URI)
+ .withSelection(VoicemailArchiveContract.VoicemailArchive.SERVER_ID + "="
+ + ContentUris.parseId(VOICEMAIL_URI), (String[]) null)
+ .withProjection(VoicemailArchiveContract.VoicemailArchive._ID);
+ }
+
+ private void newVoicemailArchiveInsert() {
+ mArchiveContentProvider.expectInsert(
+ VoicemailArchiveContract.VoicemailArchive.CONTENT_URI, getCombinedContentValues(),
+ ARCHIVED_VOICEMAIL_URI);
+ }
+
+ private void newVoicemailArchiveNotExistsUpdateQuery(boolean status) {
+ mArchiveContentProvider.expectUpdate(getFakeVoicemailUri(),
+ getArchiveStatusUpdateValues(status), null, null).returnRowsAffected(0);
+ }
+
+ private void newVoicemailArchiveExistsUpdateQuery(boolean status) {
+ mArchiveContentProvider.expectUpdate(ARCHIVED_VOICEMAIL_URI,
+ getArchiveStatusUpdateValues(status), null, null).returnRowsAffected(1);
+ }
+
+ private static ContentValues getCallLogContentValues() {
+ ContentValues values = new ContentValues();
+ values.put(CALLLOG_QUERY_PROJECTION[CallLogQuery.GEOCODED_LOCATION], "");
+ values.put(CALLLOG_QUERY_PROJECTION[CallLogQuery.CACHED_NAME], "");
+ values.put(CALLLOG_QUERY_PROJECTION[CallLogQuery.COUNTRY_ISO], "");
+ values.put(CALLLOG_QUERY_PROJECTION[CallLogQuery.CACHED_NUMBER_TYPE], 0);
+ values.put(CALLLOG_QUERY_PROJECTION[CallLogQuery.CACHED_NUMBER_LABEL], "");
+ values.put(CALLLOG_QUERY_PROJECTION[CallLogQuery.CACHED_LOOKUP_URI], "");
+ values.put(CALLLOG_QUERY_PROJECTION[CallLogQuery.CACHED_MATCHED_NUMBER], "");
+ values.put(CALLLOG_QUERY_PROJECTION[CallLogQuery.CACHED_NORMALIZED_NUMBER], "");
+ values.put(CALLLOG_QUERY_PROJECTION[CallLogQuery.CACHED_FORMATTED_NUMBER], "");
+ values.put(CALLLOG_QUERY_PROJECTION[CallLogQuery.NUMBER_PRESENTATION], 0);
+ values.put(CALLLOG_QUERY_PROJECTION[CallLogQuery.ACCOUNT_COMPONENT_NAME], "");
+ values.put(CALLLOG_QUERY_PROJECTION[CallLogQuery.ACCOUNT_ID], "");
+ values.put(CALLLOG_QUERY_PROJECTION[CallLogQuery.FEATURES], 0);
+ values.put(CALLLOG_QUERY_PROJECTION[23], "");
+ return values;
+ }
+
+ private static ContentValues getVoicemailContentValues() {
+ ContentValues values = new ContentValues();
+ values.put(VoicemailContract.Voicemails.NUMBER, TEST_NUMBER);
+ values.put(VoicemailContract.Voicemails.DATE, TEST_DATE);
+ values.put(VoicemailContract.Voicemails.DURATION, TEST_DURATION);
+ values.put(VoicemailContract.Voicemails.MIME_TYPE, TEST_MIME_TYPE);
+ values.put(VoicemailContract.Voicemails._ID, TEST_SERVER_ID);
+ values.put(VoicemailContract.Voicemails.TRANSCRIPTION, TEST_TRANSCRIPTION);
+ values.put("_data", TEST_FILE_PATH); // VoicemailContract.Voicemails._DATA
+ return values;
+ }
+
+ private static ContentValues getCombinedContentValues() {
+ ContentValues values = new ContentValues();
+ // Call log info
+ values.put(VoicemailArchiveContract.VoicemailArchive.GEOCODED_LOCATION, "");
+ values.put(VoicemailArchiveContract.VoicemailArchive.CACHED_NAME, "");
+ values.put(VoicemailArchiveContract.VoicemailArchive.CACHED_NUMBER_TYPE, 0);
+ values.put(VoicemailArchiveContract.VoicemailArchive.CACHED_NUMBER_LABEL, "");
+ values.put(VoicemailArchiveContract.VoicemailArchive.CACHED_LOOKUP_URI, "");
+ values.put(VoicemailArchiveContract.VoicemailArchive.CACHED_MATCHED_NUMBER, "");
+ values.put(VoicemailArchiveContract.VoicemailArchive.CACHED_NORMALIZED_NUMBER, "");
+ values.put(VoicemailArchiveContract.VoicemailArchive.CACHED_FORMATTED_NUMBER, "");
+ values.put(VoicemailArchiveContract.VoicemailArchive.NUMBER_PRESENTATION, 0);
+ values.put(VoicemailArchiveContract.VoicemailArchive.ACCOUNT_COMPONENT_NAME, "");
+ values.put(VoicemailArchiveContract.VoicemailArchive.ACCOUNT_ID, "");
+ values.put(VoicemailArchiveContract.VoicemailArchive.FEATURES, 0);
+ values.put(VoicemailArchiveContract.VoicemailArchive.CACHED_PHOTO_URI, "");
+ values.put(VoicemailArchiveContract.VoicemailArchive.COUNTRY_ISO, "");
+
+ // Voicemail content info
+ values.put(VoicemailArchiveContract.VoicemailArchive.NUMBER, TEST_NUMBER);
+ values.put(VoicemailArchiveContract.VoicemailArchive.DATE, TEST_DATE);
+ values.put(VoicemailArchiveContract.VoicemailArchive.DURATION, TEST_DURATION);
+ values.put(VoicemailArchiveContract.VoicemailArchive.MIME_TYPE, TEST_MIME_TYPE);
+ values.put(VoicemailArchiveContract.VoicemailArchive.SERVER_ID, TEST_SERVER_ID);
+ values.put(VoicemailArchiveContract.VoicemailArchive.TRANSCRIPTION, TEST_TRANSCRIPTION);
+
+ // Custom fields
+ values.put(VoicemailArchiveContract.VoicemailArchive.ARCHIVED, false);
+ return values;
+ }
+
+ private static ContentValues getCombinedContentValuesWithData() {
+ ContentValues values = getCombinedContentValues();
+ values.put(VoicemailArchiveContract.VoicemailArchive._DATA, TEST_FILE_PATH);
+ return values;
+ }
+
+ private static ContentValues getCombinedValuesWithId() {
+ ContentValues values = getCombinedContentValuesWithData();
+ values.put(VoicemailArchiveContract.VoicemailArchive._ID, TEST_ID);
+ return values;
+ }
+
+ private static ContentValues getArchiveStatusUpdateValues(boolean status) {
+ ContentValues values = new ContentValues();
+ values.put(VoicemailArchiveContract.VoicemailArchive.ARCHIVED, status);
+ return values;
+ }
+
+ private static Uri getFakeVoicemailUri() {
+ return VoicemailArchiveContract.VoicemailArchive.buildWithId(0);
+ }
+
+ private void verifyQueries() {
+ mArchiveContentProvider.verify();
+ mCallLogContentProvider.verify();
+ mVoicemailContentProvider.verify();
+ }
+
+ private class TestVoicemailContentProvider extends MockContentProvider {
+ @Override
+ public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
+ int modeBits = ParcelFileDescriptor.parseMode(mode);
+ try {
+ return ParcelFileDescriptor.open(mTemporaryFolder.newFile(), modeBits);
+ } catch (IOException e) {
+ return null;
+ }
+ }
+
+ @Override
+ public AssetFileDescriptor openTypedAssetFile(Uri uri, String mimeTypeFilter, Bundle opts) {
+ try {
+ return new AssetFileDescriptor(openFile(uri, "r"), 0,
+ AssetFileDescriptor.UNKNOWN_LENGTH);
+ } catch (FileNotFoundException e) {
+ return null;
+ }
+ }
+ }
+}
+
diff --git a/tests/src/com/android/dialer/voicemail/VoicemailPlaybackTest.java b/tests/src/com/android/dialer/voicemail/VoicemailPlaybackTest.java
index abd582b..be9905e 100644
--- a/tests/src/com/android/dialer/voicemail/VoicemailPlaybackTest.java
+++ b/tests/src/com/android/dialer/voicemail/VoicemailPlaybackTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,10 +16,14 @@
package com.android.dialer.voicemail;
+import android.content.ContentUris;
+import android.database.Cursor;
+import android.net.Uri;
import android.test.suitebuilder.annotation.Suppress;
import com.android.dialer.calllog.CallLogActivity;
-
+import com.android.dialer.database.VoicemailArchiveContract;
+import static com.android.dialer.voicemail.VoicemailAsyncTaskUtil.Tasks.ARCHIVE_VOICEMAIL_CONTENT;
import static com.android.dialer.voicemail.VoicemailPlaybackPresenter.Tasks.CHECK_FOR_CONTENT;
/**
@@ -38,6 +42,12 @@
mPresenter = VoicemailPlaybackPresenter.getInstance(getActivity(), null);
}
+ @Override
+ public void tearDown() throws Exception {
+ cleanUpArchivedVoicemailUri();
+ super.tearDown();
+ }
+
@Suppress
public void testWhenCheckForContentCompletes() throws Throwable {
setUriForRealFileVoicemailEntry();
@@ -54,4 +64,82 @@
assertStateTextContains("Loading voicemail");
}
+
+ public void testArchiveContent() throws Throwable {
+ setUriForRealFileVoicemailEntry();
+ setPlaybackViewForPresenter();
+ mFakeAsyncTaskExecutor.runTask(CHECK_FOR_CONTENT);
+
+ getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ mPresenter.archiveContent(mVoicemailUri, true);
+ }
+ });
+ mFakeAsyncTaskExecutor.runTask(CHECK_FOR_CONTENT);
+ mFakeAsyncTaskExecutor.runTask(ARCHIVE_VOICEMAIL_CONTENT);
+ getInstrumentation().waitForIdleSync();
+ assertVoicemailArchived();
+ }
+
+ public void testShareContent() throws Throwable {
+ setUriForRealFileVoicemailEntry();
+ setPlaybackViewForPresenter();
+ mFakeAsyncTaskExecutor.runTask(CHECK_FOR_CONTENT);
+
+ getInstrumentation().runOnMainSync(new Runnable() {
+ @Override
+ public void run() {
+ mPresenter.archiveContent(mVoicemailUri, false);
+ }
+ });
+ mFakeAsyncTaskExecutor.runTask(CHECK_FOR_CONTENT);
+ mFakeAsyncTaskExecutor.runTask(ARCHIVE_VOICEMAIL_CONTENT);
+ getInstrumentation().waitForIdleSync();
+ assertVoicemailArchived();
+ }
+
+ private void assertVoicemailArchived() {
+ try (Cursor cursor = getArchivedVoicemailCursor()) {
+ assertTrue(hasContent(cursor));
+ assertEquals(ContentUris.parseId(mVoicemailUri), getRowServerId(cursor));
+ } catch (Exception e) {
+ fail("Voicemail was not archived: " + e.toString());
+ }
+ }
+
+ private void cleanUpArchivedVoicemailUri() {
+ try (Cursor cursor = getArchivedVoicemailCursor()) {
+ if (hasContent(cursor)) {
+ getContentResolver().delete(getRowUri(cursor), null, null);
+ }
+ }
+ }
+
+ private Cursor getArchivedVoicemailCursor() {
+ return getContentResolver().query(
+ VoicemailArchiveContract.VoicemailArchive.CONTENT_URI,
+ new String[] {
+ VoicemailArchiveContract.VoicemailArchive._ID,
+ VoicemailArchiveContract.VoicemailArchive.SERVER_ID
+ },
+ VoicemailArchiveContract.VoicemailArchive.SERVER_ID + "="
+ + ContentUris.parseId(mVoicemailUri),
+ null,
+ null);
+ }
+
+ private int getRowServerId(Cursor cursor) {
+ return cursor
+ .getInt(cursor.getColumnIndex(VoicemailArchiveContract.VoicemailArchive.SERVER_ID));
+ }
+
+ private Uri getRowUri(Cursor cursor) {
+ return VoicemailArchiveContract.VoicemailArchive.buildWithId(cursor.getInt(
+ cursor.getColumnIndex(VoicemailArchiveContract.VoicemailArchive._ID)));
+ }
+
+ private boolean hasContent(Cursor cursor) {
+ return cursor != null && cursor.moveToFirst();
+ }
}
\ No newline at end of file