Merge "Add talkback for long press and remove contact from starred list." into nyc-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index cbe4e1b..c39bd5b 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -32,6 +32,7 @@
     <uses-permission android:name="android.permission.READ_PROFILE" />
     <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
     <uses-permission android:name="android.permission.GET_ACCOUNTS" />
+    <uses-permission android:name="android.permission.GET_ACCOUNTS_PRIVILEGED"/>
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
     <uses-permission android:name="android.permission.INTERNET" />
@@ -68,8 +69,7 @@
         android:supportsRtl="true"
         android:backupAgent='com.android.dialer.DialerBackupAgent'
         android:usesCleartextTraffic="false"
-        android:forceDeviceEncrypted="true"
-        android:encryptionAware="true">
+        android:forceDeviceEncrypted="false">
 
         <meta-data android:name="com.google.android.backup.api_key"
             android:value="AEdPqrEAAAAIBXgtCEKQ6W0PXVnW-ZVia2KmlV2AxsTw3GjAeQ" />
@@ -85,6 +85,7 @@
             android:icon="@mipmap/ic_launcher_phone"
             android:windowSoftInputMode="stateAlwaysHidden|adjustNothing"
             android:resizeableActivity="true"
+            android:encryptionAware="true"
             >
             <intent-filter>
                 <action android:name="android.intent.action.DIAL" />
@@ -158,6 +159,11 @@
             android:exported="false">
         </activity>
 
+        <activity android:name="com.android.dialer.voicemail.VoicemailArchiveActivity"
+            android:label="@string/voicemail_archive_activity_title"
+            android:theme="@style/DialtactsThemeWithoutActionBarOverlay">
+        </activity>
+
         <activity android:name="com.android.dialer.calllog.CallLogActivity"
             android:label="@string/call_log_activity_title"
             android:theme="@style/DialtactsThemeWithoutActionBarOverlay"
@@ -275,10 +281,12 @@
 
         <service
             android:name=".calllog.CallLogNotificationsService"
+            android:encryptionAware="true"
             android:exported="false"
         />
 
-        <receiver android:name=".calllog.MissedCallNotificationReceiver">
+        <receiver android:name=".calllog.MissedCallNotificationReceiver"
+            android:encryptionAware="true">
             <intent-filter>
                 <action android:name="android.telecom.action.SHOW_MISSED_CALLS_NOTIFICATION" />
             </intent-filter>
@@ -312,10 +320,6 @@
                   android:resizeableActivity="true">
         </activity>
 
-        <!-- BroadcastReceiver for receiving Intents from Notification mechanism. -->
-        <receiver android:name="com.android.incallui.NotificationBroadcastReceiver"
-                  android:exported="false" />
-
         <service android:name="com.android.incallui.InCallServiceImpl"
                  android:permission="android.permission.BIND_INCALL_SERVICE"
                  android:encryptionAware="true" >
@@ -327,6 +331,11 @@
             </intent-filter>
         </service>
 
+        <!-- BroadcastReceiver for receiving Intents from Notification mechanism. -->
+        <receiver android:name="com.android.incallui.NotificationBroadcastReceiver"
+            android:encryptionAware="true"
+            android:exported="false" />
+
         <provider
             android:name=".database.FilteredNumberProvider"
             android:authorities="com.android.dialer.database.filterednumberprovider"
diff --git a/InCallUI/res/values-ar/strings.xml b/InCallUI/res/values-ar/strings.xml
index ca24a04..a9b4b1d 100644
--- a/InCallUI/res/values-ar/strings.xml
+++ b/InCallUI/res/values-ar/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"تعليق المكالمة"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"استئناف المكالمة"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"إنهاء المكالمة"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"عرض لوحة الاتصال"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"إخفاء لوحة الاتصال"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"تجاهل"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"إلغاء التجاهل"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"إضافة مكالمة"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"دمج المكالمات"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"تبديل"</string>
diff --git a/InCallUI/res/values-az-rAZ/strings.xml b/InCallUI/res/values-az-rAZ/strings.xml
index 3498d2c..3ce629f 100644
--- a/InCallUI/res/values-az-rAZ/strings.xml
+++ b/InCallUI/res/values-az-rAZ/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Zəngi gözlədin"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Zəngə davam edin"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Zəngi bitirin"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Yığım düymələrini göstərin"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Yığım düymələrini gizlədin"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Susdurun"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Susdurmayın"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Zəng əlavə edin"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Zəngləri birləşdirin"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Dəyişdirin"</string>
diff --git a/InCallUI/res/values-b+sr+Latn/strings.xml b/InCallUI/res/values-b+sr+Latn/strings.xml
index 50562e7..20445ab 100644
--- a/InCallUI/res/values-b+sr+Latn/strings.xml
+++ b/InCallUI/res/values-b+sr+Latn/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Stavi poziv na čekanje"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Nastavi poziv"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Završi poziv"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Prikaži numeričku tastaturu"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Sakrij numeričku tastaturu"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Isključi zvuk"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Uključi zvuk"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Dodaj poziv"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Objedini pozive"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Zameni"</string>
diff --git a/InCallUI/res/values-bg/strings.xml b/InCallUI/res/values-bg/strings.xml
index 9380e54..92baee5 100644
--- a/InCallUI/res/values-bg/strings.xml
+++ b/InCallUI/res/values-bg/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Задържане на обаждането"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Възобновяване на обаждането"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Край на обаждането"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Показване на клавиатурата за набиране"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Скриване на клавиатурата за набиране"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Заглушаване"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Пускане"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Добавяне на обаждане"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Обединяване на обаждания"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Размяна"</string>
diff --git a/InCallUI/res/values-bn-rBD/strings.xml b/InCallUI/res/values-bn-rBD/strings.xml
index 19f229f..a6eb58f 100644
--- a/InCallUI/res/values-bn-rBD/strings.xml
+++ b/InCallUI/res/values-bn-rBD/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"কল হোল্ডে রাখুন"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"কল পুনরায় শুরু করুন"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"কল শেষ করুন"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"ডায়ালপ্যাড দেখান"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"ডায়ালপ্যাড লুকান"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"নিঃশব্দ করুন"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"সশব্দ করুন"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"কল যোগ করুন"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"কলগুলি মার্জ করুন"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"সোয়াপ করুন"</string>
diff --git a/InCallUI/res/values-bs-rBA/strings.xml b/InCallUI/res/values-bs-rBA/strings.xml
new file mode 100644
index 0000000..b64df21
--- /dev/null
+++ b/InCallUI/res/values-bs-rBA/strings.xml
@@ -0,0 +1,350 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+  ~ Copyright (C) 2013 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License
+   -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for phoneAppLabel (4753450867264774000) -->
+    <skip />
+    <!-- no translation found for onHold (527593602772521700) -->
+    <skip />
+    <!-- no translation found for unknown (3646075119047488748) -->
+    <skip />
+    <!-- no translation found for private_num (6081418498487514686) -->
+    <skip />
+    <!-- no translation found for payphone (5743050584468748607) -->
+    <skip />
+    <!-- no translation found for confCall (3181961445236675173) -->
+    <skip />
+    <!-- no translation found for call_lost (8208184291640961172) -->
+    <skip />
+    <!-- no translation found for audio_mode_speaker (6160127758732918123) -->
+    <skip />
+    <!-- no translation found for audio_mode_earpiece (3138677187223932893) -->
+    <skip />
+    <!-- no translation found for audio_mode_wired_headset (583080366967943196) -->
+    <skip />
+    <!-- no translation found for audio_mode_bluetooth (3188504589946495676) -->
+    <skip />
+    <!-- no translation found for wait_prompt_str (3784275777844586675) -->
+    <skip />
+    <!-- no translation found for pause_prompt_str (4507496811727697620) -->
+    <skip />
+    <!-- no translation found for send_button (4054398309483035794) -->
+    <skip />
+    <!-- no translation found for pause_prompt_yes (6738588490007499118) -->
+    <skip />
+    <!-- no translation found for pause_prompt_no (417286529736964178) -->
+    <skip />
+    <!-- no translation found for wild_prompt_str (8178750766679617355) -->
+    <skip />
+    <!-- no translation found for caller_manage_header (4036790479287738218) -->
+    <skip />
+    <!-- no translation found for voicemail_settings_number_label (2951965862286532957) -->
+    <skip />
+    <!-- no translation found for card_title_dialing (5046026076417718916) -->
+    <skip />
+    <!-- no translation found for card_title_redialing (8072468059192027844) -->
+    <skip />
+    <!-- no translation found for card_title_conf_call (1747835072739982104) -->
+    <skip />
+    <!-- no translation found for card_title_incoming_call (4138485434087223132) -->
+    <skip />
+    <!-- no translation found for card_title_incoming_work_call (7000583925426981712) -->
+    <skip />
+    <!-- no translation found for card_title_call_ended (5249815286629136486) -->
+    <skip />
+    <!-- no translation found for card_title_on_hold (5633854828341577689) -->
+    <skip />
+    <!-- no translation found for card_title_hanging_up (3402022578391538671) -->
+    <skip />
+    <!-- no translation found for card_title_in_call (5029165346952099302) -->
+    <skip />
+    <!-- no translation found for card_title_my_phone_number (3749572971322520177) -->
+    <skip />
+    <!-- no translation found for card_title_video_call_connecting (9171270899902894036) -->
+    <skip />
+    <!-- no translation found for card_title_video_call (6519406270853889302) -->
+    <skip />
+    <!-- no translation found for card_title_video_call_requesting (1611293204379882739) -->
+    <skip />
+    <!-- no translation found for card_title_video_call_error (8488074823425848193) -->
+    <skip />
+    <!-- no translation found for card_title_video_call_rejected (2885215432045215465) -->
+    <skip />
+    <!-- no translation found for card_title_callback_number (7646082782307705748) -->
+    <skip />
+    <!-- no translation found for card_title_callback_number_emergency (8916355112472826080) -->
+    <skip />
+    <!-- no translation found for notification_dialing (8080968169444117163) -->
+    <skip />
+    <!-- no translation found for notification_missedCallTitle (2774630248151712215) -->
+    <skip />
+    <!-- no translation found for notification_missedCallsTitle (263275811089605859) -->
+    <skip />
+    <!-- no translation found for notification_missedCallsMsg (69408330370667429) -->
+    <skip />
+    <!-- no translation found for notification_missedCallTicker (1599269453813734699) -->
+    <skip />
+    <!-- no translation found for notification_ongoing_call (8633734299234807397) -->
+    <skip />
+    <!-- no translation found for notification_ongoing_work_call (3465083293325006579) -->
+    <skip />
+    <!-- no translation found for notification_ongoing_call_wifi (4140639349603930166) -->
+    <skip />
+    <!-- no translation found for notification_ongoing_work_call_wifi (8469582753279163976) -->
+    <skip />
+    <!-- no translation found for notification_on_hold (3151343576023182586) -->
+    <skip />
+    <!-- no translation found for notification_incoming_call (5904745644632328863) -->
+    <skip />
+    <!-- no translation found for notification_incoming_work_call (281305845895342925) -->
+    <skip />
+    <!-- no translation found for notification_incoming_call_wifi (8337740714221114955) -->
+    <skip />
+    <!-- no translation found for notification_incoming_work_call_wifi (3248418394186803763) -->
+    <skip />
+    <!-- no translation found for notification_incoming_video_call (7814873581838165772) -->
+    <skip />
+    <!-- no translation found for notification_requesting_video_call (4844596091477863245) -->
+    <skip />
+    <!-- no translation found for notification_voicemail_title (7595628197933709144) -->
+    <skip />
+    <!-- no translation found for notification_voicemail_title_count (1241573926817248239) -->
+    <skip />
+    <!-- no translation found for notification_voicemail_text_format (6496440879085042069) -->
+    <skip />
+    <!-- no translation found for notification_voicemail_no_vm_number (5433652017869242375) -->
+    <skip />
+    <!-- no translation found for notification_network_selection_title (6785177943238085441) -->
+    <skip />
+    <!-- no translation found for notification_network_selection_text (9097902390701009591) -->
+    <skip />
+    <!-- no translation found for notification_action_answer (8418990052527593953) -->
+    <skip />
+    <!-- no translation found for notification_action_end_call (2152010639043225860) -->
+    <skip />
+    <!-- no translation found for notification_action_answer_video (2400233093494856655) -->
+    <skip />
+    <!-- no translation found for notification_action_answer_voice (3206168292649273866) -->
+    <skip />
+    <!-- no translation found for notification_action_accept (8595047032790476122) -->
+    <skip />
+    <!-- no translation found for notification_action_dismiss (1998811618480434300) -->
+    <skip />
+    <!-- no translation found for notification_missedCall_call_back (7855043480614703539) -->
+    <skip />
+    <!-- no translation found for notification_missedCall_message (2407410183079324393) -->
+    <skip />
+    <!-- no translation found for incall_error_power_off (3626117639377110403) -->
+    <skip />
+    <!-- no translation found for incall_error_emergency_only (8704761887752183855) -->
+    <skip />
+    <!-- no translation found for incall_error_out_of_service (1830319376612608339) -->
+    <skip />
+    <!-- no translation found for incall_error_no_phone_number_supplied (3042963797202928322) -->
+    <skip />
+    <!-- no translation found for incall_error_call_failed (2213413937257570551) -->
+    <skip />
+    <!-- no translation found for incall_status_dialed_mmi (8864341962086874751) -->
+    <skip />
+    <!-- no translation found for incall_error_supp_service_unknown (3390926762577861268) -->
+    <skip />
+    <!-- no translation found for incall_error_supp_service_switch (4893764463854753730) -->
+    <skip />
+    <!-- no translation found for incall_error_supp_service_separate (5469628699581380277) -->
+    <skip />
+    <!-- no translation found for incall_error_supp_service_transfer (3220469890457973326) -->
+    <skip />
+    <!-- no translation found for incall_error_supp_service_conference (3100373998543200356) -->
+    <skip />
+    <!-- no translation found for incall_error_supp_service_reject (4543915892409365831) -->
+    <skip />
+    <!-- no translation found for incall_error_supp_service_hangup (101167589969625637) -->
+    <skip />
+    <!-- no translation found for incall_call_type_label_sip (1327822795765282192) -->
+    <skip />
+    <!-- no translation found for emergency_enable_radio_dialog_title (7882321703828314787) -->
+    <skip />
+    <!-- no translation found for emergency_enable_radio_dialog_message (4382752053654184327) -->
+    <skip />
+    <!-- no translation found for emergency_enable_radio_dialog_retry (1672288458940152814) -->
+    <skip />
+    <!-- no translation found for dial_emergency_error (582305854626092376) -->
+    <skip />
+    <!-- no translation found for dial_emergency_empty_error (199888628163390267) -->
+    <skip />
+    <!-- no translation found for dialerKeyboardHintText (8533449463925408141) -->
+    <skip />
+    <!-- no translation found for onscreenHoldText_unselected (4509232821220492533) -->
+    <skip />
+    <!-- no translation found for onscreenHoldText_selected (2988100347384733032) -->
+    <skip />
+    <!-- no translation found for onscreenEndCallText (1416981593311001074) -->
+    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Prikaži telefonsku tipkovnicu"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Sakrij telefonsku tipkovnicu"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Isključi zvuk"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Uključi zvuk"</string>
+    <!-- no translation found for onscreenAddCallText (5577548650466595598) -->
+    <skip />
+    <!-- no translation found for onscreenMergeCallsText (4946687067221459357) -->
+    <skip />
+    <!-- no translation found for onscreenSwapCallsText (8272036175646846198) -->
+    <skip />
+    <!-- no translation found for onscreenManageCallsText (5491297234697209677) -->
+    <skip />
+    <!-- no translation found for onscreenManageConferenceText (7043499154946980355) -->
+    <skip />
+    <!-- no translation found for onscreenConferenceText (171855677185793827) -->
+    <skip />
+    <!-- no translation found for onscreenManageText (7625850560625708322) -->
+    <skip />
+    <!-- no translation found for onscreenAudioText (8963459818052898299) -->
+    <skip />
+    <!-- no translation found for onscreenVideoCallText (1578940167445068369) -->
+    <skip />
+    <!-- no translation found for onscreenChangeToVoiceText (6249580619992009182) -->
+    <skip />
+    <!-- no translation found for onscreenSwitchCameraText (7141261218152736690) -->
+    <skip />
+    <!-- no translation found for onscreenPauseVideoText (1268768027709892604) -->
+    <skip />
+    <!-- no translation found for onscreenOverflowText (7932741239724473887) -->
+    <skip />
+    <!-- no translation found for player_started (3478865572468310331) -->
+    <skip />
+    <!-- no translation found for player_stopped (1278611664986561535) -->
+    <skip />
+    <!-- no translation found for camera_not_ready (6614469280264241251) -->
+    <skip />
+    <!-- no translation found for camera_ready (2614541247814590887) -->
+    <skip />
+    <!-- no translation found for unknown_call_session_event (2947023743819984299) -->
+    <skip />
+    <!-- no translation found for voicemail_provider (2878119321474918370) -->
+    <skip />
+    <!-- no translation found for voicemail_settings (7548868784816068975) -->
+    <skip />
+    <!-- no translation found for voicemail_number_not_set (2690477999015436138) -->
+    <skip />
+    <!-- no translation found for other_settings (6699076019841942826) -->
+    <skip />
+    <!-- no translation found for calling_via_template (3539373093109976255) -->
+    <skip />
+    <!-- no translation found for incoming_via_template (6281138766370092800) -->
+    <skip />
+    <!-- no translation found for contactPhoto (6028825355597675193) -->
+    <skip />
+    <!-- no translation found for goPrivate (3554069451018659483) -->
+    <skip />
+    <!-- no translation found for selectContact (92191462970821951) -->
+    <skip />
+    <!-- no translation found for respond_via_sms_custom_message (8210393177674619127) -->
+    <skip />
+    <!-- no translation found for custom_message_cancel (5920059627508662163) -->
+    <skip />
+    <!-- no translation found for custom_message_send (3798076337006735995) -->
+    <skip />
+    <!-- no translation found for description_target_answer (1111945818996518320) -->
+    <skip />
+    <!-- no translation found for description_target_send_sms (3652217769615310018) -->
+    <skip />
+    <!-- no translation found for description_target_decline (7108154434759234035) -->
+    <skip />
+    <!-- no translation found for description_target_answer_video_call (4655616461181308405) -->
+    <skip />
+    <!-- no translation found for description_target_answer_audio_call (3234714934649708854) -->
+    <skip />
+    <!-- no translation found for description_target_accept_upgrade_to_video_request (384894008955682630) -->
+    <skip />
+    <!-- no translation found for description_target_decline_upgrade_to_video_request (7342968876159189300) -->
+    <skip />
+    <!-- no translation found for description_target_accept_upgrade_to_video_transmit_request (4586773853073826378) -->
+    <skip />
+    <!-- no translation found for description_target_decline_upgrade_to_video_transmit_request (1191166008711514234) -->
+    <skip />
+    <!-- no translation found for description_target_accept_upgrade_to_video_receive_request (2224978927364021080) -->
+    <skip />
+    <!-- no translation found for description_target_decline_upgrade_to_video_receive_request (3151115394424918077) -->
+    <skip />
+    <!-- no translation found for description_direction_up (1735018141439291766) -->
+    <skip />
+    <!-- no translation found for description_direction_left (6811598791620851239) -->
+    <skip />
+    <!-- no translation found for description_direction_right (5461971399586296023) -->
+    <skip />
+    <!-- no translation found for description_direction_down (3331715227997561639) -->
+    <skip />
+    <!-- no translation found for voicemail_notification_vibrate_when_title (4595145399183729630) -->
+    <!-- no translation found for voicemail_notification_vibrate_when_title (8731372580674292759) -->
+    <skip />
+    <!-- no translation found for voicemail_notification_vibarte_when_dialog_title (2390729279972461242) -->
+    <!-- no translation found for voicemail_notification_vibarte_when_dialog_title (8995274609647451109) -->
+    <skip />
+    <!-- no translation found for voicemail_notification_ringtone_title (1996920553949534944) -->
+    <skip />
+    <!-- no translation found for default_notification_description (4950807644546509965) -->
+    <skip />
+    <!-- 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) -->
+    <skip />
+    <!-- no translation found for manageConferenceLabel (7237614418556336108) -->
+    <skip />
+    <!-- no translation found for emergency_call_dialog_number_for_display (7244995877625769187) -->
+    <skip />
+    <!-- no translation found for duration_seconds (2544699588744957418) -->
+    <!-- no translation found for duration_minutes (8379077285441507101) -->
+    <!-- no translation found for duration_hours (7420759096931824344) -->
+    <!-- no translation found for profile_photo_description (7958198110870319358) -->
+    <skip />
+    <!-- no translation found for camera_off_description (4220023868645225790) -->
+    <skip />
+    <!-- no translation found for child_number (4469090994612105532) -->
+    <skip />
+    <!-- no translation found for note_sent (7623014827902758398) -->
+    <skip />
+    <!-- no translation found for person_contact_context_title (8490058088809090979) -->
+    <skip />
+    <!-- no translation found for business_contact_context_title (8448362898576496764) -->
+    <skip />
+    <!-- no translation found for distance_imperial_away (2083362798225798740) -->
+    <skip />
+    <!-- no translation found for distance_metric_away (9021396592464955256) -->
+    <skip />
+    <!-- no translation found for display_address (444235484565491291) -->
+    <skip />
+    <!-- no translation found for open_time_span (2762952234657271236) -->
+    <skip />
+    <!-- no translation found for opening_hours (7803506319518398380) -->
+    <skip />
+    <!-- no translation found for opens_tomorrow_at (3567511490448488788) -->
+    <skip />
+    <!-- no translation found for opens_today_at (6281212768937222891) -->
+    <skip />
+    <!-- no translation found for closes_today_at (4822369201263491509) -->
+    <skip />
+    <!-- no translation found for closed_today_at (4060072663433467233) -->
+    <skip />
+    <!-- no translation found for open_now (4615706338669555999) -->
+    <skip />
+    <!-- no translation found for closed_now (2635314668145282080) -->
+    <skip />
+</resources>
diff --git a/InCallUI/res/values-ca/strings.xml b/InCallUI/res/values-ca/strings.xml
index 14cae1f..e7129a5 100644
--- a/InCallUI/res/values-ca/strings.xml
+++ b/InCallUI/res/values-ca/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Posa la trucada en espera"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Reprèn la trucada"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Finalitza la trucada"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Mostra el teclat"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Amaga el teclat"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Silencia"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Activa el so"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Afegeix una trucada"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Combina les trucades"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Canvia"</string>
diff --git a/InCallUI/res/values-cs/strings.xml b/InCallUI/res/values-cs/strings.xml
index c7434e3..9f869f2 100644
--- a/InCallUI/res/values-cs/strings.xml
+++ b/InCallUI/res/values-cs/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Podržet hovor"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Obnovit hovor"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Ukončit hovor"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Zobrazit číselník"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Skrýt číselník"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Vypnout zvuk"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Zapnout zvuk"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Přidat hovor"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Spojit hovory"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Zaměnit"</string>
diff --git a/InCallUI/res/values-da/strings.xml b/InCallUI/res/values-da/strings.xml
index 2dee8f2..01167cb 100644
--- a/InCallUI/res/values-da/strings.xml
+++ b/InCallUI/res/values-da/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Sæt opkald i venteposition"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Genoptag opkald"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Afslut opkald"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Vis numerisk tastatur"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Skjul numerisk tastatur"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Slå lyden fra"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Slå lyden til"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Tilføj opkald"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Slå opkald sammen"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Skift"</string>
diff --git a/InCallUI/res/values-en-rAU/strings.xml b/InCallUI/res/values-en-rAU/strings.xml
index 7221686..19fcd9b 100644
--- a/InCallUI/res/values-en-rAU/strings.xml
+++ b/InCallUI/res/values-en-rAU/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Hold Call"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Resume Call"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"End Call"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Show dial pad"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Hide dial pad"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Mute"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Unmute"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Add call"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Merge calls"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Swap"</string>
diff --git a/InCallUI/res/values-en-rGB/strings.xml b/InCallUI/res/values-en-rGB/strings.xml
index 7221686..19fcd9b 100644
--- a/InCallUI/res/values-en-rGB/strings.xml
+++ b/InCallUI/res/values-en-rGB/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Hold Call"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Resume Call"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"End Call"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Show dial pad"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Hide dial pad"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Mute"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Unmute"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Add call"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Merge calls"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Swap"</string>
diff --git a/InCallUI/res/values-en-rIN/strings.xml b/InCallUI/res/values-en-rIN/strings.xml
index 7221686..19fcd9b 100644
--- a/InCallUI/res/values-en-rIN/strings.xml
+++ b/InCallUI/res/values-en-rIN/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Hold Call"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Resume Call"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"End Call"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Show dial pad"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Hide dial pad"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Mute"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Unmute"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Add call"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Merge calls"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Swap"</string>
diff --git a/InCallUI/res/values-es-rUS/strings.xml b/InCallUI/res/values-es-rUS/strings.xml
index a86c60c..ab95407 100644
--- a/InCallUI/res/values-es-rUS/strings.xml
+++ b/InCallUI/res/values-es-rUS/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Retener llamada"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Reanudar llamada"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Finalizar llamada"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Mostrar teclado"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Ocultar teclado"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Silenciar"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Dejar de silenciar"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Agregar llamada"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Combinar llamadas"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Cambiar"</string>
diff --git a/InCallUI/res/values-es/strings.xml b/InCallUI/res/values-es/strings.xml
index 218b80b..518cf72 100644
--- a/InCallUI/res/values-es/strings.xml
+++ b/InCallUI/res/values-es/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Retener llamada"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Seguir con la llamada"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Finalizar llamada"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Mostrar teclado"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Ocultar teclado"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Silenciar"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Activar sonido"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Añadir llamada"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Llamada a tres"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Cambiar"</string>
diff --git a/InCallUI/res/values-et-rEE/strings.xml b/InCallUI/res/values-et-rEE/strings.xml
index 438a9dd..8741c73 100644
--- a/InCallUI/res/values-et-rEE/strings.xml
+++ b/InCallUI/res/values-et-rEE/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Kõne ootele"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Jätka kõnet"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Lõpeta kõne"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Kuva valimisklahvistik"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Peida valimisklahvistik"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Vaigista"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Tühista vaigistus"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Lisa kõne"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Ühenda kõned"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Vaheta"</string>
diff --git a/InCallUI/res/values-eu-rES/strings.xml b/InCallUI/res/values-eu-rES/strings.xml
index 49b2513..6686007 100644
--- a/InCallUI/res/values-eu-rES/strings.xml
+++ b/InCallUI/res/values-eu-rES/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Utzi deia zain"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Berrekin deiari"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Amaitu deia"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Erakutsi markagailua"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Ezkutatu markagailua"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Desaktibatu audioa"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Aktibatu audioa"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Gehitu deia"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Bateratu deiak"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Aldatu"</string>
diff --git a/InCallUI/res/values-fi/strings.xml b/InCallUI/res/values-fi/strings.xml
index d0cc37d..084c696 100644
--- a/InCallUI/res/values-fi/strings.xml
+++ b/InCallUI/res/values-fi/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Aseta puhelu pitoon"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Jatka puhelua"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Lopeta puhelu"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Avaa näppäimistö"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Piilota näppäimistö"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Mykistä"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Poista mykistys"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Lisää puhelu"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Yhdistä puhelut"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Vaihda"</string>
diff --git a/InCallUI/res/values-fr-rCA/strings.xml b/InCallUI/res/values-fr-rCA/strings.xml
index ee9293f..2218e78 100644
--- a/InCallUI/res/values-fr-rCA/strings.xml
+++ b/InCallUI/res/values-fr-rCA/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Mettre l\'appel en attente"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Reprendre l\'appel"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Mettre fin à l\'appel"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Afficher le clavier numérique"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Masquer le clavier numérique"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Désactiver le son"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Réactiver le son"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Ajouter un appel"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Fusionner les appels"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Permuter"</string>
diff --git a/InCallUI/res/values-fr/strings.xml b/InCallUI/res/values-fr/strings.xml
index 346db57..3dbf8c1 100644
--- a/InCallUI/res/values-fr/strings.xml
+++ b/InCallUI/res/values-fr/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Mettre l\'appel en attente"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Reprendre l\'appel"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Mettre fin à l\'appel"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Afficher le clavier"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Masquer le clavier"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Couper le son"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Réactiver le son"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Ajouter un appel"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Fusionner les appels"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Permuter"</string>
diff --git a/InCallUI/res/values-gl-rES/strings.xml b/InCallUI/res/values-gl-rES/strings.xml
index 9e3e393..7a3725f 100644
--- a/InCallUI/res/values-gl-rES/strings.xml
+++ b/InCallUI/res/values-gl-rES/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Poñer a chamada en espera"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Retomar chamada"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Finalizar chamada"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Mostrar teclado de marcación"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Ocultar teclado de marcación"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Silenciar"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Activar o son"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Engadir chamada"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Combinar chamadas"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Cambiar"</string>
diff --git a/InCallUI/res/values-gu-rIN/strings.xml b/InCallUI/res/values-gu-rIN/strings.xml
index 487206a..30dfb88 100644
--- a/InCallUI/res/values-gu-rIN/strings.xml
+++ b/InCallUI/res/values-gu-rIN/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"કૉલ હોલ્ડ કરો"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"કૉલ ફરી શરૂ કરો"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"કૉલ સમાપ્ત કરો"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"ડાયલપેડ બતાવો"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"ડાયલપેડ છુપાવો"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"મ્યૂટ કરો"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"અનમ્યૂટ કરો"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"કૉલ ઉમેરો"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"કૉલ્સ મર્જ કરો"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"સ્વેપ કરો"</string>
diff --git a/InCallUI/res/values-hi/strings.xml b/InCallUI/res/values-hi/strings.xml
index 2926d42..6d4e8ae 100644
--- a/InCallUI/res/values-hi/strings.xml
+++ b/InCallUI/res/values-hi/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"कॉल होल्ड करें"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"कॉल फिर से शुरू करें"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"कॉल समाप्त करें"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"डायलपैड दिखाएं"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"डायलपैड छिपाएं"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"म्यूट करें"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"अनम्यूट करें"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"कॉल जोड़ें"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"कॉल मर्ज करें"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"स्वैप करें"</string>
diff --git a/InCallUI/res/values-hr/strings.xml b/InCallUI/res/values-hr/strings.xml
index 3c2d595..f870af1 100644
--- a/InCallUI/res/values-hr/strings.xml
+++ b/InCallUI/res/values-hr/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Stavi poziv na čekanje"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Nastavi poziv"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Završi poziv"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Prikaži površinu za biranje brojeva"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Sakrij površinu za biranje brojeva"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Zanemari"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Prestani zanemarivati"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Dodaj poziv"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Spoji pozive"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Zamijeni"</string>
diff --git a/InCallUI/res/values-hy-rAM/strings.xml b/InCallUI/res/values-hy-rAM/strings.xml
index 9ab1ef9..75d0ce0 100644
--- a/InCallUI/res/values-hy-rAM/strings.xml
+++ b/InCallUI/res/values-hy-rAM/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Հետաձգել զանգը"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Վերսկսել զանգը"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Ավարտել զանգը"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Ցուցադրել թվաշարը"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Թաքցնել թվաշարը"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Անջատել ձայնը"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Չանտեսել"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Ավելացնել զանգ"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Միացնել զանգերը"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Փոխանակել"</string>
diff --git a/InCallUI/res/values-in/strings.xml b/InCallUI/res/values-in/strings.xml
index b15700f..ba1a2fe 100644
--- a/InCallUI/res/values-in/strings.xml
+++ b/InCallUI/res/values-in/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Tahan Panggilan"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Mulai Kembali Panggilan"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Akhiri Panggilan"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Tampilkan tombol nomor"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Sembunyikan tombol nomor"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Bisukan"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Suarakan"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Tambahkan panggilan"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Gabungkan panggilan"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Tukar"</string>
diff --git a/InCallUI/res/values-is-rIS/strings.xml b/InCallUI/res/values-is-rIS/strings.xml
index 8b92fd2..e749b17 100644
--- a/InCallUI/res/values-is-rIS/strings.xml
+++ b/InCallUI/res/values-is-rIS/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Setja símtal í bið"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Halda símtali áfram"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Leggja á"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Sýna símatakkaborð"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Fela símatakkaborð"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Slökkva á hljóði"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Kveikja á hljóði"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Bæta við símtali"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Sameina símtöl"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Skipta milli"</string>
diff --git a/InCallUI/res/values-it/strings.xml b/InCallUI/res/values-it/strings.xml
index 966b43c..72a8db8 100644
--- a/InCallUI/res/values-it/strings.xml
+++ b/InCallUI/res/values-it/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Metti in attesa la chiamata"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Riprendi chiamata"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Termina chiamata"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Mostra tastierino"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Nascondi tastierino"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Disattiva audio"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Riattiva audio"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Aggiungi chiamata"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Unisci chiamate"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Scambia"</string>
diff --git a/InCallUI/res/values-ja/strings.xml b/InCallUI/res/values-ja/strings.xml
index 48b8644..bfb46e6 100644
--- a/InCallUI/res/values-ja/strings.xml
+++ b/InCallUI/res/values-ja/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"通話を保留"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"通話を再開"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"通話を終了"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"ダイヤルパッドを表示"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"ダイヤルパッドを非表示"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"ミュート"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"ミュートを解除"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"通話を追加"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"グループ通話"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"切り替え"</string>
diff --git a/InCallUI/res/values-ka-rGE/strings.xml b/InCallUI/res/values-ka-rGE/strings.xml
index b217a1e..d732a8e 100644
--- a/InCallUI/res/values-ka-rGE/strings.xml
+++ b/InCallUI/res/values-ka-rGE/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"მოცდის რეჟიმზე გადაყვანა"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"ზარის განახლება"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"ზარის დასრულება"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"ციფერბლატის ჩვენება"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"ციფერბლატის დამალვა"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"დადუმება"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"დადუმების გაუქმება"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"ზარის დამატება"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"ზარების გაერთიანება"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"ჩანაცვლება"</string>
diff --git a/InCallUI/res/values-km-rKH/strings.xml b/InCallUI/res/values-km-rKH/strings.xml
index 68707cd..d0a0dfc 100644
--- a/InCallUI/res/values-km-rKH/strings.xml
+++ b/InCallUI/res/values-km-rKH/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"រង់ចាំការហៅ"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"បន្តការហៅ"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"បញ្ចប់ការហៅ"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"បង្ហាញ​បន្ទះ​លេខ"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"លាក់​បន្ទះ​លេខ"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"បិទ"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"បើក​សំឡេង"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"បន្ថែម​ការ​ហៅ"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"បញ្ចូល​ការ​ហៅ​ចូល​គ្នា"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"ប្ដូរ"</string>
diff --git a/InCallUI/res/values-kn-rIN/strings.xml b/InCallUI/res/values-kn-rIN/strings.xml
index b7af8ba..7f0e59f 100644
--- a/InCallUI/res/values-kn-rIN/strings.xml
+++ b/InCallUI/res/values-kn-rIN/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"ಕರೆಯನ್ನು ಹೋಲ್ಡ್‌‌ ಮಾಡು"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"ಕರೆಯನ್ನು ಮುಂದುವರಿಸಿ"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"ಕರೆ ಅಂತ್ಯಗೊಳಿಸಿ"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"ಡಯಲ್‌ಪ್ಯಾಡ್ ತೋರಿಸು"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"ಡಯಲ್‌ಪ್ಯಾಡ್ ಮರೆಮಾಡು"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"ಮ್ಯೂಟ್"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"ಅನ್‌ಮ್ಯೂಟ್"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"ಕರೆಯನ್ನು ಸೇರಿಸು"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"ಕರೆಗಳನ್ನು ವಿಲೀನಗೊಳಿಸು"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"ಸ್ವ್ಯಾಪ್‌ ಮಾಡು"</string>
diff --git a/InCallUI/res/values-ko/strings.xml b/InCallUI/res/values-ko/strings.xml
index 1a491f7..0100643 100644
--- a/InCallUI/res/values-ko/strings.xml
+++ b/InCallUI/res/values-ko/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"통화 대기"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"통화 재개"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"통화 종료"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"다이얼패드 표시"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"다이얼패드 숨기기"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"음소거"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"음소거 해제"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"통화 추가"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"통화 병합"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"전환"</string>
diff --git a/InCallUI/res/values-ky-rKG/strings.xml b/InCallUI/res/values-ky-rKG/strings.xml
index 42abf45..250fdca 100644
--- a/InCallUI/res/values-ky-rKG/strings.xml
+++ b/InCallUI/res/values-ky-rKG/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Чалууну кармап туруу"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Чалууну улантуу"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Чалууну бүтүрүү"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Номер тергичти көрсөтүү"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Номер тергичти жашыруу"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Үнсүз"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Үндү чыгаруу"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Чалуу кошуу"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Чалууларды бириктирүү"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Алмаштыруу"</string>
diff --git a/InCallUI/res/values-lt/strings.xml b/InCallUI/res/values-lt/strings.xml
index b9d4dbe..c7c2aab 100644
--- a/InCallUI/res/values-lt/strings.xml
+++ b/InCallUI/res/values-lt/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Sulaikyti skambutį"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Tęsti skambutį"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Baigti skambutį"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Rodyti skambinimo skydelį"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Slėpti skambinimo skydelį"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Nutildyti"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Įjungti garsą"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Pridėti skambutį"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Sujungti skambučius"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Apkeisti"</string>
diff --git a/InCallUI/res/values-lv/strings.xml b/InCallUI/res/values-lv/strings.xml
index 82c9228..07fb1ba 100644
--- a/InCallUI/res/values-lv/strings.xml
+++ b/InCallUI/res/values-lv/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Aizturēt zvanu"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Atsākt zvanu"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Beigt zvanu"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Rādīt numura sastādīšanas tastatūru"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Slēpt numura sastādīšanas tastatūru"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Izslēgt skaņu"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Ieslēgt skaņu"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Pievienot zvanu"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Apvienot zvanus"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Mainīt"</string>
diff --git a/InCallUI/res/values-mk-rMK/strings.xml b/InCallUI/res/values-mk-rMK/strings.xml
index 166e7ea..cc39dfc 100644
--- a/InCallUI/res/values-mk-rMK/strings.xml
+++ b/InCallUI/res/values-mk-rMK/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Стави на чекање"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Продолжи го повикот"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Заврши го повикот"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Прикажи копчиња за бирање"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Сокриј копчиња за бирање"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Исклучи звук"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Вклучи звук"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Додај повик"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Спои повици"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Замени"</string>
diff --git a/InCallUI/res/values-ml-rIN/strings.xml b/InCallUI/res/values-ml-rIN/strings.xml
index 7010c3b..2635df4 100644
--- a/InCallUI/res/values-ml-rIN/strings.xml
+++ b/InCallUI/res/values-ml-rIN/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"കോൾ ഹോൾഡുചെയ്യുക"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"കോൾ പുനരാരംഭിക്കുക"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"കോൾ അവസാനിപ്പിക്കുക"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"ഡയൽപാഡ് കാണിക്കുക"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"ഡയൽപാഡ് മറയ്‌ക്കുക"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"മ്യൂട്ടുചെയ്യുക"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"അൺമ്യൂട്ടുചെയ്യുക"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"കോൾ ചേർക്കുക"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"കോളുകൾ ലയിപ്പിക്കുക"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"സ്വാപ്പുചെയ്യുക"</string>
diff --git a/InCallUI/res/values-mn-rMN/strings.xml b/InCallUI/res/values-mn-rMN/strings.xml
index ff63c8f..8a17d0f 100644
--- a/InCallUI/res/values-mn-rMN/strings.xml
+++ b/InCallUI/res/values-mn-rMN/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Дуудлага хүлээлгэх"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Дуудлагыг үргэлжлүүлэх"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Дуудлагыг дуусгах"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Залгах товчлуурыг харуулах"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Залгах товчлуурыг нуух"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Дуу хаах"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Дууг нээх"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Дуудлага нэмэх"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Дуудлага нэгтгэх"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Солих"</string>
diff --git a/InCallUI/res/values-ms-rMY/strings.xml b/InCallUI/res/values-ms-rMY/strings.xml
index 0733c19..b42ac14 100644
--- a/InCallUI/res/values-ms-rMY/strings.xml
+++ b/InCallUI/res/values-ms-rMY/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Tahan Panggilan"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Sambung Semula Panggilan"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Tamatkan Panggilan"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Tunjukkan Pad Pendail"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Sembunyikan Pad Pendail"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Redam"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Nyahredam"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Tambah panggilan"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Gabung panggilan"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Silih"</string>
diff --git a/InCallUI/res/values-my-rMM/strings.xml b/InCallUI/res/values-my-rMM/strings.xml
index b44a65b..3a85d94 100644
--- a/InCallUI/res/values-my-rMM/strings.xml
+++ b/InCallUI/res/values-my-rMM/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"ခေါ်ဆိုမှု ခေတ္တရပ်ထားပါ"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"ခေါ်ဆိုမှုကို ဆက်လုပ်ပါ"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"ခေါ်ဆိုမှု အပြီးသတ်ပါ"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"နံပါတ်အကွက် ပြပါ"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"နံပါတ်အကွက် ဝှက်ထားပါ"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"အသံပိတ်ပါ"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"အသံပြန်ဖွင့်ပါ"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"ခေါ်ဆိုမှုထည့်ပါ"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"ခေါ်ဆိုမှုများကို ပေါင်းစည်းပါ"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"ဖလှယ်ပါ"</string>
diff --git a/InCallUI/res/values-nb/strings.xml b/InCallUI/res/values-nb/strings.xml
index 75a6bdb..f919105 100644
--- a/InCallUI/res/values-nb/strings.xml
+++ b/InCallUI/res/values-nb/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Sett anropet på vent"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Gjenoppta anropet"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Avslutt anropet"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Vis tastaturet"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Skjul tastaturet"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Slå av lyden"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Slå på lyden"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Legg til anrop"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Slå sammen anrop"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Bytt"</string>
diff --git a/InCallUI/res/values-ne-rNP/strings.xml b/InCallUI/res/values-ne-rNP/strings.xml
index b0aab98..d5eb353 100644
--- a/InCallUI/res/values-ne-rNP/strings.xml
+++ b/InCallUI/res/values-ne-rNP/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"कललाई होल्ड गर्नुहोस्"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"कललाई पुन: निरन्तरता दिनुहोस्"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"कल अन्त्य गर्नुहोस्"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"डायलप्याड देखाउनुहोस्"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"डायलप्याड लुकाउनुहोस्"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"मौन"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"अनम्यूट गर्नुहोस्"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"कल थप्नुहोस्"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"कलहरू मर्ज गर्नुहोस्"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"स्वाप"</string>
diff --git a/InCallUI/res/values-nl/strings.xml b/InCallUI/res/values-nl/strings.xml
index ce72fcd..eeb17b6 100644
--- a/InCallUI/res/values-nl/strings.xml
+++ b/InCallUI/res/values-nl/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Oproep in de wacht zetten"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Oproep hervatten"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Oproep beëindigen"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Toetsenblok weergeven"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Toetsenblok verbergen"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Dempen"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Dempen opheffen"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Oproep toevoegen"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Samenvoegen"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Wisselen"</string>
diff --git a/InCallUI/res/values-pl/strings.xml b/InCallUI/res/values-pl/strings.xml
index 0b78c33..bdb6aba 100644
--- a/InCallUI/res/values-pl/strings.xml
+++ b/InCallUI/res/values-pl/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Wstrzymaj połączenie"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Wznów połączenie"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Zakończ połączenie"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Pokaż klawiaturę"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Ukryj klawiaturę"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Wycisz"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Wyłącz wyciszenie"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Dodaj połączenie"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Scal połączenia"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Przełącz"</string>
diff --git a/InCallUI/res/values-pt-rBR/strings.xml b/InCallUI/res/values-pt-rBR/strings.xml
index 65c66dc..c59b155 100644
--- a/InCallUI/res/values-pt-rBR/strings.xml
+++ b/InCallUI/res/values-pt-rBR/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Colocar chamada em espera"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Retomar chamada"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Encerrar chamada"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Mostrar teclado"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Ocultar teclado"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Desativar som"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Ativar som"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Adicionar chamada"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Mesclar chamadas"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Trocar"</string>
diff --git a/InCallUI/res/values-pt-rPT/strings.xml b/InCallUI/res/values-pt-rPT/strings.xml
index 781fb61..2b26efc 100644
--- a/InCallUI/res/values-pt-rPT/strings.xml
+++ b/InCallUI/res/values-pt-rPT/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Colocar chamada em espera"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Retomar chamada"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Terminar chamada"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Mostrar o teclado"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Ocultar o teclado"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Desativar som"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Reativar o som"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Adicionar chamada"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Intercalar chamadas"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Trocar"</string>
diff --git a/InCallUI/res/values-pt/strings.xml b/InCallUI/res/values-pt/strings.xml
index 65c66dc..c59b155 100644
--- a/InCallUI/res/values-pt/strings.xml
+++ b/InCallUI/res/values-pt/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Colocar chamada em espera"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Retomar chamada"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Encerrar chamada"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Mostrar teclado"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Ocultar teclado"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Desativar som"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Ativar som"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Adicionar chamada"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Mesclar chamadas"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Trocar"</string>
diff --git a/InCallUI/res/values-ro/strings.xml b/InCallUI/res/values-ro/strings.xml
index fbb4240..031c48a 100644
--- a/InCallUI/res/values-ro/strings.xml
+++ b/InCallUI/res/values-ro/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Puneți apelul în așteptare"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Reluați apelul"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Încheiați apelul"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Afișează tastatura numerică"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Ascunde tastatura numerică"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Dezactivează sunetul"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Activează sunetul"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Adăugați un apel"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Îmbinați apelurile"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Schimbați"</string>
diff --git a/InCallUI/res/values-ru/strings.xml b/InCallUI/res/values-ru/strings.xml
index 059f046..fdc8f6a 100644
--- a/InCallUI/res/values-ru/strings.xml
+++ b/InCallUI/res/values-ru/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Удерживать вызов"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Возобновить вызов"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Завершить вызов"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Показать панель набора номера"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Скрыть панель набора номера"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Выключить звук"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Включить звук"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Добавить вызов"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Объединить вызовы"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Перевести звонок"</string>
diff --git a/InCallUI/res/values-si-rLK/strings.xml b/InCallUI/res/values-si-rLK/strings.xml
index 9728fde..129e181 100644
--- a/InCallUI/res/values-si-rLK/strings.xml
+++ b/InCallUI/res/values-si-rLK/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"ඇමතුම රඳවා ගන්න"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"ඇමතුම නැවත පටන් ගන්න"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"ඇමතුම අවසන් කරන්න"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"ඇමතුම් පෑඩය පෙන්වන්න"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"ඇමතුම් පෑඩය සඟවන්න"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"නිහඬ කරන්න"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"නිහඬ කිරීම ඉවත් කරන්න"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"ඇමතුමක් එක් කරන්න"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"ඇමතුම් ඒකාබද්ධ කරන්න"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"මාරු කරන්න"</string>
diff --git a/InCallUI/res/values-sk/strings.xml b/InCallUI/res/values-sk/strings.xml
index 0af7053..d553993 100644
--- a/InCallUI/res/values-sk/strings.xml
+++ b/InCallUI/res/values-sk/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Podržať hovor"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Obnoviť hovor"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Ukončiť hovor"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Zobraziť číselnú klávesnicu"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Skryť číselnú klávesnicu"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Vypnúť zvuk"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Zapnúť zvuk"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Pridať hovor"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Zlúčiť hovory"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Zameniť"</string>
diff --git a/InCallUI/res/values-sl/strings.xml b/InCallUI/res/values-sl/strings.xml
index 931deb1..6ed298f 100644
--- a/InCallUI/res/values-sl/strings.xml
+++ b/InCallUI/res/values-sl/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Zadrži klic"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Nadaljuj klic"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Končaj klic"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Prikaži tipkovnico"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Skrij tipkovnico"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Izklopi zvok"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Vklopi zvok"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Dodaj klic"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Združi klice"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Zamenjaj"</string>
diff --git a/InCallUI/res/values-sq-rAL/strings.xml b/InCallUI/res/values-sq-rAL/strings.xml
index 5388bfc..b3a9acd 100644
--- a/InCallUI/res/values-sq-rAL/strings.xml
+++ b/InCallUI/res/values-sq-rAL/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Vendose në pritje telefonatën"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Rifillo telefonatën"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Mbylle telefonatën"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Shfaq bllokun e formimit të numrit"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Fshih bllokun e formimit të numrit"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Çaktivizo audion"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Aktivizo audion"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Shto telefonatë"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Shkri telefonatat"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Shkëmbe"</string>
diff --git a/InCallUI/res/values-sr/strings.xml b/InCallUI/res/values-sr/strings.xml
index 5ce6a0e..a6f317b 100644
--- a/InCallUI/res/values-sr/strings.xml
+++ b/InCallUI/res/values-sr/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Стави позив на чекање"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Настави позив"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Заврши позив"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Прикажи нумеричку тастатуру"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Сакриј нумеричку тастатуру"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Искључи звук"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Укључи звук"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Додај позив"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Обједини позиве"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Замени"</string>
diff --git a/InCallUI/res/values-sv/strings.xml b/InCallUI/res/values-sv/strings.xml
index eb0fda2..2a91e1d 100644
--- a/InCallUI/res/values-sv/strings.xml
+++ b/InCallUI/res/values-sv/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Parkera samtal"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Återuppta samtal"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Avsluta samtal"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Visa knappsats"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Dölj knappsats"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Ljud av"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Sluta ignorera"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Lägg till samtal"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Koppla ihop samtal"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Byt"</string>
diff --git a/InCallUI/res/values-sw/strings.xml b/InCallUI/res/values-sw/strings.xml
index b706fca..3b29d18 100644
--- a/InCallUI/res/values-sw/strings.xml
+++ b/InCallUI/res/values-sw/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Shikilia Simu"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Endelea na Simu"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Kata Simu"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Onyesha Vitufe vya Kupiga Simu"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Ficha Vitufe vya Kupiga Simu"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Zima Sauti"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Rejesha sauti"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Ongeza simu"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Unganisha simu"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Badili"</string>
diff --git a/InCallUI/res/values-ta-rIN/strings.xml b/InCallUI/res/values-ta-rIN/strings.xml
index 5f51390..cdaf613 100644
--- a/InCallUI/res/values-ta-rIN/strings.xml
+++ b/InCallUI/res/values-ta-rIN/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"அழைப்பை ஹோல்டில் வை"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"அழைப்பை மீண்டும் தொடங்கு"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"அழைப்பை முடி"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"டயல்பேடைக் காட்டு"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"டயல்பேடை மறை"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"ஒலியடக்கு"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"ஒலி இயக்கு"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"அழைப்பைச் சேர்"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"அழைப்புகளை இணை"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"மாற்று"</string>
diff --git a/InCallUI/res/values-te-rIN/strings.xml b/InCallUI/res/values-te-rIN/strings.xml
index 26df3bc..74134fc 100644
--- a/InCallUI/res/values-te-rIN/strings.xml
+++ b/InCallUI/res/values-te-rIN/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"కాల్‌ను హోల్డ్‌లో ఉంచు"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"కాల్‌ను పునఃప్రారంభించు"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"కాల్‌ని ముగించు"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"డయల్‌ప్యాడ్‌ను చూపు"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"డయల్‌ప్యాడ్‌ను దాచు"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"మ్యూట్ చేయి"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"అన్‌మ్యూట్ చేయి"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"కాల్‌ను జోడించు"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"కాల్‌లను విలీనం చేయి"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"స్వాప్ చేయి"</string>
diff --git a/InCallUI/res/values-tl/strings.xml b/InCallUI/res/values-tl/strings.xml
index 5bce6d1..994e5b6 100644
--- a/InCallUI/res/values-tl/strings.xml
+++ b/InCallUI/res/values-tl/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"I-hold ang Tawag"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Ituloy ang Tawag"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Ibaba ang Tawag"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Ipakita ang Dialpad"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Itago ang Dialpad"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"I-mute"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Alisin sa pagkaka-mute"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Magdagdag ng tawag"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Pagsamahin ang mga tawag"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Pagpalitin"</string>
diff --git a/InCallUI/res/values-tr/strings.xml b/InCallUI/res/values-tr/strings.xml
index 6aad71d..feec3f1 100644
--- a/InCallUI/res/values-tr/strings.xml
+++ b/InCallUI/res/values-tr/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Çağrıyı Beklet"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Çağrıyı Devam Ettir"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Çağrıyı Sonlandır"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Tuş Takımını Göster"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Tuş Takımını Gizle"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Sesi kapat"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Sesi aç"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Çağrı ekle"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Çağrıları birleştir"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Değiştir"</string>
diff --git a/InCallUI/res/values-uk/strings.xml b/InCallUI/res/values-uk/strings.xml
index cab5b79..39c7c5c 100644
--- a/InCallUI/res/values-uk/strings.xml
+++ b/InCallUI/res/values-uk/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Призупинити виклик"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Відновити виклик"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Завершити виклик"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Показати цифрову клавіатуру"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Сховати цифрову клавіатуру"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Ігнорувати"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Не ігнорувати"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Додати виклик"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Об’єднати виклики"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Поміняти виклики"</string>
diff --git a/InCallUI/res/values-ur-rPK/strings.xml b/InCallUI/res/values-ur-rPK/strings.xml
index 8619bd2..2d5a912 100644
--- a/InCallUI/res/values-ur-rPK/strings.xml
+++ b/InCallUI/res/values-ur-rPK/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"کال کو ہولڈ کریں"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"کال کو دوبارہ شروع کریں"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"کال ختم کریں"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"ڈائل پیڈ دکھائیں"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"ڈائل پیڈ چھپائیں"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"خاموش کریں"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"آواز چالو کریں"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"کال شامل کریں"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"کالز کو ضم کریں"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"تبادلہ کریں"</string>
diff --git a/InCallUI/res/values-uz-rUZ/strings.xml b/InCallUI/res/values-uz-rUZ/strings.xml
index 2208084..817e02e 100644
--- a/InCallUI/res/values-uz-rUZ/strings.xml
+++ b/InCallUI/res/values-uz-rUZ/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Qo‘ng‘iroqni ushlab turish"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Qo‘ng‘iroqni davom ettirish"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Qo‘ng‘iroqni tugatish"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Raqam terish panelini ochish"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Raqam terish panelini yopish"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Ovozni o‘chirish"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Ovozni yoqish"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Qo‘ng‘iroq qo‘shish"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Qo‘ng‘iroqlarni birlashtirish"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Almashtirish"</string>
diff --git a/InCallUI/res/values-vi/strings.xml b/InCallUI/res/values-vi/strings.xml
index 9780439..473650d 100644
--- a/InCallUI/res/values-vi/strings.xml
+++ b/InCallUI/res/values-vi/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Giữ cuộc gọi"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Tiếp tục cuộc gọi"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Kết thúc cuộc gọi"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Hiển thị bàn phím số"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Ẩn bàn phím số"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Tắt tiếng"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Bật tiếng"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Thêm cuộc gọi"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Hợp nhất cuộc gọi"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Hoán đổi"</string>
diff --git a/InCallUI/res/values-zh-rCN/strings.xml b/InCallUI/res/values-zh-rCN/strings.xml
index 48cf0c6..4ff11f1 100644
--- a/InCallUI/res/values-zh-rCN/strings.xml
+++ b/InCallUI/res/values-zh-rCN/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"保持通话"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"恢复通话"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"结束通话"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"显示拨号键盘"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"隐藏拨号键盘"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"静音"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"取消静音"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"添加通话"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"合并通话"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"切换"</string>
diff --git a/InCallUI/res/values-zh-rHK/strings.xml b/InCallUI/res/values-zh-rHK/strings.xml
index d0eeb19..9213658 100644
--- a/InCallUI/res/values-zh-rHK/strings.xml
+++ b/InCallUI/res/values-zh-rHK/strings.xml
@@ -109,7 +109,7 @@
     <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"顯示撥號鍵盤"</string>
     <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"隱藏撥號鍵盤"</string>
     <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"略過"</string>
-    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"取消略過"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"取消靜音"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"新增通話"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"合併通話"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"切換"</string>
diff --git a/InCallUI/res/values-zh-rTW/strings.xml b/InCallUI/res/values-zh-rTW/strings.xml
index 7bb89cd..0c52ee2 100644
--- a/InCallUI/res/values-zh-rTW/strings.xml
+++ b/InCallUI/res/values-zh-rTW/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"保留通話"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"恢復通話"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"結束通話"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"顯示撥號鍵盤"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"隱藏撥號鍵盤"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"忽略"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"取消忽略"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"新增通話"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"合併通話"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"切換"</string>
diff --git a/InCallUI/res/values-zu/strings.xml b/InCallUI/res/values-zu/strings.xml
index 4f0667c..f04867c 100644
--- a/InCallUI/res/values-zu/strings.xml
+++ b/InCallUI/res/values-zu/strings.xml
@@ -106,14 +106,10 @@
     <string name="onscreenHoldText_unselected" msgid="4509232821220492533">"Bamba ikholi"</string>
     <string name="onscreenHoldText_selected" msgid="2988100347384733032">"Qalisa kabusha ikholi"</string>
     <string name="onscreenEndCallText" msgid="1416981593311001074">"Qeda ikholi"</string>
-    <!-- no translation found for onscreenShowDialpadText_unselected (8253784035944284938) -->
-    <skip />
-    <!-- no translation found for onscreenShowDialpadText_selected (7368390784890311449) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_unselected (4130269060091842798) -->
-    <skip />
-    <!-- no translation found for onscreenMuteText_selected (7074763815284369548) -->
-    <skip />
+    <string name="onscreenShowDialpadText_unselected" msgid="8253784035944284938">"Bonisa iphedi yokudayela"</string>
+    <string name="onscreenShowDialpadText_selected" msgid="7368390784890311449">"Fihla iphedi yokudayela"</string>
+    <string name="onscreenMuteText_unselected" msgid="4130269060091842798">"Thulisa"</string>
+    <string name="onscreenMuteText_selected" msgid="7074763815284369548">"Susa ukuthula"</string>
     <string name="onscreenAddCallText" msgid="5577548650466595598">"Engeza ikholi"</string>
     <string name="onscreenMergeCallsText" msgid="4946687067221459357">"Hlanganisa amakholi"</string>
     <string name="onscreenSwapCallsText" msgid="8272036175646846198">"Shintsha"</string>
diff --git a/InCallUI/res/values/colors.xml b/InCallUI/res/values/colors.xml
index 5e4eeee..99cf7b0 100644
--- a/InCallUI/res/values/colors.xml
+++ b/InCallUI/res/values/colors.xml
@@ -24,8 +24,8 @@
     <!-- Background color of main banner. -->
     <color name="incall_call_banner_background_color">@color/incall_background_color</color>
     <color name="incall_call_banner_text_color">#ffffff</color>
-    <!-- 80% opacity, white -->
-    <color name="incall_call_banner_subtext_color">#ccffffff</color>
+    <!-- 100% opacity, white -->
+    <color name="incall_call_banner_subtext_color">#ffffff</color>
     <color name="incall_banner_secondary_background_color">#f5f5f5</color>
     <color name="incall_banner_secondary_text_color">#333333</color>
 
diff --git a/InCallUI/src/com/android/incallui/CallerInfo.java b/InCallUI/src/com/android/incallui/CallerInfo.java
index a638e11..f270678 100644
--- a/InCallUI/src/com/android/incallui/CallerInfo.java
+++ b/InCallUI/src/com/android/incallui/CallerInfo.java
@@ -237,12 +237,6 @@
                     info.name = cursor.getString(columnIndex);
                 }
 
-                columnIndex = cursor.getColumnIndex(PhoneLookup.LOOKUP_KEY);
-                if (columnIndex != -1) {
-                    info.nameAlternative = ContactInfoHelper.lookUpDisplayNameAlternative(
-                            context, cursor.getString(columnIndex));
-                }
-
                 // Look for the number
                 columnIndex = cursor.getColumnIndex(PhoneLookup.NUMBER);
                 if (columnIndex != -1) {
@@ -326,6 +320,9 @@
                         : contactRef.getQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY);
                 final Long directoryId = directory == null ? null : Longs.tryParse(directory);
                 info.userType = ContactsUtils.determineUserType(directoryId, contactId);
+
+                info.nameAlternative = ContactInfoHelper.lookUpDisplayNameAlternative(
+                        context, info.lookupKeyOrNull, info.userType);
             }
             cursor.close();
         }
diff --git a/InCallUI/src/com/android/incallui/StatusBarNotifier.java b/InCallUI/src/com/android/incallui/StatusBarNotifier.java
index 946e0eb..7d212aa 100644
--- a/InCallUI/src/com/android/incallui/StatusBarNotifier.java
+++ b/InCallUI/src/com/android/incallui/StatusBarNotifier.java
@@ -36,6 +36,7 @@
 import android.graphics.drawable.BitmapDrawable;
 import android.media.AudioAttributes;
 import android.net.Uri;
+import android.provider.ContactsContract.Contacts;
 import android.support.annotation.Nullable;
 import android.telecom.Call.Details;
 import android.telecom.PhoneAccount;
@@ -100,10 +101,7 @@
         mNotificationManager =
                 (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
         mDialerRingtoneManager = new DialerRingtoneManager(
-                new InCallTonePlayer(
-                        AudioModeProvider.getInstance(),
-                        new ToneGeneratorFactory(),
-                        new PausableExecutorImpl()),
+                new InCallTonePlayer(new ToneGeneratorFactory(), new PausableExecutorImpl()),
                 CallList.getInstance());
         mCurrentNotification = NOTIFICATION_NONE;
     }
@@ -232,7 +230,6 @@
      * Sets up the main Ui for the notification
      */
     private void buildAndSendNotification(Call originalCall, ContactCacheEntry contactInfo) {
-
         // This can get called to update an existing notification after contact information has come
         // back. However, it can happen much later. Before we continue, we need to make sure that
         // the call being passed in is still the one we want to show in the notification.
@@ -443,11 +440,14 @@
 
     private void addPersonReference(Notification.Builder builder, ContactCacheEntry contactInfo,
             Call call) {
-        if (contactInfo.lookupUri != null) {
+        // Query {@link Contacts#CONTENT_LOOKUP_URI} directly with work lookup key is not allowed.
+        // So, do not pass {@link Contacts#CONTENT_LOOKUP_URI} to NotificationManager to avoid
+        // NotificationManager using it.
+        if (contactInfo.lookupUri != null && contactInfo.userType != ContactsUtils.USER_TYPE_WORK) {
             builder.addPerson(contactInfo.lookupUri.toString());
         } else if (!TextUtils.isEmpty(call.getNumber())) {
             builder.addPerson(Uri.fromParts(PhoneAccount.SCHEME_TEL,
-                            call.getNumber(), null).toString());
+                    call.getNumber(), null).toString());
         }
     }
 
diff --git a/InCallUI/src/com/android/incallui/ringtone/InCallTonePlayer.java b/InCallUI/src/com/android/incallui/ringtone/InCallTonePlayer.java
index d930a92..3a8b03d 100644
--- a/InCallUI/src/com/android/incallui/ringtone/InCallTonePlayer.java
+++ b/InCallUI/src/com/android/incallui/ringtone/InCallTonePlayer.java
@@ -21,20 +21,14 @@
 
 import android.media.AudioManager;
 import android.media.ToneGenerator;
-import android.provider.MediaStore.Audio;
 import android.support.annotation.Nullable;
-import android.telecom.CallAudioState;
 
-import com.android.contacts.common.testing.NeededForTesting;
-import com.android.incallui.AudioModeProvider;
 import com.android.incallui.Log;
 import com.android.incallui.async.PausableExecutor;
 
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
-import javax.annotation.concurrent.NotThreadSafe;
-
 /**
  * Class responsible for playing in-call related tones in a background thread. This class only
  * allows one tone to be played at a time.
@@ -45,7 +39,6 @@
 
     public static final int VOLUME_RELATIVE_HIGH_PRIORITY = 80;
 
-    private final AudioModeProvider mAudioModeProvider;
     private final ToneGeneratorFactory mToneGeneratorFactory;
     private final PausableExecutor mExecutor;
     private @Nullable CountDownLatch mNumPlayingTones;
@@ -53,23 +46,19 @@
     /**
      * Creates a new InCallTonePlayer.
      *
-     * @param audioModeProvider the {@link AudioModeProvider} used to determine through which stream
-     * to play tones.
      * @param toneGeneratorFactory the {@link ToneGeneratorFactory} used to create
      * {@link ToneGenerator}s.
      * @param executor the {@link PausableExecutor} used to play tones in a background thread.
      * @throws NullPointerException if audioModeProvider, toneGeneratorFactory, or executor are
      * {@code null}.
      */
-    public InCallTonePlayer(AudioModeProvider audioModeProvider,
-            ToneGeneratorFactory toneGeneratorFactory, PausableExecutor executor) {
-        mAudioModeProvider = Preconditions.checkNotNull(audioModeProvider);
+    public InCallTonePlayer(ToneGeneratorFactory toneGeneratorFactory, PausableExecutor executor) {
         mToneGeneratorFactory = Preconditions.checkNotNull(toneGeneratorFactory);
         mExecutor = Preconditions.checkNotNull(executor);
     }
 
     /**
-     * @return {@code true} if a tone is currently playing, {@code false} otherwise
+     * @return {@code true} if a tone is currently playing, {@code false} otherwise.
      */
     public boolean isPlayingTone() {
         return mNumPlayingTones != null && mNumPlayingTones.getCount() > 0;
@@ -79,8 +68,8 @@
      * Plays the given tone in a background thread.
      *
      * @param tone the tone to play.
-     * @throws IllegalStateException if a tone is already playing
-     * @throws IllegalArgumentException if the tone is invalid
+     * @throws IllegalStateException if a tone is already playing.
+     * @throws IllegalArgumentException if the tone is invalid.
      */
     public void play(int tone) {
         if (isPlayingTone()) {
@@ -97,26 +86,24 @@
     }
 
     private ToneGeneratorInfo getToneGeneratorInfo(int tone) {
-        int stream = getPlaybackStream();
         switch (tone) {
             case TONE_CALL_WAITING:
+                /*
+                 * Call waiting tones play until they're stopped either by the user accepting or
+                 * declining the call so the tone length is set at what's effectively forever. The
+                 * tone is played at a high priority volume and through STREAM_VOICE_CALL since it's
+                 * call related and using that stream will route it through bluetooth devices
+                 * appropriately.
+                 */
                 return new ToneGeneratorInfo(ToneGenerator.TONE_SUP_CALL_WAITING,
                         VOLUME_RELATIVE_HIGH_PRIORITY,
                         Integer.MAX_VALUE,
-                        stream);
+                        AudioManager.STREAM_VOICE_CALL);
             default:
                 throw new IllegalArgumentException("Bad tone: " + tone);
         }
     }
 
-    private int getPlaybackStream() {
-        if (mAudioModeProvider.getAudioMode() == CallAudioState.ROUTE_BLUETOOTH) {
-            // TODO (maxwelb): b/26932998 play through bluetooth
-            // return AudioManager.STREAM_BLUETOOTH_SCO;
-        }
-        return AudioManager.STREAM_VOICE_CALL;
-    }
-
     private void playOnBackgroundThread(ToneGeneratorInfo info) {
         ToneGenerator toneGenerator = null;
         try {
diff --git a/InCallUI/tests/src/com/android/incallui/ringtone/InCallTonePlayerTest.java b/InCallUI/tests/src/com/android/incallui/ringtone/InCallTonePlayerTest.java
index 59611f7..bde5c50 100644
--- a/InCallUI/tests/src/com/android/incallui/ringtone/InCallTonePlayerTest.java
+++ b/InCallUI/tests/src/com/android/incallui/ringtone/InCallTonePlayerTest.java
@@ -21,7 +21,6 @@
 import android.test.AndroidTestCase;
 import android.test.suitebuilder.annotation.SmallTest;
 
-import com.android.incallui.AudioModeProvider;
 import com.android.incallui.async.PausableExecutor;
 import com.android.incallui.async.SingleProdThreadExecutor;
 
@@ -32,7 +31,6 @@
 @SmallTest
 public class InCallTonePlayerTest extends AndroidTestCase {
 
-    @Mock private AudioModeProvider mAudioModeProvider;
     @Mock private ToneGeneratorFactory mToneGeneratorFactory;
     @Mock private ToneGenerator mToneGenerator;
     private InCallTonePlayer mInCallTonePlayer;
@@ -52,8 +50,7 @@
         Mockito.when(mToneGeneratorFactory.newInCallToneGenerator(Mockito.anyInt(),
                 Mockito.anyInt())).thenReturn(mToneGenerator);
         mExecutor = new SingleProdThreadExecutor();
-        mInCallTonePlayer = new InCallTonePlayer(mAudioModeProvider, mToneGeneratorFactory,
-                mExecutor);
+        mInCallTonePlayer = new InCallTonePlayer(mToneGeneratorFactory, mExecutor);
     }
 
     @Override
@@ -92,10 +89,6 @@
         } catch (IllegalStateException e) {}
     }
 
-    public void testPlay_BlueToothStream() {
-        // TODO (maxwelb): b/26932998 play through bluetooth
-    }
-
     public void testPlay_VoiceCallStream() throws InterruptedException {
         mInCallTonePlayer.play(InCallTonePlayer.TONE_CALL_WAITING);
         mExecutor.awaitMilestoneForTesting();
diff --git a/build-app.gradle b/build-app.gradle
index 9e24136..2ea4376 100644
--- a/build-app.gradle
+++ b/build-app.gradle
@@ -12,6 +12,11 @@
         manifest.srcFile 'AndroidManifest.xml'
         res.srcDirs = ['res']
     }
+
+    sourceSets.androidTest {
+        java.srcDirs = ['tests/src']
+        res.srcDirs = ['test/res']
+    }
 }
 
 dependencies {
diff --git a/res/drawable-hdpi/ic_share_white_24dp.png b/res/drawable-hdpi/ic_share_white_24dp.png
new file mode 100644
index 0000000..b09a692
--- /dev/null
+++ b/res/drawable-hdpi/ic_share_white_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_share_white_24dp.png b/res/drawable-mdpi/ic_share_white_24dp.png
new file mode 100644
index 0000000..e944fd7
--- /dev/null
+++ b/res/drawable-mdpi/ic_share_white_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_share_white_24dp.png b/res/drawable-xhdpi/ic_share_white_24dp.png
new file mode 100644
index 0000000..22a8783
--- /dev/null
+++ b/res/drawable-xhdpi/ic_share_white_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_share_white_24dp.png b/res/drawable-xxhdpi/ic_share_white_24dp.png
new file mode 100644
index 0000000..a35b3cd
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_share_white_24dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_share_white_24dp.png b/res/drawable-xxxhdpi/ic_share_white_24dp.png
new file mode 100644
index 0000000..e351c7b
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_share_white_24dp.png
Binary files differ
diff --git a/res/drawable/ic_voicemail_seek_handle_disabled.xml b/res/drawable/ic_voicemail_seek_handle_disabled.xml
index 1262808..2be52ad 100644
--- a/res/drawable/ic_voicemail_seek_handle_disabled.xml
+++ b/res/drawable/ic_voicemail_seek_handle_disabled.xml
@@ -16,6 +16,5 @@
   -->
 <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
         android:src="@drawable/ic_handle"
-        android:autoMirrored="true"
         android:tint="@color/voicemail_icon_disabled_tint" >
 </bitmap>
\ No newline at end of file
diff --git a/res/layout/voicemail_playback_layout.xml b/res/layout/voicemail_playback_layout.xml
index 64a68bd..178e888 100644
--- a/res/layout/voicemail_playback_layout.xml
+++ b/res/layout/voicemail_playback_layout.xml
@@ -34,91 +34,104 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:orientation="horizontal"
-        android:gravity="top">
+        android:gravity="center_vertical"
+        android:paddingTop="@dimen/voicemail_playback_top_padding">
 
         <TextView
             android:id="@+id/playback_position_text"
             android:layout_height="wrap_content"
             android:layout_width="wrap_content"
             android:textSize="14sp"
-            android:paddingTop="@dimen/voicemail_playback_top_padding"
             android:importantForAccessibility="no" />
 
-        <LinearLayout
+        <SeekBar
+            android:id="@+id/playback_seek"
             android:layout_width="0dp"
-            android:layout_height="wrap_content"
             android:layout_weight="1"
-            android:orientation="vertical"
-            android:layout_marginTop="4dp">
+            android:layout_height="wrap_content"
+            android:progressDrawable="@drawable/seekbar_drawable"
+            android:thumb="@drawable/ic_voicemail_seek_handle"
+            android:progress="0"
+            android:max="0"
+            android:contentDescription="@string/description_playback_seek" />
 
-            <SeekBar
-                android:id="@+id/playback_seek"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:paddingBottom="8dp"
-                android:paddingTop="@dimen/voicemail_playback_top_padding"
-                android:progressDrawable="@drawable/seekbar_drawable"
-                android:thumb="@drawable/ic_voicemail_seek_handle"
-                android:progress="0"
-                android:max="0"
-                android:contentDescription="@string/description_playback_seek" />
+        <TextView
+            android:id="@+id/total_duration_text"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content"
+            android:textSize="14sp"
+            android:importantForAccessibility="no" />
 
-            <LinearLayout
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:orientation="horizontal"
-                android:gravity="center"
-                android:padding="8dp">
+    </LinearLayout>
 
-                <ImageButton android:id="@+id/playback_speakerphone"
-                    style="@style/VoicemailPlaybackLayoutButtonStyle"
-                    android:src="@drawable/ic_volume_down_24dp"
-                    android:tint="@color/voicemail_icon_tint"
-                    android:contentDescription="@string/description_playback_speakerphone" />
-
-                <Space
-                    android:layout_width="0dp"
-                    android:layout_height="0dp"
-                    android:layout_weight="1" />
-
-                <ImageButton android:id="@+id/playback_start_stop"
-                    style="@style/VoicemailPlaybackLayoutButtonStyle"
-                    android:src="@drawable/ic_play_arrow"
-                    android:contentDescription="@string/voicemail_play_start_pause" />
-
-                <Space
-                    android:layout_width="0dp"
-                    android:layout_height="0dp"
-                    android:layout_weight="1" />
-
-                <ImageButton android:id="@+id/delete_voicemail"
-                    style="@style/VoicemailPlaybackLayoutButtonStyle"
-                    android:src="@drawable/ic_delete_24dp"
-                    android:tint="@color/voicemail_icon_tint"
-                    android:contentDescription="@string/call_log_trash_voicemail" />
-
-                <Space
-                    android:layout_width="0dp"
-                    android:layout_height="0dp"
-                    android:layout_weight="1" />
-
-                <ImageButton android:id="@+id/archive_voicemail"
-                    style="@style/VoicemailPlaybackLayoutButtonStyle"
-                    android:src="@drawable/ic_archive_white_24dp"
-                    android:tint="@color/voicemail_icon_tint"
-                    android:contentDescription="@string/call_log_archive_voicemail" />
-
-            </LinearLayout>
-
-        </LinearLayout>
-
-    <TextView
-        android:id="@+id/total_duration_text"
+    <LinearLayout
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        android:textSize="14sp"
-        android:paddingTop="@dimen/voicemail_playback_top_padding"
-        android:importantForAccessibility="no" />
+        android:orientation="horizontal"
+        android:gravity="center">
+
+        <Space
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"/>
+
+        <ImageButton android:id="@+id/playback_speakerphone"
+            style="@style/VoicemailPlaybackLayoutButtonStyle"
+            android:src="@drawable/ic_volume_down_24dp"
+            android:tint="@color/voicemail_icon_tint"
+            android:contentDescription="@string/description_playback_speakerphone" />
+
+        <Space
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"/>
+
+        <ImageButton android:id="@+id/playback_start_stop"
+            style="@style/VoicemailPlaybackLayoutButtonStyle"
+            android:src="@drawable/ic_play_arrow"
+            android:contentDescription="@string/voicemail_play_start_pause" />
+
+        <Space
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"/>
+
+        <ImageButton android:id="@+id/delete_voicemail"
+            style="@style/VoicemailPlaybackLayoutButtonStyle"
+            android:src="@drawable/ic_delete_24dp"
+            android:tint="@color/voicemail_icon_tint"
+            android:contentDescription="@string/call_log_trash_voicemail" />
+
+        <Space android:id="@+id/space_before_share_voicemail"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:visibility="gone" />
+
+        <ImageButton android:id="@+id/share_voicemail"
+            style="@style/VoicemailPlaybackLayoutButtonStyle"
+            android:src="@drawable/ic_share_white_24dp"
+            android:tint="@color/voicemail_icon_tint"
+            android:contentDescription="@string/call_log_share_voicemail"
+            android:visibility="gone" />
+
+        <Space android:id="@+id/space_before_archive_voicemail"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:visibility="gone" />
+
+        <ImageButton android:id="@+id/archive_voicemail"
+            style="@style/VoicemailPlaybackLayoutButtonStyle"
+            android:src="@drawable/ic_archive_white_24dp"
+            android:tint="@color/voicemail_icon_tint"
+            android:contentDescription="@string/call_log_archive_voicemail"
+            android:visibility="gone" />
+
+        <Space
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"/>
 
     </LinearLayout>
 
diff --git a/res/menu/dialtacts_options.xml b/res/menu/dialtacts_options.xml
index 8e31026..0f068f5 100644
--- a/res/menu/dialtacts_options.xml
+++ b/res/menu/dialtacts_options.xml
@@ -21,7 +21,8 @@
         android:title="@string/action_menu_call_history_description" />
     <item
         android:id="@+id/menu_archive"
-        android:title="@string/voicemail_archive_activity_title" />
+        android:title="@string/voicemail_archive_activity_title"
+        android:visible="false" />
     <item
         android:id="@+id/menu_import_export"
         android:title="@string/menu_import_export" />
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 5820b3f..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>
@@ -270,6 +272,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"لإجراء مكالمة، شغِّل إذن الهاتف."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"ليس لدى تطبيق الهاتف إذن لتعديل إعدادات النظام."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"تم الحظر"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> في الوضع النشط"</string>
 </resources>
diff --git a/res/values-az-rAZ/strings.xml b/res/values-az-rAZ/strings.xml
index 9e9cdd6..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>
@@ -262,6 +263,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Zəng etmək üçün, Telefon icazəsini aktivləşdirin."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Telefon tətbiqinin sistem ayarlarına yazmaq icazəsi yoxdur."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Bloklanıb"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> aktivdir"</string>
 </resources>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 1751ff4..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>
@@ -264,6 +266,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Da biste uputili poziv, uključite dozvolu za Telefon."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Aplikacija Telefon nema dozvolu za upisivanje u sistemska podešavanja."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Blokiran"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> je aktivan"</string>
 </resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 16900cc..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"За да извършите обаждане, включете разрешението за Телефон."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Приложението Телефон няма разрешение да записва в системните настройки."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Блокирано"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> е активно"</string>
 </resources>
diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml
index 281532c..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"একটি কল করতে, ফোনের অনুমতি চালু করুন।"</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"ফোনের অ্যাপ্লিকেশানকে সিস্টেম সেটিংসে লেখার অনুমতি দেওয়া হয়নি।"</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"অবরুদ্ধ"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> সক্রিয় আছে"</string>
 </resources>
diff --git a/res/values-bs-rBA/strings.xml b/res/values-bs-rBA/strings.xml
index 0a21f45..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>
@@ -474,6 +476,5 @@
     <skip />
     <!-- no translation found for blocked_number_call_log_label (8912042441473014712) -->
     <skip />
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"Osoba <xliff:g id="NAMEORNUMBER">^1</xliff:g> je aktivna"</string>
 </resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 6954b37..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Activa el permís Telèfon per fer una trucada."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"L\'aplicació Telèfon no té permís per escriure a la configuració del sistema."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Bloquejat"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> és la trucada activa"</string>
 </resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 255586a..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>
@@ -266,6 +268,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Chcete-li uskutečnit hovor, aktivujte oprávnění Telefon."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Aplikace Telefon nemá oprávnění provádět zápis do nastavení systému."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Blokováno"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> je aktivní"</string>
 </resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 4c6c831..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Slå tilladelsen Telefon til for at foretage et opkald."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Opkaldsappen har ikke tilladelse til at ændre systemindstillinger."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Blokeret"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> er aktivt"</string>
 </resources>
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 0574f0f..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"To place a call, turn on the Phone permission."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Phone app does not have permission to write to system settings."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Blocked"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> is active"</string>
 </resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 0574f0f..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"To place a call, turn on the Phone permission."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Phone app does not have permission to write to system settings."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Blocked"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> is active"</string>
 </resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 0574f0f..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"To place a call, turn on the Phone permission."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Phone app does not have permission to write to system settings."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Blocked"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> is active"</string>
 </resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index f4d7ab0..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Para realizar una llamada, activa el permiso Teléfono."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"La aplicación de teléfono no tiene permiso para modificar la configuración del sistema."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Bloqueado"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> está activa"</string>
 </resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 4114513..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Para hacer una llamada, activa el permiso de la aplicación Teléfono."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"La aplicación Teléfono no tiene permiso para editar los ajustes del sistema."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Bloqueado"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"Llamada activa: <xliff:g id="NAMEORNUMBER">^1</xliff:g>"</string>
 </resources>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
index 40eb8dd..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Helistamiseks lülitage sisse telefoniluba."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Telefonirakendusel pole luba süsteemiseadetesse kirjutada."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Blokeeritud"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> on aktiivne"</string>
 </resources>
diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml
index 123ad6e..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Deiak egiteko, aktibatu Telefonoa erabiltzeko baimena."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Telefonoaren aplikazioak ez du baimenik sistemaren ezarpenetan ezer idazteko."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Blokeatuta"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> aktibo dago"</string>
 </resources>
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 5b0927c..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Jos haluat soittaa puheluja, ota Puhelin-käyttöoikeus käyttöön."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Puhelinsovelluksella ei ole oikeutta muokata järjestelmän asetuksia."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Estetyt"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> on aktiivinen."</string>
 </resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index d4aba47..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>
@@ -262,6 +263,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Pour faire un appel, activez l\'autorisation Téléphone."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"L\'application Téléphone n\'est pas autorisée à modifier les paramètres du système."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Bloqué"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"Appel en cours avec : <xliff:g id="NAMEORNUMBER">^1</xliff:g>"</string>
 </resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 13ce4b1..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Pour passer un appel, activez l\'autorisation Téléphone."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"L\'application Téléphone n\'est pas autorisée à modifier les paramètres du système."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Bloqué"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> est actif."</string>
 </resources>
diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml
index 25bb5e3..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Para facer unha chamada, activa o permiso de Teléfono."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"A aplicación Teléfono non ten permiso para modificar a configuración do sistema."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Bloqueado"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"Chamada activa: <xliff:g id="NAMEORNUMBER">^1</xliff:g>"</string>
 </resources>
diff --git a/res/values-gu-rIN/strings.xml b/res/values-gu-rIN/strings.xml
index b2efd5e..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"કૉલ કરવા માટે, ફોન પરવાનગી ચાલુ કરો."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"ફોન એપ્લિકેશનને સિસ્ટમ સેટિંગ્સ પર લખવાની પરવાનગી નથી."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"અવરોધિત"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> સક્રિય છે"</string>
 </resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 2a99cab..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"कॉल करने के लिए, फ़ोन अनुमति चालू करें."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"फ़ोन ऐप को सिस्टम सेटिंग में लिखने की अनुमति नहीं है."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"अवरोधित"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> सक्रिय है"</string>
 </resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index c20a466..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>
@@ -264,6 +266,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Da biste nazvali nekog, uključite dopuštenje za telefon."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Aplikacija Telefon nema dopuštenje za pisanje u postavke sustava."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Blokirano"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"Aktivan/a: <xliff:g id="NAMEORNUMBER">^1</xliff:g>"</string>
 </resources>
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 bdd3f74..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>
@@ -262,6 +263,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Զանգ կատարելու համար միացրեք Հեռախոսի թույլտվությունը:"</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Հեռախոս հավելվածը համակարգի կարգավորումները գրելու թույլտվություն չունի:"</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Արգելափակված"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g>-ն ակտիվ է"</string>
 </resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index fb3f56a..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Untuk melakukan panggilan, aktifkan izin Telepon."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Aplikasi telepon tidak memiliki izin untuk menulis ke setelan sistem."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Diblokir"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> aktif"</string>
 </resources>
diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml
index c63549f..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Kveiktu á heimild símaforritsins til að hringja símtal."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Símaforritið hefur ekki heimild til að breyta kerfisstillingum."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Á bannlista"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"Símtal við <xliff:g id="NAMEORNUMBER">^1</xliff:g> er í gangi"</string>
 </resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index e0086f0..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Per fare una chiamata, attiva l\'autorizzazione sul telefono."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"L\'app Telefono non dispone dell\'autorizzazione per modificare le impostazioni di sistema."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Bloccato"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> è attivo"</string>
 </resources>
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 e3f94d6..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>
@@ -262,6 +263,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"電話をかけるには、電話権限をONにしてください。"</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"電話アプリにはシステム設定への書き込み権限がありません。"</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"ブロック済み"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> さんが通話中です"</string>
 </resources>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
index 965cdb0..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"ზარის განსახორციელებლად, ჩართეთ ტელეფონის ნებართვა."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"ტელეფონის აპს სისტემის პარამეტრებში ჩაწერის ნებართვა არ აქვს."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"დაბლოკილი"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> აქტიურია"</string>
 </resources>
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 8d48582..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>
@@ -262,6 +263,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"ដើម្បីធ្វើការហៅទូរស័ព្ទ សូមបើកសិទ្ធិអនុញ្ញាតកម្មវិធីហៅទូរស័ព្ទ។"</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"កម្មវិធីទូរស័ព្ទមិនមានសិទ្ធិអនុញ្ញាតដើម្បីសរសេរការកំណត់ប្រព័ន្ធទេ។"</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"បានរារាំង"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> គឺសកម្ម"</string>
 </resources>
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml
index 4fb0acd..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>
@@ -263,6 +265,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"ಕರೆ ಮಾಡಲು, ಫೋನ್ ಅನುಮತಿಯನ್ನು ಆನ್ ಮಾಡಿ."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"ಸಿಸ್ಟಂ ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಗೆ ಬರೆಯಲು ಫೋನ್ ಅಪ್ಲಿಕೇಶನ್ ಅನುಮತಿಯನ್ನು ಹೊಂದಿಲ್ಲ."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> ಸಕ್ರಿಯವಾಗಿದೆ"</string>
 </resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index f57b337..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>
@@ -262,6 +263,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"전화를 걸려면 전화 권한을 사용하도록 설정하세요."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"전화 앱은 시스템 설정에 쓸 수 있는 권한이 없습니다."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"차단됨"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g>이(가) 활성화되었습니다."</string>
 </resources>
diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml
index 4b251b6..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>
@@ -286,6 +287,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Чалуу үчүн, \"Телефон\" колдонмосуна уруксат бериңиз."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Телефон колдонмосунун Тутум жөндөөлөрүнө жазууга уруксаты жок."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Бөгөттөлгөн"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> жүрүп жатат"</string>
 </resources>
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 06c03f5..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>
@@ -266,6 +268,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Jei norite paskambinti, įjunkite Telefono programos leidimą."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Telefono programa neturi leidimo keisti sistemos nustatymų."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Užblokuota"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> aktyvus"</string>
 </resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 1fdc860..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>
@@ -264,6 +266,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Lai veiktu zvanu, ieslēdziet atļauju Tālrunis."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Tālruņa lietotnei nav atļaujas rakstīt sistēmas iestatījumos."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Bloķēts"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g>: aktīvs"</string>
 </resources>
diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml
index fbc985f..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>
@@ -262,6 +263,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"За да воспоставите повик, вклучете ја дозволата за телефон."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Апликацијата на телефонот нема дозвола да пишува во поставките на системот."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Блокиран"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> е активен"</string>
 </resources>
diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml
index ef934b9..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"കോൾ വിളിക്കുന്നതിന്, \'ഫോൺ\' അനുമതി ഓണാക്കുക."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"സിസ്റ്റം ക്രമീകരണത്തിലേക്ക് എഴുതാൻ ഫോൺ ആപ്പിന് അനുമതിയില്ല."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"ബ്ലോക്കുചെയ്തു"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> സജീവമാണ്"</string>
 </resources>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
index 3e11d2d..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>
@@ -262,6 +263,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Залгахын тулд Утасны зөвшөөрлийг идэвхжүүлнэ үү."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Гар утасны апп-д системийн тохиргоо бичих зөвшөөрөл алга."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Блоклосон"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> идэвхтэй байна"</string>
 </resources>
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 da11826..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Untuk membuat panggilan, hidupkan kebenaran Telefon."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Apl telefon tiada kebenaran untuk menulis ke tetapan sistem."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Disekat"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> aktif"</string>
 </resources>
diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml
index 81dd485..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>
@@ -262,6 +263,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"ဖုန်းခေါ်ဆိုရန်၊ ဖုန်းခွင့်ပြုချက်ကိုဖွင့်ပါ။"</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"ဖုန်း အက်ပ်ဆီတွင် စနစ် ဆက်တင်များသို့ ရေးသားခွင့် မရှိပါ။"</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"ပိတ်ဆို့ထားသည်"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> ရှိနေသည်"</string>
 </resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index ee3ebd5..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"For å ringe, slå på Telefon-tillatelsen."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Telefonappen har ikke tillatelse til å skrive til systeminnstillinger."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Blokkert"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> er aktiv"</string>
 </resources>
diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml
index 87b3c02..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"कल गर्न फोन अनुमति सक्रिय गर्नुहोस्।"</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"प्रणाली सेटिङहरूमा लेख्न फोन अनुप्रयोगसँग अनुमति छैन।"</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"रोकियो"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> सक्रिय छ"</string>
 </resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index daeb8a6..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Als je iemand wilt bellen, schakel je de machtiging voor Telefoon in."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Telefoon-app heeft geen toestemming om systeeminstellingen te schrijven."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Geblokkeerd"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> is actief"</string>
 </resources>
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 0bb3092..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>
@@ -266,6 +268,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Aby nawiązać połączenie, włącz uprawnienie Telefon."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Aplikacja Telefon nie ma uprawnień do zapisu w ustawieniach systemowych."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Zablokowany"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> – rozmowa aktywna"</string>
 </resources>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index fdaa5ef..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Para fazer uma chamada, ative a permissão para o app Telefone."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"O app Telefone não tem permissão para gravar nas configurações do sistema."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Bloqueado"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"Chamada ativa: <xliff:g id="NAMEORNUMBER">^1</xliff:g>"</string>
 </resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 23ebc99..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Para efetuar uma chamada, ative a autorização Telemóvel."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"A aplicação Telefone não tem autorização para gravar nas definições do sistema."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Bloqueado"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> está ativa"</string>
 </resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index fdaa5ef..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Para fazer uma chamada, ative a permissão para o app Telefone."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"O app Telefone não tem permissão para gravar nas configurações do sistema."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Bloqueado"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"Chamada ativa: <xliff:g id="NAMEORNUMBER">^1</xliff:g>"</string>
 </resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index adb0127..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>
@@ -264,6 +266,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Pentru a apela, activați permisiunea Telefon."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Aplicația Telefon nu are permisiunea să modifice setările de sistem."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Blocat"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> este activ"</string>
 </resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 1cc3641..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>
@@ -266,6 +268,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Чтобы позвонить, предоставьте приложению разрешение \"Телефон\"."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"У приложения \"Телефон\" нет разрешения на изменение системных настроек."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Заблокирован"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g>: вызов активен"</string>
 </resources>
diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml
index 0d70d5b..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"ඇමතුමක් ලබා ගැනීමට, දුරකථන අවසරය ක්‍රියාත්මක කරන්න."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"දුරකථන යෙදුමට පද්ධති සැකසීම් වෙත ලිවීමට අවසර නැත."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"අවහිර කරන ලදි"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> සක්‍රියයි"</string>
 </resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 7331b24..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>
@@ -266,6 +268,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Ak chcete volať, zapnite povolenie Telefón."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Telefónna aplikácia nemá povolenie na zápis do nastavení systému."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Zablokované"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> - hovor je aktívny"</string>
 </resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 34e1e5e..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>
@@ -266,6 +268,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Če želite klicati, vklopite dovoljenje za telefon."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Aplikacija Telefon nima dovoljenja za pisanje v sistemske nastavitve."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Blokirano"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"Oseba/številka <xliff:g id="NAMEORNUMBER">^1</xliff:g> je aktivna"</string>
 </resources>
diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq-rAL/strings.xml
index 1eac0ab..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Për të kryer një telefonatë, aktivizo lejen e Telefonit."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Aplikacionet e telefonit nuk kanë leje të shkruajnë në cilësimet e sistemit."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"I bllokuar"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> është aktive"</string>
 </resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 0f26936..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>
@@ -264,6 +266,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Да бисте упутили позив, укључите дозволу за Телефон."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Апликација Телефон нема дозволу за уписивање у системска подешавања."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Блокиран"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> је активан"</string>
 </resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index b8c3cb4..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Du måste aktivera behörigheten Telefon för att kunna ringa."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Telefonappen har inte skrivbehörighet i systeminställningarna."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Blockerad"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> är aktiv"</string>
 </resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 1f01b37..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Ili upige simu, washa ruhusa ya Simu."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Programu ya simu haina ruhusa ya kuandika kwenye mipangilio ya mfumo."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Imezuiwa"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> yupo"</string>
 </resources>
diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml
index 17f4fd8..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"அழைக்க, ஃபோன் அனுமதியை இயக்கவும்."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"முறைமை அமைப்புகளில் எழுதுவதற்கான அனுமதி ஃபோன் பயன்பாட்டுக்கு இல்லை."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"தடுக்கப்பட்டது"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> அழைப்பு செயலில் உள்ளது"</string>
 </resources>
diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml
index 7e17ba3..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"కాల్ చేయడానికి, ఫోన్ అనుమతిని ఆన్ చేయండి."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"సిస్టమ్ సెట్టింగ్‌లకు వ్రాయడం కోసం ఫోన్ అనువర్తనానికి అనుమతి లేదు."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"బ్లాక్ అయ్యారు"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> కాల్ సక్రియంగా ఉంది"</string>
 </resources>
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 6770e88..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Upang tumawag, i-on ang pahintulot ng Telepono."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Walang pahintulot ang app ng Telepono na mag-write sa mga setting ng system."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Naka-block"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"Aktibo si/ang <xliff:g id="NAMEORNUMBER">^1</xliff:g>"</string>
 </resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index a123784..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Telefon etmek için Telefon iznini açın."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Telefon uygulamasının sistem ayarlarına yazma izni yok."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Engellendi"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> etkin durumda"</string>
 </resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index c60e6d4..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>
@@ -266,6 +268,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Щоб зателефонувати, увімкніть дозвіл \"Телефон\"."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Додаток Телефон не має дозволу змінювати системні налаштування."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Заблоковано"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g>: дзвінок активний"</string>
 </resources>
diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml
index 62c42cf..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"کال کرنے کیلئے فون کی اجازت آن کریں۔"</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"فون ایپ کے پاس سسٹم ترتیبات کو لکھنے کی اجازت نہیں ہے۔"</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"مسدود کردہ"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> فعال ہے"</string>
 </resources>
diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml
index 69b128f..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Qo‘ng‘iroq qilish uchun “Telefon” ruxsatnomasini yoqing."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Telefon ilovasida tizim sozlamalarini o‘zgartirish uchun ruxsat yo‘q."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Bloklangan"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> faol"</string>
 </resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 505886f..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Để thực hiện cuộc gọi, bật quyền đối với Điện thoại."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Ứng dụng Điện thoại không có quyền ghi vào cài đặt hệ thống."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Bị chặn"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> đang hiện hoạt"</string>
 </resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 8c61293..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>
@@ -222,7 +224,7 @@
     <string name="list_delimeter" msgid="4571593167738725100">"、 "</string>
     <string name="display_options_title" msgid="7812852361055667468">"显示选项"</string>
     <string name="sounds_and_vibration_title" msgid="1692290115642160845">"提示音和振动"</string>
-    <string name="accessibility_settings_title" msgid="6068141142874046249">"无障碍功能"</string>
+    <string name="accessibility_settings_title" msgid="6068141142874046249">"辅助功能"</string>
     <string name="ringtone_title" msgid="760362035635084653">"手机铃声"</string>
     <string name="vibrate_on_ring_title" msgid="3362916460327555241">"有来电时响铃并振动"</string>
     <string name="dtmf_tone_enable_title" msgid="6571449695997521615">"拨号键盘提示音"</string>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"要拨打电话,请开启“电话”权限。"</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"电话应用不具备写入系统设置的权限。"</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"已屏蔽"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"正在与<xliff:g id="NAMEORNUMBER">^1</xliff:g>通话"</string>
 </resources>
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 e988d84..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"如要撥打電話,請開啟「電話」存取權限。"</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"電話應用程式的權限不足,無法寫入系統設定。"</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"已封鎖"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"目前顯示的聯絡人:<xliff:g id="NAMEORNUMBER">^1</xliff:g>"</string>
 </resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 31847db..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>
@@ -262,6 +264,5 @@
     <string name="permission_place_call" msgid="2101287782615887547">"Ukuze ubeke ikholi, vula imvume yefoni."</string>
     <string name="toast_cannot_write_system_settings" msgid="5614246168296606709">"Uhlelo lokusebenza lefoni alinayo imvume yokubhalela kuzilungiselelo zesistimu."</string>
     <string name="blocked_number_call_log_label" msgid="8912042441473014712">"Kuvinjelwe"</string>
-    <!-- no translation found for accessibility_call_is_active (2297282583928508760) -->
-    <skip />
+    <string name="accessibility_call_is_active" msgid="2297282583928508760">"<xliff:g id="NAMEORNUMBER">^1</xliff:g> iyasebenza"</string>
 </resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 4865280..a9f2702 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -170,4 +170,6 @@
     <dimen name="blocked_number_header_height">48dp</dimen>
 
     <dimen name="call_type_icon_size">12dp</dimen>
+
+    <dimen name="tab_unread_count_margin_left">0dp</dimen>
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 830af65..b8f8679 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -87,6 +87,9 @@
     <!-- Menu item used to archive a voicemail. [CHAR LIMIT=30] -->
     <string name="call_log_archive_voicemail">Archive voicemail</string>
 
+    <!-- Menu item used to send a voicemail through other applications [CHAR LIMIT=30] -->
+    <string name="call_log_share_voicemail">Share voicemail</string>
+
     <!-- Text for snackbar to undo a voicemail delete. [CHAR LIMIT=30] -->
     <string name="snackbar_voicemail_deleted">Voicemail deleted</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/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index d12cf24..d063fef 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -16,8 +16,6 @@
 
 package com.android.dialer;
 
-import com.google.common.annotations.VisibleForTesting;
-
 import android.app.Fragment;
 import android.app.FragmentTransaction;
 import android.content.ActivityNotFoundException;
@@ -64,7 +62,6 @@
 import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
 import com.android.contacts.common.util.PermissionsUtil;
 import com.android.contacts.common.widget.FloatingActionButtonController;
-import com.android.contacts.commonbind.analytics.AnalyticsUtil;
 import com.android.dialer.calllog.CallLogActivity;
 import com.android.dialer.calllog.CallLogFragment;
 import com.android.dialer.database.DialerDatabaseHelper;
@@ -84,18 +81,19 @@
 import com.android.dialer.logging.Logger;
 import com.android.dialer.logging.ScreenEvent;
 import com.android.dialer.settings.DialerSettingsActivity;
+import com.android.dialer.util.Assert;
 import com.android.dialer.util.DialerUtils;
 import com.android.dialer.util.IntentUtil;
 import com.android.dialer.util.IntentUtil.CallIntentBuilder;
 import com.android.dialer.util.TelecomUtil;
+import com.android.dialer.voicemail.VoicemailArchiveActivity;
 import com.android.dialer.widget.ActionBarController;
 import com.android.dialer.widget.SearchEditTextLayout;
 import com.android.dialerbind.DatabaseHelperManager;
 import com.android.dialerbind.ObjectFactory;
 import com.android.phone.common.animation.AnimUtils;
 import com.android.phone.common.animation.AnimationListenerAdapter;
-
-import junit.framework.Assert;
+import com.google.common.annotations.VisibleForTesting;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -690,6 +688,10 @@
             handleMenuSettings();
             Logger.logScreenView(ScreenEvent.SETTINGS, this);
             return true;
+        } else if (resId == R.id.menu_archive) {
+            final Intent intent = new Intent(this, VoicemailArchiveActivity.class);
+            startActivity(intent);
+            return true;
         }
         return false;
     }
@@ -903,6 +905,9 @@
     protected OptionsPopupMenu buildOptionsMenu(View invoker) {
         final OptionsPopupMenu popupMenu = new OptionsPopupMenu(this, invoker);
         popupMenu.inflate(R.menu.dialtacts_options);
+        if (ObjectFactory.isVoicemailArchiveEnabled(this)) {
+            popupMenu.getMenu().findItem(R.id.menu_archive).setVisible(true);
+        }
         popupMenu.setOnMenuItemClickListener(this);
         return popupMenu;
     }
diff --git a/src/com/android/dialer/calllog/CallLogAdapter.java b/src/com/android/dialer/calllog/CallLogAdapter.java
index 6f96ee5..e97f8e2 100644
--- a/src/com/android/dialer/calllog/CallLogAdapter.java
+++ b/src/com/android/dialer/calllog/CallLogAdapter.java
@@ -16,7 +16,10 @@
 
 package com.android.dialer.calllog;
 
+import com.android.contacts.common.util.PermissionsUtil;
+
 import com.android.dialer.DialtactsActivity;
+import com.android.dialer.database.VoicemailArchiveContract;
 import com.google.common.annotations.VisibleForTesting;
 
 import android.content.Context;
@@ -72,6 +75,11 @@
                 VoicemailPlaybackPresenter.OnVoicemailDeletedListener,
                 ExtendedBlockingButtonRenderer.Listener {
 
+    // Types of activities the call log adapter is used for
+    public static final int ACTIVITY_TYPE_CALL_LOG = 1;
+    public static final int ACTIVITY_TYPE_ARCHIVE = 2;
+    public static final int ACTIVITY_TYPE_DIALTACTS = 3;
+
     /** Interface used to initiate a refresh of the content. */
     public interface CallFetcher {
         public void fetchCalls();
@@ -102,7 +110,7 @@
 
     protected ContactInfoCache mContactInfoCache;
 
-    private boolean mIsCallLogActivity;
+    private final int mActivityType;
 
     private static final String KEY_EXPANDED_POSITION = "expanded_position";
     private static final String KEY_EXPANDED_ROW_ID = "expanded_row_id";
@@ -172,7 +180,7 @@
             } else {
                 if (viewHolder.callType == CallLog.Calls.MISSED_TYPE) {
                     CallLogAsyncTaskUtil.markCallAsRead(mContext, viewHolder.callIds);
-                    if (!mIsCallLogActivity) {
+                    if (mActivityType == ACTIVITY_TYPE_DIALTACTS) {
                         ((DialtactsActivity) v.getContext()).updateTabUnreadCounts();
                     }
                 }
@@ -255,7 +263,7 @@
             CallFetcher callFetcher,
             ContactInfoHelper contactInfoHelper,
             VoicemailPlaybackPresenter voicemailPlaybackPresenter,
-            boolean isCallLogActivity) {
+            int activityType) {
         super(context);
 
         mContext = context;
@@ -265,7 +273,8 @@
         if (mVoicemailPlaybackPresenter != null) {
             mVoicemailPlaybackPresenter.setOnVoicemailDeletedListener(this);
         }
-        mIsCallLogActivity = isCallLogActivity;
+
+        mActivityType = activityType;
 
         mContactInfoCache = new ContactInfoCache(
                 mContactInfoHelper, mOnContactInfoChangedListener);
@@ -375,6 +384,11 @@
     }
 
     @Override
+    public void addVoicemailGroups(Cursor cursor) {
+        mCallLogGroupBuilder.addVoicemailGroups(cursor);
+    }
+
+    @Override
     public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
         if (viewType == VIEW_TYPE_VOICEMAIL_PROMO_CARD) {
             return createVoicemailPromoCardViewHolder(parent);
@@ -415,7 +429,7 @@
 
                     @Override
                     public void onChangeFilteredNumberUndo() {}
-                });
+                }, mActivityType == ACTIVITY_TYPE_ARCHIVE);
 
         viewHolder.callLogEntryView.setTag(viewHolder);
         viewHolder.callLogEntryView.setAccessibilityDelegate(mAccessibilityDelegate);
@@ -479,7 +493,8 @@
 
         final String number = c.getString(CallLogQuery.NUMBER);
         final String postDialDigits = PhoneNumberDisplayUtil.canShowPostDial()
-                ? c.getString(CallLogQuery.POST_DIAL_DIGITS) : "";
+                && mActivityType != ACTIVITY_TYPE_ARCHIVE ?
+                c.getString(CallLogQuery.POST_DIAL_DIGITS) : "";
 
         final int numberPresentation = c.getInt(CallLogQuery.NUMBER_PRESENTATION);
         final PhoneAccountHandle accountHandle = PhoneAccountUtils.getAccount(
@@ -506,17 +521,13 @@
                 mContext, number, numberPresentation, formattedNumber,
                 postDialDigits, isVoicemailNumber);
         details.accountHandle = accountHandle;
-        details.callTypes = getCallTypes(c, count);
         details.countryIso = countryIso;
         details.date = c.getLong(CallLogQuery.DATE);
         details.duration = c.getLong(CallLogQuery.DURATION);
         details.features = getCallFeatures(c, count);
         details.geocode = c.getString(CallLogQuery.GEOCODED_LOCATION);
         details.transcription = c.getString(CallLogQuery.TRANSCRIPTION);
-        if (details.callTypes[0] == CallLog.Calls.VOICEMAIL_TYPE ||
-                details.callTypes[0] == CallLog.Calls.MISSED_TYPE) {
-            details.isRead = c.getInt(CallLogQuery.IS_READ) == 1;
-        }
+        details.callTypes = getCallTypes(c, count);
 
         if (!c.isNull(CallLogQuery.DATA_USAGE)) {
             details.dataUsage = c.getLong(CallLogQuery.DATA_USAGE);
@@ -543,9 +554,8 @@
         views.postDialDigits = details.postDialDigits;
         views.displayNumber = details.displayNumber;
         views.numberPresentation = numberPresentation;
-        views.callType = c.getInt(CallLogQuery.CALL_TYPE);
+
         views.accountHandle = accountHandle;
-        views.voicemailUri = c.getString(CallLogQuery.VOICEMAIL_URI);
         // Stash away the Ids of the calls so that we can support deleting a row in the call log.
         views.callIds = getCallIds(c, count);
         views.isBusiness = mContactInfoHelper.isBusiness(info.sourceType);
@@ -566,6 +576,21 @@
             views.dayGroupHeader.setVisibility(View.GONE);
         }
 
+        if (mActivityType == ACTIVITY_TYPE_ARCHIVE) {
+            views.callType = CallLog.Calls.VOICEMAIL_TYPE;
+            views.voicemailUri = VoicemailArchiveContract.VoicemailArchive.buildWithId(c.getInt(
+                    c.getColumnIndex(VoicemailArchiveContract.VoicemailArchive._ID)))
+                    .toString();
+
+        } else {
+            if (details.callTypes[0] == CallLog.Calls.VOICEMAIL_TYPE ||
+                    details.callTypes[0] == CallLog.Calls.MISSED_TYPE) {
+                details.isRead = c.getInt(CallLogQuery.IS_READ) == 1;
+            }
+            views.callType = c.getInt(CallLogQuery.CALL_TYPE);
+            views.voicemailUri = c.getString(CallLogQuery.VOICEMAIL_URI);
+        }
+
         mCallLogListItemHelper.setPhoneCallDetails(views, details);
 
         if (mCurrentlyExpandedRowId == views.rowId) {
@@ -613,7 +638,7 @@
     public Object getItem(int position) {
         return super.getItem(position - (mShowVoicemailPromoCard ? 1 : 0)
                 + ((mHiddenPosition != RecyclerView.NO_POSITION && position >= mHiddenPosition)
-                        ? 1 : 0));
+                ? 1 : 0));
     }
 
     @Override
@@ -622,7 +647,7 @@
     }
 
     protected boolean isCallLogActivity() {
-        return mIsCallLogActivity;
+        return mActivityType == ACTIVITY_TYPE_CALL_LOG;
     }
 
     /**
@@ -740,6 +765,9 @@
      * It position in the cursor is unchanged by this function.
      */
     private int[] getCallTypes(Cursor cursor, int count) {
+        if (mActivityType == ACTIVITY_TYPE_ARCHIVE) {
+            return new int[] {CallLog.Calls.VOICEMAIL_TYPE};
+        }
         int position = cursor.getPosition();
         int[] callTypes = new int[count];
         for (int index = 0; index < count; ++index) {
@@ -851,7 +879,8 @@
     private void maybeShowVoicemailPromoCard() {
         boolean showPromoCard = mPrefs.getBoolean(SHOW_VOICEMAIL_PROMO_CARD,
                 SHOW_VOICEMAIL_PROMO_CARD_DEFAULT);
-        mShowVoicemailPromoCard = (mVoicemailPlaybackPresenter != null) && showPromoCard;
+        mShowVoicemailPromoCard = mActivityType != ACTIVITY_TYPE_ARCHIVE &&
+                (mVoicemailPlaybackPresenter != null) && showPromoCard;
     }
 
     /**
diff --git a/src/com/android/dialer/calllog/CallLogAsyncTaskUtil.java b/src/com/android/dialer/calllog/CallLogAsyncTaskUtil.java
index 9825918..13de077 100644
--- a/src/com/android/dialer/calllog/CallLogAsyncTaskUtil.java
+++ b/src/com/android/dialer/calllog/CallLogAsyncTaskUtil.java
@@ -16,6 +16,7 @@
 
 package com.android.dialer.calllog;
 
+import android.content.ContentResolver;
 import android.content.ContentValues;
 import android.content.Context;
 import android.content.Intent;
@@ -32,6 +33,7 @@
 import com.android.contacts.common.util.PermissionsUtil;
 import com.android.dialer.DialtactsActivity;
 import com.android.dialer.PhoneCallDetails;
+import com.android.dialer.database.VoicemailArchiveContract;
 import com.android.dialer.util.AppCompatConstants;
 import com.android.dialer.util.AsyncTaskExecutor;
 import com.android.dialer.util.AsyncTaskExecutors;
@@ -413,16 +415,16 @@
     }
 
     /**
-     * Updates the duration of a voicemail call log entry.
+     * Updates the duration of a voicemail call log entry if the duration given is greater than 0,
+     * and if if the duration currently in the database is less than or equal to 0 (non-existent).
      */
     public static void updateVoicemailDuration(
             final Context context,
             final Uri voicemailUri,
-            final int duration) {
-        if (!PermissionsUtil.hasPhonePermissions(context)) {
+            final long duration) {
+        if (duration <= 0 || !PermissionsUtil.hasPhonePermissions(context)) {
             return;
         }
-
         if (sAsyncTaskExecutor == null) {
             initTaskExecutor();
         }
@@ -430,9 +432,18 @@
         sAsyncTaskExecutor.submit(Tasks.UPDATE_DURATION, new AsyncTask<Void, Void, Void>() {
             @Override
             public Void doInBackground(Void... params) {
-                ContentValues values = new ContentValues(1);
-                values.put(CallLog.Calls.DURATION, duration);
-                context.getContentResolver().update(voicemailUri, values, null, null);
+                ContentResolver contentResolver = context.getContentResolver();
+                Cursor cursor = contentResolver.query(
+                        voicemailUri,
+                        new String[] { VoicemailArchiveContract.VoicemailArchive.DURATION },
+                        null, null, null);
+                if (cursor != null && cursor.moveToFirst() && cursor.getInt(
+                        cursor.getColumnIndex(
+                                VoicemailArchiveContract.VoicemailArchive.DURATION)) <= 0) {
+                    ContentValues values = new ContentValues(1);
+                    values.put(CallLog.Calls.DURATION, duration);
+                    context.getContentResolver().update(voicemailUri, values, null, null);
+                }
                 return null;
             }
         });
diff --git a/src/com/android/dialer/calllog/CallLogFragment.java b/src/com/android/dialer/calllog/CallLogFragment.java
index 9cd1359..07299a2 100644
--- a/src/com/android/dialer/calllog/CallLogFragment.java
+++ b/src/com/android/dialer/calllog/CallLogFragment.java
@@ -300,13 +300,15 @@
         mEmptyListView.setImage(R.drawable.empty_call_log);
         mEmptyListView.setActionClickedListener(this);
 
+        int activityType = mIsCallLogActivity ? CallLogAdapter.ACTIVITY_TYPE_CALL_LOG :
+                CallLogAdapter.ACTIVITY_TYPE_DIALTACTS;
         String currentCountryIso = GeoUtil.getCurrentCountryIso(getActivity());
         mAdapter = ObjectFactory.newCallLogAdapter(
-                getActivity(),
-                this,
-                new ContactInfoHelper(getActivity(), currentCountryIso),
-                voicemailPlaybackPresenter,
-                mIsCallLogActivity);
+                        getActivity(),
+                        this,
+                        new ContactInfoHelper(getActivity(), currentCountryIso),
+                        voicemailPlaybackPresenter,
+                        activityType);
         mRecyclerView.setAdapter(mAdapter);
         fetchCalls();
     }
diff --git a/src/com/android/dialer/calllog/CallLogGroupBuilder.java b/src/com/android/dialer/calllog/CallLogGroupBuilder.java
index 194231b..950f634 100644
--- a/src/com/android/dialer/calllog/CallLogGroupBuilder.java
+++ b/src/com/android/dialer/calllog/CallLogGroupBuilder.java
@@ -187,6 +187,33 @@
         mGroupCreator.addGroup(count - groupSize, groupSize);
     }
 
+    /**
+     * Group cursor entries by date, with only one entry per group. This is used for listing
+     * voicemails in the archive tab.
+     */
+    public void addVoicemailGroups(Cursor cursor) {
+        if (cursor.getCount() == 0) {
+            return;
+        }
+
+        // Clear any previous day grouping information.
+        mGroupCreator.clearDayGroups();
+
+        // Get current system time, used for calculating which day group calls belong to.
+        long currentTime = System.currentTimeMillis();
+
+        // Reset cursor to start before the first row
+        cursor.moveToPosition(-1);
+
+        // Create an individual group for each voicemail
+        while (cursor.moveToNext()) {
+            mGroupCreator.addGroup(cursor.getPosition(), 1);
+            mGroupCreator.setDayGroup(cursor.getLong(CallLogQuery.ID),
+                    getDayGroup(cursor.getLong(CallLogQuery.DATE), currentTime));
+
+        }
+    }
+
     @VisibleForTesting
     boolean equalNumbers(String number1, String number2) {
         if (PhoneNumberHelper.isUriNumber(number1) || PhoneNumberHelper.isUriNumber(number2)) {
diff --git a/src/com/android/dialer/calllog/CallLogListItemViewHolder.java b/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
index 1c27440..392672f 100644
--- a/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
+++ b/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
@@ -27,15 +27,14 @@
 import android.support.v7.widget.CardView;
 import android.support.v7.widget.RecyclerView;
 import android.telecom.PhoneAccountHandle;
-import android.telephony.PhoneNumberUtils;
 import android.text.BidiFormatter;
 import android.text.TextDirectionHeuristics;
 import android.text.TextUtils;
-import android.util.Log;
 import android.view.ContextMenu;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewStub;
+import android.widget.ImageButton;
 import android.widget.ImageView;
 import android.widget.QuickContactBadge;
 import android.widget.TextView;
@@ -66,8 +65,6 @@
 import com.google.common.collect.Lists;
 
 import java.util.List;
-import java.util.Map;
-import java.util.Set;
 
 /**
  * This is an object containing references to views contained by the call log list item. This
@@ -204,6 +201,11 @@
      */
     public boolean isBlocked;
 
+    /**
+     * Whether this is the archive tab or not.
+     */
+    public final boolean isArchiveTab;
+
     private final Context mContext;
     private final CallLogCache mCallLogCache;
     private final CallLogListItemHelper mCallLogListItemHelper;
@@ -234,7 +236,8 @@
             PhoneCallDetailsViews phoneCallDetailsViews,
             CardView callLogEntryView,
             TextView dayGroupHeader,
-            ImageView primaryActionButtonView) {
+            ImageView primaryActionButtonView,
+            boolean isArchiveTab) {
         super(rootView);
 
         mContext = context;
@@ -253,6 +256,7 @@
         this.dayGroupHeader = dayGroupHeader;
         this.primaryActionButtonView = primaryActionButtonView;
         this.workIconView = (ImageView) rootView.findViewById(R.id.work_profile_icon);
+        this.isArchiveTab = isArchiveTab;
         Resources resources = mContext.getResources();
         mPhotoSize = mContext.getResources().getDimensionPixelSize(R.dimen.contact_photo_size);
 
@@ -280,7 +284,9 @@
             CallLogListItemHelper callLogListItemHelper,
             VoicemailPlaybackPresenter voicemailPlaybackPresenter,
             FilteredNumberAsyncQueryHandler filteredNumberAsyncQueryHandler,
-            BlockNumberDialogFragment.Callback filteredNumberDialogCallback) {
+            BlockNumberDialogFragment.Callback filteredNumberDialogCallback,
+            boolean isArchiveTab) {
+
         return new CallLogListItemViewHolder(
                 context,
                 eventListener,
@@ -296,7 +302,8 @@
                 PhoneCallDetailsViews.fromView(view),
                 (CardView) view.findViewById(R.id.call_log_row),
                 (TextView) view.findViewById(R.id.call_log_day_group_label),
-                (ImageView) view.findViewById(R.id.primary_action_button));
+                (ImageView) view.findViewById(R.id.primary_action_button),
+                isArchiveTab);
     }
 
     @Override
@@ -401,6 +408,10 @@
 
             voicemailPlaybackView = (VoicemailPlaybackLayout) actionsView
                     .findViewById(R.id.voicemail_playback_layout);
+            if (isArchiveTab) {
+                voicemailPlaybackView.hideArchiveButton();
+            }
+
 
             callButtonView = actionsView.findViewById(R.id.call_action);
             callButtonView.setOnClickListener(this);
@@ -513,8 +524,10 @@
             mVoicemailPlaybackPresenter.setPlaybackView(
                     voicemailPlaybackView, uri, mVoicemailPrimaryActionButtonClicked);
             mVoicemailPrimaryActionButtonClicked = false;
-
-            CallLogAsyncTaskUtil.markVoicemailAsRead(mContext, uri);
+            // Only mark voicemail as read when not in archive tab
+            if (!isArchiveTab) {
+                CallLogAsyncTaskUtil.markVoicemailAsRead(mContext, uri);
+            }
         } else {
             voicemailPlaybackView.setVisibility(View.GONE);
         }
@@ -625,13 +638,6 @@
     public void updatePhoto() {
         quickContactView.assignContactUri(info.lookupUri);
 
-        if (isBlocked && !TextUtils.isEmpty(number) /* maybe a private number ? */) {
-            quickContactView.setImageDrawable(mContext.getDrawable(R.drawable.blocked_contact));
-            phoneCallDetailsViews.callLocationAndDate.setText(
-                    mContext.getString(R.string.blocked_number_call_log_label));
-            return;
-        }
-
         final boolean isVoicemail = mCallLogCache.isVoicemailNumber(accountHandle, number);
         int contactType = ContactPhotoManager.TYPE_DEFAULT;
         if (isVoicemail) {
@@ -653,6 +659,14 @@
             ContactPhotoManager.getInstance(mContext).loadThumbnail(quickContactView, info.photoId,
                     false /* darkTheme */, true /* isCircular */, request);
         }
+
+        if (mExtendedBlockingButtonRenderer != null) {
+            mExtendedBlockingButtonRenderer.updatePhotoAndLabelIfNecessary(
+                    number,
+                    countryIso,
+                    quickContactView,
+                    phoneCallDetailsViews.callLocationAndDate);
+        }
     }
 
     @Override
@@ -708,11 +722,12 @@
                 PhoneCallDetailsViews.createForTest(context),
                 new CardView(context),
                 new TextView(context),
-                new ImageView(context));
+                new ImageView(context),
+                false);
         viewHolder.detailsButtonView = new TextView(context);
         viewHolder.actionsView = new View(context);
         viewHolder.voicemailPlaybackView = new VoicemailPlaybackLayout(context);
-
+        viewHolder.workIconView = new ImageButton(context);
         return viewHolder;
     }
 }
\ No newline at end of file
diff --git a/src/com/android/dialer/calllog/CallLogNotificationsHelper.java b/src/com/android/dialer/calllog/CallLogNotificationsHelper.java
index 6abf241..1892631 100644
--- a/src/com/android/dialer/calllog/CallLogNotificationsHelper.java
+++ b/src/com/android/dialer/calllog/CallLogNotificationsHelper.java
@@ -16,9 +16,7 @@
 
 package com.android.dialer.calllog;
 
-import static android.Manifest.permission.READ_CALL_LOG;
-import static android.Manifest.permission.READ_CONTACTS;
-
+import android.Manifest;
 import android.content.ContentResolver;
 import android.content.ContentUris;
 import android.content.Context;
@@ -111,7 +109,7 @@
     /**
      * Given a number and number information (presentation and country ISO), get
      * {@link ContactInfo}. If the name is empty but we have a special presentation, display that.
-     * Otherwise attempt to look it up in the database or the cache.
+     * Otherwise attempt to look it up in the cache.
      * If that fails, fall back to displaying the number.
      */
     public @NonNull ContactInfo getContactInfo(@Nullable String number, int numberPresentation,
@@ -136,13 +134,7 @@
             return contactInfo;
         }
 
-        // 2. Personal ContactsProvider phonelookup query.
-        contactInfo.name = mNameLookupQuery.query(number);
-        if (!TextUtils.isEmpty(contactInfo.name)) {
-            return contactInfo;
-        }
-
-        // 3. Look it up in the cache.
+        // 2. Look it up in the cache.
         ContactInfo cachedContactInfo = mContactInfoHelper.lookupNumber(number, countryIso);
 
         if (cachedContactInfo != null && !TextUtils.isEmpty(cachedContactInfo.name)) {
@@ -150,13 +142,13 @@
         }
 
         if (!TextUtils.isEmpty(contactInfo.formattedNumber)) {
-            // 4. If we cannot lookup the contact, use the formatted number instead.
+            // 3. If we cannot lookup the contact, use the formatted number instead.
             contactInfo.name = contactInfo.formattedNumber;
         } else if (!TextUtils.isEmpty(number)) {
-            // 5. If number can't be formatted, use number.
+            // 4. If number can't be formatted, use number.
             contactInfo.name = number;
         } else {
-            // 6. Otherwise, it's unknown number.
+            // 5. Otherwise, it's unknown number.
             contactInfo.name = mContext.getResources().getString(R.string.unknown);
         }
         return contactInfo;
@@ -259,7 +251,7 @@
         @Override
         @Nullable
         public List<NewCall> query(int type) {
-            if (!PermissionsUtil.hasPermission(mContext, READ_CALL_LOG)) {
+            if (!PermissionsUtil.hasPermission(mContext, Manifest.permission.READ_CALL_LOG)) {
                 Log.w(TAG, "No READ_CALL_LOG permission, returning null for calls lookup.");
                 return null;
             }
@@ -338,7 +330,7 @@
         @Override
         @Nullable
         public String query(@Nullable String number) {
-            if (!PermissionsUtil.hasPermission(mContext, READ_CONTACTS)) {
+            if (!PermissionsUtil.hasPermission(mContext, Manifest.permission.READ_CONTACTS)) {
                 Log.w(TAG, "No READ_CONTACTS permission, returning null for name lookup.");
                 return null;
             }
diff --git a/src/com/android/dialer/calllog/CallLogQueryHandler.java b/src/com/android/dialer/calllog/CallLogQueryHandler.java
index 9ff74cf..d1591e1 100644
--- a/src/com/android/dialer/calllog/CallLogQueryHandler.java
+++ b/src/com/android/dialer/calllog/CallLogQueryHandler.java
@@ -38,6 +38,7 @@
 import com.android.contacts.common.compat.SdkVersionOverride;
 import com.android.contacts.common.database.NoNullCursorAsyncQueryHandler;
 import com.android.contacts.common.util.PermissionsUtil;
+import com.android.dialer.database.VoicemailArchiveContract;
 import com.android.dialer.util.AppCompatConstants;
 import com.android.dialer.util.TelecomUtil;
 import com.android.dialer.voicemail.VoicemailStatusHelperImpl;
@@ -64,6 +65,8 @@
     private static final int QUERY_VOICEMAIL_UNREAD_COUNT_TOKEN = 58;
     /** The token for the query to fetch the number of missed calls. */
     private static final int QUERY_MISSED_CALLS_UNREAD_COUNT_TOKEN = 59;
+    /** The oken for the query to fetch the archived voicemails. */
+    private static final int QUERY_VOICEMAIL_ARCHIVE = 60;
 
     private final int mLogLimit;
 
@@ -127,6 +130,17 @@
     }
 
     /**
+     * Fetch all the voicemails in the voicemail archive.
+     */
+    public void fetchVoicemailArchive() {
+        startQuery(QUERY_VOICEMAIL_ARCHIVE, null,
+                VoicemailArchiveContract.VoicemailArchive.CONTENT_URI,
+                null, VoicemailArchiveContract.VoicemailArchive.ARCHIVED + " = 1", null,
+                VoicemailArchiveContract.VoicemailArchive.DATE + " DESC");
+    }
+
+
+    /**
      * Fetches the list of calls from the call log for a given type.
      * This call ignores the new or old state.
      * <p>
@@ -253,7 +267,7 @@
             return;
         }
         try {
-            if (token == QUERY_CALLLOG_TOKEN) {
+            if (token == QUERY_CALLLOG_TOKEN || token == QUERY_VOICEMAIL_ARCHIVE) {
                 if (updateAdapterData(cursor)) {
                     cursor = null;
                 }
@@ -291,7 +305,7 @@
      */
     private String getUnreadMissedCallsQuery() {
         StringBuilder where = new StringBuilder();
-        where.append(Calls.IS_READ).append(" = 0");
+        where.append(Calls.IS_READ).append(" = 0 OR ").append(Calls.IS_READ).append(" IS NULL");
         where.append(" AND ");
         where.append(Calls.TYPE).append(" = ").append(Calls.MISSED_TYPE);
         return where.toString();
diff --git a/src/com/android/dialer/calllog/ContactInfoHelper.java b/src/com/android/dialer/calllog/ContactInfoHelper.java
index a9c7651..ff7a3f6 100644
--- a/src/com/android/dialer/calllog/ContactInfoHelper.java
+++ b/src/com/android/dialer/calllog/ContactInfoHelper.java
@@ -31,6 +31,7 @@
 import android.util.Log;
 
 import com.android.contacts.common.ContactsUtils;
+import com.android.contacts.common.ContactsUtils.UserType;
 import com.android.contacts.common.util.Constants;
 import com.android.contacts.common.util.PermissionsUtil;
 import com.android.contacts.common.util.PhoneNumberHelper;
@@ -181,7 +182,8 @@
             }
             String lookupKey = phoneLookupCursor.getString(PhoneQuery.LOOKUP_KEY);
             ContactInfo contactInfo = createPhoneLookupContactInfo(phoneLookupCursor, lookupKey);
-            contactInfo.nameAlternative = lookUpDisplayNameAlternative(mContext, lookupKey);
+            contactInfo.nameAlternative = lookUpDisplayNameAlternative(mContext, lookupKey,
+                    contactInfo.userType);
             return contactInfo;
         } finally {
             phoneLookupCursor.close();
@@ -207,13 +209,13 @@
         return info;
     }
 
-    public static String lookUpDisplayNameAlternative(Context context, String lookupKey) {
-        if (lookupKey == null) {
+    public static String lookUpDisplayNameAlternative(Context context, String lookupKey,
+            @UserType long userType) {
+        // Query {@link Contacts#CONTENT_LOOKUP_URI} directly with work lookup key is not allowed.
+        if (lookupKey == null || userType == ContactsUtils.USER_TYPE_WORK) {
             return null;
         }
-
         final Uri uri = Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey);
-
         Cursor cursor = null;
         try {
             cursor = context.getContentResolver().query(uri,
@@ -222,9 +224,6 @@
             if (cursor != null && cursor.moveToFirst()) {
                 return cursor.getString(PhoneQuery.NAME_ALTERNATIVE);
             }
-        } catch (IllegalArgumentException e) {
-            // Thrown for work profile queries. For those, we don't support
-            // alternative display names.
         } finally {
             if (cursor != null) {
                 cursor.close();
diff --git a/src/com/android/dialer/calllog/GroupingListAdapter.java b/src/com/android/dialer/calllog/GroupingListAdapter.java
index 70190df..0d06298 100644
--- a/src/com/android/dialer/calllog/GroupingListAdapter.java
+++ b/src/com/android/dialer/calllog/GroupingListAdapter.java
@@ -73,9 +73,19 @@
      */
     protected abstract void addGroups(Cursor cursor);
 
+    protected abstract void addVoicemailGroups(Cursor cursor);
+
     protected abstract void onContentChanged();
 
     public void changeCursor(Cursor cursor) {
+        changeCursor(cursor, false);
+    }
+
+    public void changeCursorVoicemail(Cursor cursor) {
+        changeCursor(cursor, true);
+    }
+
+    public void changeCursor(Cursor cursor, boolean voicemail) {
         if (cursor == mCursor) {
             return;
         }
@@ -91,7 +101,11 @@
         mCursor = cursor;
 
         if (cursor != null) {
-            addGroups(mCursor);
+            if (voicemail) {
+                addVoicemailGroups(mCursor);
+            } else {
+                addGroups(mCursor);
+            }
 
             // Calculate the item count by subtracting group child counts from the cursor count.
             mItemCount = mGroupMetadata.size();
diff --git a/src/com/android/dialer/calllog/MissedCallNotifier.java b/src/com/android/dialer/calllog/MissedCallNotifier.java
index a9dfd44..98d02d0 100644
--- a/src/com/android/dialer/calllog/MissedCallNotifier.java
+++ b/src/com/android/dialer/calllog/MissedCallNotifier.java
@@ -21,6 +21,7 @@
 import android.content.ContentValues;
 import android.content.Context;
 import android.content.Intent;
+import android.graphics.Bitmap;
 import android.os.AsyncTask;
 import android.provider.CallLog.Calls;
 import android.text.TextUtils;
@@ -28,13 +29,15 @@
 
 import com.android.contacts.common.ContactsUtils;
 import com.android.contacts.common.util.PhoneNumberHelper;
-import com.android.dialer.calllog.CallLogNotificationsHelper.NewCall;
 import com.android.dialer.DialtactsActivity;
+import com.android.dialer.R;
+import com.android.dialer.calllog.CallLogNotificationsHelper.NewCall;
+import com.android.dialer.contactinfo.ContactPhotoLoader;
+import com.android.dialer.compat.UserManagerCompat;
 import com.android.dialer.list.ListsFragment;
 import com.android.dialer.util.DialerUtils;
 import com.android.dialer.util.IntentUtil;
 import com.android.dialer.util.IntentUtil.CallIntentBuilder;
-import com.android.dialer.R;
 
 import java.util.List;
 
@@ -94,6 +97,7 @@
         NewCall newestCall = useCallLog ? newCalls.get(0) : null;
         long timeMs = useCallLog ? newestCall.dateMs : System.currentTimeMillis();
 
+        Notification.Builder builder = new Notification.Builder(mContext);
         // Display the first line of the notification:
         // 1 missed call: <caller name || handle>
         // More than 1 missed call: <number of calls> + "missed calls"
@@ -110,6 +114,11 @@
                     : R.string.notification_missedCallTitle;
 
             expandedText = contactInfo.name;
+            ContactPhotoLoader loader = new ContactPhotoLoader(mContext, contactInfo);
+            Bitmap photoIcon = loader.loadPhotoIcon();
+            if (photoIcon != null) {
+                builder.setLargeIcon(photoIcon);
+            }
         } else {
             titleResId = R.string.notification_missedCallsTitle;
             expandedText =
@@ -132,7 +141,6 @@
                 .setDeleteIntent(createClearMissedCallsPendingIntent());
 
         // Create the notification suitable for display when sensitive information is showing.
-        Notification.Builder builder = new Notification.Builder(mContext);
         builder.setSmallIcon(android.R.drawable.stat_notify_missed_call)
                 .setColor(mContext.getResources().getColor(R.color.dialer_theme_color))
                 .setContentTitle(mContext.getText(titleResId))
@@ -146,8 +154,8 @@
                 // sensitive notification information.
                 .setPublicVersion(publicBuilder.build());
 
-        // Add additional actions when there is only 1 missed call, like call-back and SMS.
-        if (count == 1) {
+        // Add additional actions when there is only 1 missed call and the user isn't locked
+        if (UserManagerCompat.isUserUnlocked(mContext) && count == 1) {
             if (!TextUtils.isEmpty(number)
                     && !TextUtils.equals(
                     number, mContext.getString(R.string.handle_restricted))) {
@@ -161,7 +169,6 @@
                             createSendSmsFromNotificationPendingIntent(number));
                 }
             }
-            //TODO: add photo
         }
 
         Notification notification = builder.build();
@@ -175,21 +182,24 @@
         AsyncTask.execute(new Runnable() {
             @Override
             public void run() {
-                // Clear the list of new missed calls from the call log.
-                ContentValues values = new ContentValues();
-                values.put(Calls.NEW, 0);
-                values.put(Calls.IS_READ, 1);
-                StringBuilder where = new StringBuilder();
-                where.append(Calls.NEW);
-                where.append(" = 1 AND ");
-                where.append(Calls.TYPE);
-                where.append(" = ?");
-                try {
-                    mContext.getContentResolver().update(Calls.CONTENT_URI, values,
-                            where.toString(), new String[]{ Integer.toString(Calls.
-                            MISSED_TYPE) });
-                } catch (IllegalArgumentException e) {
-                    Log.w(TAG, "ContactsProvider update command failed", e);
+                // Call log is only accessible when unlocked. If that's the case, clear the list of
+                // new missed calls from the call log.
+                if (UserManagerCompat.isUserUnlocked(mContext)) {
+                    ContentValues values = new ContentValues();
+                    values.put(Calls.NEW, 0);
+                    values.put(Calls.IS_READ, 1);
+                    StringBuilder where = new StringBuilder();
+                    where.append(Calls.NEW);
+                    where.append(" = 1 AND ");
+                    where.append(Calls.TYPE);
+                    where.append(" = ?");
+                    try {
+                        mContext.getContentResolver().update(Calls.CONTENT_URI, values,
+                                where.toString(), new String[]{Integer.toString(Calls.
+                                        MISSED_TYPE)});
+                    } catch (IllegalArgumentException e) {
+                        Log.w(TAG, "ContactsProvider update command failed", e);
+                    }
                 }
                 getNotificationMgr().cancel(NOTIFICATION_TAG, NOTIFICATION_ID);
             }
diff --git a/src/com/android/dialer/contactinfo/ContactPhotoLoader.java b/src/com/android/dialer/contactinfo/ContactPhotoLoader.java
new file mode 100644
index 0000000..f36c438
--- /dev/null
+++ b/src/com/android/dialer/contactinfo/ContactPhotoLoader.java
@@ -0,0 +1,120 @@
+/*
+ * 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.contactinfo;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.drawable.Drawable;
+import android.provider.MediaStore;
+import android.support.annotation.Nullable;
+import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
+import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory;
+import android.util.Log;
+
+import com.android.contacts.common.GeoUtil;
+import com.android.contacts.common.lettertiles.LetterTileDrawable;
+import com.android.dialer.R;
+import com.android.dialer.calllog.ContactInfo;
+import com.android.dialer.calllog.ContactInfoHelper;
+import com.android.dialer.util.Assert;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Preconditions;
+
+import java.io.IOException;
+/**
+ * Class to create the appropriate contact icon from a ContactInfo.
+ * This class is for synchronous, blocking calls to generate bitmaps, while
+ * ContactCommons.ContactPhotoManager is to cache, manage and update a ImageView asynchronously.
+ */
+public class ContactPhotoLoader {
+
+    private static final String TAG = "ContactPhotoLoader";
+
+    private final Context mContext;
+    private final ContactInfo mContactInfo;
+
+    public ContactPhotoLoader(Context context, ContactInfo contactInfo) {
+        mContext = Preconditions.checkNotNull(context);
+        mContactInfo = Preconditions.checkNotNull(contactInfo);
+    }
+
+    /**
+     * Create a contact photo icon bitmap appropriate for the ContactInfo.
+     */
+    public Bitmap loadPhotoIcon() {
+        Assert.assertNotUiThread("ContactPhotoLoader#loadPhotoIcon called on UI thread");
+        int photoSize = mContext.getResources().getDimensionPixelSize(R.dimen.contact_photo_size);
+        return drawableToBitmap(getIcon(), photoSize, photoSize);
+    }
+
+    @VisibleForTesting
+    Drawable getIcon() {
+        Drawable drawable = createPhotoIconDrawable();
+        if (drawable == null) {
+            drawable = createLetterTileDrawable();
+        }
+        return drawable;
+    }
+
+    /**
+     * @return a {@link Drawable} of  circular photo icon if the photo can be loaded, {@code null}
+     * otherwise.
+     */
+    @Nullable
+    private Drawable createPhotoIconDrawable() {
+        if (mContactInfo.photoUri == null) {
+            return null;
+        }
+        try {
+            Bitmap bitmap = MediaStore.Images.Media.getBitmap(mContext.getContentResolver(),
+                    mContactInfo.photoUri);
+            final RoundedBitmapDrawable drawable =
+                    RoundedBitmapDrawableFactory.create(mContext.getResources(), bitmap);
+            drawable.setAntiAlias(true);
+            drawable.setCornerRadius(bitmap.getHeight() / 2);
+            return drawable;
+        } catch (IOException e) {
+            Log.e(TAG, e.toString());
+            return null;
+        }
+    }
+
+    /**
+     * @return a {@link LetterTileDrawable} based on the ContactInfo.
+     */
+    private Drawable createLetterTileDrawable() {
+        LetterTileDrawable drawable = new LetterTileDrawable(mContext.getResources());
+        drawable.setIsCircular(true);
+        ContactInfoHelper helper =
+                new ContactInfoHelper(mContext, GeoUtil.getCurrentCountryIso(mContext));
+        if (helper.isBusiness(mContactInfo.sourceType)) {
+            drawable.setContactType(LetterTileDrawable.TYPE_BUSINESS);
+        }
+        drawable.setLetterAndColorFromContactDetails(mContactInfo.name, mContactInfo.lookupKey);
+        return drawable;
+    }
+
+    private static Bitmap drawableToBitmap(Drawable drawable, int width, int height) {
+        Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
+        Canvas canvas = new Canvas(bitmap);
+        drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
+        drawable.draw(canvas);
+        return bitmap;
+    }
+
+}
diff --git a/src/com/android/dialer/database/VoicemailArchiveProvider.java b/src/com/android/dialer/database/VoicemailArchiveProvider.java
index ae73670..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;
@@ -115,11 +116,17 @@
         // Create the directory for archived voicemails if it doesn't already exist
         File directory = new File(getFilesDir(), VOICEMAIL_FOLDER);
         directory.mkdirs();
-
-        // Update the row's _data column with a file path in the voicemails folder
         Uri newUri = ContentUris.withAppendedId(uri, id);
-        File voicemailFile = new File(directory, Long.toString(id));
-        values.put(VoicemailArchiveContract.VoicemailArchive._DATA, voicemailFile.getPath());
+
+        // Create new file only if path is not provided to one
+        if (!values.containsKey(VoicemailArchiveContract.VoicemailArchive._DATA)) {
+            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);
         return newUri;
     }
diff --git a/src/com/android/dialer/list/ListsFragment.java b/src/com/android/dialer/list/ListsFragment.java
index 2020934..ceed612 100644
--- a/src/com/android/dialer/list/ListsFragment.java
+++ b/src/com/android/dialer/list/ListsFragment.java
@@ -48,6 +48,7 @@
 import com.android.dialer.widget.ActionBarController;
 
 import java.util.ArrayList;
+import java.util.List;
 
 /**
  * Fragment that is used as the main screen of the Dialer.
@@ -105,8 +106,13 @@
     private CallLogQueryHandler mCallLogQueryHandler;
 
     public class ViewPagerAdapter extends FragmentPagerAdapter {
+        private final List<Fragment> mFragments = new ArrayList<>();
+
         public ViewPagerAdapter(FragmentManager fm) {
             super(fm);
+            for (int i = 0; i < TAB_COUNT_WITH_VOICEMAIL; i++) {
+                mFragments.add(null);
+            }
         }
 
         @Override
@@ -134,7 +140,7 @@
         }
 
         @Override
-        public Object instantiateItem(ViewGroup container, int position) {
+        public Fragment instantiateItem(ViewGroup container, int position) {
             // On rotation the FragmentManager handles rotation. Therefore getItem() isn't called.
             // Copy the fragments that the FragmentManager finds so that we can store them in
             // instance variables for later.
@@ -149,9 +155,25 @@
             } else if (fragment instanceof CallLogFragment && position == TAB_INDEX_VOICEMAIL) {
                 mVoicemailFragment = (CallLogFragment) fragment;
             }
+            mFragments.set(position, fragment);
             return fragment;
         }
 
+        /**
+         * When {@link android.support.v4.view.PagerAdapter#notifyDataSetChanged} is called,
+         * this method is called on all pages to determine whether they need to be recreated.
+         * When the voicemail tab is removed, the view needs to be recreated by returning
+         * POSITION_NONE. If notifyDataSetChanged is called for some other reason, the voicemail
+         * tab is recreated only if it is active. All other tabs do not need to be recreated
+         * and POSITION_UNCHANGED is returned.
+         */
+        @Override
+        public int getItemPosition(Object object) {
+            return !mHasActiveVoicemailProvider &&
+                    mFragments.indexOf(object) == TAB_INDEX_VOICEMAIL ? POSITION_NONE :
+                    POSITION_UNCHANGED;
+        }
+
         @Override
         public int getCount() {
             return mHasActiveVoicemailProvider ? TAB_COUNT_WITH_VOICEMAIL : TAB_COUNT_DEFAULT;
@@ -311,6 +333,7 @@
                 mViewPagerTabs.updateTab(TAB_INDEX_VOICEMAIL);
             } else {
                 mViewPagerTabs.removeTab(TAB_INDEX_VOICEMAIL);
+                removeVoicemailFragment();
             }
 
             mPrefs.edit()
@@ -451,4 +474,12 @@
         }
         Logger.logScreenView(screenType, getActivity());
     }
+
+    private void removeVoicemailFragment() {
+        if (mVoicemailFragment != null) {
+            getChildFragmentManager().beginTransaction().remove(mVoicemailFragment)
+                    .commitAllowingStateLoss();
+            mVoicemailFragment = null;
+        }
+    }
 }
diff --git a/src/com/android/dialer/service/ExtendedBlockingButtonRenderer.java b/src/com/android/dialer/service/ExtendedBlockingButtonRenderer.java
index 5ff3732..f8d5ea0 100644
--- a/src/com/android/dialer/service/ExtendedBlockingButtonRenderer.java
+++ b/src/com/android/dialer/service/ExtendedBlockingButtonRenderer.java
@@ -19,6 +19,8 @@
 import android.support.annotation.Nullable;
 import android.view.View;
 import android.view.ViewStub;
+import android.widget.QuickContactBadge;
+import android.widget.TextView;
 
 import java.util.List;
 
@@ -70,4 +72,15 @@
     void render(ViewStub viewStub);
 
     void setViewHolderInfo(ViewHolderInfo info);
+
+    /**
+     * Updates the photo and label for the given phone number and country iso.
+     *
+     * @param number Phone number for which the rendering occurs.
+     * @param countryIso Two-letter country code.
+     * @param badge {@link QuickContactBadge} in which the photo should be rendered.
+     * @param view Textview that will hold the new label.
+     */
+    void updatePhotoAndLabelIfNecessary(
+            String number, String countryIso, QuickContactBadge badge, TextView view);
 }
diff --git a/src/com/android/dialer/util/Assert.java b/src/com/android/dialer/util/Assert.java
new file mode 100644
index 0000000..ec0a6cc
--- /dev/null
+++ b/src/com/android/dialer/util/Assert.java
@@ -0,0 +1,36 @@
+/*
+ * 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.util;
+
+import android.os.Looper;
+
+public class Assert {
+    public static void assertNotUiThread(String msg) {
+        if (Looper.myLooper() == Looper.getMainLooper()) {
+            throw new AssertionError(msg);
+        }
+    }
+
+    public static void assertNotNull(Object object, String msg) {
+        if (object == null) {
+            throw new AssertionError(object);
+        }
+    }
+
+    public static void assertNotNull(Object object) {
+        assertNotNull(object, null);
+    }
+}
diff --git a/src/com/android/dialer/voicemail/VoicemailArchiveActivity.java b/src/com/android/dialer/voicemail/VoicemailArchiveActivity.java
new file mode 100644
index 0000000..16b947c
--- /dev/null
+++ b/src/com/android/dialer/voicemail/VoicemailArchiveActivity.java
@@ -0,0 +1,160 @@
+/*
+ * 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.Intent;
+import android.database.Cursor;
+import android.os.Bundle;
+import android.support.v7.app.ActionBar;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.view.MenuItem;
+import android.view.View;
+
+import com.android.contacts.common.GeoUtil;
+import com.android.dialer.DialtactsActivity;
+import com.android.dialer.R;
+import com.android.dialer.TransactionSafeActivity;
+import com.android.dialer.calllog.CallLogAdapter;
+import com.android.dialer.calllog.CallLogQueryHandler;
+import com.android.dialer.calllog.ContactInfoHelper;
+import com.android.dialer.widget.EmptyContentView;
+import com.android.dialerbind.ObjectFactory;
+
+/**
+ * This activity manages all the voicemails archived by the user.
+ */
+public class VoicemailArchiveActivity extends TransactionSafeActivity
+        implements CallLogAdapter.CallFetcher, CallLogQueryHandler.Listener {
+    private RecyclerView mRecyclerView;
+    private LinearLayoutManager mLayoutManager;
+    private EmptyContentView mEmptyListView;
+    private CallLogAdapter mAdapter;
+    private VoicemailPlaybackPresenter mVoicemailPlaybackPresenter;
+    private CallLogQueryHandler mCallLogQueryHandler;
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        if (!isSafeToCommitTransactions()) {
+            return true;
+        }
+
+        switch (item.getItemId()) {
+            case android.R.id.home:
+                Intent intent = new Intent(this, DialtactsActivity.class);
+                // Clears any activities between VoicemailArchiveActivity and DialtactsActivity
+                // on the activity stack and reuses the existing instance of DialtactsActivity
+                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+                startActivity(intent);
+                return true;
+        }
+        return super.onOptionsItemSelected(item);
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        setContentView(R.layout.call_log_fragment);
+
+        // Make window opaque to reduce overdraw
+        getWindow().setBackgroundDrawable(null);
+
+        ActionBar actionBar = getSupportActionBar();
+        actionBar.setDisplayShowHomeEnabled(true);
+        actionBar.setDisplayHomeAsUpEnabled(true);
+        actionBar.setDisplayShowTitleEnabled(true);
+        actionBar.setElevation(0);
+
+        mCallLogQueryHandler = new CallLogQueryHandler(this, getContentResolver(), this);
+        mVoicemailPlaybackPresenter = VoicemailArchivePlaybackPresenter
+                .getInstance(this, savedInstanceState);
+
+        mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
+        mRecyclerView.setHasFixedSize(true);
+        mLayoutManager = new LinearLayoutManager(this);
+        mRecyclerView.setLayoutManager(mLayoutManager);
+        mEmptyListView = (EmptyContentView) findViewById(R.id.empty_list_view);
+        mEmptyListView.setDescription(R.string.voicemail_archive_empty);
+        mEmptyListView.setImage(R.drawable.empty_call_log);
+
+        mAdapter = ObjectFactory.newCallLogAdapter(
+                this,
+                this,
+                new ContactInfoHelper(this, GeoUtil.getCurrentCountryIso(this)),
+                mVoicemailPlaybackPresenter,
+                CallLogAdapter.ACTIVITY_TYPE_ARCHIVE);
+        mRecyclerView.setAdapter(mAdapter);
+        fetchCalls();
+    }
+
+    @Override
+    protected void onPause() {
+        mVoicemailPlaybackPresenter.onPause();
+        mAdapter.onPause();
+        super.onPause();
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        mAdapter.onResume();
+        mVoicemailPlaybackPresenter.onResume();
+    }
+
+    @Override
+    public void onDestroy() {
+        mVoicemailPlaybackPresenter.onDestroy();
+        mAdapter.changeCursor(null);
+        super.onDestroy();
+    }
+
+    @Override
+    public void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+        mVoicemailPlaybackPresenter.onSaveInstanceState(outState);
+    }
+
+    @Override
+    public void fetchCalls() {
+        mCallLogQueryHandler.fetchVoicemailArchive();
+    }
+
+    @Override
+    public void onVoicemailStatusFetched(Cursor statusCursor) {
+        // Do nothing
+    }
+
+    @Override
+    public void onVoicemailUnreadCountFetched(Cursor cursor) {
+        // Do nothing
+    }
+
+    @Override
+    public void onMissedCallsUnreadCountFetched(Cursor cursor) {
+        // Do nothing
+    }
+
+    @Override
+    public boolean onCallsFetched(Cursor cursor) {
+        mAdapter.changeCursorVoicemail(cursor);
+        boolean showListView = cursor != null && cursor.getCount() > 0;
+        mRecyclerView.setVisibility(showListView ? View.VISIBLE : View.GONE);
+        mEmptyListView.setVisibility(!showListView ? View.VISIBLE : View.GONE);
+        return true;
+    }
+}
diff --git a/src/com/android/dialer/voicemail/VoicemailArchivePlaybackPresenter.java b/src/com/android/dialer/voicemail/VoicemailArchivePlaybackPresenter.java
new file mode 100644
index 0000000..5f73d16
--- /dev/null
+++ b/src/com/android/dialer/voicemail/VoicemailArchivePlaybackPresenter.java
@@ -0,0 +1,90 @@
+/*
+ * 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;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.util.Log;
+import com.android.dialer.calllog.CallLogAsyncTaskUtil;
+import com.android.dialer.database.VoicemailArchiveContract;
+import java.io.FileNotFoundException;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Similar to the {@link VoicemailPlaybackPresenter}, but for the archive voicemail tab. It checks
+ * whether the voicemail file exists locally before preparing it.
+ */
+public class VoicemailArchivePlaybackPresenter extends VoicemailPlaybackPresenter {
+    private static final String TAG = "VMPlaybackPresenter";
+    private static VoicemailPlaybackPresenter sInstance;
+
+    public VoicemailArchivePlaybackPresenter(Activity activity) {
+        super(activity);
+    }
+
+    public static VoicemailPlaybackPresenter getInstance(
+            Activity activity, Bundle savedInstanceState) {
+        if (sInstance == null) {
+            sInstance = new VoicemailArchivePlaybackPresenter(activity);
+        }
+
+        sInstance.init(activity, savedInstanceState);
+        return sInstance;
+    }
+
+    @Override
+    protected void checkForContent(final OnContentCheckedListener callback) {
+        mAsyncTaskExecutor.submit(Tasks.CHECK_FOR_CONTENT, new AsyncTask<Void, Void, Boolean>() {
+            @Override
+            public Boolean doInBackground(Void... params) {
+                try {
+                    // Check if the _data column of the archived voicemail is valid
+                    if (mVoicemailUri != null) {
+                        mContext.getContentResolver().openInputStream(mVoicemailUri);
+                        return true;
+                    }
+                } catch (FileNotFoundException e) {
+                    Log.d(TAG, "Voicemail file not found for " + mVoicemailUri);
+                }
+                return false;
+            }
+
+            @Override
+            public void onPostExecute(Boolean hasContent) {
+                callback.onContentChecked(hasContent);
+            }
+        });
+    }
+
+    @Override
+    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);
+        }
+    }
+
+    @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 7d72028..e5efbec 100644
--- a/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java
+++ b/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java
@@ -16,40 +16,46 @@
 
 package com.android.dialer.voicemail;
 
-import android.app.Activity;
-import android.app.Fragment;
+import android.content.ContentUris;
 import android.content.Context;
+import android.content.Intent;
+import android.database.Cursor;
 import android.graphics.drawable.Drawable;
-import android.media.MediaPlayer;
 import android.net.Uri;
-import android.os.Bundle;
+import android.os.AsyncTask;
 import android.os.Handler;
-import android.os.PowerManager;
-import android.provider.VoicemailContract;
 import android.util.AttributeSet;
-import android.util.Log;
 import android.support.design.widget.Snackbar;
 import android.view.LayoutInflater;
 import android.view.View;
-import android.view.ViewGroup;
 import android.widget.ImageButton;
 import android.widget.LinearLayout;
 import android.widget.SeekBar;
 import android.widget.SeekBar.OnSeekBarChangeListener;
+import android.widget.Space;
 import android.widget.TextView;
+import android.widget.Toast;
 
 import com.android.common.io.MoreCloseables;
 import com.android.dialer.PhoneCallDetails;
 import com.android.dialer.R;
 import com.android.dialer.calllog.CallLogAsyncTaskUtil;
 
+import com.android.dialer.database.VoicemailArchiveContract;
+import com.android.dialer.database.VoicemailArchiveContract.VoicemailArchive;
+import com.android.dialer.util.AsyncTaskExecutor;
+import com.android.dialer.util.AsyncTaskExecutors;
+import com.android.dialerbind.ObjectFactory;
 import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Preconditions;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Objects;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.ScheduledExecutorService;
 
+import javax.annotation.Nullable;
 import javax.annotation.concurrent.GuardedBy;
 import javax.annotation.concurrent.NotThreadSafe;
 import javax.annotation.concurrent.ThreadSafe;
@@ -67,6 +73,12 @@
         CallLogAsyncTaskUtil.CallLogAsyncTaskListener {
     private static final String TAG = VoicemailPlaybackLayout.class.getSimpleName();
     private static final int VOICEMAIL_DELETE_DELAY_MS = 3000;
+    private static final int VOICEMAIL_ARCHIVE_DELAY_MS = 3000;
+
+    /** The enumeration of {@link AsyncTask} objects we use in this class. */
+    public enum Tasks {
+        QUERY_ARCHIVED_STATUS
+    }
 
     /**
      * Controls the animation of the playback slider.
@@ -151,6 +163,11 @@
         @Override
         public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
             setClipPosition(progress, seekBar.getMax());
+            // Update the seek position if user manually changed it. This makes sure position gets
+            // updated when user use volume button to seek playback in talkback mode.
+            if (fromUser) {
+                mPresenter.seek(progress);
+            }
         }
     };
 
@@ -197,7 +214,7 @@
             final Runnable deleteCallback = new Runnable() {
                 @Override
                 public void run() {
-                    if (mVoicemailUri == deleteUri) {
+                    if (Objects.equals(deleteUri, mVoicemailUri)) {
                         CallLogAsyncTaskUtil.deleteVoicemail(mContext, deleteUri,
                                 VoicemailPlaybackLayout.this);
                     }
@@ -209,8 +226,6 @@
             // window.
             handler.postDelayed(deleteCallback, VOICEMAIL_DELETE_DELAY_MS + 50);
 
-            final int actionTextColor =
-                    mContext.getResources().getColor(R.color.dialer_snackbar_action_text_color);
             Snackbar.make(VoicemailPlaybackLayout.this, R.string.snackbar_voicemail_deleted,
                             Snackbar.LENGTH_LONG)
                     .setDuration(VOICEMAIL_DELETE_DELAY_MS)
@@ -222,21 +237,60 @@
                                         handler.removeCallbacks(deleteCallback);
                                 }
                             })
-                    .setActionTextColor(actionTextColor)
+                    .setActionTextColor(
+                            mContext.getResources().getColor(
+                                    R.color.dialer_snackbar_action_text_color))
                     .show();
         }
     };
 
+    private final View.OnClickListener mArchiveButtonListener = new View.OnClickListener() {
+        @Override
+        public void onClick(View v) {
+            if (mPresenter == null || isArchiving(mVoicemailUri)) {
+                return;
+            }
+            mIsArchiving.add(mVoicemailUri);
+            mPresenter.pausePlayback();
+            updateArchiveUI(mVoicemailUri);
+            disableUiElements();
+            mPresenter.archiveContent(mVoicemailUri, true);
+        }
+    };
+
+    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;
-
+    private final AsyncTaskExecutor mAsyncTaskExecutor =
+            AsyncTaskExecutors.createAsyncTaskExecutor();
     private boolean mIsPlaying = false;
+    /**
+     * Keeps track of which voicemails are currently being archived in order to update the voicemail
+     * card UI every time a user opens a new card.
+     */
+    private static final ArrayList<Uri> mIsArchiving = new ArrayList<>();
 
     private SeekBar mPlaybackSeek;
     private ImageButton mStartStopButton;
     private ImageButton mPlaybackSpeakerphone;
     private ImageButton mDeleteButton;
+    private ImageButton mArchiveButton;
+    private ImageButton mShareButton;
+
+    private Space mArchiveSpace;
+    private Space mShareSpace;
+
     private TextView mStateText;
     private TextView mPositionText;
     private TextView mTotalDurationText;
@@ -251,7 +305,6 @@
 
     public VoicemailPlaybackLayout(Context context, AttributeSet attrs) {
         super(context, attrs);
-
         mContext = context;
         LayoutInflater inflater =
                 (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
@@ -262,6 +315,16 @@
     public void setPresenter(VoicemailPlaybackPresenter presenter, Uri voicemailUri) {
         mPresenter = presenter;
         mVoicemailUri = voicemailUri;
+        if (ObjectFactory.isVoicemailArchiveEnabled(mContext)) {
+            updateArchiveUI(mVoicemailUri);
+            updateArchiveButton(mVoicemailUri);
+        }
+
+        if (ObjectFactory.isVoicemailShareEnabled(mContext)) {
+            // Show share button and space before it
+            mShareSpace.setVisibility(View.VISIBLE);
+            mShareButton.setVisibility(View.VISIBLE);
+        }
     }
 
     @Override
@@ -272,6 +335,12 @@
         mStartStopButton = (ImageButton) findViewById(R.id.playback_start_stop);
         mPlaybackSpeakerphone = (ImageButton) findViewById(R.id.playback_speakerphone);
         mDeleteButton = (ImageButton) findViewById(R.id.delete_voicemail);
+        mArchiveButton =(ImageButton) findViewById(R.id.archive_voicemail);
+        mShareButton = (ImageButton) findViewById(R.id.share_voicemail);
+
+        mArchiveSpace = (Space) findViewById(R.id.space_before_archive_voicemail);
+        mShareSpace = (Space) findViewById(R.id.space_before_share_voicemail);
+
         mStateText = (TextView) findViewById(R.id.playback_state_text);
         mPositionText = (TextView) findViewById(R.id.playback_position_text);
         mTotalDurationText = (TextView) findViewById(R.id.total_duration_text);
@@ -280,6 +349,8 @@
         mStartStopButton.setOnClickListener(mStartStopButtonListener);
         mPlaybackSpeakerphone.setOnClickListener(mSpeakerphoneListener);
         mDeleteButton.setOnClickListener(mDeleteButtonListener);
+        mArchiveButton.setOnClickListener(mArchiveButtonListener);
+        mShareButton.setOnClickListener(mShareButtonListener);
 
         mPositionText.setText(formatAsMinutesAndSeconds(0));
         mTotalDurationText.setText(formatAsMinutesAndSeconds(0));
@@ -353,7 +424,6 @@
 
         mPositionText.setText(formatAsMinutesAndSeconds(seekBarPositionMs));
         mTotalDurationText.setText(formatAsMinutesAndSeconds(durationMs));
-        mStateText.setText(null);
     }
 
     @Override
@@ -381,6 +451,7 @@
 
     @Override
     public void enableUiElements() {
+        mDeleteButton.setEnabled(true);
         mStartStopButton.setEnabled(true);
         mPlaybackSeek.setEnabled(true);
         mPlaybackSeek.setThumb(mVoicemailSeekHandleEnabled);
@@ -424,6 +495,136 @@
         return String.format("%02d:%02d", minutes, seconds);
     }
 
+    /**
+     * Called when a voicemail archive succeeded. If the expanded voicemail was being
+     * archived, update the card UI. Either way, display a snackbar linking user to archive.
+     */
+    @Override
+    public void onVoicemailArchiveSucceded(Uri voicemailUri) {
+        if (isArchiving(voicemailUri)) {
+            mIsArchiving.remove(voicemailUri);
+            if (Objects.equals(voicemailUri, mVoicemailUri)) {
+                onVoicemailArchiveResult();
+                hideArchiveButton();
+            }
+        }
+
+        Snackbar.make(this, R.string.snackbar_voicemail_archived,
+                Snackbar.LENGTH_LONG)
+                .setDuration(VOICEMAIL_ARCHIVE_DELAY_MS)
+                .setAction(R.string.snackbar_voicemail_archived_goto,
+                        new View.OnClickListener() {
+                            @Override
+                            public void onClick(View view) {
+                                Intent intent = new Intent(mContext,
+                                        VoicemailArchiveActivity.class);
+                                mContext.startActivity(intent);
+                            }
+                        })
+                .setActionTextColor(
+                        mContext.getResources().getColor(R.color.dialer_snackbar_action_text_color))
+                .show();
+    }
+
+    /**
+     * If a voicemail archive failed, and the expanded card was being archived, update the card UI.
+     * Either way, display a toast saying the voicemail archive failed.
+     */
+    @Override
+    public void onVoicemailArchiveFailed(Uri voicemailUri) {
+        if (isArchiving(voicemailUri)) {
+            mIsArchiving.remove(voicemailUri);
+            if (Objects.equals(voicemailUri, mVoicemailUri)) {
+                onVoicemailArchiveResult();
+            }
+        }
+        String toastStr = mContext.getString(R.string.voicemail_archive_failed);
+        Toast.makeText(mContext, toastStr, Toast.LENGTH_SHORT).show();
+    }
+
+    public void hideArchiveButton() {
+        mArchiveSpace.setVisibility(View.GONE);
+        mArchiveButton.setVisibility(View.GONE);
+        mArchiveButton.setClickable(false);
+        mArchiveButton.setEnabled(false);
+    }
+
+    /**
+     * Whenever a voicemail archive succeeds or fails, clear the text displayed in the voicemail
+     * card.
+     */
+    private void onVoicemailArchiveResult() {
+        enableUiElements();
+        mStateText.setText(null);
+        mArchiveButton.setColorFilter(null);
+    }
+
+    /**
+     * Whether or not the voicemail with the given uri is being archived.
+     */
+    private boolean isArchiving(@Nullable Uri uri) {
+        return uri != null && mIsArchiving.contains(uri);
+    }
+
+    /**
+     * Show the proper text and hide the archive button if the voicemail is still being archived.
+     */
+    private void updateArchiveUI(@Nullable Uri voicemailUri) {
+        if (!Objects.equals(voicemailUri, mVoicemailUri)) {
+            return;
+        }
+        if (isArchiving(voicemailUri)) {
+            // If expanded card was in the middle of archiving, disable buttons and display message
+            disableUiElements();
+            mDeleteButton.setEnabled(false);
+            mArchiveButton.setColorFilter(getResources().getColor(R.color.setting_disabled_color));
+            mStateText.setText(getString(R.string.voicemail_archiving_content));
+        } else {
+            onVoicemailArchiveResult();
+        }
+    }
+
+    /**
+     * Hides the archive button if the voicemail has already been archived, shows otherwise.
+     * @param voicemailUri the URI of the voicemail for which the archive button needs to be updated
+     */
+    private void updateArchiveButton(@Nullable final Uri voicemailUri) {
+        if (voicemailUri == null ||
+                !Objects.equals(voicemailUri, mVoicemailUri) || isArchiving(voicemailUri) ||
+                Objects.equals(voicemailUri.getAuthority(),VoicemailArchiveContract.AUTHORITY)) {
+            return;
+        }
+        mAsyncTaskExecutor.submit(Tasks.QUERY_ARCHIVED_STATUS,
+                new AsyncTask<Void, Void, Boolean>() {
+            @Override
+            public Boolean doInBackground(Void... params) {
+                Cursor cursor = mContext.getContentResolver().query(VoicemailArchive.CONTENT_URI,
+                        null, VoicemailArchive.SERVER_ID + "=" + ContentUris.parseId(mVoicemailUri)
+                        + " AND " + VoicemailArchive.ARCHIVED + "= 1", null, null);
+                boolean archived = cursor != null && cursor.getCount() > 0;
+                cursor.close();
+                return archived;
+            }
+
+            @Override
+            public void onPostExecute(Boolean archived) {
+                if (!Objects.equals(voicemailUri, mVoicemailUri)) {
+                    return;
+                }
+
+                if (archived) {
+                    hideArchiveButton();
+                } else {
+                    mArchiveSpace.setVisibility(View.VISIBLE);
+                    mArchiveButton.setVisibility(View.VISIBLE);
+                    mArchiveButton.setClickable(true);
+                    mArchiveButton.setEnabled(true);
+                }
+
+            }
+        });
+    }
+
     @VisibleForTesting
     public String getStateText() {
         return mStateText.getText().toString();
diff --git a/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java b/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
index 2bb4de9..5924fb4 100644
--- a/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
+++ b/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
@@ -16,13 +16,14 @@
 
 package com.android.dialer.voicemail;
 
+import com.google.common.annotations.VisibleForTesting;
+
 import android.app.Activity;
 import android.content.Context;
 import android.content.ContentResolver;
 import android.content.Intent;
 import android.database.ContentObserver;
 import android.database.Cursor;
-import android.media.AudioManager;
 import android.media.MediaPlayer;
 import android.net.Uri;
 import android.os.AsyncTask;
@@ -30,24 +31,24 @@
 import android.os.Handler;
 import android.os.PowerManager;
 import android.provider.VoicemailContract;
+import android.support.v4.content.FileProvider;
 import android.util.Log;
-import android.view.View;
 import android.view.WindowManager.LayoutParams;
-import android.widget.SeekBar;
 
 import com.android.dialer.R;
 import com.android.dialer.calllog.CallLogAsyncTaskUtil;
 import com.android.dialer.util.AsyncTaskExecutor;
 import com.android.dialer.util.AsyncTaskExecutors;
 import com.android.common.io.MoreCloseables;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Preconditions;
 
+import java.io.File;
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.RejectedExecutionException;
-import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -71,7 +72,7 @@
 public class VoicemailPlaybackPresenter implements MediaPlayer.OnPreparedListener,
                 MediaPlayer.OnCompletionListener, MediaPlayer.OnErrorListener {
 
-    private static final String TAG = VoicemailPlaybackPresenter.class.getSimpleName();
+    private static final String TAG = "VmPlaybackPresenter";
 
     /** Contract describing the behaviour we need from the ui we are controlling. */
     public interface PlaybackView {
@@ -85,6 +86,8 @@
         void setClipPosition(int clipPositionInMillis, int clipLengthInMillis);
         void setFetchContentTimeout();
         void setIsFetchingContent();
+        void onVoicemailArchiveSucceded(Uri voicemailUri);
+        void onVoicemailArchiveFailed(Uri voicemailUri);
         void setPresenter(VoicemailPlaybackPresenter presenter, Uri voicemailUri);
         void resetSeekBar();
     }
@@ -99,6 +102,11 @@
     public enum Tasks {
         CHECK_FOR_CONTENT,
         CHECK_CONTENT_AFTER_CHANGE,
+        ARCHIVE_VOICEMAIL
+    }
+
+    protected interface OnContentCheckedListener {
+        void onContentChecked(boolean hasContent);
     }
 
     private static final String[] HAS_CONTENT_PROJECTION = new String[] {
@@ -122,6 +130,9 @@
             VoicemailPlaybackPresenter.class.getName() + ".CLIP_POSITION_KEY";
     private static final String IS_SPEAKERPHONE_ON_KEY =
             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
@@ -133,11 +144,11 @@
     private static VoicemailPlaybackPresenter sInstance;
 
     private Activity mActivity;
-    private Context mContext;
+    protected Context mContext;
     private PlaybackView mView;
-    private Uri mVoicemailUri;
+    protected Uri mVoicemailUri;
 
-    private MediaPlayer mMediaPlayer;
+    protected MediaPlayer mMediaPlayer;
     private int mPosition;
     private boolean mIsPlaying;
     // MediaPlayer crashes on some method calls if not prepared but does not have a method which
@@ -149,7 +160,7 @@
     private int mInitialOrientation;
 
     // Used to run async tasks that need to interact with the UI.
-    private AsyncTaskExecutor mAsyncTaskExecutor;
+    protected AsyncTaskExecutor mAsyncTaskExecutor;
     private static ScheduledExecutorService mScheduledExecutorService;
     /**
      * Used to handle the result of a successful or time-out fetch result.
@@ -157,11 +168,13 @@
      * This variable is thread-contained, accessed only on the ui thread.
      */
     private FetchResultHandler mFetchResultHandler;
+    private final List<FetchResultHandler> mArchiveResultHandlers = new ArrayList<>();
     private Handler mHandler = new Handler();
     private PowerManager.WakeLock mProximityWakeLock;
     private VoicemailAudioManager mVoicemailAudioManager;
 
     private OnVoicemailDeletedListener mOnVoicemailDeletedListener;
+    private final VoicemailAsyncTaskUtil mVoicemailAsyncTaskUtil;
 
     /**
      * Obtain singleton instance of this class. Use a single instance to provide a consistent
@@ -185,11 +198,11 @@
     /**
      * Initialize variables which are activity-independent and state-independent.
      */
-    private VoicemailPlaybackPresenter(Activity activity) {
+    protected VoicemailPlaybackPresenter(Activity activity) {
         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)) {
@@ -201,7 +214,7 @@
     /**
      * Update variables which are activity-dependent or state-dependent.
      */
-    private void init(Activity activity, Bundle savedInstanceState) {
+    protected void init(Activity activity, Bundle savedInstanceState) {
         mActivity = activity;
         mContext = activity;
 
@@ -263,8 +276,22 @@
                 // Update the view to the current speakerphone state.
                 mView.onSpeakerphoneOn(mIsSpeakerphoneOn);
             }
-
-            checkForContent();
+            /*
+             * Check to see if the content field in the DB is set. If set, we proceed to
+             * prepareContent() method. We get the duration of the voicemail from the query and set
+             * it if the content is not available.
+             */
+            checkForContent(new OnContentCheckedListener() {
+                @Override
+                public void onContentChecked(boolean hasContent) {
+                    if (hasContent) {
+                        prepareContent();
+                    } else if (mView != null) {
+                        mView.resetSeekBar();
+                        mView.setClipPosition(0, mDuration.get());
+                    }
+                }
+            });
 
             if (startPlayingImmediately) {
                 // Since setPlaybackView can get called during the view binding process, we don't
@@ -360,6 +387,13 @@
             mScheduledExecutorService = null;
         }
 
+        if (!mArchiveResultHandlers.isEmpty()) {
+            for (FetchResultHandler fetchResultHandler : mArchiveResultHandlers) {
+                fetchResultHandler.destroy();
+            }
+            mArchiveResultHandlers.clear();
+        }
+
         if (mFetchResultHandler != null) {
             mFetchResultHandler.destroy();
             mFetchResultHandler = null;
@@ -368,15 +402,8 @@
 
     /**
      * Checks to see if we have content available for this voicemail.
-     * <p>
-     * This method will be called once, after the fragment has been created, before we know if the
-     * voicemail we've been asked to play has any content available.
-     * <p>
-     * Notify the user that we are fetching the content, then check to see if the content field in
-     * the DB is set. If set, we proceed to {@link #prepareContent()} method. We get the duration of
-     * the voicemail from the query and set it if the content is not available.
      */
-    private void checkForContent() {
+    protected void checkForContent(final OnContentCheckedListener callback) {
         mAsyncTaskExecutor.submit(Tasks.CHECK_FOR_CONTENT, new AsyncTask<Void, Void, Boolean>() {
             @Override
             public Boolean doInBackground(Void... params) {
@@ -385,12 +412,7 @@
 
             @Override
             public void onPostExecute(Boolean hasContent) {
-                if (hasContent) {
-                    prepareContent();
-                } else if (mView != null) {
-                    mView.resetSeekBar();
-                    mView.setClipPosition(0, mDuration.get());
-                }
+                callback.onContentChecked(hasContent);
             }
         });
     }
@@ -433,19 +455,27 @@
      *
      * @return whether issued request to fetch content
      */
-    private boolean requestContent() {
+    protected boolean requestContent(int code) {
         if (mContext == null || mVoicemailUri == null) {
             return false;
         }
 
-        if (mFetchResultHandler != null) {
-            mFetchResultHandler.destroy();
+        FetchResultHandler tempFetchResultHandler =
+                new FetchResultHandler(new Handler(), mVoicemailUri, code);
+
+        switch (code) {
+            case ARCHIVE_REQUEST:
+                mArchiveResultHandlers.add(tempFetchResultHandler);
+                break;
+            default:
+                if (mFetchResultHandler != null) {
+                    mFetchResultHandler.destroy();
+                }
+                mView.setIsFetchingContent();
+                mFetchResultHandler = tempFetchResultHandler;
+                break;
         }
 
-        mFetchResultHandler = new FetchResultHandler(new Handler(), mVoicemailUri);
-
-        mView.setIsFetchingContent();
-
         // Send voicemail fetch request.
         Intent intent = new Intent(VoicemailContract.ACTION_FETCH_VOICEMAIL, mVoicemailUri);
         mContext.sendBroadcast(intent);
@@ -456,14 +486,17 @@
     private class FetchResultHandler extends ContentObserver implements Runnable {
         private AtomicBoolean mIsWaitingForResult = new AtomicBoolean(true);
         private final Handler mFetchResultHandler;
+        private final Uri mVoicemailUri;
+        private final int mRequestCode;
 
-        public FetchResultHandler(Handler handler, Uri voicemailUri) {
+        public FetchResultHandler(Handler handler, Uri uri, int code) {
             super(handler);
             mFetchResultHandler = handler;
-
+            mRequestCode = code;
+            mVoicemailUri = uri;
             if (mContext != null) {
                 mContext.getContentResolver().registerContentObserver(
-                        voicemailUri, false, this);
+                        mVoicemailUri, false, this);
                 mFetchResultHandler.postDelayed(this, FETCH_CONTENT_TIMEOUT_MS);
             }
         }
@@ -492,6 +525,7 @@
         public void onChange(boolean selfChange) {
             mAsyncTaskExecutor.submit(Tasks.CHECK_CONTENT_AFTER_CHANGE,
                     new AsyncTask<Void, Void, Boolean>() {
+
                 @Override
                 public Boolean doInBackground(Void... params) {
                     return queryHasContent(mVoicemailUri);
@@ -503,6 +537,11 @@
                         mContext.getContentResolver().unregisterContentObserver(
                                 FetchResultHandler.this);
                         prepareContent();
+                        if (mRequestCode == ARCHIVE_REQUEST) {
+                            startArchiveVoicemailTask(mVoicemailUri, true /* archivedByUser */);
+                        } else if (mRequestCode == SHARE_REQUEST) {
+                            startArchiveVoicemailTask(mVoicemailUri, false /* archivedByUser */);
+                        }
                     }
                 }
             });
@@ -517,7 +556,7 @@
      * media player. If preparation is successful, the media player will {@link #onPrepared()},
      * and it will call {@link #onError()} otherwise.
      */
-    private void prepareContent() {
+    protected void prepareContent() {
         if (mView == null) {
             return;
         }
@@ -559,10 +598,8 @@
         mIsPrepared = true;
 
         // Update the duration in the database if it was not previously retrieved
-        if (mDuration.get() == 0) {
-            CallLogAsyncTaskUtil.updateVoicemailDuration(mContext, mVoicemailUri,
-                    mMediaPlayer.getDuration() / 1000);
-        }
+        CallLogAsyncTaskUtil.updateVoicemailDuration(mContext, mVoicemailUri,
+                TimeUnit.MILLISECONDS.toSeconds(mMediaPlayer.getDuration()));
 
         mDuration.set(mMediaPlayer.getDuration());
 
@@ -588,7 +625,7 @@
         return true;
     }
 
-    private void handleError(Exception e) {
+    protected void handleError(Exception e) {
         Log.d(TAG, "handleError: Could not play voicemail " + e);
 
         if (mIsPrepared) {
@@ -648,8 +685,25 @@
         }
 
         if (!mIsPrepared) {
-            // If we haven't downloaded the voicemail yet, attempt to download it.
-            mIsPlaying = requestContent();
+            /*
+             * Check content before requesting content to avoid duplicated requests. It is possible
+             * that the UI doesn't know content has arrived if the fetch took too long causing a
+             * timeout, but succeeded.
+             */
+            checkForContent(new OnContentCheckedListener() {
+                @Override
+                public void onContentChecked(boolean hasContent) {
+                    if (!hasContent) {
+                        // No local content, download from server. Queue playing if the request was
+                        // issued,
+                        mIsPlaying = requestContent(PLAYBACK_REQUEST);
+                    } else {
+                        // Queue playing once the media play loaded the content.
+                        mIsPlaying = true;
+                        prepareContent();
+                    }
+                }
+            });
             return;
         }
 
@@ -725,6 +779,15 @@
         }
     }
 
+    /**
+     * Seek to position. This is called when user manually seek the playback. It could be either
+     * by touch or volume button while in talkback mode.
+     * @param position
+     */
+    public void seek(int position) {
+        mPosition = position;
+    }
+
     private void enableProximitySensor() {
         if (mProximityWakeLock == null || mIsSpeakerphoneOn || !mIsPrepared
                 || mMediaPlayer == null || !mMediaPlayer.isPlaying()) {
@@ -800,6 +863,17 @@
         return mIsPrepared && mMediaPlayer != null ? mMediaPlayer.getCurrentPosition() : 0;
     }
 
+    public void notifyUiOfArchiveResult(Uri voicemailUri, boolean archived) {
+        if (mView == null) {
+            return;
+        }
+        if (archived) {
+            mView.onVoicemailArchiveSucceded(voicemailUri);
+        } else {
+            mView.onVoicemailArchiveFailed(voicemailUri);
+        }
+    }
+
     /* package */ void onVoicemailDeleted() {
         // Trampoline the event notification to the interested listener.
         if (mOnVoicemailDeletedListener != null) {
@@ -828,6 +902,95 @@
         return mScheduledExecutorService;
     }
 
+    /**
+     * If voicemail has already been downloaded, go straight to archiving. Otherwise, request
+     * the voicemail content first.
+     */
+    public void archiveContent(final Uri voicemailUri, final boolean archivedByUser) {
+        checkForContent(new OnContentCheckedListener() {
+            @Override
+            public void onContentChecked(boolean hasContent) {
+                if (!hasContent) {
+                    requestContent(archivedByUser ? ARCHIVE_REQUEST : SHARE_REQUEST);
+                } else {
+                    startArchiveVoicemailTask(voicemailUri, archivedByUser);
+                }
+            }
+        });
+    }
+
+    /**
+     * Asynchronous task used to archive a voicemail given its uri.
+     */
+    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 (archivedByUser) {
+                            setArchivedVoicemailStatusAndUpdateUI(voicemailUri,
+                                    archivedVoicemailUri, true);
+                        } else {
+                            sendShareIntent(archivedVoicemailUri);
+                        }
+                    }
+                }, voicemailUri);
+    }
+
+    /**
+     * 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);
+    }
+
+    /** 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);
+    }
+
+    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
     public boolean isPlaying() {
         return mIsPlaying;
diff --git a/src/com/android/dialerbind/ObjectFactory.java b/src/com/android/dialerbind/ObjectFactory.java
index 31255a2..9f75e39 100644
--- a/src/com/android/dialerbind/ObjectFactory.java
+++ b/src/com/android/dialerbind/ObjectFactory.java
@@ -44,6 +44,14 @@
         return "com.android.dialer.database.filterednumberprovider";
     }
 
+    public static boolean isVoicemailArchiveEnabled(Context context) {
+        return false;
+    }
+
+    public static boolean isVoicemailShareEnabled(Context context) {
+        return false;
+    }
+
     @Nullable
     public static ExtendedBlockingButtonRenderer newExtendedBlockingButtonRenderer(
             Context context, ExtendedBlockingButtonRenderer.Listener listener) {
@@ -62,13 +70,13 @@
             CallFetcher callFetcher,
             ContactInfoHelper contactInfoHelper,
             VoicemailPlaybackPresenter voicemailPlaybackPresenter,
-            boolean isCallLogActivity) {
+            int activityType) {
         return new CallLogAdapter(
                 context,
                 callFetcher,
                 contactInfoHelper,
                 voicemailPlaybackPresenter,
-                isCallLogActivity);
+                activityType);
     }
 
     public static Logger getLoggerInstance() {
diff --git a/tests/src-N/com/android/dialer/SdkSelectionUtilsTest.java b/tests/src-N/com/android/dialer/SdkSelectionUtilsTest.java
deleted file mode 100644
index 2950ea0..0000000
--- a/tests/src-N/com/android/dialer/SdkSelectionUtilsTest.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2015 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;
-
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-
-// @formatter:off
-/**
- * Run test with
- * adb shell am instrument -e class com.android.dialer.SdkSelectionUtilsTest -w com.google.android.dialer.tests/android.test.InstrumentationTestRunner
- */
-// @formatter:on
-@SmallTest
-public class SdkSelectionUtilsTest extends AndroidTestCase {
-
-    public void testTargetNSdk_True() {
-        assertTrue(SdkSelectionUtils.TARGET_N_SDK);
-    }
-}
\ No newline at end of file
diff --git a/tests/src-pre-N/com/android/dialer/SdkSelectionUtilsTest.java b/tests/src-pre-N/com/android/dialer/SdkSelectionUtilsTest.java
deleted file mode 100644
index 595f1cc..0000000
--- a/tests/src-pre-N/com/android/dialer/SdkSelectionUtilsTest.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2015 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;
-
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-
-// @formatter:off
-/**
- * Run test with
- * adb shell am instrument -e class com.android.dialer.SdkSelectionUtilsTest -w com.google.android.dialer.tests/android.test.InstrumentationTestRunner
- */
-// @formatter:on
-@SmallTest
-public class SdkSelectionUtilsTest extends AndroidTestCase {
-
-    public void testTargetNSdk_False() {
-        assertFalse(SdkSelectionUtils.TARGET_N_SDK);
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/android/dialer/calllog/CallLogAdapterTest.java b/tests/src/com/android/dialer/calllog/CallLogAdapterTest.java
index 80dfe35..e801311 100644
--- a/tests/src/com/android/dialer/calllog/CallLogAdapterTest.java
+++ b/tests/src/com/android/dialer/calllog/CallLogAdapterTest.java
@@ -31,6 +31,7 @@
 
 import com.android.contacts.common.preference.ContactsPreferences;
 import com.android.dialer.contactinfo.ContactInfoCache;
+import com.android.dialer.database.VoicemailArchiveContract;
 import com.android.dialer.util.AppCompatConstants;
 import com.android.dialer.util.TestConstants;
 import com.google.common.collect.Lists;
@@ -49,6 +50,7 @@
 public class CallLogAdapterTest extends AndroidTestCase {
     private static final String EMPTY_STRING = "";
     private static final int NO_VALUE_SET = -1;
+    private static final int ARCHIVE_TYPE = -2;
 
     private static final String TEST_CACHED_NAME_PRIMARY = "Cached Name";
     private static final String TEST_CACHED_NAME_ALTERNATIVE = "Name Cached";
@@ -74,12 +76,11 @@
 
     private View mView;
     private CallLogListItemViewHolder mViewHolder;
-    private Random mRandom;
+    private final Random mRandom = new Random();
 
     @Override
     protected void setUp() throws Exception {
         super.setUp();
-        mRandom = new Random();
 
         // Use a call fetcher that does not do anything.
         CallLogAdapter.CallFetcher fakeCallFetcher = new CallLogAdapter.CallFetcher() {
@@ -98,7 +99,8 @@
                     }
                 };
 
-        mAdapter = new TestCallLogAdapter(getContext(), fakeCallFetcher, fakeContactInfoHelper);
+        mAdapter = new TestCallLogAdapter(getContext(), fakeCallFetcher, fakeContactInfoHelper,
+                CallLogAdapter.ACTIVITY_TYPE_DIALTACTS);
 
         // The cursor used in the tests to store the entries to display.
         mCursor = new MatrixCursor(CallLogQuery._PROJECTION);
@@ -108,13 +110,6 @@
         mViewHolder = CallLogListItemViewHolder.createForTest(getContext());
     }
 
-    @Override
-    protected void tearDown() throws Exception {
-        mAdapter = null;
-        mCursor = null;
-        super.tearDown();
-    }
-
     @MediumTest
     public void testBindView_NumberOnlyNoCache() {
         createCallLogEntry();
@@ -547,6 +542,19 @@
         assertEquals(TEST_NUMBER_3, mViewHolder.number);
     }
 
+    public void testVoicemailArchive() {
+        setUpArchiveAdapter();
+        createVoicemailArchiveCallLogEntry();
+
+        mAdapter.changeCursorVoicemail(mCursor);
+        mAdapter.onBindViewHolder(mViewHolder, 0);
+
+        assertEquals(Uri.parse(mViewHolder.voicemailUri),
+                ContentUris.withAppendedId(
+                        VoicemailArchiveContract.VoicemailArchive.CONTENT_URI, 0));
+        assertNull(mViewHolder.primaryActionButtonView.getTag());
+    }
+
     private void createCallLogEntry() {
         createCallLogEntry(TEST_NUMBER);
     }
@@ -575,6 +583,10 @@
         createCallLogEntry(TEST_NUMBER, EMPTY_STRING, NO_VALUE_SET, Calls.VOICEMAIL_TYPE);
     }
 
+    private void createVoicemailArchiveCallLogEntry() {
+        createCallLogEntry(TEST_NUMBER, EMPTY_STRING, NO_VALUE_SET, ARCHIVE_TYPE);
+    }
+
     private void createCallLogEntry(String number, String postDialDigits, int presentation, int type) {
         Object[] values = getValues(number, postDialDigits, presentation, type);
         mCursor.addRow(values);
@@ -674,6 +686,10 @@
             values[CallLogQuery.VOICEMAIL_URI] = ContentUris.withAppendedId(
                     VoicemailContract.Voicemails.CONTENT_URI, mCursor.getCount());
         }
+        if (type == ARCHIVE_TYPE) {
+            values[CallLogQuery.VOICEMAIL_URI] = ContentUris.withAppendedId(
+                    VoicemailArchiveContract.VoicemailArchive.CONTENT_URI, mCursor.getCount());
+        }
 
         return values;
     }
@@ -739,11 +755,34 @@
         return Phone.getTypeLabel(getContext().getResources(), phoneType, "");
     }
 
+    private void setUpArchiveAdapter() {
+        // Use a call fetcher that does not do anything.
+        CallLogAdapter.CallFetcher fakeCallFetcher = new CallLogAdapter.CallFetcher() {
+            @Override
+            public void fetchCalls() {}
+        };
+
+        ContactInfoHelper fakeContactInfoHelper =
+                new ContactInfoHelper(getContext(), TEST_COUNTRY_ISO) {
+                    @Override
+                    public ContactInfo lookupNumber(String number, String countryIso) {
+                        ContactInfo info = new ContactInfo();
+                        info.number = number;
+                        info.formattedNumber = number;
+                        return info;
+                    }
+                };
+
+        mAdapter = new TestCallLogAdapter(getContext(), fakeCallFetcher, fakeContactInfoHelper,
+                CallLogAdapter.ACTIVITY_TYPE_ARCHIVE);
+    }
+
     /// Subclass of {@link CallLogAdapter} used in tests to intercept certain calls.
     private static final class TestCallLogAdapter extends CallLogAdapter {
         public TestCallLogAdapter(Context context, CallFetcher callFetcher,
-                ContactInfoHelper contactInfoHelper) {
-            super(context, callFetcher, contactInfoHelper, null, false);
+                ContactInfoHelper contactInfoHelper, int mActivity) {
+            super(context, callFetcher, contactInfoHelper, null,
+                    mActivity);
             mContactInfoCache = new TestContactInfoCache(
                     contactInfoHelper, mOnContactInfoChangedListener);
         }
diff --git a/tests/src/com/android/dialer/calllog/CallLogGroupBuilderTest.java b/tests/src/com/android/dialer/calllog/CallLogGroupBuilderTest.java
index 04463c2..c31c38e 100644
--- a/tests/src/com/android/dialer/calllog/CallLogGroupBuilderTest.java
+++ b/tests/src/com/android/dialer/calllog/CallLogGroupBuilderTest.java
@@ -129,6 +129,18 @@
                 AppCompatConstants.CALLS_VOICEMAIL_TYPE, AppCompatConstants.CALLS_OUTGOING_TYPE);
     }
 
+    public void testGrouping_VoicemailArchive() {
+        // Does not group with other types of calls, include voicemail themselves.
+        assertVoicemailsAreNotGrouped(
+                AppCompatConstants.CALLS_VOICEMAIL_TYPE, AppCompatConstants.CALLS_MISSED_TYPE);
+        assertVoicemailsAreNotGrouped(
+                AppCompatConstants.CALLS_VOICEMAIL_TYPE, AppCompatConstants.CALLS_VOICEMAIL_TYPE);
+        assertVoicemailsAreNotGrouped(
+                AppCompatConstants.CALLS_VOICEMAIL_TYPE, AppCompatConstants.CALLS_INCOMING_TYPE);
+        assertVoicemailsAreNotGrouped(
+                AppCompatConstants.CALLS_VOICEMAIL_TYPE, AppCompatConstants.CALLS_OUTGOING_TYPE);
+    }
+
     public void testGrouping_Missed() {
         // Groups with one or more missed calls.
         assertCallsAreGrouped(
@@ -198,6 +210,21 @@
 
     }
 
+    public void testAddGroups_Separate() {
+        addMultipleCallLogEntries(TEST_NUMBER1,
+                AppCompatConstants.CALLS_VOICEMAIL_TYPE,    // Group 1: 0
+                AppCompatConstants.CALLS_INCOMING_TYPE,     // Group 2: 1
+                AppCompatConstants.CALLS_OUTGOING_TYPE,     // Group 3: 2
+                AppCompatConstants.CALLS_MISSED_TYPE);      // Group 4: 3
+        mBuilder.addVoicemailGroups(mCursor);
+
+        assertEquals(4, mFakeGroupCreator.groups.size());
+        assertGroupIs(0, 1, mFakeGroupCreator.groups.get(0));
+        assertGroupIs(1, 1, mFakeGroupCreator.groups.get(1));
+        assertGroupIs(2, 1, mFakeGroupCreator.groups.get(2));
+        assertGroupIs(3, 1, mFakeGroupCreator.groups.get(3));
+    }
+
     public void testAddGroups_Mixed() {
         addMultipleCallLogEntries(TEST_NUMBER1,
                 AppCompatConstants.CALLS_VOICEMAIL_TYPE,   // Group 1: 0
@@ -326,6 +353,15 @@
         assertEquals(types.length, mFakeGroupCreator.groups.size());
     }
 
+    /** Asserts that voicemails are not grouped together with other types at all. */
+    private void assertVoicemailsAreNotGrouped(int... types) {
+        createCursor();
+        clearFakeGroupCreator();
+        addMultipleCallLogEntries(TEST_NUMBER1, types);
+        mBuilder.addVoicemailGroups(mCursor);
+        assertEquals(types.length, mFakeGroupCreator.groups.size());
+    }
+
     /** Adds a set of calls with the given types, all from the same number, in the old section. */
     private void addMultipleCallLogEntries(String number, int... types) {
         for (int type : types) {
diff --git a/tests/src/com/android/dialer/calllog/ContactInfoHelperTest.java b/tests/src/com/android/dialer/calllog/ContactInfoHelperTest.java
index 680afb1..e53eb78 100644
--- a/tests/src/com/android/dialer/calllog/ContactInfoHelperTest.java
+++ b/tests/src/com/android/dialer/calllog/ContactInfoHelperTest.java
@@ -22,6 +22,7 @@
 import android.test.AndroidTestCase;
 import android.test.suitebuilder.annotation.MediumTest;
 
+import com.android.contacts.common.ContactsUtils;
 import com.android.contacts.common.test.mocks.ContactsMockContext;
 import com.android.contacts.common.test.mocks.MockContentProvider.Query;
 
@@ -99,13 +100,15 @@
     }
 
     public void testLookupDisplayNameAlternative_NullLookup() {
-        Assert.assertNull(mContactInfoHelper.lookUpDisplayNameAlternative(mContext, null));
+        Assert.assertNull(mContactInfoHelper.lookUpDisplayNameAlternative(mContext, null,
+                ContactsUtils.USER_TYPE_CURRENT));
     }
 
     public void testLookupDisplayNameAlternative_NoResults() {
         setUpQueryExpectations(displayNameAlternativeUri,
                 PhoneQuery.DISPLAY_NAME_ALTERNATIVE_PROJECTION);
-        Assert.assertNull(mContactInfoHelper.lookUpDisplayNameAlternative(mContext, TEST_LOOKUP_KEY));
+        Assert.assertNull(mContactInfoHelper.lookUpDisplayNameAlternative(mContext,
+                TEST_LOOKUP_KEY, ContactsUtils.USER_TYPE_CURRENT));
         mContext.verify();
     }
 
@@ -113,7 +116,8 @@
         setUpQueryExpectations(displayNameAlternativeUri,
                 PhoneQuery.DISPLAY_NAME_ALTERNATIVE_PROJECTION, TEST_DISPLAY_NAME_ALTERNATIVE_ROW);
         Assert.assertEquals(TEST_DISPLAY_NAME_ALTERNATIVE,
-                mContactInfoHelper.lookUpDisplayNameAlternative(mContext, TEST_LOOKUP_KEY));
+                mContactInfoHelper.lookUpDisplayNameAlternative(mContext, TEST_LOOKUP_KEY
+                , ContactsUtils.USER_TYPE_CURRENT));
         mContext.verify();
     }
 
diff --git a/tests/src/com/android/dialer/calllog/GroupingListAdapterTests.java b/tests/src/com/android/dialer/calllog/GroupingListAdapterTests.java
index 4d51f72..4d8cb9c 100644
--- a/tests/src/com/android/dialer/calllog/GroupingListAdapterTests.java
+++ b/tests/src/com/android/dialer/calllog/GroupingListAdapterTests.java
@@ -70,6 +70,11 @@
         }
 
         @Override
+        protected void addVoicemailGroups(Cursor c) {
+            // Do nothing.
+        }
+
+        @Override
         public void onContentChanged() {
             // Do nothing.
         }
diff --git a/tests/src/com/android/dialer/contactinfo/ContactPhotoLoaderTest.java b/tests/src/com/android/dialer/contactinfo/ContactPhotoLoaderTest.java
new file mode 100644
index 0000000..42a5ae9
--- /dev/null
+++ b/tests/src/com/android/dialer/contactinfo/ContactPhotoLoaderTest.java
@@ -0,0 +1,106 @@
+/*
+ * 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.contactinfo;
+
+import android.app.Instrumentation;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.net.Uri;
+import android.support.test.InstrumentationRegistry;
+import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
+import android.test.AndroidTestCase;
+import android.test.InstrumentationTestCase;
+import android.text.TextUtils;
+
+import com.android.contacts.common.GeoUtil;
+import com.android.contacts.common.lettertiles.LetterTileDrawable;
+import com.android.dialer.calllog.ContactInfo;
+import com.android.dialer.calllog.ContactInfoHelper;
+import com.android.dialer.tests.R;
+
+public class ContactPhotoLoaderTest extends InstrumentationTestCase {
+
+    private Context mContext;
+
+    @Override
+    public void setUp() {
+        mContext = getInstrumentation().getTargetContext();
+    }
+
+    public void testConstructor() {
+        ContactPhotoLoader loader = new ContactPhotoLoader(mContext, new ContactInfo());
+    }
+
+    public void testConstructor_NullContext() {
+        try {
+            ContactPhotoLoader loader = new ContactPhotoLoader(null, new ContactInfo());
+            fail();
+        } catch (NullPointerException e) {
+            //expected
+        }
+    }
+
+    public void testConstructor_NullContactInfo() {
+        try {
+            ContactPhotoLoader loader = new ContactPhotoLoader(mContext, null);
+            fail();
+        } catch (NullPointerException e) {
+            //expected
+        }
+    }
+
+    public void testGetIcon_Photo() {
+        ContactInfo info = getTestContactInfo();
+        info.photoUri = getResourceUri(R.drawable.phone_icon);
+        ContactPhotoLoader loader = new ContactPhotoLoader(mContext, info);
+        assertTrue(loader.getIcon() instanceof RoundedBitmapDrawable);
+    }
+
+    public void testGetIcon_Photo_Invalid() {
+        ContactInfo info = getTestContactInfo();
+        info.photoUri = Uri.parse("file://invalid/uri");
+        ContactPhotoLoader loader = new ContactPhotoLoader(mContext, info);
+        //Should fall back to LetterTileDrawable
+        assertTrue(loader.getIcon() instanceof LetterTileDrawable);
+    }
+
+    public void testGetIcon_LetterTile() {
+        ContactInfo info = getTestContactInfo();
+        ContactPhotoLoader loader = new ContactPhotoLoader(mContext, info);
+        assertTrue(loader.getIcon() instanceof LetterTileDrawable);
+    }
+
+    private Uri getResourceUri(int resId) {
+        Context testContext = getInstrumentation().getContext();
+        Resources resources = testContext.getResources();
+
+        assertNotNull(resources.getDrawable(resId));
+        return Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://"
+                + testContext.getPackageName()
+                + '/' + resId);
+    }
+
+    private ContactInfo getTestContactInfo() {
+        ContactInfo info = new ContactInfo();
+        info.name = "foo";
+        info.lookupKey = "bar";
+        return info;
+    }
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..cabaf67
--- /dev/null
+++ b/tests/src/com/android/dialer/voicemail/VoicemailActivityInstrumentationTestCase2.java
@@ -0,0 +1,227 @@
+/*
+ * 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;
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.content.ContentValues;
+import android.content.res.AssetManager;
+import android.net.Uri;
+import android.provider.VoicemailContract;
+import android.test.ActivityInstrumentationTestCase2;
+import android.test.suitebuilder.annotation.Suppress;
+import android.view.View;
+
+import com.android.dialer.R;
+import com.android.dialer.util.AsyncTaskExecutors;
+import com.android.dialer.util.FakeAsyncTaskExecutor;
+import com.android.dialer.util.LocaleTestUtils;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Locale;
+
+import static com.android.dialer.voicemail.VoicemailPlaybackPresenter.Tasks.CHECK_FOR_CONTENT;
+
+/**
+ * Common methods and attributes between {@link VoicemailArchiveTest} and
+ * {@link VoicemailPlaybackTest}.
+ */
+public class VoicemailActivityInstrumentationTestCase2<T extends Activity>
+        extends ActivityInstrumentationTestCase2<T> {
+    protected static final String TEST_ASSET_NAME = "quick_test_recording.mp3";
+    protected static final String MIME_TYPE = "audio/mp3";
+    protected static final String CONTACT_NUMBER = "+1412555555";
+    protected static final String VOICEMAIL_FILE_LOCATION = "/sdcard/sadlfj893w4j23o9sfu.mp3";
+
+    private T mActivity;
+    protected VoicemailPlaybackPresenter mPresenter;
+    private VoicemailPlaybackLayout mLayout;
+
+    protected Uri mVoicemailUri;
+    private LocaleTestUtils mLocaleTestUtils;
+    protected FakeAsyncTaskExecutor mFakeAsyncTaskExecutor;
+
+    public VoicemailActivityInstrumentationTestCase2(Class<T> activityClass) {
+        super(activityClass);
+    }
+
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+
+        mFakeAsyncTaskExecutor = new FakeAsyncTaskExecutor(getInstrumentation());
+        AsyncTaskExecutors.setFactoryForTest(mFakeAsyncTaskExecutor.getFactory());
+
+        // Some of the tests rely on the text - safest to force a specific locale.
+        mLocaleTestUtils = new LocaleTestUtils(getInstrumentation().getTargetContext());
+        mLocaleTestUtils.setLocale(Locale.US);
+
+        mActivity = getActivity();
+        mLayout = new VoicemailPlaybackLayout(mActivity);
+        mLayout.onFinishInflate();
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        cleanUpVoicemailUri();
+
+        mLocaleTestUtils.restoreLocale();
+        mLocaleTestUtils = null;
+
+        mPresenter.clearInstance();
+        AsyncTaskExecutors.setFactoryForTest(null);
+
+        mActivity = null;
+        mPresenter = null;
+        mLayout = null;
+
+        super.tearDown();
+    }
+
+    @Suppress
+    public void testFetchingVoicemail() throws Throwable {
+        setUriForUnfetchedVoicemailEntry();
+        setPlaybackViewForPresenter();
+
+        getInstrumentation().runOnMainSync(new Runnable() {
+            @Override
+            public void run() {
+                mPresenter.resumePlayback();
+                assertStateTextContains("Loading voicemail");
+            }
+        });
+    }
+
+    @Suppress
+    public void testInvalidVoicemailShowsErrorMessage() throws Throwable {
+        setUriForInvalidVoicemailEntry();
+        setPlaybackViewForPresenter();
+
+        getInstrumentation().runOnMainSync(new Runnable() {
+            @Override
+            public void run() {
+                mPresenter.resumePlayback();
+            }
+        });
+        mFakeAsyncTaskExecutor.runTask(CHECK_FOR_CONTENT);
+        getInstrumentation().waitForIdleSync();
+
+        // The media player will have thrown an IOException since the file doesn't exist.
+        // This should have put a failed to play message on screen, buffering is gone.
+        assertStateTextContains("Couldn't play voicemail");
+        assertStateTextNotContains("Buffering");
+    }
+
+    public void testClickingSpeakerphoneButton() throws Throwable {
+        setUriForRealFileVoicemailEntry();
+        setPlaybackViewForPresenter();
+
+        // Check that the speakerphone is false to start.
+        assertFalse(mPresenter.isSpeakerphoneOn());
+
+        View speakerphoneButton = mLayout.findViewById(R.id.playback_speakerphone);
+        speakerphoneButton.performClick();
+        assertTrue(mPresenter.isSpeakerphoneOn());
+    }
+
+    protected void cleanUpVoicemailUri() {
+        if (mVoicemailUri != null) {
+            getContentResolver().delete(VoicemailContract.Voicemails.CONTENT_URI,
+                    "_ID = ?", new String[] { String.valueOf(ContentUris.parseId(mVoicemailUri)) });
+            mVoicemailUri = null;
+        }
+    }
+
+    protected void setUriForRealFileVoicemailEntry() throws IOException {
+        assertNull(mVoicemailUri);
+        ContentValues values = new ContentValues();
+        values.put(VoicemailContract.Voicemails.DATE, String.valueOf(System.currentTimeMillis()));
+        values.put(VoicemailContract.Voicemails.NUMBER, CONTACT_NUMBER);
+        values.put(VoicemailContract.Voicemails.MIME_TYPE, MIME_TYPE);
+        values.put(VoicemailContract.Voicemails.HAS_CONTENT, 1);
+        String packageName = getInstrumentation().getTargetContext().getPackageName();
+        mVoicemailUri = getContentResolver().insert(
+                VoicemailContract.Voicemails.buildSourceUri(packageName), values);
+        AssetManager assets = getAssets();
+        try (InputStream inputStream = assets.open(TEST_ASSET_NAME);
+             OutputStream outputStream = getContentResolver().openOutputStream(mVoicemailUri)) {
+            copyBetweenStreams(inputStream, outputStream);
+        }
+    }
+
+    protected void setUriForUnfetchedVoicemailEntry() {
+        assertNull(mVoicemailUri);
+        ContentValues values = new ContentValues();
+        values.put(VoicemailContract.Voicemails.DATE, String.valueOf(System.currentTimeMillis()));
+        values.put(VoicemailContract.Voicemails.NUMBER, CONTACT_NUMBER);
+        values.put(VoicemailContract.Voicemails.MIME_TYPE, MIME_TYPE);
+        values.put(VoicemailContract.Voicemails.HAS_CONTENT, 0);
+        String packageName = getInstrumentation().getTargetContext().getPackageName();
+        mVoicemailUri = getContentResolver().insert(
+                VoicemailContract.Voicemails.buildSourceUri(packageName), values);
+    }
+
+    protected void setUriForInvalidVoicemailEntry() {
+        assertNull(mVoicemailUri);
+        ContentResolver contentResolver = getContentResolver();
+        ContentValues values = new ContentValues();
+        values.put(VoicemailContract.Voicemails.NUMBER, CONTACT_NUMBER);
+        values.put(VoicemailContract.Voicemails.HAS_CONTENT, 1);
+        // VoicemailContract.Voicemails._DATA
+        values.put("_data", VOICEMAIL_FILE_LOCATION);
+        mVoicemailUri = contentResolver.insert(VoicemailContract.Voicemails.CONTENT_URI, values);
+    }
+
+    protected void setPlaybackViewForPresenter() {
+        getInstrumentation().runOnMainSync(new Runnable() {
+            @Override
+            public void run() {
+                mPresenter.setPlaybackView(mLayout, mVoicemailUri, false);
+            }
+        });
+    }
+
+    protected void copyBetweenStreams(InputStream in, OutputStream out) throws IOException {
+        byte[] buffer = new byte[1024];
+        int bytesRead;
+        while ((bytesRead = in.read(buffer)) > 0) {
+            out.write(buffer, 0, bytesRead);
+        }
+    }
+
+    protected void assertStateTextContains(String text) {
+        assertNotNull(mLayout);
+        assertTrue(mLayout.getStateText().contains(text));
+    }
+
+    protected void assertStateTextNotContains(String text) {
+        assertNotNull(mLayout);
+        assertFalse(mLayout.getStateText().contains(text));
+    }
+
+    protected ContentResolver getContentResolver() {
+        return getInstrumentation().getTargetContext().getContentResolver();
+    }
+
+    protected AssetManager getAssets() {
+        return getInstrumentation().getContext().getAssets();
+    }
+
+}
diff --git a/tests/src/com/android/dialer/voicemail/VoicemailArchiveTest.java b/tests/src/com/android/dialer/voicemail/VoicemailArchiveTest.java
new file mode 100644
index 0000000..bbd5edc
--- /dev/null
+++ b/tests/src/com/android/dialer/voicemail/VoicemailArchiveTest.java
@@ -0,0 +1,116 @@
+/*
+ * 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.AssetManager;
+
+import com.android.dialer.database.VoicemailArchiveContract.VoicemailArchive;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+/**
+ * Unit tests for {@link VoicemailArchiveActivity} and {@link VoicemailArchivePlaybackPresenter}.
+ */
+public class VoicemailArchiveTest
+        extends VoicemailActivityInstrumentationTestCase2<VoicemailArchiveActivity> {
+
+    public VoicemailArchiveTest() {
+        super(VoicemailArchiveActivity.class);
+    }
+
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        mPresenter = VoicemailArchivePlaybackPresenter.getInstance(getActivity(), null);
+    }
+
+    @Override
+    public void testFetchingVoicemail() throws Throwable {
+        setUriForRealFileVoicemailEntry();
+        setPlaybackViewForPresenter();
+        getInstrumentation().runOnMainSync(new Runnable() {
+            @Override
+            public void run() {
+                mPresenter.checkForContent(
+                        new VoicemailPlaybackPresenter.OnContentCheckedListener() {
+                            @Override
+                            public void onContentChecked(boolean hasContent) {
+                                mPresenter.resumePlayback();
+                                assertEquals(true, mPresenter.isPlaying());
+                            }
+                        });
+            }
+        });
+    }
+
+    @Override
+    public void testInvalidVoicemailShowsErrorMessage() throws Throwable {
+        setUriForInvalidVoicemailEntry();
+        getInstrumentation().runOnMainSync(new Runnable() {
+            @Override
+            public void run() {
+                mPresenter.checkForContent(
+                        new VoicemailPlaybackPresenter.OnContentCheckedListener() {
+                            @Override
+                            public void onContentChecked(boolean hasContent) {
+                                assertStateTextContains("Couldn't play voicemail");
+                            }
+                        });
+            }
+        });
+    }
+
+    @Override
+    protected void setUriForInvalidVoicemailEntry() {
+        assertNull(mVoicemailUri);
+        ContentValues values = new ContentValues();
+        values.put(VoicemailArchive.NUMBER, CONTACT_NUMBER);
+        values.put(VoicemailArchive.DATE, String.valueOf(System.currentTimeMillis()));
+        values.put(VoicemailArchive.MIME_TYPE, MIME_TYPE);
+        values.put(VoicemailArchive._DATA, VOICEMAIL_FILE_LOCATION);
+        mVoicemailUri = getContentResolver().insert(VoicemailArchive.CONTENT_URI, values);
+    }
+
+    @Override
+    protected void setUriForRealFileVoicemailEntry() throws IOException {
+        assertNull(mVoicemailUri);
+        ContentValues values = new ContentValues();
+        values.put(VoicemailArchive.DATE, String.valueOf(System.currentTimeMillis()));
+        values.put(VoicemailArchive.NUMBER, CONTACT_NUMBER);
+        values.put(VoicemailArchive.MIME_TYPE, MIME_TYPE);
+        values.put(VoicemailArchive.DURATION, 0);
+        mVoicemailUri = getContentResolver().insert(VoicemailArchive.CONTENT_URI, values);
+        AssetManager assets = getAssets();
+        try (InputStream inputStream = assets.open(TEST_ASSET_NAME);
+             OutputStream outputStream = getContentResolver().openOutputStream(mVoicemailUri)) {
+            copyBetweenStreams(inputStream, outputStream);
+        }
+    }
+
+    @Override
+    protected void cleanUpVoicemailUri() {
+        if (mVoicemailUri != null) {
+            getContentResolver().delete(VoicemailArchive.CONTENT_URI,
+                    "_ID = ?", new String[] { String.valueOf(ContentUris.parseId(mVoicemailUri)) });
+            mVoicemailUri = null;
+        }
+    }
+}
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 630789c..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,54 +16,21 @@
 
 package com.android.dialer.voicemail;
 
-import static com.android.dialer.voicemail.VoicemailPlaybackPresenter.Tasks.CHECK_FOR_CONTENT;
-import static com.android.dialer.voicemail.VoicemailPlaybackPresenter.Tasks.CHECK_CONTENT_AFTER_CHANGE;
-
-import android.app.Activity;
-import android.content.ContentResolver;
 import android.content.ContentUris;
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.res.AssetManager;
+import android.database.Cursor;
 import android.net.Uri;
-import android.provider.VoicemailContract;
-import android.test.ActivityInstrumentationTestCase2;
-import android.test.suitebuilder.annotation.LargeTest;
 import android.test.suitebuilder.annotation.Suppress;
-import android.view.View;
-import android.widget.TextView;
 
-import com.android.dialer.R;
 import com.android.dialer.calllog.CallLogActivity;
-import com.android.dialer.util.AsyncTaskExecutors;
-import com.android.dialer.util.FakeAsyncTaskExecutor;
-import com.android.dialer.util.LocaleTestUtils;
-import com.android.dialer.voicemail.VoicemailPlaybackLayout;
-import com.android.dialer.voicemail.VoicemailPlaybackPresenter;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.List;
-import java.util.Locale;
+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;
 
 /**
- * Unit tests for the {@link VoicemailPlaybackPresenter} and {@link VoicemailPlaybackLayout}.
+ * Unit tests for {@link VoicemailPlaybackPresenter} and {@link VoicemailPlaybackLayout}.
  */
-@LargeTest
-public class VoicemailPlaybackTest extends ActivityInstrumentationTestCase2<CallLogActivity> {
-    private static final String TEST_ASSET_NAME = "quick_test_recording.mp3";
-    private static final String MIME_TYPE = "audio/mp3";
-    private static final String CONTACT_NUMBER = "+1412555555";
-    private static final String VOICEMAIL_FILE_LOCATION = "/sdcard/sadlfj893w4j23o9sfu.mp3";
-
-    private Activity mActivity;
-    private VoicemailPlaybackPresenter mPresenter;
-    private VoicemailPlaybackLayout mLayout;
-
-    private Uri mVoicemailUri;
-    private LocaleTestUtils mLocaleTestUtils;
-    private FakeAsyncTaskExecutor mFakeAsyncTaskExecutor;
+public class VoicemailPlaybackTest
+        extends VoicemailActivityInstrumentationTestCase2<CallLogActivity> {
 
     public VoicemailPlaybackTest() {
         super(CallLogActivity.class);
@@ -72,51 +39,15 @@
     @Override
     public void setUp() throws Exception {
         super.setUp();
-
-        mFakeAsyncTaskExecutor = new FakeAsyncTaskExecutor(getInstrumentation());
-        AsyncTaskExecutors.setFactoryForTest(mFakeAsyncTaskExecutor.getFactory());
-
-        // Some of the tests rely on the text - safest to force a specific locale.
-        mLocaleTestUtils = new LocaleTestUtils(getInstrumentation().getTargetContext());
-        mLocaleTestUtils.setLocale(Locale.US);
-
-        mActivity = getActivity();
-        mLayout = new VoicemailPlaybackLayout(mActivity);
-        mLayout.onFinishInflate();
-
-        mPresenter = VoicemailPlaybackPresenter.getInstance(mActivity, null);
+        mPresenter = VoicemailPlaybackPresenter.getInstance(getActivity(), null);
     }
 
     @Override
-    protected void tearDown() throws Exception {
-        cleanUpVoicemailUri();
-
-        mLocaleTestUtils.restoreLocale();
-        mLocaleTestUtils = null;
-
-        mPresenter.clearInstance();
-        AsyncTaskExecutors.setFactoryForTest(null);
-
-        mActivity = null;
-        mPresenter = null;
-        mLayout = null;
-
+    public void tearDown() throws Exception {
+        cleanUpArchivedVoicemailUri();
         super.tearDown();
     }
 
-    public void testFetchingVoicemail() throws Throwable {
-        setUriForUnfetchedVoicemailEntry();
-        setPlaybackViewForPresenter();
-
-        getInstrumentation().runOnMainSync(new Runnable() {
-            @Override
-            public void run() {
-                mPresenter.resumePlayback();
-                assertStateTextContains("Loading voicemail");
-            }
-        });
-    }
-
     @Suppress
     public void testWhenCheckForContentCompletes() throws Throwable {
         setUriForRealFileVoicemailEntry();
@@ -134,118 +65,81 @@
         assertStateTextContains("Loading voicemail");
     }
 
-    @Suppress
-    public void testInvalidVoicemailShowsErrorMessage() throws Throwable {
-        setUriForInvalidVoicemailEntry();
+    public void testArchiveContent() throws Throwable {
+        setUriForRealFileVoicemailEntry();
         setPlaybackViewForPresenter();
+        mFakeAsyncTaskExecutor.runTask(CHECK_FOR_CONTENT);
 
         getInstrumentation().runOnMainSync(new Runnable() {
             @Override
             public void run() {
-                mPresenter.resumePlayback();
+                mPresenter.archiveContent(mVoicemailUri, true);
             }
         });
         mFakeAsyncTaskExecutor.runTask(CHECK_FOR_CONTENT);
+        mFakeAsyncTaskExecutor.runTask(ARCHIVE_VOICEMAIL_CONTENT);
         getInstrumentation().waitForIdleSync();
-
-        // The media player will have thrown an IOException since the file doesn't exist.
-        // This should have put a failed to play message on screen, buffering is gone.
-        assertStateTextContains("Couldn't play voicemail");
-        assertStateTextNotContains("Buffering");
+        assertVoicemailArchived();
     }
 
-    public void testClickingSpeakerphoneButton() throws Throwable {
+    public void testShareContent() throws Throwable {
         setUriForRealFileVoicemailEntry();
         setPlaybackViewForPresenter();
+        mFakeAsyncTaskExecutor.runTask(CHECK_FOR_CONTENT);
 
-        // Check that the speakerphone is false to start.
-        assertFalse(mPresenter.isSpeakerphoneOn());
-
-        View speakerphoneButton = mLayout.findViewById(R.id.playback_speakerphone);
-        speakerphoneButton.performClick();
-        assertTrue(mPresenter.isSpeakerphoneOn());
-    }
-
-    private void cleanUpVoicemailUri() {
-        if (mVoicemailUri != null) {
-            getContentResolver().delete(VoicemailContract.Voicemails.CONTENT_URI,
-                    "_ID = ?", new String[] { String.valueOf(ContentUris.parseId(mVoicemailUri)) });
-            mVoicemailUri = null;
-        }
-    }
-
-    private void setUriForRealFileVoicemailEntry() throws IOException {
-        assertNull(mVoicemailUri);
-        ContentValues values = new ContentValues();
-        values.put(VoicemailContract.Voicemails.DATE, String.valueOf(System.currentTimeMillis()));
-        values.put(VoicemailContract.Voicemails.NUMBER, CONTACT_NUMBER);
-        values.put(VoicemailContract.Voicemails.MIME_TYPE, MIME_TYPE);
-        values.put(VoicemailContract.Voicemails.HAS_CONTENT, 1);
-        String packageName = getInstrumentation().getTargetContext().getPackageName();
-        mVoicemailUri = getContentResolver().insert(
-                VoicemailContract.Voicemails.buildSourceUri(packageName), values);
-        AssetManager assets = getAssets();
-        try (InputStream inputStream = assets.open(TEST_ASSET_NAME);
-             OutputStream outputStream = getContentResolver().openOutputStream(mVoicemailUri)) {
-            copyBetweenStreams(inputStream, outputStream);
-        }
-    }
-
-    private void setUriForUnfetchedVoicemailEntry() {
-        assertNull(mVoicemailUri);
-        ContentValues values = new ContentValues();
-        values.put(VoicemailContract.Voicemails.DATE, String.valueOf(System.currentTimeMillis()));
-        values.put(VoicemailContract.Voicemails.NUMBER, CONTACT_NUMBER);
-        values.put(VoicemailContract.Voicemails.MIME_TYPE, MIME_TYPE);
-        values.put(VoicemailContract.Voicemails.HAS_CONTENT, 0);
-        String packageName = getInstrumentation().getTargetContext().getPackageName();
-        mVoicemailUri = getContentResolver().insert(
-                VoicemailContract.Voicemails.buildSourceUri(packageName), values);
-    }
-
-    private void setUriForInvalidVoicemailEntry() {
-        assertNull(mVoicemailUri);
-        ContentResolver contentResolver = getContentResolver();
-        ContentValues values = new ContentValues();
-        values.put(VoicemailContract.Voicemails.NUMBER, CONTACT_NUMBER);
-        values.put(VoicemailContract.Voicemails.HAS_CONTENT, 1);
-        // VoicemailContract.Voicemails._DATA
-        values.put("_data", VOICEMAIL_FILE_LOCATION);
-        mVoicemailUri = contentResolver.insert(VoicemailContract.Voicemails.CONTENT_URI, values);
-    }
-
-    private void setPlaybackViewForPresenter() {
         getInstrumentation().runOnMainSync(new Runnable() {
             @Override
             public void run() {
-                mPresenter.setPlaybackView(mLayout, mVoicemailUri, false);
+                mPresenter.archiveContent(mVoicemailUri, false);
             }
         });
+        mFakeAsyncTaskExecutor.runTask(CHECK_FOR_CONTENT);
+        mFakeAsyncTaskExecutor.runTask(ARCHIVE_VOICEMAIL_CONTENT);
+        getInstrumentation().waitForIdleSync();
+        assertVoicemailArchived();
     }
 
-    public void copyBetweenStreams(InputStream in, OutputStream out) throws IOException {
-        byte[] buffer = new byte[1024];
-        int bytesRead;
-        while ((bytesRead = in.read(buffer)) > 0) {
-            out.write(buffer, 0, bytesRead);
+    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 assertStateTextContains(String text) {
-        assertNotNull(mLayout);
-        assertTrue(mLayout.getStateText().contains(text));
+    private void cleanUpArchivedVoicemailUri() {
+        try (Cursor cursor = getArchivedVoicemailCursor()) {
+            if (hasContent(cursor)) {
+                getContentResolver().delete(getRowUri(cursor), null, null);
+            }
+        }
     }
 
-    private void assertStateTextNotContains(String text) {
-        assertNotNull(mLayout);
-        assertFalse(mLayout.getStateText().contains(text));
+    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 ContentResolver getContentResolver() {
-        return getInstrumentation().getTargetContext().getContentResolver();
+    private int getRowServerId(Cursor cursor) {
+        return cursor
+                .getInt(cursor.getColumnIndex(VoicemailArchiveContract.VoicemailArchive.SERVER_ID));
     }
 
-    private AssetManager getAssets() {
-        return getInstrumentation().getContext().getAssets();
+    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