Update Dialer source to latest internal Google revision.

Previously, Android's Dialer app was developed in an internal Google
source control system and only exported to public during AOSP drops.

The Dialer team is now switching to a public development model similar
to the telephony team.

This CL represents all internal Google changes that were committed to
Dialer between the public O release and today's tip of tree on internal
master. This CL squashes those changes into a single commit.
In subsequent changes, changes will be exported on a per-commit basis.

(cherry picked from commit 2ca4318cc1ee57dda907ba2069bd61d162b1baef
and amended to match paths of dependencies under
prebuilts/maven_repo/bumptech/com/github/bumptech/glide/.)

This CL was generated using these commands from a repository at
stage-stage-master at revision ea7b4dc89590ffa3332766a531e0eab6ffb9aebd
("Merge "Update Dialer source to latest internal Google revision." am: c39ea3c55f -s ours"):

  git diff --binary 2ca4318cc1ee57dda907ba2069bd61d162b1baef | git apply -R --index
  git commit -c 2ca4318cc1ee57dda907ba2069bd61d162b1baef

Test: make, flash install, run
Change-Id: I529aaeb88535b9533c0ae4ef4e6c1222d4e0f1c8
PiperOrigin-RevId: 167068436
diff --git a/java/com/android/voicemail/VoicemailClient.java b/java/com/android/voicemail/VoicemailClient.java
index 28d2bf0..d52a67a 100644
--- a/java/com/android/voicemail/VoicemailClient.java
+++ b/java/com/android/voicemail/VoicemailClient.java
@@ -55,6 +55,12 @@
       "com.android.voicemail.VoicemailClient.ACTION_SHOW_LEGACY_VOICEMAIL";
 
   /**
+   * Boolean extra send with {@link #ACTION_SHOW_LEGACY_VOICEMAIL}, indicating that the notification
+   * is sent by legacy mode and should not be suppressed even when VVM is activated
+   */
+  String EXTRA_IS_LEGACY_MODE = "is_legacy_mode";
+
+  /**
    * Secret code to launch the voicemail config activity intended for OEMs and Carriers. {@code
    * *#*#VVMCONFIG#*#*}
    */
@@ -148,4 +154,6 @@
 
   @MainThread
   void onShutdown(@NonNull Context context);
+
+  void onTosAccepted(Context context);
 }
diff --git a/java/com/android/voicemail/impl/ActivationTask.java b/java/com/android/voicemail/impl/ActivationTask.java
index 6e27b50..320ea2a 100644
--- a/java/com/android/voicemail/impl/ActivationTask.java
+++ b/java/com/android/voicemail/impl/ActivationTask.java
@@ -36,7 +36,6 @@
 import com.android.voicemail.impl.settings.VisualVoicemailSettingsUtil;
 import com.android.voicemail.impl.sms.StatusMessage;
 import com.android.voicemail.impl.sms.StatusSmsFetcher;
-import com.android.voicemail.impl.sync.OmtpVvmSyncService;
 import com.android.voicemail.impl.sync.SyncTask;
 import com.android.voicemail.impl.sync.VvmAccountManager;
 import com.android.voicemail.impl.utils.LoggerUtils;
@@ -258,7 +257,7 @@
         VoicemailStatus.edit(context, phoneAccountHandle),
         OmtpEvents.CONFIG_REQUEST_STATUS_SUCCESS);
     clearLegacyVoicemailNotification(context, phoneAccountHandle);
-    SyncTask.start(context, phoneAccountHandle, OmtpVvmSyncService.SYNC_FULL_SYNC);
+    SyncTask.start(context, phoneAccountHandle);
   }
 
   /** Sends a broadcast to the dialer UI to clear legacy voicemail notifications if any. */
diff --git a/java/com/android/voicemail/impl/AndroidManifest.xml b/java/com/android/voicemail/impl/AndroidManifest.xml
index db5369e..4cad224 100644
--- a/java/com/android/voicemail/impl/AndroidManifest.xml
+++ b/java/com/android/voicemail/impl/AndroidManifest.xml
@@ -18,11 +18,7 @@
   package="com.android.voicemail.impl">
 
   <application
-    android:supportsRtl="true"
-    android:usesCleartextTraffic="true"
-    android:defaultToDeviceProtectedStorage="true"
-    android:directBootAware="true">
-
+    android:supportsRtl="true">
     <!-- Causes the "Voicemail" item under "Calls" setting to be hidden. The voicemail module will
       be handling the settings. Has no effect before OC where dialer cannot provide voicemail
       settings-->
@@ -101,6 +97,11 @@
         android:exported="false"/>
 
     <service
+        android:name="com.android.voicemail.impl.transcribe.TranscriptionBackfillService"
+        android:permission="android.permission.BIND_JOB_SERVICE"
+        android:exported="false"/>
+
+    <service
         android:name="com.android.voicemail.impl.OmtpService"
         android:permission="android.permission.BIND_VISUAL_VOICEMAIL_SERVICE"
         android:exported="true"
@@ -116,6 +117,13 @@
       android:windowSoftInputMode="stateVisible|adjustResize">
     </activity>
 
+    <receiver android:name="com.android.voicemail.impl.PackageReplacedReceiver"
+        android:exported="false">
+      <intent-filter>
+        <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
+      </intent-filter>
+    </receiver>
+
     <receiver android:name="com.android.voicemail.impl.CarrierVvmPackageInstalledReceiver"
         android:permission="android.permission.BIND_VISUAL_VOICEMAIL_SERVICE"
         android:exported="true">
diff --git a/java/com/android/voicemail/impl/DeviceProvisionedJobService.java b/java/com/android/voicemail/impl/DeviceProvisionedJobService.java
index a0b999d..20993d0 100644
--- a/java/com/android/voicemail/impl/DeviceProvisionedJobService.java
+++ b/java/com/android/voicemail/impl/DeviceProvisionedJobService.java
@@ -29,6 +29,7 @@
 import android.os.Build.VERSION_CODES;
 import android.provider.Settings;
 import android.provider.Settings.Global;
+import android.support.annotation.VisibleForTesting;
 import android.telecom.PhoneAccountHandle;
 import com.android.dialer.constants.ScheduledJobIds;
 
@@ -39,29 +40,25 @@
 @TargetApi(VERSION_CODES.O)
 public class DeviceProvisionedJobService extends JobService {
 
-  private static final String EXTRA_PHONE_ACCOUNT_HANDLE = "EXTRA_PHONE_ACCOUNT_HANDLE";
+  @VisibleForTesting static final String EXTRA_PHONE_ACCOUNT_HANDLE = "EXTRA_PHONE_ACCOUNT_HANDLE";
 
   /** Queue the phone account to be reactivated after the setup wizard has completed. */
   public static void activateAfterProvisioned(
       Context context, PhoneAccountHandle phoneAccountHandle) {
-    JobInfo jobInfo =
-        new JobInfo.Builder(
-                ScheduledJobIds.VVM_DEVICE_PROVISIONED_JOB,
-                new ComponentName(context, DeviceProvisionedJobService.class))
-            .addTriggerContentUri(
-                new TriggerContentUri(Global.getUriFor(Global.DEVICE_PROVISIONED), 0))
-            // VVM activation must be run as soon as possible to avoid voicemail loss
-            .setTriggerContentMaxDelay(0)
-            .build();
-
     Intent intent = new Intent();
     intent.putExtra(EXTRA_PHONE_ACCOUNT_HANDLE, phoneAccountHandle);
-    context.getSystemService(JobScheduler.class).enqueue(jobInfo, new JobWorkItem(intent));
+    context
+        .getSystemService(JobScheduler.class)
+        .enqueue(createJobInfo(context), new JobWorkItem(intent));
   }
 
   @Override
   public boolean onStartJob(JobParameters params) {
-    Assert.isTrue(isDeviceProvisioned());
+    if (!isDeviceProvisioned()) {
+      VvmLog.i("DeviceProvisionedJobService.onStartJob", "device not provisioned, rescheduling");
+      getSystemService(JobScheduler.class).schedule(createJobInfo(this));
+      return false; // job not running in background
+    }
     VvmLog.i("DeviceProvisionedJobService.onStartJob", "device provisioned");
     for (JobWorkItem item = params.dequeueWork(); item != null; item = params.dequeueWork()) {
       PhoneAccountHandle phoneAccountHandle =
@@ -82,4 +79,14 @@
   private boolean isDeviceProvisioned() {
     return Settings.Global.getInt(getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 0) == 1;
   }
+
+  private static JobInfo createJobInfo(Context context) {
+    return new JobInfo.Builder(
+            ScheduledJobIds.VVM_DEVICE_PROVISIONED_JOB,
+            new ComponentName(context, DeviceProvisionedJobService.class))
+        .addTriggerContentUri(new TriggerContentUri(Global.getUriFor(Global.DEVICE_PROVISIONED), 0))
+        // VVM activation must be run as soon as possible to avoid voicemail loss
+        .setTriggerContentMaxDelay(0)
+        .build();
+  }
 }
diff --git a/java/com/android/voicemail/impl/PackageReplacedReceiver.java b/java/com/android/voicemail/impl/PackageReplacedReceiver.java
new file mode 100644
index 0000000..6a7ca4a
--- /dev/null
+++ b/java/com/android/voicemail/impl/PackageReplacedReceiver.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2017 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.voicemail.impl;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
+import com.android.voicemail.VoicemailComponent;
+
+/** Receives MY_PACKAGE_REPLACED to trigger VVM activation. */
+public class PackageReplacedReceiver extends BroadcastReceiver {
+
+  @Override
+  public void onReceive(Context context, Intent intent) {
+    VvmLog.i("PackageReplacedReceiver.onReceive", "package replaced, starting activation");
+
+    if (!VoicemailComponent.get(context).getVoicemailClient().isVoicemailModuleEnabled()) {
+      VvmLog.e("PackageReplacedReceiver.onReceive", "module disabled");
+      return;
+    }
+
+    for (PhoneAccountHandle phoneAccountHandle :
+        context.getSystemService(TelecomManager.class).getCallCapablePhoneAccounts()) {
+      ActivationTask.start(context, phoneAccountHandle, null);
+    }
+  }
+}
diff --git a/java/com/android/voicemail/impl/SubscriptionInfoHelper.java b/java/com/android/voicemail/impl/SubscriptionInfoHelper.java
deleted file mode 100644
index d8a8423..0000000
--- a/java/com/android/voicemail/impl/SubscriptionInfoHelper.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * Copyright (C) 2014 The Android Open Source Project
- *
- * <p>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
- *
- * <p>http://www.apache.org/licenses/LICENSE-2.0
- *
- * <p>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.voicemail.impl;
-
-import android.app.ActionBar;
-import android.content.Context;
-import android.content.Intent;
-import android.content.res.Resources;
-import android.text.TextUtils;
-
-/**
- * Helper for manipulating intents or components with subscription-related information.
- *
- * <p>In settings, subscription ids and labels are passed along to indicate that settings are being
- * changed for particular subscriptions. This helper provides functions for helping extract this
- * info and perform common operations using this info.
- */
-public class SubscriptionInfoHelper {
-  public static final int NO_SUB_ID = -1;
-
-  // Extra on intent containing the id of a subscription.
-  public static final String SUB_ID_EXTRA =
-      "com.android.voicemailomtp.settings.SubscriptionInfoHelper.SubscriptionId";
-  // Extra on intent containing the label of a subscription.
-  private static final String SUB_LABEL_EXTRA =
-      "com.android.voicemailomtp.settings.SubscriptionInfoHelper.SubscriptionLabel";
-
-  private static Context mContext;
-
-  private static int mSubId = NO_SUB_ID;
-  private static String mSubLabel;
-
-  /** Instantiates the helper, by extracting the subscription id and label from the intent. */
-  public SubscriptionInfoHelper(Context context, Intent intent) {
-    mContext = context;
-    mSubId = intent.getIntExtra(SUB_ID_EXTRA, NO_SUB_ID);
-    mSubLabel = intent.getStringExtra(SUB_LABEL_EXTRA);
-  }
-
-  /**
-   * Sets the action bar title to the string specified by the given resource id, formatting it with
-   * the subscription label. This assumes the resource string is formattable with a string-type
-   * specifier.
-   *
-   * <p>If the subscription label does not exists, leave the existing title.
-   */
-  public void setActionBarTitle(ActionBar actionBar, Resources res, int resId) {
-    if (actionBar == null || TextUtils.isEmpty(mSubLabel)) {
-      return;
-    }
-
-    String title = String.format(res.getString(resId), mSubLabel);
-    actionBar.setTitle(title);
-  }
-
-  public int getSubId() {
-    return mSubId;
-  }
-}
diff --git a/java/com/android/voicemail/impl/VoicemailBootReceiver.java b/java/com/android/voicemail/impl/VoicemailBootReceiver.java
deleted file mode 100644
index 0a3e61a..0000000
--- a/java/com/android/voicemail/impl/VoicemailBootReceiver.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Copyright (C) 2017 The Android Open Source Project
- *
- * <p>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
- *
- * <p>http://www.apache.org/licenses/LICENSE-2.0
- *
- * <p>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.voicemail.impl;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import com.android.voicemail.VoicemailComponent;
-
-/** Receives {@link Intent#ACTION_BOOT_COMPLETED} for the voicemail module. */
-public class VoicemailBootReceiver extends BroadcastReceiver {
-
-  @Override
-  public void onReceive(Context context, Intent intent) {
-    if (!VoicemailComponent.get(context).getVoicemailClient().isVoicemailModuleEnabled()) {
-      return;
-    }
-    StatusCheckJobService.schedule(context);
-  }
-}
diff --git a/java/com/android/voicemail/impl/VoicemailClientImpl.java b/java/com/android/voicemail/impl/VoicemailClientImpl.java
index 1b98903..9bb14f2 100644
--- a/java/com/android/voicemail/impl/VoicemailClientImpl.java
+++ b/java/com/android/voicemail/impl/VoicemailClientImpl.java
@@ -36,6 +36,7 @@
 import com.android.voicemail.impl.settings.VoicemailChangePinActivity;
 import com.android.voicemail.impl.settings.VoicemailSettingsFragment;
 import com.android.voicemail.impl.sync.VvmAccountManager;
+import com.android.voicemail.impl.transcribe.TranscriptionBackfillService;
 import java.util.List;
 import javax.inject.Inject;
 
@@ -230,4 +231,10 @@
       where.append(")");
     }
   }
+
+  @Override
+  public void onTosAccepted(Context context) {
+    LogUtil.i("VoicemailClientImpl.onTosAccepted", "try backfilling voicemail transcriptions");
+    TranscriptionBackfillService.scheduleTask(context);
+  }
 }
diff --git a/java/com/android/voicemail/impl/VoicemailStatus.java b/java/com/android/voicemail/impl/VoicemailStatus.java
index ec1ab4e..5553cf5 100644
--- a/java/com/android/voicemail/impl/VoicemailStatus.java
+++ b/java/com/android/voicemail/impl/VoicemailStatus.java
@@ -24,6 +24,7 @@
 import android.provider.VoicemailContract.Status;
 import android.support.annotation.Nullable;
 import android.telecom.PhoneAccountHandle;
+import com.android.dialer.strictmode.DialerStrictMode;
 
 public class VoicemailStatus {
 
@@ -99,7 +100,7 @@
       ContentResolver contentResolver = mContext.getContentResolver();
       Uri statusUri = VoicemailContract.Status.buildSourceUri(mContext.getPackageName());
       try {
-        contentResolver.insert(statusUri, mValues);
+        DialerStrictMode.bypass(() -> contentResolver.insert(statusUri, mValues));
       } catch (IllegalArgumentException iae) {
         VvmLog.e(TAG, "apply :: failed to insert content resolver ", iae);
         mValues.clear();
diff --git a/java/com/android/voicemail/impl/VoicemailTranscriptionServiceGrpc.java b/java/com/android/voicemail/impl/VoicemailTranscriptionServiceGrpc.java
new file mode 100644
index 0000000..8fcbf3b
--- /dev/null
+++ b/java/com/android/voicemail/impl/VoicemailTranscriptionServiceGrpc.java
@@ -0,0 +1,390 @@
+/*
+ * Copyright (C) 2017 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.google.internal.communications.voicemailtranscription.v1;
+
+import static io.grpc.stub.ClientCalls.asyncUnaryCall;
+import static io.grpc.stub.ClientCalls.asyncServerStreamingCall;
+import static io.grpc.stub.ClientCalls.asyncClientStreamingCall;
+import static io.grpc.stub.ClientCalls.asyncBidiStreamingCall;
+import static io.grpc.stub.ClientCalls.blockingUnaryCall;
+import static io.grpc.stub.ClientCalls.blockingServerStreamingCall;
+import static io.grpc.stub.ClientCalls.futureUnaryCall;
+import static io.grpc.MethodDescriptor.generateFullMethodName;
+import static io.grpc.stub.ServerCalls.asyncUnaryCall;
+import static io.grpc.stub.ServerCalls.asyncServerStreamingCall;
+import static io.grpc.stub.ServerCalls.asyncClientStreamingCall;
+import static io.grpc.stub.ServerCalls.asyncBidiStreamingCall;
+import static io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall;
+import static io.grpc.stub.ServerCalls.asyncUnimplementedStreamingCall;
+
+/**
+ * <pre>
+ * RPC service for transcribing voicemails.
+ * </pre>
+ */
+@javax.annotation.Generated(
+    value = "by gRPC proto compiler (version 1.0.3)",
+    comments = "Source: voicemail_transcription.proto")
+public class VoicemailTranscriptionServiceGrpc {
+
+  private VoicemailTranscriptionServiceGrpc() {}
+
+  public static final String SERVICE_NAME = "google.internal.communications.voicemailtranscription.v1.VoicemailTranscriptionService";
+
+  // Static method descriptors that strictly reflect the proto.
+  @io.grpc.ExperimentalApi("https://github.com/grpc/grpc-java/issues/1901")
+  public static final io.grpc.MethodDescriptor<com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailRequest,
+      com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailResponse> METHOD_TRANSCRIBE_VOICEMAIL =
+      io.grpc.MethodDescriptor.create(
+          io.grpc.MethodDescriptor.MethodType.UNARY,
+          generateFullMethodName(
+              "google.internal.communications.voicemailtranscription.v1.VoicemailTranscriptionService", "TranscribeVoicemail"),
+          io.grpc.protobuf.lite.ProtoLiteUtils.marshaller(com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailRequest.getDefaultInstance()),
+          io.grpc.protobuf.lite.ProtoLiteUtils.marshaller(com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailResponse.getDefaultInstance()));
+  @io.grpc.ExperimentalApi("https://github.com/grpc/grpc-java/issues/1901")
+  public static final io.grpc.MethodDescriptor<com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailAsyncRequest,
+      com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailAsyncResponse> METHOD_TRANSCRIBE_VOICEMAIL_ASYNC =
+      io.grpc.MethodDescriptor.create(
+          io.grpc.MethodDescriptor.MethodType.UNARY,
+          generateFullMethodName(
+              "google.internal.communications.voicemailtranscription.v1.VoicemailTranscriptionService", "TranscribeVoicemailAsync"),
+          io.grpc.protobuf.lite.ProtoLiteUtils.marshaller(com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailAsyncRequest.getDefaultInstance()),
+          io.grpc.protobuf.lite.ProtoLiteUtils.marshaller(com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailAsyncResponse.getDefaultInstance()));
+  @io.grpc.ExperimentalApi("https://github.com/grpc/grpc-java/issues/1901")
+  public static final io.grpc.MethodDescriptor<com.google.internal.communications.voicemailtranscription.v1.GetTranscriptRequest,
+      com.google.internal.communications.voicemailtranscription.v1.GetTranscriptResponse> METHOD_GET_TRANSCRIPT =
+      io.grpc.MethodDescriptor.create(
+          io.grpc.MethodDescriptor.MethodType.UNARY,
+          generateFullMethodName(
+              "google.internal.communications.voicemailtranscription.v1.VoicemailTranscriptionService", "GetTranscript"),
+          io.grpc.protobuf.lite.ProtoLiteUtils.marshaller(com.google.internal.communications.voicemailtranscription.v1.GetTranscriptRequest.getDefaultInstance()),
+          io.grpc.protobuf.lite.ProtoLiteUtils.marshaller(com.google.internal.communications.voicemailtranscription.v1.GetTranscriptResponse.getDefaultInstance()));
+
+  /**
+   * Creates a new async stub that supports all call types for the service
+   */
+  public static VoicemailTranscriptionServiceStub newStub(io.grpc.Channel channel) {
+    return new VoicemailTranscriptionServiceStub(channel);
+  }
+
+  /**
+   * Creates a new blocking-style stub that supports unary and streaming output calls on the service
+   */
+  public static VoicemailTranscriptionServiceBlockingStub newBlockingStub(
+      io.grpc.Channel channel) {
+    return new VoicemailTranscriptionServiceBlockingStub(channel);
+  }
+
+  /**
+   * Creates a new ListenableFuture-style stub that supports unary and streaming output calls on the service
+   */
+  public static VoicemailTranscriptionServiceFutureStub newFutureStub(
+      io.grpc.Channel channel) {
+    return new VoicemailTranscriptionServiceFutureStub(channel);
+  }
+
+  /**
+   * <pre>
+   * RPC service for transcribing voicemails.
+   * </pre>
+   */
+  public static abstract class VoicemailTranscriptionServiceImplBase implements io.grpc.BindableService {
+
+    /**
+     * <pre>
+     * Returns a transcript of the given voicemail.
+     * </pre>
+     */
+    public void transcribeVoicemail(com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailRequest request,
+        io.grpc.stub.StreamObserver<com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailResponse> responseObserver) {
+      asyncUnimplementedUnaryCall(METHOD_TRANSCRIBE_VOICEMAIL, responseObserver);
+    }
+
+    /**
+     * <pre>
+     * Schedules a transcription of the given voicemail. The transcript can be
+     * retrieved using the returned ID.
+     * </pre>
+     */
+    public void transcribeVoicemailAsync(com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailAsyncRequest request,
+        io.grpc.stub.StreamObserver<com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailAsyncResponse> responseObserver) {
+      asyncUnimplementedUnaryCall(METHOD_TRANSCRIBE_VOICEMAIL_ASYNC, responseObserver);
+    }
+
+    /**
+     * <pre>
+     * Returns the transcript corresponding to the given ID, which was returned
+     * by TranscribeVoicemailAsync.
+     * </pre>
+     */
+    public void getTranscript(com.google.internal.communications.voicemailtranscription.v1.GetTranscriptRequest request,
+        io.grpc.stub.StreamObserver<com.google.internal.communications.voicemailtranscription.v1.GetTranscriptResponse> responseObserver) {
+      asyncUnimplementedUnaryCall(METHOD_GET_TRANSCRIPT, responseObserver);
+    }
+
+    @java.lang.Override public io.grpc.ServerServiceDefinition bindService() {
+      return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
+          .addMethod(
+            METHOD_TRANSCRIBE_VOICEMAIL,
+            asyncUnaryCall(
+              new MethodHandlers<
+                com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailRequest,
+                com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailResponse>(
+                  this, METHODID_TRANSCRIBE_VOICEMAIL)))
+          .addMethod(
+            METHOD_TRANSCRIBE_VOICEMAIL_ASYNC,
+            asyncUnaryCall(
+              new MethodHandlers<
+                com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailAsyncRequest,
+                com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailAsyncResponse>(
+                  this, METHODID_TRANSCRIBE_VOICEMAIL_ASYNC)))
+          .addMethod(
+            METHOD_GET_TRANSCRIPT,
+            asyncUnaryCall(
+              new MethodHandlers<
+                com.google.internal.communications.voicemailtranscription.v1.GetTranscriptRequest,
+                com.google.internal.communications.voicemailtranscription.v1.GetTranscriptResponse>(
+                  this, METHODID_GET_TRANSCRIPT)))
+          .build();
+    }
+  }
+
+  /**
+   * <pre>
+   * RPC service for transcribing voicemails.
+   * </pre>
+   */
+  public static final class VoicemailTranscriptionServiceStub extends io.grpc.stub.AbstractStub<VoicemailTranscriptionServiceStub> {
+    private VoicemailTranscriptionServiceStub(io.grpc.Channel channel) {
+      super(channel);
+    }
+
+    private VoicemailTranscriptionServiceStub(io.grpc.Channel channel,
+        io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected VoicemailTranscriptionServiceStub build(io.grpc.Channel channel,
+        io.grpc.CallOptions callOptions) {
+      return new VoicemailTranscriptionServiceStub(channel, callOptions);
+    }
+
+    /**
+     * <pre>
+     * Returns a transcript of the given voicemail.
+     * </pre>
+     */
+    public void transcribeVoicemail(com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailRequest request,
+        io.grpc.stub.StreamObserver<com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailResponse> responseObserver) {
+      asyncUnaryCall(
+          getChannel().newCall(METHOD_TRANSCRIBE_VOICEMAIL, getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     * <pre>
+     * Schedules a transcription of the given voicemail. The transcript can be
+     * retrieved using the returned ID.
+     * </pre>
+     */
+    public void transcribeVoicemailAsync(com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailAsyncRequest request,
+        io.grpc.stub.StreamObserver<com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailAsyncResponse> responseObserver) {
+      asyncUnaryCall(
+          getChannel().newCall(METHOD_TRANSCRIBE_VOICEMAIL_ASYNC, getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     * <pre>
+     * Returns the transcript corresponding to the given ID, which was returned
+     * by TranscribeVoicemailAsync.
+     * </pre>
+     */
+    public void getTranscript(com.google.internal.communications.voicemailtranscription.v1.GetTranscriptRequest request,
+        io.grpc.stub.StreamObserver<com.google.internal.communications.voicemailtranscription.v1.GetTranscriptResponse> responseObserver) {
+      asyncUnaryCall(
+          getChannel().newCall(METHOD_GET_TRANSCRIPT, getCallOptions()), request, responseObserver);
+    }
+  }
+
+  /**
+   * <pre>
+   * RPC service for transcribing voicemails.
+   * </pre>
+   */
+  public static final class VoicemailTranscriptionServiceBlockingStub extends io.grpc.stub.AbstractStub<VoicemailTranscriptionServiceBlockingStub> {
+    private VoicemailTranscriptionServiceBlockingStub(io.grpc.Channel channel) {
+      super(channel);
+    }
+
+    private VoicemailTranscriptionServiceBlockingStub(io.grpc.Channel channel,
+        io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected VoicemailTranscriptionServiceBlockingStub build(io.grpc.Channel channel,
+        io.grpc.CallOptions callOptions) {
+      return new VoicemailTranscriptionServiceBlockingStub(channel, callOptions);
+    }
+
+    /**
+     * <pre>
+     * Returns a transcript of the given voicemail.
+     * </pre>
+     */
+    public com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailResponse transcribeVoicemail(com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailRequest request) {
+      return blockingUnaryCall(
+          getChannel(), METHOD_TRANSCRIBE_VOICEMAIL, getCallOptions(), request);
+    }
+
+    /**
+     * <pre>
+     * Schedules a transcription of the given voicemail. The transcript can be
+     * retrieved using the returned ID.
+     * </pre>
+     */
+    public com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailAsyncResponse transcribeVoicemailAsync(com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailAsyncRequest request) {
+      return blockingUnaryCall(
+          getChannel(), METHOD_TRANSCRIBE_VOICEMAIL_ASYNC, getCallOptions(), request);
+    }
+
+    /**
+     * <pre>
+     * Returns the transcript corresponding to the given ID, which was returned
+     * by TranscribeVoicemailAsync.
+     * </pre>
+     */
+    public com.google.internal.communications.voicemailtranscription.v1.GetTranscriptResponse getTranscript(com.google.internal.communications.voicemailtranscription.v1.GetTranscriptRequest request) {
+      return blockingUnaryCall(
+          getChannel(), METHOD_GET_TRANSCRIPT, getCallOptions(), request);
+    }
+  }
+
+  /**
+   * <pre>
+   * RPC service for transcribing voicemails.
+   * </pre>
+   */
+  public static final class VoicemailTranscriptionServiceFutureStub extends io.grpc.stub.AbstractStub<VoicemailTranscriptionServiceFutureStub> {
+    private VoicemailTranscriptionServiceFutureStub(io.grpc.Channel channel) {
+      super(channel);
+    }
+
+    private VoicemailTranscriptionServiceFutureStub(io.grpc.Channel channel,
+        io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected VoicemailTranscriptionServiceFutureStub build(io.grpc.Channel channel,
+        io.grpc.CallOptions callOptions) {
+      return new VoicemailTranscriptionServiceFutureStub(channel, callOptions);
+    }
+
+    /**
+     * <pre>
+     * Returns a transcript of the given voicemail.
+     * </pre>
+     */
+    public com.google.common.util.concurrent.ListenableFuture<com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailResponse> transcribeVoicemail(
+        com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailRequest request) {
+      return futureUnaryCall(
+          getChannel().newCall(METHOD_TRANSCRIBE_VOICEMAIL, getCallOptions()), request);
+    }
+
+    /**
+     * <pre>
+     * Schedules a transcription of the given voicemail. The transcript can be
+     * retrieved using the returned ID.
+     * </pre>
+     */
+    public com.google.common.util.concurrent.ListenableFuture<com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailAsyncResponse> transcribeVoicemailAsync(
+        com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailAsyncRequest request) {
+      return futureUnaryCall(
+          getChannel().newCall(METHOD_TRANSCRIBE_VOICEMAIL_ASYNC, getCallOptions()), request);
+    }
+
+    /**
+     * <pre>
+     * Returns the transcript corresponding to the given ID, which was returned
+     * by TranscribeVoicemailAsync.
+     * </pre>
+     */
+    public com.google.common.util.concurrent.ListenableFuture<com.google.internal.communications.voicemailtranscription.v1.GetTranscriptResponse> getTranscript(
+        com.google.internal.communications.voicemailtranscription.v1.GetTranscriptRequest request) {
+      return futureUnaryCall(
+          getChannel().newCall(METHOD_GET_TRANSCRIPT, getCallOptions()), request);
+    }
+  }
+
+  private static final int METHODID_TRANSCRIBE_VOICEMAIL = 0;
+  private static final int METHODID_TRANSCRIBE_VOICEMAIL_ASYNC = 1;
+  private static final int METHODID_GET_TRANSCRIPT = 2;
+
+  private static class MethodHandlers<Req, Resp> implements
+      io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
+      io.grpc.stub.ServerCalls.ServerStreamingMethod<Req, Resp>,
+      io.grpc.stub.ServerCalls.ClientStreamingMethod<Req, Resp>,
+      io.grpc.stub.ServerCalls.BidiStreamingMethod<Req, Resp> {
+    private final VoicemailTranscriptionServiceImplBase serviceImpl;
+    private final int methodId;
+
+    public MethodHandlers(VoicemailTranscriptionServiceImplBase serviceImpl, int methodId) {
+      this.serviceImpl = serviceImpl;
+      this.methodId = methodId;
+    }
+
+    @java.lang.Override
+    @java.lang.SuppressWarnings("unchecked")
+    public void invoke(Req request, io.grpc.stub.StreamObserver<Resp> responseObserver) {
+      switch (methodId) {
+        case METHODID_TRANSCRIBE_VOICEMAIL:
+          serviceImpl.transcribeVoicemail((com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailRequest) request,
+              (io.grpc.stub.StreamObserver<com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailResponse>) responseObserver);
+          break;
+        case METHODID_TRANSCRIBE_VOICEMAIL_ASYNC:
+          serviceImpl.transcribeVoicemailAsync((com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailAsyncRequest) request,
+              (io.grpc.stub.StreamObserver<com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailAsyncResponse>) responseObserver);
+          break;
+        case METHODID_GET_TRANSCRIPT:
+          serviceImpl.getTranscript((com.google.internal.communications.voicemailtranscription.v1.GetTranscriptRequest) request,
+              (io.grpc.stub.StreamObserver<com.google.internal.communications.voicemailtranscription.v1.GetTranscriptResponse>) responseObserver);
+          break;
+        default:
+          throw new AssertionError();
+      }
+    }
+
+    @java.lang.Override
+    @java.lang.SuppressWarnings("unchecked")
+    public io.grpc.stub.StreamObserver<Req> invoke(
+        io.grpc.stub.StreamObserver<Resp> responseObserver) {
+      switch (methodId) {
+        default:
+          throw new AssertionError();
+      }
+    }
+  }
+
+  public static io.grpc.ServiceDescriptor getServiceDescriptor() {
+    return new io.grpc.ServiceDescriptor(SERVICE_NAME,
+        METHOD_TRANSCRIBE_VOICEMAIL,
+        METHOD_TRANSCRIBE_VOICEMAIL_ASYNC,
+        METHOD_GET_TRANSCRIPT);
+  }
+
+}
diff --git a/java/com/android/voicemail/impl/VvmPhoneStateListener.java b/java/com/android/voicemail/impl/VvmPhoneStateListener.java
index 48b7204..00c1358 100644
--- a/java/com/android/voicemail/impl/VvmPhoneStateListener.java
+++ b/java/com/android/voicemail/impl/VvmPhoneStateListener.java
@@ -19,7 +19,6 @@
 import android.telecom.PhoneAccountHandle;
 import android.telephony.PhoneStateListener;
 import android.telephony.ServiceState;
-import com.android.voicemail.impl.sync.OmtpVvmSyncService;
 import com.android.voicemail.impl.sync.SyncTask;
 import com.android.voicemail.impl.sync.VoicemailStatusQueryHelper;
 import com.android.voicemail.impl.sync.VvmAccountManager;
@@ -37,7 +36,7 @@
   private int mPreviousState = -1;
 
   public VvmPhoneStateListener(Context context, PhoneAccountHandle accountHandle) {
-    // TODO: b/32637799 too much trouble to call super constructor through reflection,
+    // TODO(twyen): b/32637799 too much trouble to call super constructor through reflection,
     // just use non-phoneAccountHandle version for now.
     super();
     mContext = context;
@@ -82,7 +81,7 @@
         VvmLog.v(TAG, "Signal returned: requesting resync for " + mPhoneAccount);
         // If the source is already registered, run a full sync in case something was missed
         // while signal was down.
-        SyncTask.start(mContext, mPhoneAccount, OmtpVvmSyncService.SYNC_FULL_SYNC);
+        SyncTask.start(mContext, mPhoneAccount);
       } else {
         VvmLog.v(TAG, "Signal returned: reattempting activation for " + mPhoneAccount);
         // Otherwise initiate an activation because this means that an OMTP source was
diff --git a/java/com/android/voicemail/impl/com/google/internal/communications/voicemailtranscription/v1/VoicemailTranscriptionServiceGrpc.java b/java/com/android/voicemail/impl/com/google/internal/communications/voicemailtranscription/v1/VoicemailTranscriptionServiceGrpc.java
deleted file mode 100644
index 448c693..0000000
--- a/java/com/android/voicemail/impl/com/google/internal/communications/voicemailtranscription/v1/VoicemailTranscriptionServiceGrpc.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * Copyright (C) 2017 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.google.internal.communications.voicemailtranscription.v1;
-
-import static io.grpc.stub.ClientCalls.asyncUnaryCall;
-import static io.grpc.stub.ClientCalls.asyncServerStreamingCall;
-import static io.grpc.stub.ClientCalls.asyncClientStreamingCall;
-import static io.grpc.stub.ClientCalls.asyncBidiStreamingCall;
-import static io.grpc.stub.ClientCalls.blockingUnaryCall;
-import static io.grpc.stub.ClientCalls.blockingServerStreamingCall;
-import static io.grpc.stub.ClientCalls.futureUnaryCall;
-import static io.grpc.MethodDescriptor.generateFullMethodName;
-import static io.grpc.stub.ServerCalls.asyncUnaryCall;
-import static io.grpc.stub.ServerCalls.asyncServerStreamingCall;
-import static io.grpc.stub.ServerCalls.asyncClientStreamingCall;
-import static io.grpc.stub.ServerCalls.asyncBidiStreamingCall;
-import static io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall;
-import static io.grpc.stub.ServerCalls.asyncUnimplementedStreamingCall;
-
-/**
- * <pre>
- * RPC service for transcribing voicemails.
- * </pre>
- */
-@javax.annotation.Generated(
-    value = "by gRPC proto compiler (version 1.0.3)",
-    comments = "Source: voicemail_transcription.proto")
-public class VoicemailTranscriptionServiceGrpc {
-
-  private VoicemailTranscriptionServiceGrpc() {}
-
-  public static final String SERVICE_NAME = "google.internal.communications.voicemailtranscription.v1.VoicemailTranscriptionService";
-
-  // Static method descriptors that strictly reflect the proto.
-  @io.grpc.ExperimentalApi("https://github.com/grpc/grpc-java/issues/1901")
-  public static final io.grpc.MethodDescriptor<com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailRequest,
-      com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailResponse> METHOD_TRANSCRIBE_VOICEMAIL =
-      io.grpc.MethodDescriptor.create(
-          io.grpc.MethodDescriptor.MethodType.UNARY,
-          generateFullMethodName(
-              "google.internal.communications.voicemailtranscription.v1.VoicemailTranscriptionService", "TranscribeVoicemail"),
-          io.grpc.protobuf.lite.ProtoLiteUtils.marshaller(com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailRequest.getDefaultInstance()),
-          io.grpc.protobuf.lite.ProtoLiteUtils.marshaller(com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailResponse.getDefaultInstance()));
-
-  /**
-   * Creates a new async stub that supports all call types for the service
-   */
-  public static VoicemailTranscriptionServiceStub newStub(io.grpc.Channel channel) {
-    return new VoicemailTranscriptionServiceStub(channel);
-  }
-
-  /**
-   * Creates a new blocking-style stub that supports unary and streaming output calls on the service
-   */
-  public static VoicemailTranscriptionServiceBlockingStub newBlockingStub(
-      io.grpc.Channel channel) {
-    return new VoicemailTranscriptionServiceBlockingStub(channel);
-  }
-
-  /**
-   * Creates a new ListenableFuture-style stub that supports unary and streaming output calls on the service
-   */
-  public static VoicemailTranscriptionServiceFutureStub newFutureStub(
-      io.grpc.Channel channel) {
-    return new VoicemailTranscriptionServiceFutureStub(channel);
-  }
-
-  /**
-   * <pre>
-   * RPC service for transcribing voicemails.
-   * </pre>
-   */
-  public static abstract class VoicemailTranscriptionServiceImplBase implements io.grpc.BindableService {
-
-    /**
-     * <pre>
-     * Returns a transcript of the given voicemail.
-     * </pre>
-     */
-    public void transcribeVoicemail(com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailRequest request,
-        io.grpc.stub.StreamObserver<com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailResponse> responseObserver) {
-      asyncUnimplementedUnaryCall(METHOD_TRANSCRIBE_VOICEMAIL, responseObserver);
-    }
-
-    @java.lang.Override public io.grpc.ServerServiceDefinition bindService() {
-      return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
-          .addMethod(
-            METHOD_TRANSCRIBE_VOICEMAIL,
-            asyncUnaryCall(
-              new MethodHandlers<
-                com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailRequest,
-                com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailResponse>(
-                  this, METHODID_TRANSCRIBE_VOICEMAIL)))
-          .build();
-    }
-  }
-
-  /**
-   * <pre>
-   * RPC service for transcribing voicemails.
-   * </pre>
-   */
-  public static final class VoicemailTranscriptionServiceStub extends io.grpc.stub.AbstractStub<VoicemailTranscriptionServiceStub> {
-    private VoicemailTranscriptionServiceStub(io.grpc.Channel channel) {
-      super(channel);
-    }
-
-    private VoicemailTranscriptionServiceStub(io.grpc.Channel channel,
-        io.grpc.CallOptions callOptions) {
-      super(channel, callOptions);
-    }
-
-    @java.lang.Override
-    protected VoicemailTranscriptionServiceStub build(io.grpc.Channel channel,
-        io.grpc.CallOptions callOptions) {
-      return new VoicemailTranscriptionServiceStub(channel, callOptions);
-    }
-
-    /**
-     * <pre>
-     * Returns a transcript of the given voicemail.
-     * </pre>
-     */
-    public void transcribeVoicemail(com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailRequest request,
-        io.grpc.stub.StreamObserver<com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailResponse> responseObserver) {
-      asyncUnaryCall(
-          getChannel().newCall(METHOD_TRANSCRIBE_VOICEMAIL, getCallOptions()), request, responseObserver);
-    }
-  }
-
-  /**
-   * <pre>
-   * RPC service for transcribing voicemails.
-   * </pre>
-   */
-  public static final class VoicemailTranscriptionServiceBlockingStub extends io.grpc.stub.AbstractStub<VoicemailTranscriptionServiceBlockingStub> {
-    private VoicemailTranscriptionServiceBlockingStub(io.grpc.Channel channel) {
-      super(channel);
-    }
-
-    private VoicemailTranscriptionServiceBlockingStub(io.grpc.Channel channel,
-        io.grpc.CallOptions callOptions) {
-      super(channel, callOptions);
-    }
-
-    @java.lang.Override
-    protected VoicemailTranscriptionServiceBlockingStub build(io.grpc.Channel channel,
-        io.grpc.CallOptions callOptions) {
-      return new VoicemailTranscriptionServiceBlockingStub(channel, callOptions);
-    }
-
-    /**
-     * <pre>
-     * Returns a transcript of the given voicemail.
-     * </pre>
-     */
-    public com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailResponse transcribeVoicemail(com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailRequest request) {
-      return blockingUnaryCall(
-          getChannel(), METHOD_TRANSCRIBE_VOICEMAIL, getCallOptions(), request);
-    }
-  }
-
-  /**
-   * <pre>
-   * RPC service for transcribing voicemails.
-   * </pre>
-   */
-  public static final class VoicemailTranscriptionServiceFutureStub extends io.grpc.stub.AbstractStub<VoicemailTranscriptionServiceFutureStub> {
-    private VoicemailTranscriptionServiceFutureStub(io.grpc.Channel channel) {
-      super(channel);
-    }
-
-    private VoicemailTranscriptionServiceFutureStub(io.grpc.Channel channel,
-        io.grpc.CallOptions callOptions) {
-      super(channel, callOptions);
-    }
-
-    @java.lang.Override
-    protected VoicemailTranscriptionServiceFutureStub build(io.grpc.Channel channel,
-        io.grpc.CallOptions callOptions) {
-      return new VoicemailTranscriptionServiceFutureStub(channel, callOptions);
-    }
-
-    /**
-     * <pre>
-     * Returns a transcript of the given voicemail.
-     * </pre>
-     */
-    public com.google.common.util.concurrent.ListenableFuture<com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailResponse> transcribeVoicemail(
-        com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailRequest request) {
-      return futureUnaryCall(
-          getChannel().newCall(METHOD_TRANSCRIBE_VOICEMAIL, getCallOptions()), request);
-    }
-  }
-
-  private static final int METHODID_TRANSCRIBE_VOICEMAIL = 0;
-
-  private static class MethodHandlers<Req, Resp> implements
-      io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
-      io.grpc.stub.ServerCalls.ServerStreamingMethod<Req, Resp>,
-      io.grpc.stub.ServerCalls.ClientStreamingMethod<Req, Resp>,
-      io.grpc.stub.ServerCalls.BidiStreamingMethod<Req, Resp> {
-    private final VoicemailTranscriptionServiceImplBase serviceImpl;
-    private final int methodId;
-
-    public MethodHandlers(VoicemailTranscriptionServiceImplBase serviceImpl, int methodId) {
-      this.serviceImpl = serviceImpl;
-      this.methodId = methodId;
-    }
-
-    @java.lang.Override
-    @java.lang.SuppressWarnings("unchecked")
-    public void invoke(Req request, io.grpc.stub.StreamObserver<Resp> responseObserver) {
-      switch (methodId) {
-        case METHODID_TRANSCRIBE_VOICEMAIL:
-          serviceImpl.transcribeVoicemail((com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailRequest) request,
-              (io.grpc.stub.StreamObserver<com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailResponse>) responseObserver);
-          break;
-        default:
-          throw new AssertionError();
-      }
-    }
-
-    @java.lang.Override
-    @java.lang.SuppressWarnings("unchecked")
-    public io.grpc.stub.StreamObserver<Req> invoke(
-        io.grpc.stub.StreamObserver<Resp> responseObserver) {
-      switch (methodId) {
-        default:
-          throw new AssertionError();
-      }
-    }
-  }
-
-  public static io.grpc.ServiceDescriptor getServiceDescriptor() {
-    return new io.grpc.ServiceDescriptor(SERVICE_NAME,
-        METHOD_TRANSCRIBE_VOICEMAIL);
-  }
-
-}
diff --git a/java/com/android/voicemail/impl/configui/ConfigOverrideFragment.java b/java/com/android/voicemail/impl/configui/ConfigOverrideFragment.java
index 18b2b92..1624ce5 100644
--- a/java/com/android/voicemail/impl/configui/ConfigOverrideFragment.java
+++ b/java/com/android/voicemail/impl/configui/ConfigOverrideFragment.java
@@ -35,6 +35,7 @@
 import android.text.TextUtils;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.concurrent.ThreadUtil;
+import com.android.dialer.strictmode.DialerStrictMode;
 import com.android.voicemail.VoicemailComponent;
 
 /**
@@ -126,8 +127,10 @@
   }
 
   public static boolean isOverridden(Context context) {
-    return PreferenceManager.getDefaultSharedPreferences(context)
-        .getBoolean(context.getString(R.string.vvm_config_override_enabled_key), false);
+    return DialerStrictMode.bypass(
+        () ->
+            PreferenceManager.getDefaultSharedPreferences(context)
+                .getBoolean(context.getString(R.string.vvm_config_override_enabled_key), false));
   }
 
   public static PersistableBundle getConfig(Context context) {
diff --git a/java/com/android/voicemail/impl/fetch/VoicemailFetchedCallback.java b/java/com/android/voicemail/impl/fetch/VoicemailFetchedCallback.java
index d15ce12..3e82540 100644
--- a/java/com/android/voicemail/impl/fetch/VoicemailFetchedCallback.java
+++ b/java/com/android/voicemail/impl/fetch/VoicemailFetchedCallback.java
@@ -97,7 +97,7 @@
     if (updateVoicemail(values)) {
       ThreadUtil.postOnUiThread(
           () -> {
-            if (!TranscriptionService.transcribeVoicemail(mContext, mUri)) {
+            if (!TranscriptionService.scheduleNewVoicemailTranscriptionJob(mContext, mUri, true)) {
               VvmLog.w(TAG, String.format("Failed to schedule transcription for %s", mUri));
             }
           });
diff --git a/java/com/android/voicemail/impl/mail/MailTransport.java b/java/com/android/voicemail/impl/mail/MailTransport.java
index 00339f0..c35e414 100644
--- a/java/com/android/voicemail/impl/mail/MailTransport.java
+++ b/java/com/android/voicemail/impl/mail/MailTransport.java
@@ -195,6 +195,8 @@
     } catch (IOException ioe) {
       LogUtils.d(TAG, ioe.toString());
       throw new MessagingException(MessagingException.IOERROR, ioe.toString());
+    } finally {
+      TrafficStats.clearThreadStatsTag();
     }
   }
 
diff --git a/java/com/android/voicemail/impl/proguard.flags b/java/com/android/voicemail/impl/proguard.flags
new file mode 100644
index 0000000..9379df3
--- /dev/null
+++ b/java/com/android/voicemail/impl/proguard.flags
@@ -0,0 +1,4 @@
+-assumenosideeffects class com.android.voicemail.impl.VvmLog {
+    public static void v(...);
+    public static void d(...);
+}
diff --git a/java/com/android/voicemail/impl/res/values-af/strings.xml b/java/com/android/voicemail/impl/res/values-af/strings.xml
index 2e829c9..0ed54fa 100644
--- a/java/com/android/voicemail/impl/res/values-af/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-af/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Verander PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Visuele stemboodskap moet geaktiveer wees om PIN te verander"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Visuele stemboodskap is nog nie geaktiveer nie, probeer asseblief later weer"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Ou PIN"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Nuwe PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Wag asseblief."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Die nuwe PIN is te kort."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Die nuwe PIN is te lank."</string>
diff --git a/java/com/android/voicemail/impl/res/values-am/strings.xml b/java/com/android/voicemail/impl/res/values-am/strings.xml
index 183f7b7..39b21b4 100644
--- a/java/com/android/voicemail/impl/res/values-am/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-am/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"ፒን ይቀይሩ"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"ፒን ለመቀየር የእይታ የድምጽ መልዕክት መንቃት አለበት"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"የእይታ የድምጽ መልዕክት ገና ገቢር አልሆነም፣ እባክዎ ቆይተው እንደገና ይሞክሩ"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"የቀድሞ ፒን"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"አዲስ ፒን"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"እባክዎ ይጠብቁ።"</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"አዲሱ ፒን በጣም አጭር ነው።"</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"አዲሱ ፒን በጣም ረጅም ነው።"</string>
diff --git a/java/com/android/voicemail/impl/res/values-ar/strings.xml b/java/com/android/voicemail/impl/res/values-ar/strings.xml
index 8b75b6e..4cdba4d 100644
--- a/java/com/android/voicemail/impl/res/values-ar/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ar/strings.xml
@@ -25,9 +25,7 @@
     <string name="voicemail_set_pin_preference_title" msgid="1034691230818233684">"تعيين رقم التعريف الشخصي"</string>
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"تغيير رقم التعريف الشخصي"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"ينبغي تشغيل البريد الصوتي المرئي لتغيير رقم التعريف الشخصي"</string>
-    <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"لم يتم تنشيط البريد الصوتي المرئي بعد، الرجاء المحاولة مرة أخرى لاحقًا"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"رقم التعريف الشخصي القديم"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"رقم التعريف الشخصي الجديد"</string>
+    <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"لم يتم تنشيط البريد الصوتي المرئي بعد، يُرجى المحاولة مرة أخرى لاحقًا"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"يُرجى الانتظار."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"رقم التعريف الشخصي الجديد قصير جدًا."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"رقم التعريف الشخصي الجديد طويل جدًا."</string>
diff --git a/java/com/android/voicemail/impl/res/values-az/strings.xml b/java/com/android/voicemail/impl/res/values-az/strings.xml
index 9783650..f245730 100644
--- a/java/com/android/voicemail/impl/res/values-az/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-az/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN-i dəyişin"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PIN-i dəyişmək üçün görünən səsli e-poçt aktiv olmalıdır"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Görünən səsli e-poçt hələ aktiv edilməyib, daha sonra yenidən cəhd edin"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Köhnə PIN"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Yeni PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Gözləyin."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Yeni PIN çox qısadır."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Yeni PIN çox uzundur."</string>
diff --git a/java/com/android/voicemail/impl/res/values-b+sr+Latn/strings.xml b/java/com/android/voicemail/impl/res/values-b+sr+Latn/strings.xml
index f7c7a62..7c12c9e 100644
--- a/java/com/android/voicemail/impl/res/values-b+sr+Latn/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-b+sr+Latn/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Promenite PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Morate da omogućite vizuelnu govornu poštu da biste promenili PIN"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Vizuelna govorna pošta još uvek nije aktivirana, probajte ponovo kasnije"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Stari PIN"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Novi PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Sačekajte."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Novi PIN je prekratak."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Novi PIN je predugačak."</string>
diff --git a/java/com/android/voicemail/impl/res/values-be/strings.xml b/java/com/android/voicemail/impl/res/values-be/strings.xml
index 6f4d125..c88f8ab 100644
--- a/java/com/android/voicemail/impl/res/values-be/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-be/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Змяніць PIN-код"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Трэба ўключыць візуальную галасавую пошту, каб змяніць PIN-код"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Візуальная галасавая пошта пакуль не актываваная. Паўтарыце спробу пазней"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Стары PIN-код"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Новы PIN-код"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Пачакайце."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Новы PIN-код занадта кароткі."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Новы PIN-код занадта доўгі."</string>
diff --git a/java/com/android/voicemail/impl/res/values-bg/strings.xml b/java/com/android/voicemail/impl/res/values-bg/strings.xml
index 553c8f3..380efe2 100644
--- a/java/com/android/voicemail/impl/res/values-bg/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-bg/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Промяна на ПИН кода"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"За промяна на ПИН кода трябва да бъде активирана визуалната гласова поща"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Визуалната гласова поща още не е активирана. Моля, опитайте отново по-късно"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Стар ПИН"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Нов ПИН"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Моля, изчакайте."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Новият ПИН е твърде къс."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Новият ПИН е твърде дълъг."</string>
diff --git a/java/com/android/voicemail/impl/res/values-bn/strings.xml b/java/com/android/voicemail/impl/res/values-bn/strings.xml
index 362240a..011a74e 100644
--- a/java/com/android/voicemail/impl/res/values-bn/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-bn/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"পিন পরিবর্তন করুন"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"পিন পরিবর্তন করতে ভিজ্যুয়াল ভয়েসমেল অবশ্যই সক্ষম করতে হবে"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"ভিজ্যুয়াল ভয়েসমেল এখনও সক্রিয় করা হয়নি, অনুগ্রহ করে পরে আবার চেষ্টা করুন"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"পুরোনো PIN"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"নতুন PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"অনুগ্রহ করে অপেক্ষা করুন৷"</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"নতুন PIN খুবই ছোট৷"</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"নতুন PIN খুবই বড়৷"</string>
diff --git a/java/com/android/voicemail/impl/res/values-bs/strings.xml b/java/com/android/voicemail/impl/res/values-bs/strings.xml
index f897a61..0a26706 100644
--- a/java/com/android/voicemail/impl/res/values-bs/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-bs/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Promijenite PIN kôd"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Vizuelna govorna pošta mora biti omogućena za promjenu PIN kôda"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Vizuelna govorna pošta još uvijek nije aktivirana, pokušajte ponovo kasnije"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Stari PIN kod"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Novi PIN kod"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Pričekajte."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Novi PIN kod je prekratak."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Novi PIN kod je predug."</string>
diff --git a/java/com/android/voicemail/impl/res/values-ca/strings.xml b/java/com/android/voicemail/impl/res/values-ca/strings.xml
index 51e19fb..5c36ea7 100644
--- a/java/com/android/voicemail/impl/res/values-ca/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ca/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Canvia el PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"La bústia de veu visual ha d\'estar activada per poder canviar el PIN"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"La bústia de veu visual encara no està activada. Torna-ho a provar més tard."</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"PIN antic"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"PIN nou"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Espera."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"El PIN nou és massa curt."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"El PIN nou és massa llarg."</string>
diff --git a/java/com/android/voicemail/impl/res/values-cs/strings.xml b/java/com/android/voicemail/impl/res/values-cs/strings.xml
index 38ef3fe..ddef491 100644
--- a/java/com/android/voicemail/impl/res/values-cs/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-cs/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Změnit kód PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Pokud chcete kód PIN změnit, musíte mít zapnutou vizuální hlasovou schránku"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Vizuální hlasová schránka zatím není aktivovaná, zkuste to prosím znovu později"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Starý kód PIN"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Nový kód PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Čekejte prosím."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Nový kód PIN je příliš krátký."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Nový kód PIN je příliš dlouhý."</string>
diff --git a/java/com/android/voicemail/impl/res/values-da/strings.xml b/java/com/android/voicemail/impl/res/values-da/strings.xml
index 7e47117..64e6588 100644
--- a/java/com/android/voicemail/impl/res/values-da/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-da/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Skift pinkode"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Visuel telefonsvarer skal være aktiveret, for at du kan skifte pinkode"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Visuel telefonsvarer er ikke aktiveret endnu. Prøv igen senere"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Nuværende pinkode"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Ny pinkode"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Vent et øjeblik."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Den nye pinkode er for kort."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Den nye pinkode er for lang."</string>
diff --git a/java/com/android/voicemail/impl/res/values-de/strings.xml b/java/com/android/voicemail/impl/res/values-de/strings.xml
index 35b86f2..9b16275 100644
--- a/java/com/android/voicemail/impl/res/values-de/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-de/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN ändern"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Die visuelle Mailbox muss aktiviert sein, um die PIN zu ändern"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Die visuelle Mailbox wurde noch nicht aktiviert, bitte versuche es später noch einmal"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Alte PIN"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Neue PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Bitte warten."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Die neue PIN ist zu kurz."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Die neue PIN ist zu lang."</string>
diff --git a/java/com/android/voicemail/impl/res/values-el/strings.xml b/java/com/android/voicemail/impl/res/values-el/strings.xml
index 11711bb..b197b1c 100644
--- a/java/com/android/voicemail/impl/res/values-el/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-el/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Αλλαγή κωδικού PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Για αλλαγή του PIN, ενεργοποιήστε τον οπτικό αυτόματο τηλεφωνητή"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Ο οπτικός αυτόματος τηλεφωνητής δεν έχει ενεργοποιηθεί ακόμα. Δοκιμάστε ξανά αργότερα."</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Παλιός αριθμός PIN"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Νέος αριθμός PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Περιμένετε."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Το νέο PIN είναι πολύ μικρό."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Το νέο PIN είναι πολύ μεγάλo."</string>
diff --git a/java/com/android/voicemail/impl/res/values-en-rAU/strings.xml b/java/com/android/voicemail/impl/res/values-en-rAU/strings.xml
index be29e47..f49f9ff 100644
--- a/java/com/android/voicemail/impl/res/values-en-rAU/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-en-rAU/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Change PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Visual voicemail must be enabled to change PIN"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Visual voicemail is not activated yet. Please try again later"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Old PIN"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"New PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Please wait."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"The new PIN is too short."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"The new PIN is too long."</string>
diff --git a/java/com/android/voicemail/impl/res/values-en-rGB/strings.xml b/java/com/android/voicemail/impl/res/values-en-rGB/strings.xml
index be29e47..f49f9ff 100644
--- a/java/com/android/voicemail/impl/res/values-en-rGB/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-en-rGB/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Change PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Visual voicemail must be enabled to change PIN"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Visual voicemail is not activated yet. Please try again later"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Old PIN"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"New PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Please wait."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"The new PIN is too short."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"The new PIN is too long."</string>
diff --git a/java/com/android/voicemail/impl/res/values-en-rIN/strings.xml b/java/com/android/voicemail/impl/res/values-en-rIN/strings.xml
index be29e47..f49f9ff 100644
--- a/java/com/android/voicemail/impl/res/values-en-rIN/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-en-rIN/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Change PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Visual voicemail must be enabled to change PIN"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Visual voicemail is not activated yet. Please try again later"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Old PIN"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"New PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Please wait."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"The new PIN is too short."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"The new PIN is too long."</string>
diff --git a/java/com/android/voicemail/impl/res/values-es-rUS/strings.xml b/java/com/android/voicemail/impl/res/values-es-rUS/strings.xml
index e958ecf..f5aeeb9 100644
--- a/java/com/android/voicemail/impl/res/values-es-rUS/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-es-rUS/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Cambiar PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"El buzón de voz visual se debe activar para cambiar el PIN"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"El buzón de voz visual aún no está activado. Vuelve a intentarlo más tarde."</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"PIN anterior"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"PIN nuevo"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Espera."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"El PIN nuevo es demasiado corto."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"El PIN nuevo es demasiado largo."</string>
diff --git a/java/com/android/voicemail/impl/res/values-es/strings.xml b/java/com/android/voicemail/impl/res/values-es/strings.xml
index b965ca0..3dc1713 100644
--- a/java/com/android/voicemail/impl/res/values-es/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-es/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Cambiar PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Para poder cambiar el PIN, el buzón de voz visual debe estar habilitado"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"El buzón de voz visual aún no está activado; inténtalo de nuevo más tarde"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"PIN antiguo"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"PIN nuevo"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Espera..."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"El PIN nuevo es muy corto."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"El PIN nuevo es muy largo."</string>
diff --git a/java/com/android/voicemail/impl/res/values-et/strings.xml b/java/com/android/voicemail/impl/res/values-et/strings.xml
index 28042ec..e964dcd 100644
--- a/java/com/android/voicemail/impl/res/values-et/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-et/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN-koodi muutmine"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PIN-koodi muutmiseks peab olema lubatud visuaalne kõnepost"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Visuaalne kõnepost pole veel aktiveeritud, proovige hiljem uuesti"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Vana PIN-kood"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Uus PIN-kood"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Oodake."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Uus PIN-kood on liiga lühike."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Uus PIN-kood on liiga pikk."</string>
diff --git a/java/com/android/voicemail/impl/res/values-eu/strings.xml b/java/com/android/voicemail/impl/res/values-eu/strings.xml
index ff2f34c..398ff23 100644
--- a/java/com/android/voicemail/impl/res/values-eu/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-eu/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Aldatu PIN kodea"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Ikusizko erantzungailuak gaituta egon behar du PIN kodea aldatu ahal izateko"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Oraindik ez dago aktibatuta ikusizko erantzungailua. Saiatu berriro geroago."</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"PIN zaharra"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"PIN berria"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Itxaron, mesedez."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Laburregia da PIN kode berria."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Luzeegia da PIN kode berria."</string>
diff --git a/java/com/android/voicemail/impl/res/values-fa/strings.xml b/java/com/android/voicemail/impl/res/values-fa/strings.xml
index bba6541..c57da26 100644
--- a/java/com/android/voicemail/impl/res/values-fa/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-fa/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"تغییر پین"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"برای تغییر پین، پست صوتی تصویری باید فعال شود"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"پست صوتی تصویری هنوز فعال نشده است، لطفاً بعداً دوباره امتحان کنید"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"پین قدیمی"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"پین جدید"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"لطفاً منتظر بمانید."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"پین جدید خیلی کوتاه است."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"پین جدید خیلی طولانی است."</string>
diff --git a/java/com/android/voicemail/impl/res/values-fi/strings.xml b/java/com/android/voicemail/impl/res/values-fi/strings.xml
index 6886eff..bb1d2d0 100644
--- a/java/com/android/voicemail/impl/res/values-fi/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-fi/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Vaihda PIN-koodi"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Ota visuaalinen puhelinvastaaja käyttöön, jotta voit vaihtaa PIN-koodin."</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Visuaalista puhelinvastaajaa ei ole vielä aktivoitu. Yritä myöhemmin uudelleen."</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Vanha PIN-koodi"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Uusi PIN-koodi"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Odota."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Uusi PIN-koodi on liian lyhyt."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Uusi PIN-koodi on liian pitkä."</string>
diff --git a/java/com/android/voicemail/impl/res/values-fr-rCA/strings.xml b/java/com/android/voicemail/impl/res/values-fr-rCA/strings.xml
index 3e485e0..92b7df6 100644
--- a/java/com/android/voicemail/impl/res/values-fr-rCA/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-fr-rCA/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Modifier le NIP"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"La messagerie vocale visuelle doit être activée pour que vous puissiez modifier votre NIP"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"La messagerie vocale visuelle n\'a pas encore été activée. Veuillez réessayer plus tard"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Ancien NIP"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Nouveau NIP"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Veuillez patienter."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Le nouveau NIP est trop court."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Le nouveau NIP est trop long."</string>
diff --git a/java/com/android/voicemail/impl/res/values-fr/strings.xml b/java/com/android/voicemail/impl/res/values-fr/strings.xml
index e540f60..771c324 100644
--- a/java/com/android/voicemail/impl/res/values-fr/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-fr/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Modifier le code secret"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Pour que vous puissiez modifier le code secret, la messagerie vocale visuelle doit être activée"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"La messagerie vocale visuelle n\'est pas encore activée. Veuillez réessayer plus tard"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Ancien code"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Nouveau code"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Veuillez patienter."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Le nouveau code est trop court."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Le nouveau code est trop long."</string>
diff --git a/java/com/android/voicemail/impl/res/values-gl/strings.xml b/java/com/android/voicemail/impl/res/values-gl/strings.xml
index b059879..22f401f 100644
--- a/java/com/android/voicemail/impl/res/values-gl/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-gl/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Cambiar PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Para poder cambiar o PIN, o correo de voz visual ten que estar activado"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"O correo de voz visual aínda non está activado. Téntao de novo máis tarde"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"PIN antigo"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"PIN novo"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Agarda."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"O novo PIN é demasiado curto."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"O novo PIN é demasiado longo."</string>
diff --git a/java/com/android/voicemail/impl/res/values-gu/strings.xml b/java/com/android/voicemail/impl/res/values-gu/strings.xml
index 3ec3c5d..107fd47 100644
--- a/java/com/android/voicemail/impl/res/values-gu/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-gu/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN બદલો"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PIN બદલવા માટે વિઝ્યુઅલ વૉઇસમેઇલ સક્ષમ હોય તે આવશ્યક છે"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"વિઝ્યુઅલ વૉઇસમેઇલ હજુ સુધી સક્રિય નથી, કૃપા કરીને પછીથી ફરી પ્રયાસ કરો"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"જૂનો PIN"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"નવો PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"કૃપા કરીને રાહ જુઓ."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"નવો PIN ખૂબ ટૂંકો છે."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"નવો PIN ખૂબ લાંબો છે."</string>
diff --git a/java/com/android/voicemail/impl/res/values-hi/strings.xml b/java/com/android/voicemail/impl/res/values-hi/strings.xml
index 545fffd..8861370 100644
--- a/java/com/android/voicemail/impl/res/values-hi/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-hi/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"पिन बदलें"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"पिन बदलने के लिए विज़ुअल वॉइसमेल ज़रूर सक्षम होना चाहिए"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"विज़ुअल वॉइसमेल को अभी तक सक्रिय नहीं किया गया है, कृपया बाद में फिर से कोशिश करें"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"पुराना पिन"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"नया पिन"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"कृपया प्रतीक्षा करें."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"नया पिन बहुत छोटा है."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"नया पिन बहुत बड़ा है."</string>
diff --git a/java/com/android/voicemail/impl/res/values-hr/strings.xml b/java/com/android/voicemail/impl/res/values-hr/strings.xml
index 9d5d606..ee1bf1f 100644
--- a/java/com/android/voicemail/impl/res/values-hr/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-hr/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Promjena PIN-a"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Za promjenu PIN-a potrebno je omogućiti vizualnu govornu poštu"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Vizualna govorna pošta još nije aktivirana, pokušajte ponovno kasnije"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Stari PIN"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Novi PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Pričekajte."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Novi PIN je prekratak."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Novi PIN je predugačak."</string>
diff --git a/java/com/android/voicemail/impl/res/values-hu/strings.xml b/java/com/android/voicemail/impl/res/values-hu/strings.xml
index 982ba99..d761d40 100644
--- a/java/com/android/voicemail/impl/res/values-hu/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-hu/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN-kód módosítása"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"A PIN-kód módosításához engedélyezni kell a vizuális hangpostát."</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"A vizuális hangposta még nincs aktiválva. Engedélyezze később."</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Régi PIN-kód"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Új PIN-kód"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Kérjük, várjon."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Az új PIN-kód túl rövid."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Az új PIN-kód túl hosszú."</string>
diff --git a/java/com/android/voicemail/impl/res/values-hy/strings.xml b/java/com/android/voicemail/impl/res/values-hy/strings.xml
index 00a132d..008aeee 100644
--- a/java/com/android/voicemail/impl/res/values-hy/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-hy/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Փոխեք PIN կոդը"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PIN կոդը փոխելու համար տեսողական ձայնային փոստը պետք է միացված լինի"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Տեսողական ձայնային փոստը դեռ ակտիվացված չէ: Փորձեք ավելի ուշ:"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Հին PIN կոդ"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Նոր PIN կոդ"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Սպասեք:"</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Նոր PIN կոդը չափազանց կարճ է:"</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Նոր PIN կոդը չափազանց երկար է:"</string>
diff --git a/java/com/android/voicemail/impl/res/values-in/strings.xml b/java/com/android/voicemail/impl/res/values-in/strings.xml
index 7523fc9..cda3a1a 100644
--- a/java/com/android/voicemail/impl/res/values-in/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-in/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Ubah PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Pesan suara visual harus diaktifkan untuk mengubah PIN"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Pesan suara visual belum diaktifkan, coba lagi nanti"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"PIN lama"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"PIN Baru"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Mohon tunggu."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"PIN baru terlalu pendek."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"PIN baru terlalu panjang."</string>
diff --git a/java/com/android/voicemail/impl/res/values-is/strings.xml b/java/com/android/voicemail/impl/res/values-is/strings.xml
index b2e616b..44ef9e0 100644
--- a/java/com/android/voicemail/impl/res/values-is/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-is/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Breyta PIN-númeri"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Kveikt þarf að vera á myndrænu talhólfi til að breyta PIN-númeri"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Ekki er búið að virkja myndrænt talhólf. Reyndu aftur síðar"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Gamla PIN-númerið"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Nýtt PIN-númer"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Augnablik."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Nýja PIN-númerið er of stutt."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Nýja PIN-númerið er of langt."</string>
diff --git a/java/com/android/voicemail/impl/res/values-it/strings.xml b/java/com/android/voicemail/impl/res/values-it/strings.xml
index f4fea84..afbbbc2 100644
--- a/java/com/android/voicemail/impl/res/values-it/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-it/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Cambia PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"La lettura delle segreteria deve essere attivata per cambiare il PIN"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Lettura della segreteria non attivata. Riprova più tardi"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"PIN attuale"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Nuovo PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Attendi."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Il nuovo PIN è troppo corto."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Il nuovo PIN è troppo lungo."</string>
diff --git a/java/com/android/voicemail/impl/res/values-iw/strings.xml b/java/com/android/voicemail/impl/res/values-iw/strings.xml
index e48e35d..acc2e6c 100644
--- a/java/com/android/voicemail/impl/res/values-iw/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-iw/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"שינוי קוד הגישה"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"צריך להפעיל את הדואר הקולי הוויזואלי כדי לשנות את קוד הגישה"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"הדואר הקולי הוויזואלי לא הופעל עדיין. נסה שוב מאוחר יותר"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"קוד הגישה הישן"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"קוד הגישה החדש"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"נא להמתין."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"קוד הגישה החדש קצר מדי."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"קוד הגישה החדש ארוך מדי."</string>
diff --git a/java/com/android/voicemail/impl/res/values-ja/strings.xml b/java/com/android/voicemail/impl/res/values-ja/strings.xml
index cd825d2..f0d6a9b 100644
--- a/java/com/android/voicemail/impl/res/values-ja/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ja/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN の変更"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PIN を変更するには、ビジュアル ボイスメールを有効にする必要があります"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"ビジュアル ボイスメールがまだ有効になっていません。しばらくしてからもう一度お試しください"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"古い PIN"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"新しい PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"お待ちください。"</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"新しい PIN が短すぎます。"</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"新しい PIN が長すぎます。"</string>
diff --git a/java/com/android/voicemail/impl/res/values-ka/strings.xml b/java/com/android/voicemail/impl/res/values-ka/strings.xml
index 12a677a..84c13b1 100644
--- a/java/com/android/voicemail/impl/res/values-ka/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ka/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN-კოდის შეცვლა"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PIN-კოდის შესაცვლელად ჩართული უნდა იყოს ვიზუალური ხმოვანი ფოსტა"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"ვიზუალური ხმოვანი ფოსტა ჯერ გააქტიურებული არ არის. გთხოვთ, სცადოთ ხელახლა."</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"ძველი PIN-კოდი"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"ახალი PIN-კოდი"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"გთხოვთ, დაელოდოთ."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"ახალი PIN-კოდი ძალიან მოკლეა."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"ახალი PIN-კოდი ძალიან გრძელია."</string>
diff --git a/java/com/android/voicemail/impl/res/values-kk/strings.xml b/java/com/android/voicemail/impl/res/values-kk/strings.xml
index 08c7cce..c2afc8e 100644
--- a/java/com/android/voicemail/impl/res/values-kk/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-kk/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN кодын өзгерту"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PIN кодын өзгерту үшін визуалды дауыс хабарын қосу қажет"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Визуалды дауыс хабары әлі қосылмаған. Кейінірек қайталап көріңіз"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Ескі PIN коды"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Жаңа PIN коды"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Күте тұрыңыз."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Жаңа PIN коды тым қысқа."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Жаңа PIN коды тым ұзын."</string>
diff --git a/java/com/android/voicemail/impl/res/values-km/strings.xml b/java/com/android/voicemail/impl/res/values-km/strings.xml
index ea3d6ff..55a2253 100644
--- a/java/com/android/voicemail/impl/res/values-km/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-km/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"ផ្លាស់ប្ដូរ​កូដ PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"សារ​​ជា​សំឡេង​ដែល​មើល​ឃើញ​ត្រូវតែ​បើកដំណើរការ ដើម្បី​ផ្លាស់ប្ដូរ PIN"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"សារ​ជាសំឡេង​ដែល​មើល​ឃើញ​មិនទាន់​​ត្រូវ​បាន​ធ្វើ​ឲ្យ​សកម្ម​នៅ​ឡើយ​ទេ សូម​ព្យាយាម​ម្ដង​ទៀត​នៅ​ពេល​ក្រោយ"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"កូដ PIN ចាស់"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"កូដ PIN ថ្មី"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"សូមរង់ចាំ។"</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"កូដ PIN ថ្មី​ ខ្លី​ពេក។"</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"កូដ PIN ថ្មី​ វែង​ពេក។"</string>
diff --git a/java/com/android/voicemail/impl/res/values-kn/strings.xml b/java/com/android/voicemail/impl/res/values-kn/strings.xml
index 48e14f5..695c8d4 100644
--- a/java/com/android/voicemail/impl/res/values-kn/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-kn/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"ಪಿನ್‌ ಬದಲಾಯಿಸಿ"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"ಪಿನ್ ಬದಲಾಯಿಸಲು ದೃಶ್ಯ ಧ್ವನಿಮೇಲ್ ಸಕ್ರಿಯಗೊಳಿಸಬೇಕು"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"ದೃಶ್ಯ ಧ್ವನಿಮೇಲ್ ಇನ್ನೂ ಸಕ್ರಿಯವಾಗಿಲ್ಲ, ದಯವಿಟ್ಟು ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"ಹಳೆಯ ಪಿನ್"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"ಹೊಸ ಪಿನ್‌"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"ದಯವಿಟ್ಟು ನಿರೀಕ್ಷಿಸಿ."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"ಹೊಸ ಪಿನ್ ತುಂಬಾ ಚಿಕ್ಕದಾಗಿದೆ."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"ಹೊಸ ಪಿನ್ ತುಂಬಾ ಉದ್ದವಾಗಿದೆ."</string>
diff --git a/java/com/android/voicemail/impl/res/values-ko/strings.xml b/java/com/android/voicemail/impl/res/values-ko/strings.xml
index 1138a5b..7f1d8b0 100644
--- a/java/com/android/voicemail/impl/res/values-ko/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ko/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN 변경"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PIN을 변경하려면 시각적 음성사서함이 사용 설정되어 있어야 합니다."</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"시각적 음성사서함이 아직 활성 상태가 아닙니다. 나중에 다시 시도해 주세요."</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"이전 PIN"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"새 PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"기다려 주세요."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"새 PIN이 너무 짧습니다."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"새 PIN이 너무 깁니다."</string>
diff --git a/java/com/android/voicemail/impl/res/values-ky/strings.xml b/java/com/android/voicemail/impl/res/values-ky/strings.xml
index b54d2b4..736a56a 100644
--- a/java/com/android/voicemail/impl/res/values-ky/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ky/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN кодду өзгөртүү"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PIN кодду өзгөртүү үчүн визуладык үн почтасын иштетүү керек"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Визуалдык үн почтаңыз күйгүзүлгөн жок. Кайра аракет кылыңыз."</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Эски PIN код"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Жаңы PIN код"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Күтө туруңуз."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Жаңы PIN код өтө эле кыска."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Жаңы PIN код өтө эле узун."</string>
diff --git a/java/com/android/voicemail/impl/res/values-lo/strings.xml b/java/com/android/voicemail/impl/res/values-lo/strings.xml
index 2052059..fb03133 100644
--- a/java/com/android/voicemail/impl/res/values-lo/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-lo/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"​ປ່ຽນ​ລະຫັດ PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"ຈະຕ້ອງເປີດໃຊ້ຂໍ້ຄວາມສຽງສະເໝືອນເພື່ອປ່ຽນ PIN"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"ຍັງບໍໄດ້ເປີດໃຊ້ຂໍ້ຄວາມສຽງສະເໝືອນເທື່ອ, ກະລຸນາລອງໃໝ່ໃນພາຍຫຼັງ"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"ລະຫັດ PIN ເກົ່າ"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"ລະຫັດ PIN ໃໝ່"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"ກະລຸນາລໍຖ້າ."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"ລະຫັດ PIN ໃໝ່ສັ້ນເກີນໄປ."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"ລະຫັດ PIN ໃໝ່ຍາວເກີນໄປ."</string>
diff --git a/java/com/android/voicemail/impl/res/values-lt/strings.xml b/java/com/android/voicemail/impl/res/values-lt/strings.xml
index 4d7d378..c9891ab 100644
--- a/java/com/android/voicemail/impl/res/values-lt/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-lt/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN kodo keitimas"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Vaizdinis balso paštas turi būti įgalintas, kad būtų galima pakeisti PIN kodą"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Vaizdinis balso paštas dar nesuaktyvintas, vėliau bandykite dar kartą"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Senas PIN kodas"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Naujas PIN kodas"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Palaukite."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Naujas PIN kodas per trumpas."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Naujas PIN kodas per ilgas."</string>
diff --git a/java/com/android/voicemail/impl/res/values-lv/strings.xml b/java/com/android/voicemail/impl/res/values-lv/strings.xml
index 776f102..7a26aa0 100644
--- a/java/com/android/voicemail/impl/res/values-lv/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-lv/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN mainīšana"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Lai varētu mainīt PIN, ir jābūt iespējotam vizuālajam balss pastam."</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Vizuālais balss pasts vēl nav aktivizēts. Lūdzu, vēlāk mēģiniet vēlreiz."</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Iepriekšējais PIN"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Jaunais PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Lūdzu, uzgaidiet!"</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Jaunais PIN ir pārāk īss."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Jaunais PIN ir pārāk garš."</string>
diff --git a/java/com/android/voicemail/impl/res/values-mk/strings.xml b/java/com/android/voicemail/impl/res/values-mk/strings.xml
index 52ec73d..2ef8fae 100644
--- a/java/com/android/voicemail/impl/res/values-mk/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-mk/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Променете PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"За променување на PIN-кодот, мора да се овозможи визуелна говорна пошта"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Визуелната говорна пошта сѐ уште не е активна. Обидете се повторно подоцна"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Стар PIN"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Нов PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Почекајте."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Новиот PIN е премногу кус."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Новиот PIN е премногу долг."</string>
diff --git a/java/com/android/voicemail/impl/res/values-ml/strings.xml b/java/com/android/voicemail/impl/res/values-ml/strings.xml
index baece46..ac0ad23 100644
--- a/java/com/android/voicemail/impl/res/values-ml/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ml/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"പിൻ മാറ്റുക"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"പിൻ മാറ്റുന്നതിന് വിഷ്വൽ വോയ്‌സ്‌മെയിൽ പ്രവർത്തനക്ഷമമാക്കേണ്ടതുണ്ട്"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"വിഷ്വൽ വോയ്‌സ്‌മെയിൽ ഇതുവരെ സജീവമാക്കിയിട്ടില്ല, പിന്നീട് വീണ്ടും ശ്രമിച്ചുനോക്കൂ"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"പഴയ പിൻ"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"പുതിയ പിൻ"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"കാത്തിരിക്കുക."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"പുതിയ പിൻ വളരെ ചെറുതാണ്."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"പുതിയ പിൻ വളരെ ദൈർഘ്യമേറിയതാണ്."</string>
diff --git a/java/com/android/voicemail/impl/res/values-mn/strings.xml b/java/com/android/voicemail/impl/res/values-mn/strings.xml
index 58c3134..96e0e42 100644
--- a/java/com/android/voicemail/impl/res/values-mn/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-mn/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN өөрчлөх"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Харагдах дуут шуудан PIN-г өөрчлөх боломжтой байх ёстой"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Харагдах дуут шуудан хараахан идэвхжээгүй байна, дараа дахин оролдоно уу"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Хуучин PIN"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Шинэ PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Түр хүлээнэ үү."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Шинэ PIN хэт богино байна."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Шинэ PIN хэт урт байна."</string>
diff --git a/java/com/android/voicemail/impl/res/values-mr/strings.xml b/java/com/android/voicemail/impl/res/values-mr/strings.xml
index 17a7f7a..85b5270 100644
--- a/java/com/android/voicemail/impl/res/values-mr/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-mr/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"पिन बदला"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"पिन बदलण्‍यासाठी व्हिज्युअल व्हॉइसमेल सक्षम करणे आवश्‍यक आहे"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"व्हिज्युअल व्हॉइसमेल अद्याप सक्रिय केले नाही, कृपया नंतर पुन्हा प्रयत्न करा"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"जुना पिन"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"नवीन पिन"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"कृपया प्रतीक्षा करा."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"नवीन पिन खूप लहान आहे."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"नवीन पिन खूप दीर्घ आहे."</string>
@@ -46,6 +44,6 @@
     <string name="change_pin_enter_new_pin_hint" msgid="1289662932759932217">"पिन <xliff:g id="MIN">%1$d</xliff:g>-<xliff:g id="MAX">%2$d</xliff:g> अंकी असणे आवश्‍यक आहे."</string>
     <string name="change_pin_confirm_pin_header" msgid="7282604363655862136">"आपल्या पिनची पुष्टी करा"</string>
     <string name="change_pin_confirm_pins_dont_match" msgid="8626742552205369433">"पिन जुळत नाहीत"</string>
-    <string name="change_pin_succeeded" msgid="6869403202124894671">"व्हॉइसमेल पिन अद्यतनित केला"</string>
+    <string name="change_pin_succeeded" msgid="6869403202124894671">"व्हॉइसमेल पिन अपडेट केला"</string>
     <string name="change_pin_system_error" msgid="5762853042379833829">"पिन सेट करण्यात अक्षम"</string>
 </resources>
diff --git a/java/com/android/voicemail/impl/res/values-ms/strings.xml b/java/com/android/voicemail/impl/res/values-ms/strings.xml
index b584451..c44ba38 100644
--- a/java/com/android/voicemail/impl/res/values-ms/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ms/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Tukar PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Mel suara visual mesti didayakan untuk menukar PIN"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Mel suara visual belum diaktifkan. Sila cuba sebentar lagi"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"PIN Lama"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"PIN Baharu"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Sila tunggu."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"PIN baharu terlalu pendek."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"PIN baharu terlalu panjang."</string>
diff --git a/java/com/android/voicemail/impl/res/values-my/strings.xml b/java/com/android/voicemail/impl/res/values-my/strings.xml
index b29c852..d9ef363 100644
--- a/java/com/android/voicemail/impl/res/values-my/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-my/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"ပင်နံပါတ် ပြောင်းပါ"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"ပင်နံပါတ်ပြောင်းရန် စာသားမှတ်တမ်းပါ အသံမေးလ်ကို ဖွင့်ထားရပါမည်"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"စာသားမှတ်တမ်းပါ အသံမေးလ်ကို မဖွင့်ရသေးပါ၊ နောက်မှ ထပ်ဖွင့်ကြည့်ပါ"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"ပင်နံပါတ်အဟောင်း"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"ပင်နံပါတ်အသစ်"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"ခဏစောင့်ပါ။"</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"ပင်နံပါတ်အသစ်မှာ တိုလွန်းနေသည်။"</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"ပင်နံပါတ်အသစ်မှာ ရှည်လွန်းနေသည်။"</string>
diff --git a/java/com/android/voicemail/impl/res/values-nb/strings.xml b/java/com/android/voicemail/impl/res/values-nb/strings.xml
index b6a1e1c..7139887 100644
--- a/java/com/android/voicemail/impl/res/values-nb/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-nb/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Endre PIN-koden"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Du må slå på visuell talepost for å endre PIN-koden"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Visuell talepost er ikke slått på ennå – prøv igjen senere"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Gammel PIN-kode"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Ny PIN-kode"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Vent litt."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Den nye PIN-koden er for kort."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Den nye PIN-koden er for lang."</string>
diff --git a/java/com/android/voicemail/impl/res/values-ne/strings.xml b/java/com/android/voicemail/impl/res/values-ne/strings.xml
index f0b4bd8..44c8bb0 100644
--- a/java/com/android/voicemail/impl/res/values-ne/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ne/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN परिवर्तन गर्नुहोस्"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PIN परिवर्तन गर्न अनिवार्य रूपले भिजुअल भ्वाइस मेललाई सक्षम पारिनुपर्छ"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"भिजुअल भ्वाइस मेललाई अझै सक्रिय पारिएको छैन, कृपया पुन: प्रयास गर्नुहोस्"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"पुरानो PIN"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"नयाँ PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"कृपया प्रतीक्षा गर्नुहोस्।"</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"नयाँ PIN अत्यन्त छोटो छ।"</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"नयाँ PIN अत्यन्त लामो छ।"</string>
diff --git a/java/com/android/voicemail/impl/res/values-nl/strings.xml b/java/com/android/voicemail/impl/res/values-nl/strings.xml
index f32723b..1e3788d 100644
--- a/java/com/android/voicemail/impl/res/values-nl/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-nl/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Pincode wijzigen"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Visuele voicemail moet zijn ingeschakeld om de pincode te wijzigen"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Visuele voicemail is nog niet geactiveerd. Probeer het later opnieuw."</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Oude pincode"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Nieuwe pincode"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Even geduld."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"De nieuwe pincode is te kort."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"De nieuwe pincode is te lang."</string>
diff --git a/java/com/android/voicemail/impl/res/values-no/strings.xml b/java/com/android/voicemail/impl/res/values-no/strings.xml
index b6a1e1c..7139887 100644
--- a/java/com/android/voicemail/impl/res/values-no/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-no/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Endre PIN-koden"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Du må slå på visuell talepost for å endre PIN-koden"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Visuell talepost er ikke slått på ennå – prøv igjen senere"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Gammel PIN-kode"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Ny PIN-kode"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Vent litt."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Den nye PIN-koden er for kort."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Den nye PIN-koden er for lang."</string>
diff --git a/java/com/android/voicemail/impl/res/values-pa/strings.xml b/java/com/android/voicemail/impl/res/values-pa/strings.xml
index 6353085..d65588d 100644
--- a/java/com/android/voicemail/impl/res/values-pa/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-pa/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN ਬਦਲੋ"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"ਦ੍ਰਿਸ਼ਟਾਂਤਕ ਵੌਇਸਮੇਲ ਨੂੰ PIN ਬਦਲਣ ਲਈ ਯੋਗ ਬਣਾਇਆ ਜਾਣਾ ਲਾਜ਼ਮੀ ਹੈ"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"ਦ੍ਰਿਸ਼ਟਾਂਤਕ ਵੌਇਸਮੇਲ ਹਾਲੇ ਕਿਰਿਆਸ਼ੀਲ ਨਹੀਂ ਕੀਤੀ ਗਈ ਹੈ, ਕਿਰਪਾ ਕਰਕੇ ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"ਪੁਰਾਣਾ PIN"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"ਨਵਾਂ PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"ਕਿਰਪਾ ਕਰਕੇ ਉਡੀਕ ਕਰੋ।"</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"ਨਵਾਂ PIN ਬਹੁਤ ਹੀ ਛੋਟਾ ਹੈ।"</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"ਨਵਾਂ PIN ਬਹੁਤ ਹੀ ਲੰਬਾ ਹੈ।"</string>
diff --git a/java/com/android/voicemail/impl/res/values-pl/strings.xml b/java/com/android/voicemail/impl/res/values-pl/strings.xml
index 1738214..ae3dcf7 100644
--- a/java/com/android/voicemail/impl/res/values-pl/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-pl/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Zmień kod PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Aby można było zmienić kod PIN, wizualna poczta głosowa musi być włączona"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Wizualna poczta głosowa nie została jeszcze aktywowana – spróbuj ponownie później"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Stary kod PIN"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Nowy kod PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Poczekaj."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Nowy kod PIN jest za krótki."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Nowy kod PIN jest za długi."</string>
diff --git a/java/com/android/voicemail/impl/res/values-pt-rBR/strings.xml b/java/com/android/voicemail/impl/res/values-pt-rBR/strings.xml
index 69f285b..f2c2f4e 100644
--- a/java/com/android/voicemail/impl/res/values-pt-rBR/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-pt-rBR/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Alterar PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"O correio de voz visual precisa ser ativado para alterar o PIN"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"O correio de voz visual ainda não foi ativado, tente novamente mais tarde"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"PIN antigo"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Novo PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Aguarde."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"O novo PIN é curto demais."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"O novo PIN é longo demais."</string>
diff --git a/java/com/android/voicemail/impl/res/values-pt-rPT/strings.xml b/java/com/android/voicemail/impl/res/values-pt-rPT/strings.xml
index ddff14a..b92a54c 100644
--- a/java/com/android/voicemail/impl/res/values-pt-rPT/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-pt-rPT/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Alterar PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"A mensagem de correio de voz visual tem de estar ativada para poder alterar o PIN"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"A mensagem de correio de voz visual ainda não está ativada. Tente novamente mais tarde"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"PIN antigo"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Novo PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Aguarde."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"O novo PIN é demasiado curto."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"O novo PIN é demasiado longo."</string>
diff --git a/java/com/android/voicemail/impl/res/values-pt/strings.xml b/java/com/android/voicemail/impl/res/values-pt/strings.xml
index 69f285b..f2c2f4e 100644
--- a/java/com/android/voicemail/impl/res/values-pt/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-pt/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Alterar PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"O correio de voz visual precisa ser ativado para alterar o PIN"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"O correio de voz visual ainda não foi ativado, tente novamente mais tarde"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"PIN antigo"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Novo PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Aguarde."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"O novo PIN é curto demais."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"O novo PIN é longo demais."</string>
diff --git a/java/com/android/voicemail/impl/res/values-ro/strings.xml b/java/com/android/voicemail/impl/res/values-ro/strings.xml
index 00eee24..165171b 100644
--- a/java/com/android/voicemail/impl/res/values-ro/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ro/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Schimbați codul PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Mesageria vocală vizuală trebuie activată pentru a schimba codul PIN."</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Mesageria vocală vizuală nu este activată încă. Încercați din nou mai târziu."</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Codul PIN vechi"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Codul PIN nou"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Așteptați."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Codul PIN nou este prea scurt."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Codul PIN nou este prea lung."</string>
diff --git a/java/com/android/voicemail/impl/res/values-ru/strings.xml b/java/com/android/voicemail/impl/res/values-ru/strings.xml
index 8537ac9..99a0b54 100644
--- a/java/com/android/voicemail/impl/res/values-ru/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ru/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Изменение PIN-кода"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Чтобы изменить PIN-код, включите визуальную голосовую почту"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Визуальная голосовая почта пока не активирована, повторите попытку позже"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Прежний PIN-код"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Новый PIN-код"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Подождите…"</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Новый PIN-код слишком короткий."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Новый PIN-код слишком длинный."</string>
diff --git a/java/com/android/voicemail/impl/res/values-si/strings.xml b/java/com/android/voicemail/impl/res/values-si/strings.xml
index a72200f..7879678 100644
--- a/java/com/android/voicemail/impl/res/values-si/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-si/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN අංකය වෙනස් කරන්න"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PIN අංකය වෙනස් කිරීමට දෘශ්‍ය හඬ තැපෑල සබල කළ යුතුය"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"දෘශ්‍ය හඬ තැපෑල තවම සක්‍රිය කර නැත, කරුණාකර පසුව නැවත උත්සාහ කරන්න"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"පැරණි PIN අංකය"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"නව PIN අංකය"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"කරුණාකර රැඳී සිටින්න."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"නව PIN අංකය කෙටි වැඩිය."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"නව PIN අංකය දිග වැඩිය."</string>
diff --git a/java/com/android/voicemail/impl/res/values-sk/strings.xml b/java/com/android/voicemail/impl/res/values-sk/strings.xml
index 8e06b68..a6deaa6 100644
--- a/java/com/android/voicemail/impl/res/values-sk/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-sk/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Zmena kódu PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PIN možno zmeniť až po povolení vizuálnej hlasovej schránky"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Vizuálna hlasová schránka ešte nie je aktivovaná, skúste to znova neskôr"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Starý PIN"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Nový PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Čakajte."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Nový PIN je príliš krátky."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Nový PIN je príliš dlhý."</string>
diff --git a/java/com/android/voicemail/impl/res/values-sl/strings.xml b/java/com/android/voicemail/impl/res/values-sl/strings.xml
index a62fa90..bf515c0 100644
--- a/java/com/android/voicemail/impl/res/values-sl/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-sl/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Sprememba kode PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Če želite spremeniti kodo PIN, morajo biti vizualna sporočila v odzivniku omogočena"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Vizualna sporočila v odzivniku še niso aktivirana. Poskusite znova pozneje"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Stara koda PIN"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Nova koda PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Počakajte."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Nova koda PIN je prekratka."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Nova koda PIN je predolga."</string>
diff --git a/java/com/android/voicemail/impl/res/values-sq/strings.xml b/java/com/android/voicemail/impl/res/values-sq/strings.xml
index c0f1b12..09104c8 100644
--- a/java/com/android/voicemail/impl/res/values-sq/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-sq/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Ndrysho kodin PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Duhet të aktivizohet posta zanore vizuale për të ndryshuar kodin PIN"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Posta zanore vizuale nuk është aktivizuar ende. Provo përsëri më vonë"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Kodi PIN i vjetër"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Kodi PIN i ri"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Prit..."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Kodi i ri PIN është shumë i shkurtër."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Kodi i ri PIN është shumë i gjatë."</string>
diff --git a/java/com/android/voicemail/impl/res/values-sr/strings.xml b/java/com/android/voicemail/impl/res/values-sr/strings.xml
index ec6d6a4..ea0ce7b 100644
--- a/java/com/android/voicemail/impl/res/values-sr/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-sr/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Промените PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Морате да омогућите визуелну говорну пошту да бисте променили PIN"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Визуелна говорна пошта још увек није активирана, пробајте поново касније"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Стари PIN"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Нови PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Сачекајте."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Нови PIN је прекратак."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Нови PIN је предугачак."</string>
diff --git a/java/com/android/voicemail/impl/res/values-sv/strings.xml b/java/com/android/voicemail/impl/res/values-sv/strings.xml
index a238753..89a1e23 100644
--- a/java/com/android/voicemail/impl/res/values-sv/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-sv/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Ändra pinkod"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Visuell röstbrevlåda måste vara aktiverat för att ändra pinkoden"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Visuell röstbrevlåda är ännu inte aktiverad, försök igen senare"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Gammal pinkod"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Ny pinkod"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Vänta."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Den nya pinkoden är för kort."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Den nya pinkoden är för lång."</string>
diff --git a/java/com/android/voicemail/impl/res/values-sw/strings.xml b/java/com/android/voicemail/impl/res/values-sw/strings.xml
index d749ddf..d8c7557 100644
--- a/java/com/android/voicemail/impl/res/values-sw/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-sw/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Badilisha PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Lazima uruhusu kipengele cha ujumbe wa sauti unaoonekana ili ubadilishe PIN"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Kipengele cha ujumbe wa sauti unaoonekana bado hakijawashwa, tafadhali jaribu tena baadaye"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"PIN ya zamani"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"PIN mpya"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Tafadhali subiri."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"PIN mpya ni fupi mno."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"PIN mpya ni ndefu mno."</string>
diff --git a/java/com/android/voicemail/impl/res/values-ta/strings.xml b/java/com/android/voicemail/impl/res/values-ta/strings.xml
index de0dc4a..1b965aa 100644
--- a/java/com/android/voicemail/impl/res/values-ta/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ta/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"பின்னை மாற்று"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"பின்னை மாற்ற, விஷுவல் குரலஞ்சலை இயக்க வேண்டும்"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"விஷுவல் குரலஞ்சல் இன்னும் இயக்கப்படவில்லை. பிறகு முயலவும்"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"பழைய பின்"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"புதிய பின்"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"காத்திருக்கவும்."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"புதிய பின் மிகவும் சிறியதாக உள்ளது."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"புதிய பின் மிகவும் நீளமாக உள்ளது."</string>
diff --git a/java/com/android/voicemail/impl/res/values-te/strings.xml b/java/com/android/voicemail/impl/res/values-te/strings.xml
index 1459ddc..089a1ba 100644
--- a/java/com/android/voicemail/impl/res/values-te/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-te/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PINను మార్చండి"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PINని మార్చడానికి తప్పనిసరిగా దృశ్యమాన వాయిస్ మెయిల్‌ను ప్రారంభించాలి"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"దృశ్యమాన వాయిస్ మెయిల్‌ ఇంకా సక్రియం కాలేదు, దయచేసి తర్వాత మళ్లీ ప్రయత్నించండి"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"పాత PIN"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"కొత్త PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"దయచేసి వేచి ఉండండి."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"కొత్త PIN చాలా చిన్నదిగా ఉంది."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"కొత్త PIN చాలా పొడవుగా ఉంది."</string>
diff --git a/java/com/android/voicemail/impl/res/values-th/strings.xml b/java/com/android/voicemail/impl/res/values-th/strings.xml
index 056800c..130ea26 100644
--- a/java/com/android/voicemail/impl/res/values-th/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-th/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"เปลี่ยน PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"ต้องเปิดใช้ข้อความเสียงพร้อมภาพเพื่อเปลี่ยน PIN"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"ยังไม่ได้เปิดใช้งานข้อความเสียงพร้อมภาพ โปรดลองอีกครั้งในภายหลัง"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"PIN เก่า"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"PIN ใหม่"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"โปรดรอสักครู่"</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"PIN ใหม่สั้นเกินไป"</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"PIN ใหม่ยาวเกินไป"</string>
diff --git a/java/com/android/voicemail/impl/res/values-tl/strings.xml b/java/com/android/voicemail/impl/res/values-tl/strings.xml
index c322362..58d1883 100644
--- a/java/com/android/voicemail/impl/res/values-tl/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-tl/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Palitan ang PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Dapat naka-enable ang visual na voicemail upang palitan ang PIN"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Hindi pa naka-activate ang visual na voicemail, pakisubukang muli sa ibang pagkakataon"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Lumang PIN"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Bagong PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Pakihintay."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Masyadong maikli ang bagong PIN."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Masyadong mahaba ang bagong PIN."</string>
diff --git a/java/com/android/voicemail/impl/res/values-tr/strings.xml b/java/com/android/voicemail/impl/res/values-tr/strings.xml
index a80b40b..578cf95 100644
--- a/java/com/android/voicemail/impl/res/values-tr/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-tr/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN\'i değiştirin"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PIN\'i değiştirebilmek için görsel sesli mesaj etkinleştirilmelidir"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Görsel sesli mesaj henüz etkinleştirilmedi. Lütfen daha sonra tekrar deneyin."</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Eski PIN"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Yeni PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Lütfen bekleyin."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Yeni PIN çok kısa."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Yeni PIN çok uzun."</string>
diff --git a/java/com/android/voicemail/impl/res/values-uk/strings.xml b/java/com/android/voicemail/impl/res/values-uk/strings.xml
index a0b3d8f..b1d7c10 100644
--- a/java/com/android/voicemail/impl/res/values-uk/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-uk/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Змінити PIN-код"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Щоб змінити PIN-код, потрібно ввімкнути візуальну голосову пошту"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Візуальну голосову пошту ще не активовано, повторіть спробу пізніше"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Старий PIN-код"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Новий PIN-код"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Зачекайте."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Новий PIN-код закороткий."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Новий PIN-код задовгий."</string>
diff --git a/java/com/android/voicemail/impl/res/values-ur/strings.xml b/java/com/android/voicemail/impl/res/values-ur/strings.xml
index 81f913f..7b1f8d3 100644
--- a/java/com/android/voicemail/impl/res/values-ur/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-ur/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"‏PIN تبدیل کریں"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"‏PIN تبدیل کرنے کیلئے بصری صوتی میل اہل ہونی چاہئیے"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"بصری صوتی میل ابھی فعال نہیں ہے، براہ کرم بعد میں دوبارہ کوشش کریں"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"‏پرانا PIN"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"‏نیا PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"براہ کرم انتظار کریں۔"</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"‏نیا PIN بہت مختصر ہے۔"</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"‏نیا PIN بہت طویل ہے۔"</string>
diff --git a/java/com/android/voicemail/impl/res/values-uz/strings.xml b/java/com/android/voicemail/impl/res/values-uz/strings.xml
index 8771da7..92a7536 100644
--- a/java/com/android/voicemail/impl/res/values-uz/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-uz/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"PIN kodni o‘zgartirish"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"PIN kodni o‘zgartirish uchun vizual ovozli pochtani yoqish lozim."</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Vizual ovozli pochta yoqilmadi. Keyinroq qayta urinib ko‘ring."</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Eski PIN kod"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Yangi PIN kod"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Iltimos, kuting…"</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Yangi PIN kod juda qisqa."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Yangi PIN kod juda uzun."</string>
diff --git a/java/com/android/voicemail/impl/res/values-vi/strings.xml b/java/com/android/voicemail/impl/res/values-vi/strings.xml
index cdca9bb..972c74c 100644
--- a/java/com/android/voicemail/impl/res/values-vi/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-vi/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Thay đổi mã PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Phải bật thư thoại kèm theo hình ảnh để thay đổi mã PIN"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Thư thoại kèm theo hình ảnh chưa được kích hoạt, hãy thử lại sau"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"Mã PIN cũ"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"Mã PIN mới"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Vui lòng đợi."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"Mã PIN mới quá ngắn."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"Mã PIN mới quá dài."</string>
diff --git a/java/com/android/voicemail/impl/res/values-zh-rCN/strings.xml b/java/com/android/voicemail/impl/res/values-zh-rCN/strings.xml
index 8b0dde0..21edad6 100644
--- a/java/com/android/voicemail/impl/res/values-zh-rCN/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-zh-rCN/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"更改 PIN 码"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"必须启用可视语音信箱才可更改 PIN 码"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"可视语音信箱尚未激活,请稍后再试"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"旧 PIN 码"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"新 PIN 码"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"请稍候。"</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"新的 PIN 码太短。"</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"新的 PIN 码太长。"</string>
diff --git a/java/com/android/voicemail/impl/res/values-zh-rHK/strings.xml b/java/com/android/voicemail/impl/res/values-zh-rHK/strings.xml
index 0ee8269..d80cbba 100644
--- a/java/com/android/voicemail/impl/res/values-zh-rHK/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-zh-rHK/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"變更 PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"必須啟用視像留言才能變更 PIN"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"視像留言尚未啟用,請稍後再試"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"舊的 PIN"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"新的 PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"請稍候。"</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"新的 PIN 太短。"</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"新的 PIN 太長。"</string>
diff --git a/java/com/android/voicemail/impl/res/values-zh-rTW/strings.xml b/java/com/android/voicemail/impl/res/values-zh-rTW/strings.xml
index d33c989..7d23806 100644
--- a/java/com/android/voicemail/impl/res/values-zh-rTW/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-zh-rTW/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"變更 PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"必須啟用視覺化語音信箱才能變更 PIN"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"視覺化語音信箱尚未啟用,請稍後再試"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"舊的語音信箱密碼"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"新的語音信箱密碼"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"請稍候。"</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"新的語音信箱密碼太短。"</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"新的語音信箱密碼太長。"</string>
diff --git a/java/com/android/voicemail/impl/res/values-zu/strings.xml b/java/com/android/voicemail/impl/res/values-zu/strings.xml
index b762091..630f288 100644
--- a/java/com/android/voicemail/impl/res/values-zu/strings.xml
+++ b/java/com/android/voicemail/impl/res/values-zu/strings.xml
@@ -26,8 +26,6 @@
     <string name="voicemail_change_pin_preference_title" msgid="8944570865151211693">"Shintsha i-PIN"</string>
     <string name="voicemail_change_pin_preference_summary_disable" msgid="2787334822298063691">"Ivoyisimeyili ebonakalayo kumele inikwe amandla ukuze ishintshe i-PIN"</string>
     <string name="voicemail_change_pin_preference_summary_not_activated" msgid="8794039647258533633">"Ivoyisimeyili ebonakalayo ayisebenzi okwamanje, sicela uzame futhi emuva kwesikhathi"</string>
-    <string name="vm_change_pin_old_pin" msgid="3732582036597386047">"I-PIN endala"</string>
-    <string name="vm_change_pin_new_pin" msgid="5167496290646066333">"I-PIN entsha"</string>
     <string name="vm_change_pin_progress_message" msgid="4143209637626661679">"Sicela ulinde."</string>
     <string name="vm_change_pin_error_too_short" msgid="2825020644385639921">"I-PIN entsha imfushane kakhulu."</string>
     <string name="vm_change_pin_error_too_long" msgid="683260438529171998">"I-PIN entsha yinde kakhulu."</string>
diff --git a/java/com/android/voicemail/impl/res/values/strings.xml b/java/com/android/voicemail/impl/res/values/strings.xml
index a846541..66c0e62 100644
--- a/java/com/android/voicemail/impl/res/values/strings.xml
+++ b/java/com/android/voicemail/impl/res/values/strings.xml
@@ -61,11 +61,6 @@
   <string name="voicemail_change_pin_preference_summary_disable">Visual voicemail must be enabled to change PIN</string>
   <string name="voicemail_change_pin_preference_summary_not_activated">Visual voicemail is not activated yet, please try again later</string>
 
-  <!-- Hint for the old PIN field in the change vociemail PIN dialog -->
-  <string name="vm_change_pin_old_pin">Old PIN</string>
-  <!-- Hint for the new PIN field in the change vociemail PIN dialog -->
-  <string name="vm_change_pin_new_pin">New PIN</string>
-
   <!-- Message on the dialog when PIN changing is in progress -->
   <string name="vm_change_pin_progress_message">Please wait.</string>
   <!-- Error message for the voicemail PIN change if the PIN is too short -->
diff --git a/java/com/android/voicemail/impl/res/xml/vvm_config.xml b/java/com/android/voicemail/impl/res/xml/vvm_config.xml
index 2bac66b..c7ed5ca 100644
--- a/java/com/android/voicemail/impl/res/xml/vvm_config.xml
+++ b/java/com/android/voicemail/impl/res/xml/vvm_config.xml
@@ -21,6 +21,7 @@
       <item value="TEST"/>
     </string-array>
   </pbundle_as_map>
+
   <pbundle_as_map>
     <!-- T-Mobile USA-->
     <string-array name="mccmnc">
diff --git a/java/com/android/voicemail/impl/scheduling/TaskExecutor.java b/java/com/android/voicemail/impl/scheduling/TaskExecutor.java
index e3b718e..afa77c5 100644
--- a/java/com/android/voicemail/impl/scheduling/TaskExecutor.java
+++ b/java/com/android/voicemail/impl/scheduling/TaskExecutor.java
@@ -129,7 +129,7 @@
 
   private final MainThreadHandler mainThreadHandler;
 
-  private final Context context;
+  private final Context appContext;
 
   /** Main thread only, access through {@link #getTasks()} */
   private final TaskQueue tasks = new TaskQueue();
@@ -179,7 +179,7 @@
         VvmLog.i("JobFinishedPoller.run", "Job finished");
         if (!getTasks().isEmpty()) {
           TaskSchedulerJobService.scheduleJob(
-              context, serializePendingTasks(), delayMillis, isNewJob);
+              appContext, serializePendingTasks(), delayMillis, isNewJob);
           tasks.clear();
         }
         terminate();
@@ -259,7 +259,7 @@
   }
 
   private TaskExecutor(Context context) {
-    this.context = context;
+    this.appContext = context.getApplicationContext();
     HandlerThread thread = new HandlerThread("VvmTaskExecutor");
     thread.start();
 
@@ -274,7 +274,7 @@
     job = null;
     workerThreadHandler.getLooper().quit();
     instance = null;
-    TaskReceiver.resendDeferredBroadcasts(context);
+    TaskReceiver.resendDeferredBroadcasts(appContext);
   }
 
   @MainThread
@@ -391,7 +391,7 @@
   public void onStartJob(Job job, List<Bundle> pendingTasks) {
     VvmLog.i(TAG, "onStartJob");
     this.job = job;
-    tasks.fromBundles(context, pendingTasks);
+    tasks.fromBundles(appContext, pendingTasks);
     maybeRunNextTask();
   }
 
diff --git a/java/com/android/voicemail/impl/scheduling/TaskSchedulerJobService.java b/java/com/android/voicemail/impl/scheduling/TaskSchedulerJobService.java
index 107234e..baf5804 100644
--- a/java/com/android/voicemail/impl/scheduling/TaskSchedulerJobService.java
+++ b/java/com/android/voicemail/impl/scheduling/TaskSchedulerJobService.java
@@ -30,6 +30,7 @@
 import android.preference.PreferenceManager;
 import android.support.annotation.MainThread;
 import com.android.dialer.constants.ScheduledJobIds;
+import com.android.dialer.strictmode.DialerStrictMode;
 import com.android.voicemail.impl.Assert;
 import com.android.voicemail.impl.VvmLog;
 import java.util.ArrayList;
@@ -58,7 +59,8 @@
   public boolean onStartJob(JobParameters params) {
     int jobId = params.getTransientExtras().getInt(EXTRA_JOB_ID);
     int expectedJobId =
-        PreferenceManager.getDefaultSharedPreferences(this).getInt(EXPECTED_JOB_ID, 0);
+        DialerStrictMode.bypass(
+            () -> PreferenceManager.getDefaultSharedPreferences(this).getInt(EXPECTED_JOB_ID, 0));
     if (jobId != expectedJobId) {
       VvmLog.e(
           TAG, "Job " + jobId + " is not the last scheduled job " + expectedJobId + ", ignoring");
diff --git a/java/com/android/voicemail/impl/sms/LegacyModeSmsHandler.java b/java/com/android/voicemail/impl/sms/LegacyModeSmsHandler.java
index 5decf63..e902825 100644
--- a/java/com/android/voicemail/impl/sms/LegacyModeSmsHandler.java
+++ b/java/com/android/voicemail/impl/sms/LegacyModeSmsHandler.java
@@ -79,6 +79,7 @@
     VvmLog.i(TAG, "sending voicemail notification");
     Intent intent = new Intent(VoicemailClient.ACTION_SHOW_LEGACY_VOICEMAIL);
     intent.setPackage(context.getPackageName());
+    intent.putExtra(VoicemailClient.EXTRA_IS_LEGACY_MODE, true);
     intent.putExtra(TelephonyManager.EXTRA_PHONE_ACCOUNT_HANDLE, phoneAccountHandle);
     // Setting voicemail message count to non-zero will show the telephony voicemail
     // notification, and zero will clear it.
diff --git a/java/com/android/voicemail/impl/sms/OmtpMessageReceiver.java b/java/com/android/voicemail/impl/sms/OmtpMessageReceiver.java
index 1cf3737..4383527 100644
--- a/java/com/android/voicemail/impl/sms/OmtpMessageReceiver.java
+++ b/java/com/android/voicemail/impl/sms/OmtpMessageReceiver.java
@@ -35,7 +35,6 @@
 import com.android.voicemail.impl.VvmLog;
 import com.android.voicemail.impl.protocol.VisualVoicemailProtocol;
 import com.android.voicemail.impl.settings.VisualVoicemailSettingsUtil;
-import com.android.voicemail.impl.sync.OmtpVvmSyncService;
 import com.android.voicemail.impl.sync.SyncOneTask;
 import com.android.voicemail.impl.sync.SyncTask;
 import com.android.voicemail.impl.sync.VoicemailsQueryHelper;
@@ -152,7 +151,7 @@
         }
         break;
       case OmtpConstants.MAILBOX_UPDATE:
-        SyncTask.start(mContext, phone, OmtpVvmSyncService.SYNC_DOWNLOAD_ONLY);
+        SyncTask.start(mContext, phone);
         break;
       case OmtpConstants.GREETINGS_UPDATE:
         // Not implemented in V1
diff --git a/java/com/android/voicemail/impl/sms/OmtpMessageSender.java b/java/com/android/voicemail/impl/sms/OmtpMessageSender.java
index e9d145c..19661e9 100644
--- a/java/com/android/voicemail/impl/sms/OmtpMessageSender.java
+++ b/java/com/android/voicemail/impl/sms/OmtpMessageSender.java
@@ -22,6 +22,7 @@
 import android.telephony.SmsManager;
 import com.android.voicemail.impl.OmtpConstants;
 import com.android.voicemail.impl.TelephonyMangerCompat;
+import com.android.voicemail.impl.VvmLog;
 
 /**
  * Send client originated OMTP messages to the OMTP server.
@@ -75,6 +76,11 @@
   public void requestVvmStatus(@Nullable PendingIntent sentIntent) {}
 
   protected void sendSms(String text, PendingIntent sentIntent) {
+
+    VvmLog.v(
+        TAG,
+        String.format("Sending sms '%s' to %s:%d", text, mDestinationNumber, mApplicationPort));
+
     TelephonyMangerCompat.sendVisualVoicemailSms(
         mContext, mPhoneAccountHandle, mDestinationNumber, mApplicationPort, text, sentIntent);
   }
diff --git a/java/com/android/voicemail/impl/sync/OmtpVvmSyncReceiver.java b/java/com/android/voicemail/impl/sync/OmtpVvmSyncReceiver.java
index b2ec49e..1b59ecc 100644
--- a/java/com/android/voicemail/impl/sync/OmtpVvmSyncReceiver.java
+++ b/java/com/android/voicemail/impl/sync/OmtpVvmSyncReceiver.java
@@ -52,7 +52,7 @@
           VvmLog.i(TAG, "Unactivated account " + phoneAccount + " found, activating");
           ActivationTask.start(context, phoneAccount, null);
         } else {
-          SyncTask.start(context, phoneAccount, OmtpVvmSyncService.SYNC_FULL_SYNC);
+          SyncTask.start(context, phoneAccount);
         }
       }
     }
diff --git a/java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java b/java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java
index 7933883..5b5d6b0 100644
--- a/java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java
+++ b/java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java
@@ -43,6 +43,7 @@
 import com.android.voicemail.impl.sync.VvmNetworkRequest.RequestFailedException;
 import com.android.voicemail.impl.utils.LoggerUtils;
 import com.android.voicemail.impl.utils.VoicemailDatabaseUtil;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -50,22 +51,13 @@
 @TargetApi(VERSION_CODES.O)
 public class OmtpVvmSyncService {
 
-  private static final String TAG = OmtpVvmSyncService.class.getSimpleName();
+  private static final String TAG = "OmtpVvmSyncService";
 
-  /** Signifies a sync with both uploading to the server and downloading from the server. */
-  public static final String SYNC_FULL_SYNC = "full_sync";
-  /** Only upload to the server. */
-  public static final String SYNC_UPLOAD_ONLY = "upload_only";
-  /** Only download from the server. */
-  public static final String SYNC_DOWNLOAD_ONLY = "download_only";
-  /** Only download single voicemail transcription. */
-  public static final String SYNC_DOWNLOAD_ONE_TRANSCRIPTION = "download_one_transcription";
   /** Threshold for whether we should archive and delete voicemails from the remote VM server. */
   private static final float AUTO_DELETE_ARCHIVE_VM_THRESHOLD = 0.75f;
 
   private final Context mContext;
-
-  private VoicemailsQueryHelper mQueryHelper;
+  private final VoicemailsQueryHelper mQueryHelper;
 
   public OmtpVvmSyncService(Context context) {
     mContext = context;
@@ -74,23 +66,21 @@
 
   public void sync(
       BaseTask task,
-      String action,
       PhoneAccountHandle phoneAccount,
       Voicemail voicemail,
       VoicemailStatus.Editor status) {
     Assert.isTrue(phoneAccount != null);
-    VvmLog.v(TAG, "Sync requested: " + action + " - for account: " + phoneAccount);
-    setupAndSendRequest(task, phoneAccount, voicemail, action, status);
+    VvmLog.v(TAG, "Sync requested for account: " + phoneAccount);
+    setupAndSendRequest(task, phoneAccount, voicemail, status);
   }
 
   private void setupAndSendRequest(
       BaseTask task,
       PhoneAccountHandle phoneAccount,
       Voicemail voicemail,
-      String action,
       VoicemailStatus.Editor status) {
     if (!VisualVoicemailSettingsUtil.isEnabled(mContext, phoneAccount)) {
-      VvmLog.v(TAG, "Sync requested for disabled account");
+      VvmLog.e(TAG, "Sync requested for disabled account");
       return;
     }
     if (!VvmAccountManager.isAccountActivated(mContext, phoneAccount)) {
@@ -102,7 +92,7 @@
     LoggerUtils.logImpressionOnMainThread(mContext, DialerImpression.Type.VVM_SYNC_STARTED);
     // DATA_IMAP_OPERATION_STARTED posting should not be deferred. This event clears all data
     // channel errors, which should happen when the task starts, not when it ends. It is the
-    // "Sync in progress..." status.
+    // "Sync in progress..." status, which is currently displayed to the user as no error.
     config.handleEvent(
         VoicemailStatus.edit(mContext, phoneAccount), OmtpEvents.DATA_IMAP_OPERATION_STARTED);
     try (NetworkWrapper network = VvmNetworkRequest.getNetwork(config, phoneAccount, status)) {
@@ -111,7 +101,7 @@
         task.fail();
         return;
       }
-      doSync(task, network.get(), phoneAccount, voicemail, action, status);
+      doSync(task, network.get(), phoneAccount, voicemail, status);
     } catch (RequestFailedException e) {
       config.handleEvent(status, OmtpEvents.DATA_NO_CONNECTION_CELLULAR_REQUIRED);
       task.fail();
@@ -123,14 +113,13 @@
       Network network,
       PhoneAccountHandle phoneAccount,
       Voicemail voicemail,
-      String action,
       VoicemailStatus.Editor status) {
     try (ImapHelper imapHelper = new ImapHelper(mContext, phoneAccount, network, status)) {
       boolean success;
       if (voicemail == null) {
-        success = syncAll(action, imapHelper, phoneAccount);
+        success = syncAll(imapHelper, phoneAccount);
       } else {
-        success = syncOne(imapHelper, voicemail, phoneAccount);
+        success = downloadOneVoicemail(imapHelper, voicemail, phoneAccount);
       }
       if (success) {
         // TODO: b/30569269 failure should interrupt all subsequent task via exceptions
@@ -219,79 +208,33 @@
     }
   }
 
-  private boolean syncAll(String action, ImapHelper imapHelper, PhoneAccountHandle account) {
-    boolean uploadSuccess = true;
-    boolean downloadSuccess = true;
+  private boolean syncAll(ImapHelper imapHelper, PhoneAccountHandle account) {
 
-    if (SYNC_FULL_SYNC.equals(action) || SYNC_UPLOAD_ONLY.equals(action)) {
-      uploadSuccess = upload(account, imapHelper);
-    }
-    if (SYNC_FULL_SYNC.equals(action) || SYNC_DOWNLOAD_ONLY.equals(action)) {
-      downloadSuccess = download(imapHelper, account);
-    }
-
-    VvmLog.v(
-        TAG,
-        "upload succeeded: ["
-            + String.valueOf(uploadSuccess)
-            + "] download succeeded: ["
-            + String.valueOf(downloadSuccess)
-            + "]");
-
-    return uploadSuccess && downloadSuccess;
-  }
-
-  private boolean syncOne(ImapHelper imapHelper, Voicemail voicemail, PhoneAccountHandle account) {
-    if (shouldPerformPrefetch(account, imapHelper)) {
-      VoicemailFetchedCallback callback =
-          new VoicemailFetchedCallback(mContext, voicemail.getUri(), account);
-      imapHelper.fetchVoicemailPayload(callback, voicemail.getSourceData());
-    }
-
-    return imapHelper.fetchTranscription(
-        new TranscriptionFetchedCallback(mContext, voicemail), voicemail.getSourceData());
-  }
-
-  private boolean upload(PhoneAccountHandle phoneAccountHandle, ImapHelper imapHelper) {
-    List<Voicemail> readVoicemails = mQueryHelper.getReadVoicemails(phoneAccountHandle);
-    List<Voicemail> deletedVoicemails = mQueryHelper.getDeletedVoicemails(phoneAccountHandle);
-
-    boolean success = true;
-
-    if (deletedVoicemails.size() > 0) {
-      if (imapHelper.markMessagesAsDeleted(deletedVoicemails)) {
-        // We want to delete selectively instead of all the voicemails for this provider
-        // in case the state changed since the IMAP query was completed.
-        mQueryHelper.deleteFromDatabase(deletedVoicemails);
-      } else {
-        success = false;
-      }
-    }
-
-    if (readVoicemails.size() > 0) {
-      VvmLog.i(TAG, "Marking voicemails as read");
-      if (imapHelper.markMessagesAsRead(readVoicemails)) {
-        VvmLog.i(TAG, "Marking voicemails as clean");
-        mQueryHelper.markCleanInDatabase(readVoicemails);
-      } else {
-        success = false;
-      }
-    }
-
-    return success;
-  }
-
-  private boolean download(ImapHelper imapHelper, PhoneAccountHandle account) {
     List<Voicemail> serverVoicemails = imapHelper.fetchAllVoicemails();
     List<Voicemail> localVoicemails = mQueryHelper.getAllVoicemails(account);
+    List<Voicemail> deletedVoicemails = mQueryHelper.getDeletedVoicemails(account);
+    boolean succeeded = true;
 
     if (localVoicemails == null || serverVoicemails == null) {
       // Null value means the query failed.
+      VvmLog.e(TAG, "syncAll: query failed");
       return false;
     }
 
+    if (deletedVoicemails.size() > 0) {
+      if (imapHelper.markMessagesAsDeleted(deletedVoicemails)) {
+        // Delete only the voicemails that was deleted on the server, in case more are deleted
+        // since the IMAP query was completed.
+        mQueryHelper.deleteFromDatabase(deletedVoicemails);
+      } else {
+        succeeded = false;
+      }
+    }
+
     Map<String, Voicemail> remoteMap = buildMap(serverVoicemails);
 
+    List<Voicemail> localReadVoicemails = new ArrayList<>();
+
     // Go through all the local voicemails and check if they are on the server.
     // They may be read or deleted on the server but not locally. Perform the
     // appropriate local operation if the status differs from the server. Remove
@@ -310,6 +253,8 @@
       } else {
         if (remoteVoicemail.isRead() && !localVoicemail.isRead()) {
           mQueryHelper.markReadInDatabase(localVoicemail);
+        } else if (localVoicemail.isRead() && !remoteVoicemail.isRead()) {
+          localReadVoicemails.add(localVoicemail);
         }
 
         if (!TextUtils.isEmpty(remoteVoicemail.getTranscription())
@@ -321,6 +266,16 @@
       }
     }
 
+    if (localReadVoicemails.size() > 0) {
+      VvmLog.i(TAG, "Marking voicemails as read");
+      if (imapHelper.markMessagesAsRead(localReadVoicemails)) {
+        VvmLog.i(TAG, "Marking voicemails as clean");
+        mQueryHelper.markCleanInDatabase(localReadVoicemails);
+      } else {
+        return false;
+      }
+    }
+
     // The leftover messages are messages that exist on the server but not locally.
     boolean prefetchEnabled = shouldPerformPrefetch(account, imapHelper);
     for (Voicemail remoteVoicemail : remoteMap.values()) {
@@ -336,7 +291,19 @@
       }
     }
 
-    return true;
+    return succeeded;
+  }
+
+  private boolean downloadOneVoicemail(
+      ImapHelper imapHelper, Voicemail voicemail, PhoneAccountHandle account) {
+    if (shouldPerformPrefetch(account, imapHelper)) {
+      VoicemailFetchedCallback callback =
+          new VoicemailFetchedCallback(mContext, voicemail.getUri(), account);
+      imapHelper.fetchVoicemailPayload(callback, voicemail.getSourceData());
+    }
+
+    return imapHelper.fetchTranscription(
+        new TranscriptionFetchedCallback(mContext, voicemail), voicemail.getSourceData());
   }
 
   private boolean shouldPerformPrefetch(PhoneAccountHandle account, ImapHelper imapHelper) {
diff --git a/java/com/android/voicemail/impl/sync/SyncOneTask.java b/java/com/android/voicemail/impl/sync/SyncOneTask.java
index cd2782a..70c6bd8 100644
--- a/java/com/android/voicemail/impl/sync/SyncOneTask.java
+++ b/java/com/android/voicemail/impl/sync/SyncOneTask.java
@@ -39,17 +39,14 @@
   private static final int RETRY_INTERVAL_MILLIS = 5_000;
 
   private static final String EXTRA_PHONE_ACCOUNT_HANDLE = "extra_phone_account_handle";
-  private static final String EXTRA_SYNC_TYPE = "extra_sync_type";
   private static final String EXTRA_VOICEMAIL = "extra_voicemail";
 
   private PhoneAccountHandle mPhone;
-  private String mSyncType;
   private Voicemail mVoicemail;
 
   public static void start(Context context, PhoneAccountHandle phone, Voicemail voicemail) {
     Intent intent = BaseTask.createIntent(context, SyncOneTask.class, phone);
     intent.putExtra(EXTRA_PHONE_ACCOUNT_HANDLE, phone);
-    intent.putExtra(EXTRA_SYNC_TYPE, OmtpVvmSyncService.SYNC_DOWNLOAD_ONE_TRANSCRIPTION);
     intent.putExtra(EXTRA_VOICEMAIL, voicemail);
     context.sendBroadcast(intent);
   }
@@ -63,14 +60,13 @@
   public void onCreate(Context context, Bundle extras) {
     super.onCreate(context, extras);
     mPhone = extras.getParcelable(EXTRA_PHONE_ACCOUNT_HANDLE);
-    mSyncType = extras.getString(EXTRA_SYNC_TYPE);
     mVoicemail = extras.getParcelable(EXTRA_VOICEMAIL);
   }
 
   @Override
   public void onExecuteInBackgroundThread() {
     OmtpVvmSyncService service = new OmtpVvmSyncService(getContext());
-    service.sync(this, mSyncType, mPhone, mVoicemail, VoicemailStatus.edit(getContext(), mPhone));
+    service.sync(this, mPhone, mVoicemail, VoicemailStatus.edit(getContext(), mPhone));
   }
 
   @Override
@@ -78,7 +74,6 @@
     LoggerUtils.logImpressionOnMainThread(getContext(), DialerImpression.Type.VVM_AUTO_RETRY_SYNC);
     Intent intent = super.createRestartIntent();
     intent.putExtra(EXTRA_PHONE_ACCOUNT_HANDLE, mPhone);
-    intent.putExtra(EXTRA_SYNC_TYPE, mSyncType);
     intent.putExtra(EXTRA_VOICEMAIL, mVoicemail);
     return intent;
   }
diff --git a/java/com/android/voicemail/impl/sync/SyncTask.java b/java/com/android/voicemail/impl/sync/SyncTask.java
index 0b3e090..68ce012 100644
--- a/java/com/android/voicemail/impl/sync/SyncTask.java
+++ b/java/com/android/voicemail/impl/sync/SyncTask.java
@@ -37,17 +37,14 @@
   private static final int MINIMAL_INTERVAL_MILLIS = 60_000;
 
   private static final String EXTRA_PHONE_ACCOUNT_HANDLE = "extra_phone_account_handle";
-  private static final String EXTRA_SYNC_TYPE = "extra_sync_type";
 
   private final RetryPolicy mRetryPolicy;
 
   private PhoneAccountHandle mPhone;
-  private String mSyncType;
 
-  public static void start(Context context, PhoneAccountHandle phone, String syncType) {
+  public static void start(Context context, PhoneAccountHandle phone) {
     Intent intent = BaseTask.createIntent(context, SyncTask.class, phone);
     intent.putExtra(EXTRA_PHONE_ACCOUNT_HANDLE, phone);
-    intent.putExtra(EXTRA_SYNC_TYPE, syncType);
     context.sendBroadcast(intent);
   }
 
@@ -62,13 +59,12 @@
   public void onCreate(Context context, Bundle extras) {
     super.onCreate(context, extras);
     mPhone = extras.getParcelable(EXTRA_PHONE_ACCOUNT_HANDLE);
-    mSyncType = extras.getString(EXTRA_SYNC_TYPE);
   }
 
   @Override
   public void onExecuteInBackgroundThread() {
     OmtpVvmSyncService service = new OmtpVvmSyncService(getContext());
-    service.sync(this, mSyncType, mPhone, null, mRetryPolicy.getVoicemailStatusEditor());
+    service.sync(this, mPhone, null, mRetryPolicy.getVoicemailStatusEditor());
   }
 
   @Override
@@ -76,7 +72,6 @@
     LoggerUtils.logImpressionOnMainThread(getContext(), DialerImpression.Type.VVM_AUTO_RETRY_SYNC);
     Intent intent = super.createRestartIntent();
     intent.putExtra(EXTRA_PHONE_ACCOUNT_HANDLE, mPhone);
-    intent.putExtra(EXTRA_SYNC_TYPE, mSyncType);
     return intent;
   }
 }
diff --git a/java/com/android/voicemail/impl/sync/UploadTask.java b/java/com/android/voicemail/impl/sync/UploadTask.java
index f2b2036..d8f06db 100644
--- a/java/com/android/voicemail/impl/sync/UploadTask.java
+++ b/java/com/android/voicemail/impl/sync/UploadTask.java
@@ -63,10 +63,6 @@
       return;
     }
     service.sync(
-        this,
-        OmtpVvmSyncService.SYNC_UPLOAD_ONLY,
-        phoneAccountHandle,
-        null,
-        VoicemailStatus.edit(getContext(), phoneAccountHandle));
+        this, phoneAccountHandle, null, VoicemailStatus.edit(getContext(), phoneAccountHandle));
   }
 }
diff --git a/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java b/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java
index 9b295db..316e1ca 100644
--- a/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java
+++ b/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java
@@ -49,8 +49,6 @@
   public static final int DELETED = 3;
   public static final int TRANSCRIPTION = 4;
 
-  static final String READ_SELECTION =
-      Voicemails.DIRTY + "=1 AND " + Voicemails.DELETED + "!=1 AND " + Voicemails.IS_READ + "=1";
   static final String DELETED_SELECTION = Voicemails.DELETED + "=1";
   static final String ARCHIVED_SELECTION = Voicemails.ARCHIVED + "=0";
 
@@ -65,15 +63,6 @@
   }
 
   /**
-   * Get all the local read voicemails that have not been synced to the server.
-   *
-   * @return A list of read voicemails.
-   */
-  public List<Voicemail> getReadVoicemails(@NonNull PhoneAccountHandle phoneAccountHandle) {
-    return getLocalVoicemails(phoneAccountHandle, READ_SELECTION);
-  }
-
-  /**
    * Get all the locally deleted voicemails that have not been synced to the server.
    *
    * @return A list of deleted voicemails.
diff --git a/java/com/android/voicemail/impl/sync/VvmNetworkRequestCallback.java b/java/com/android/voicemail/impl/sync/VvmNetworkRequestCallback.java
index 067eff8..068b19b 100644
--- a/java/com/android/voicemail/impl/sync/VvmNetworkRequestCallback.java
+++ b/java/com/android/voicemail/impl/sync/VvmNetworkRequestCallback.java
@@ -128,7 +128,7 @@
 
   @CallSuper
   public void onUnavailable() {
-    // TODO: b/32637799 this is hidden, do we really need this?
+    // TODO(twyen): b/32637799 this is hidden, do we really need this?
     mResultReceived = true;
     onFailed(NETWORK_REQUEST_FAILED_TIMEOUT);
   }
diff --git a/java/com/android/voicemail/impl/transcribe/TranscriptionBackfillService.java b/java/com/android/voicemail/impl/transcribe/TranscriptionBackfillService.java
new file mode 100644
index 0000000..f3c6e64
--- /dev/null
+++ b/java/com/android/voicemail/impl/transcribe/TranscriptionBackfillService.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2017 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.voicemail.impl.transcribe;
+
+import android.app.job.JobInfo;
+import android.app.job.JobScheduler;
+import android.app.job.JobWorkItem;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.support.annotation.WorkerThread;
+import android.support.v4.app.JobIntentService;
+import android.support.v4.os.BuildCompat;
+import com.android.dialer.common.LogUtil;
+import com.android.dialer.common.concurrent.ThreadUtil;
+import com.android.dialer.constants.ScheduledJobIds;
+import java.util.List;
+
+/**
+ * JobScheduler service for transcribing old voicemails. This service does a database scan for
+ * un-transcribed voicemails and schedules transcription tasks for them, once we have an un-metered
+ * network connection.
+ */
+public class TranscriptionBackfillService extends JobIntentService {
+
+  /** Schedule a task to scan the database for untranscribed voicemails */
+  public static boolean scheduleTask(Context context) {
+    if (BuildCompat.isAtLeastO()) {
+      LogUtil.enterBlock("TranscriptionBackfillService.transcribeOldVoicemails");
+      ComponentName componentName = new ComponentName(context, TranscriptionBackfillService.class);
+      JobInfo.Builder builder =
+          new JobInfo.Builder(ScheduledJobIds.VVM_TRANSCRIPTION_BACKFILL_JOB, componentName)
+              .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED);
+      JobScheduler scheduler = context.getSystemService(JobScheduler.class);
+      return scheduler.enqueue(builder.build(), makeWorkItem()) == JobScheduler.RESULT_SUCCESS;
+    } else {
+      LogUtil.i("TranscriptionBackfillService.transcribeOldVoicemails", "not supported");
+      return false;
+    }
+  }
+
+  private static JobWorkItem makeWorkItem() {
+    Intent intent = new Intent();
+    return new JobWorkItem(intent);
+  }
+
+  @Override
+  @WorkerThread
+  protected void onHandleWork(Intent intent) {
+    LogUtil.enterBlock("TranscriptionBackfillService.onHandleWork");
+
+    TranscriptionDbHelper dbHelper = new TranscriptionDbHelper(this);
+    List<Uri> untranscribed = dbHelper.getUntranscribedVoicemails();
+    LogUtil.i(
+        "TranscriptionBackfillService.onHandleWork",
+        "found " + untranscribed.size() + " untranscribed voicemails");
+    // TODO(mdooley): Consider doing the actual transcriptions here instead of scheduling jobs.
+    for (Uri uri : untranscribed) {
+      ThreadUtil.postOnUiThread(
+          () -> {
+            TranscriptionService.scheduleNewVoicemailTranscriptionJob(this, uri, false);
+          });
+    }
+  }
+
+  @Override
+  public void onDestroy() {
+    LogUtil.enterBlock("TranscriptionBackfillService.onDestroy");
+    super.onDestroy();
+  }
+}
diff --git a/java/com/android/voicemail/impl/transcribe/TranscriptionConfigProvider.java b/java/com/android/voicemail/impl/transcribe/TranscriptionConfigProvider.java
index 0c83615..83f04da 100644
--- a/java/com/android/voicemail/impl/transcribe/TranscriptionConfigProvider.java
+++ b/java/com/android/voicemail/impl/transcribe/TranscriptionConfigProvider.java
@@ -53,10 +53,38 @@
         .getBoolean("voicemail_transcription_server_use_plaintext", false);
   }
 
+  public boolean shouldUseSyncApi() {
+    return ConfigProviderBindings.get(context)
+        .getBoolean("voicemail_transcription_server_use_sync_api", false);
+  }
+
+  public long getMaxTranscriptionRetries() {
+    return ConfigProviderBindings.get(context)
+        .getLong("voicemail_transcription_max_transcription_retries", 2L);
+  }
+
+  public long getMaxGetTranscriptPolls() {
+    return ConfigProviderBindings.get(context)
+        .getLong("voicemail_transcription_max_get_transcript_polls", 20L);
+  }
+
+  public long getGetTranscriptPollIntervalMillis() {
+    return ConfigProviderBindings.get(context)
+        .getLong("voicemail_transcription_get_transcript_poll_interval_millis", 1000L);
+  }
+
   @Override
   public String toString() {
     return String.format(
-        "{ address: %s, api key: %s, auth token: %s, plaintext: %b }",
-        getServerAddress(), getApiKey(), getAuthToken(), shouldUsePlaintext());
+        "{ address: %s, api key: %s, auth token: %s, plaintext: %b, sync: %b, retries: %d, polls:"
+            + " %d, poll ms: %d }",
+        getServerAddress(),
+        getApiKey(),
+        getAuthToken(),
+        shouldUsePlaintext(),
+        shouldUseSyncApi(),
+        getMaxTranscriptionRetries(),
+        getMaxGetTranscriptPolls(),
+        getGetTranscriptPollIntervalMillis());
   }
 }
diff --git a/java/com/android/voicemail/impl/transcribe/TranscriptionDbHelper.java b/java/com/android/voicemail/impl/transcribe/TranscriptionDbHelper.java
index cbc5cb8..9d3c2e4 100644
--- a/java/com/android/voicemail/impl/transcribe/TranscriptionDbHelper.java
+++ b/java/com/android/voicemail/impl/transcribe/TranscriptionDbHelper.java
@@ -17,29 +17,36 @@
 
 import android.annotation.TargetApi;
 import android.content.ContentResolver;
+import android.content.ContentUris;
 import android.content.ContentValues;
 import android.content.Context;
 import android.database.Cursor;
 import android.net.Uri;
 import android.os.Build.VERSION_CODES;
 import android.provider.VoicemailContract.Voicemails;
+import android.support.annotation.VisibleForTesting;
 import android.support.annotation.WorkerThread;
 import android.support.v4.os.BuildCompat;
 import android.util.Pair;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
+import java.util.ArrayList;
+import java.util.List;
 
 /** Helper class for reading and writing transcription data in the database */
 @TargetApi(VERSION_CODES.O)
 public class TranscriptionDbHelper {
-  private static final String[] PROJECTION =
+  @VisibleForTesting
+  static final String[] PROJECTION =
       new String[] {
-        Voicemails.TRANSCRIPTION, // 0
-        VoicemailCompat.TRANSCRIPTION_STATE // 1
+        Voicemails._ID, // 0
+        Voicemails.TRANSCRIPTION, // 1
+        VoicemailCompat.TRANSCRIPTION_STATE // 2
       };
 
-  public static final int TRANSCRIPTION = 0;
-  public static final int TRANSCRIPTION_STATE = 1;
+  static final int ID = 0;
+  static final int TRANSCRIPTION = 1;
+  static final int TRANSCRIPTION_STATE = 2;
 
   private final ContentResolver contentResolver;
   private final Uri uri;
@@ -50,10 +57,14 @@
     this.uri = uri;
   }
 
+  TranscriptionDbHelper(Context context) {
+    this(context, Voicemails.buildSourceUri(context.getPackageName()));
+  }
+
   @WorkerThread
   @TargetApi(VERSION_CODES.M) // used for try with resources
   Pair<String, Integer> getTranscriptionAndState() {
-    Assert.checkArgument(BuildCompat.isAtLeastO());
+    Assert.checkState(BuildCompat.isAtLeastO());
     Assert.isWorkerThread();
     try (Cursor cursor = contentResolver.query(uri, PROJECTION, null, null, null)) {
       if (cursor == null) {
@@ -72,6 +83,27 @@
   }
 
   @WorkerThread
+  @TargetApi(VERSION_CODES.M) // used for try with resources
+  List<Uri> getUntranscribedVoicemails() {
+    Assert.checkArgument(BuildCompat.isAtLeastO());
+    Assert.isWorkerThread();
+    List<Uri> untranscribed = new ArrayList<>();
+    String whereClause =
+        Voicemails.TRANSCRIPTION + " is NULL AND " + VoicemailCompat.TRANSCRIPTION_STATE + "=?";
+    String[] whereArgs = {String.valueOf(VoicemailCompat.TRANSCRIPTION_NOT_STARTED)};
+    try (Cursor cursor = contentResolver.query(uri, PROJECTION, whereClause, whereArgs, null)) {
+      if (cursor == null) {
+        LogUtil.e("TranscriptionDbHelper.getUntranscribedVoicemails", "query failed.");
+      } else {
+        while (cursor.moveToNext()) {
+          untranscribed.add(ContentUris.withAppendedId(uri, cursor.getLong(ID)));
+        }
+      }
+    }
+    return untranscribed;
+  }
+
+  @WorkerThread
   void setTranscriptionState(int transcriptionState) {
     Assert.isWorkerThread();
     LogUtil.i(
diff --git a/java/com/android/voicemail/impl/transcribe/TranscriptionService.java b/java/com/android/voicemail/impl/transcribe/TranscriptionService.java
index 3e80a7f..2ca16fb 100644
--- a/java/com/android/voicemail/impl/transcribe/TranscriptionService.java
+++ b/java/com/android/voicemail/impl/transcribe/TranscriptionService.java
@@ -24,7 +24,6 @@
 import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;
-import android.os.StrictMode;
 import android.support.annotation.MainThread;
 import android.support.annotation.VisibleForTesting;
 import android.support.v4.os.BuildCompat;
@@ -32,6 +31,8 @@
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.constants.ScheduledJobIds;
+import com.android.dialer.logging.DialerImpression;
+import com.android.dialer.logging.Logger;
 import com.android.voicemail.impl.transcribe.grpc.TranscriptionClientFactory;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -48,7 +49,6 @@
   private JobParameters jobParameters;
   private TranscriptionClientFactory clientFactory;
   private TranscriptionConfigProvider configProvider;
-  private StrictMode.VmPolicy originalPolicy;
 
   /** Callback used by a task to indicate it has finished processing its work item */
   interface JobCallback {
@@ -57,25 +57,37 @@
 
   // Schedule a task to transcribe the indicated voicemail, return true if transcription task was
   // scheduled.
-  public static boolean transcribeVoicemail(Context context, Uri voicemailUri) {
+  @MainThread
+  public static boolean scheduleNewVoicemailTranscriptionJob(
+      Context context, Uri voicemailUri, boolean highPriority) {
     Assert.isMainThread();
     if (BuildCompat.isAtLeastO()) {
-      LogUtil.i("TranscriptionService.transcribeVoicemail", "scheduling transcription");
+      LogUtil.i(
+          "TranscriptionService.scheduleNewVoicemailTranscriptionJob", "scheduling transcription");
+      Logger.get(context).logImpression(DialerImpression.Type.VVM_TRANSCRIPTION_VOICEMAIL_RECEIVED);
+
       ComponentName componentName = new ComponentName(context, TranscriptionService.class);
       JobInfo.Builder builder =
-          new JobInfo.Builder(ScheduledJobIds.VVM_TRANSCRIPTION_JOB, componentName)
-              .setMinimumLatency(0)
-              .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY);
+          new JobInfo.Builder(ScheduledJobIds.VVM_TRANSCRIPTION_JOB, componentName);
+      if (highPriority) {
+        builder
+            .setMinimumLatency(0)
+            .setOverrideDeadline(0)
+            .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY);
+      } else {
+        builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED);
+      }
       JobScheduler scheduler = context.getSystemService(JobScheduler.class);
       JobWorkItem workItem = makeWorkItem(voicemailUri);
       return scheduler.enqueue(builder.build(), workItem) == JobScheduler.RESULT_SUCCESS;
     } else {
-      LogUtil.i("TranscriptionService.transcribeVoicemail", "not supported");
+      LogUtil.i("TranscriptionService.scheduleNewVoicemailTranscriptionJob", "not supported");
       return false;
     }
   }
 
   // Cancel all transcription tasks
+  @MainThread
   public static void cancelTranscriptions(Context context) {
     Assert.isMainThread();
     LogUtil.enterBlock("TranscriptionService.cancelTranscriptions");
@@ -83,6 +95,7 @@
     scheduler.cancel(ScheduledJobIds.VVM_TRANSCRIPTION_JOB);
   }
 
+  @MainThread
   public TranscriptionService() {
     Assert.isMainThread();
   }
@@ -98,6 +111,7 @@
   }
 
   @Override
+  @MainThread
   public boolean onStartJob(JobParameters params) {
     Assert.isMainThread();
     LogUtil.enterBlock("TranscriptionService.onStartJob");
@@ -111,14 +125,13 @@
       LogUtil.i(
           "TranscriptionService.onStartJob",
           "transcription server address: " + configProvider.getServerAddress());
-      originalPolicy = StrictMode.getVmPolicy();
-      StrictMode.enableDefaults();
       jobParameters = params;
       return checkForWork();
     }
   }
 
   @Override
+  @MainThread
   public boolean onStopJob(JobParameters params) {
     Assert.isMainThread();
     LogUtil.enterBlock("TranscriptionService.onStopJob");
@@ -127,6 +140,7 @@
   }
 
   @Override
+  @MainThread
   public void onDestroy() {
     Assert.isMainThread();
     LogUtil.enterBlock("TranscriptionService.onDestroy");
@@ -142,10 +156,6 @@
       executorService.shutdownNow();
       executorService = null;
     }
-    if (originalPolicy != null) {
-      StrictMode.setVmPolicy(originalPolicy);
-      originalPolicy = null;
-    }
   }
 
   @MainThread
@@ -153,14 +163,23 @@
     Assert.isMainThread();
     JobWorkItem workItem = jobParameters.dequeueWork();
     if (workItem != null) {
-      getExecutorService()
-          .execute(new TranscriptionTask(this, new Callback(), workItem, getClientFactory()));
+      TranscriptionTask task =
+          configProvider.shouldUseSyncApi()
+              ? new TranscriptionTaskSync(
+                  this, new Callback(), workItem, getClientFactory(), configProvider)
+              : new TranscriptionTaskAsync(
+                  this, new Callback(), workItem, getClientFactory(), configProvider);
+      getExecutorService().execute(task);
       return true;
     } else {
       return false;
     }
   }
 
+  static Uri getVoicemailUri(JobWorkItem workItem) {
+    return workItem.getIntent().getParcelableExtra(EXTRA_VOICEMAIL_URI);
+  }
+
   private ExecutorService getExecutorService() {
     if (executorService == null) {
       // The common use case is transcribing a single voicemail so just use a single thread executor
@@ -173,6 +192,7 @@
 
   private class Callback implements JobCallback {
     @Override
+    @MainThread
     public void onWorkCompleted(JobWorkItem completedWorkItem) {
       Assert.isMainThread();
       LogUtil.i("TranscriptionService.Callback.onWorkCompleted", completedWorkItem.toString());
diff --git a/java/com/android/voicemail/impl/transcribe/TranscriptionTask.java b/java/com/android/voicemail/impl/transcribe/TranscriptionTask.java
index a14b6df..b5f29da 100644
--- a/java/com/android/voicemail/impl/transcribe/TranscriptionTask.java
+++ b/java/com/android/voicemail/impl/transcribe/TranscriptionTask.java
@@ -20,6 +20,7 @@
 import android.content.Context;
 import android.net.Uri;
 import android.text.TextUtils;
+import android.util.Pair;
 import com.android.dialer.common.concurrent.ThreadUtil;
 import com.android.dialer.logging.DialerImpression;
 import com.android.dialer.logging.Logger;
@@ -27,10 +28,10 @@
 import com.android.voicemail.impl.transcribe.TranscriptionService.JobCallback;
 import com.android.voicemail.impl.transcribe.grpc.TranscriptionClient;
 import com.android.voicemail.impl.transcribe.grpc.TranscriptionClientFactory;
+import com.android.voicemail.impl.transcribe.grpc.TranscriptionResponse;
 import com.google.internal.communications.voicemailtranscription.v1.AudioFormat;
-import com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailRequest;
+import com.google.internal.communications.voicemailtranscription.v1.TranscriptionStatus;
 import com.google.protobuf.ByteString;
-import io.grpc.Status;
 import java.io.IOException;
 import java.io.InputStream;
 
@@ -41,7 +42,7 @@
  * This task performs the following steps:
  *   1. Update the transcription-state in the database to 'in-progress'
  *   2. Create grpc client and transcription request
- *   3. Make synchronous grpc transcription request to backend server
+ *   3. Make synchronous or asynchronous grpc transcription request to backend server
  *     3a. On response
  *       Update the database with transcription (if successful) and new transcription-state
  *     3b. On network error
@@ -50,7 +51,7 @@
  *   4. Notify the callback that the work item is complete
  * </pre>
  */
-public class TranscriptionTask implements Runnable {
+public abstract class TranscriptionTask implements Runnable {
   private static final String TAG = "TranscriptionTask";
 
   private final Context context;
@@ -59,22 +60,29 @@
   private final TranscriptionClientFactory clientFactory;
   private final Uri voicemailUri;
   private final TranscriptionDbHelper databaseHelper;
-  private ByteString audioData;
-  private AudioFormat encoding;
+  protected final TranscriptionConfigProvider configProvider;
+  protected ByteString audioData;
+  protected AudioFormat encoding;
 
-  private static final int MAX_RETRIES = 2;
   static final String AMR_PREFIX = "#!AMR\n";
 
-  public TranscriptionTask(
+  /** Functional interface for sending requests to the transcription server */
+  public interface Request {
+    TranscriptionResponse getResponse(TranscriptionClient client);
+  }
+
+  TranscriptionTask(
       Context context,
       JobCallback callback,
       JobWorkItem workItem,
-      TranscriptionClientFactory clientFactory) {
+      TranscriptionClientFactory clientFactory,
+      TranscriptionConfigProvider configProvider) {
     this.context = context;
     this.callback = callback;
     this.workItem = workItem;
     this.clientFactory = clientFactory;
-    this.voicemailUri = getVoicemailUri(workItem);
+    this.voicemailUri = TranscriptionService.getVoicemailUri(workItem);
+    this.configProvider = configProvider;
     databaseHelper = new TranscriptionDbHelper(context, voicemailUri);
   }
 
@@ -85,6 +93,13 @@
       updateTranscriptionState(VoicemailCompat.TRANSCRIPTION_IN_PROGRESS);
       transcribeVoicemail();
     } else {
+      if (AudioFormat.AUDIO_FORMAT_UNSPECIFIED.equals(encoding)) {
+        Logger.get(context)
+            .logImpression(DialerImpression.Type.VVM_TRANSCRIPTION_VOICEMAIL_FORMAT_NOT_SUPPORTED);
+      } else {
+        Logger.get(context)
+            .logImpression(DialerImpression.Type.VVM_TRANSCRIPTION_VOICEMAIL_INVALID_DATA);
+      }
       updateTranscriptionState(VoicemailCompat.TRANSCRIPTION_FAILED);
     }
     ThreadUtil.postOnUiThread(
@@ -93,62 +108,77 @@
         });
   }
 
+  protected abstract Pair<String, TranscriptionStatus> getTranscription();
+
+  protected abstract DialerImpression.Type getRequestSentImpression();
+
   private void transcribeVoicemail() {
     VvmLog.i(TAG, "transcribeVoicemail");
-    TranscribeVoicemailRequest request = makeRequest();
+    Pair<String, TranscriptionStatus> pair = getTranscription();
+    String transcript = pair.first;
+    TranscriptionStatus status = pair.second;
+    if (!TextUtils.isEmpty(transcript)) {
+      updateTranscriptionAndState(transcript, VoicemailCompat.TRANSCRIPTION_AVAILABLE);
+      VvmLog.i(TAG, "transcribeVoicemail, got response");
+      Logger.get(context).logImpression(DialerImpression.Type.VVM_TRANSCRIPTION_RESPONSE_SUCCESS);
+    } else {
+      VvmLog.i(TAG, "transcribeVoicemail, transcription unsuccessful, " + status);
+      switch (status) {
+        case FAILED_LANGUAGE_NOT_SUPPORTED:
+          Logger.get(context)
+              .logImpression(
+                  DialerImpression.Type.VVM_TRANSCRIPTION_RESPONSE_LANGUAGE_NOT_SUPPORTED);
+          break;
+        case FAILED_NO_SPEECH_DETECTED:
+          Logger.get(context)
+              .logImpression(DialerImpression.Type.VVM_TRANSCRIPTION_RESPONSE_NO_SPEECH_DETECTED);
+          break;
+        case EXPIRED:
+          Logger.get(context)
+              .logImpression(DialerImpression.Type.VVM_TRANSCRIPTION_RESPONSE_EXPIRED);
+          break;
+        default:
+          Logger.get(context).logImpression(DialerImpression.Type.VVM_TRANSCRIPTION_RESPONSE_EMPTY);
+          break;
+      }
+      updateTranscriptionAndState(transcript, VoicemailCompat.TRANSCRIPTION_FAILED);
+    }
+  }
+
+  protected TranscriptionResponse sendRequest(Request request) {
+    VvmLog.i(TAG, "sendRequest");
     TranscriptionClient client = clientFactory.getClient();
-    String transcript = null;
-    for (int i = 0; transcript == null && i < MAX_RETRIES; i++) {
-      VvmLog.i(TAG, "transcribeVoicemail, try: " + (i + 1));
+    for (int i = 0; i < configProvider.getMaxTranscriptionRetries(); i++) {
+      VvmLog.i(TAG, "sendRequest, try: " + (i + 1));
       if (i == 0) {
-        Logger.get(context).logImpression(DialerImpression.Type.VVM_TRANSCRIPTION_REQUEST_SENT);
+        Logger.get(context).logImpression(getRequestSentImpression());
       } else {
         Logger.get(context).logImpression(DialerImpression.Type.VVM_TRANSCRIPTION_REQUEST_RETRY);
       }
-      TranscriptionClient.TranscriptionResponseWrapper responseWrapper =
-          client.transcribeVoicemail(request);
-      if (responseWrapper.status != null) {
-        VvmLog.i(TAG, "transcribeVoicemail, status: " + responseWrapper.status.getCode());
-        if (shouldRetryRequest(responseWrapper.status)) {
-          Logger.get(context)
-              .logImpression(DialerImpression.Type.VVM_TRANSCRIPTION_RESPONSE_RECOVERABLE_ERROR);
-          backoff(i);
-        } else {
-          Logger.get(context)
-              .logImpression(DialerImpression.Type.VVM_TRANSCRIPTION_RESPONSE_FATAL_ERROR);
-          break;
-        }
-      } else if (responseWrapper.response != null) {
-        if (!TextUtils.isEmpty(responseWrapper.response.getTranscript())) {
-          VvmLog.i(TAG, "transcribeVoicemail, got response");
-          transcript = responseWrapper.response.getTranscript();
-          Logger.get(context)
-              .logImpression(DialerImpression.Type.VVM_TRANSCRIPTION_RESPONSE_SUCCESS);
-        } else {
-          VvmLog.i(TAG, "transcribeVoicemail, empty transcription");
-          Logger.get(context).logImpression(DialerImpression.Type.VVM_TRANSCRIPTION_RESPONSE_EMPTY);
-        }
+
+      TranscriptionResponse response = request.getResponse(client);
+      if (response.hasRecoverableError()) {
+        Logger.get(context)
+            .logImpression(DialerImpression.Type.VVM_TRANSCRIPTION_RESPONSE_RECOVERABLE_ERROR);
+        backoff(i);
       } else {
-        VvmLog.w(TAG, "transcribeVoicemail, no response");
-        Logger.get(context).logImpression(DialerImpression.Type.VVM_TRANSCRIPTION_RESPONSE_INVALID);
+        return response;
       }
     }
 
-    int newState =
-        (transcript == null)
-            ? VoicemailCompat.TRANSCRIPTION_FAILED
-            : VoicemailCompat.TRANSCRIPTION_AVAILABLE;
-    updateTranscriptionAndState(transcript, newState);
-  }
-
-  private static boolean shouldRetryRequest(Status status) {
-    return status.getCode() == Status.Code.UNAVAILABLE;
+    Logger.get(context)
+        .logImpression(DialerImpression.Type.VVM_TRANSCRIPTION_RESPONSE_TOO_MANY_ERRORS);
+    return null;
   }
 
   private static void backoff(int retryCount) {
     VvmLog.i(TAG, "backoff, count: " + retryCount);
+    long millis = (1L << retryCount) * 1000;
+    sleep(millis);
+  }
+
+  protected static void sleep(long millis) {
     try {
-      long millis = (1 << retryCount) * 1000;
       Thread.sleep(millis);
     } catch (InterruptedException e) {
       VvmLog.w(TAG, "interrupted");
@@ -164,13 +194,6 @@
     databaseHelper.setTranscriptionState(newState);
   }
 
-  private TranscribeVoicemailRequest makeRequest() {
-    return TranscribeVoicemailRequest.newBuilder()
-        .setVoicemailData(audioData)
-        .setAudioFormat(encoding)
-        .build();
-  }
-
   // Uses try-with-resource
   @TargetApi(android.os.Build.VERSION_CODES.M)
   private boolean readAndValidateAudioFile() {
@@ -199,8 +222,4 @@
 
     return true;
   }
-
-  private static Uri getVoicemailUri(JobWorkItem workItem) {
-    return workItem.getIntent().getParcelableExtra(TranscriptionService.EXTRA_VOICEMAIL_URI);
-  }
 }
diff --git a/java/com/android/voicemail/impl/transcribe/TranscriptionTaskAsync.java b/java/com/android/voicemail/impl/transcribe/TranscriptionTaskAsync.java
new file mode 100644
index 0000000..3c41aef
--- /dev/null
+++ b/java/com/android/voicemail/impl/transcribe/TranscriptionTaskAsync.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright (C) 2017 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.voicemail.impl.transcribe;
+
+import android.app.job.JobWorkItem;
+import android.content.Context;
+import android.util.Pair;
+import com.android.dialer.common.Assert;
+import com.android.dialer.logging.DialerImpression;
+import com.android.voicemail.impl.VvmLog;
+import com.android.voicemail.impl.transcribe.TranscriptionService.JobCallback;
+import com.android.voicemail.impl.transcribe.grpc.GetTranscriptResponseAsync;
+import com.android.voicemail.impl.transcribe.grpc.TranscriptionClientFactory;
+import com.android.voicemail.impl.transcribe.grpc.TranscriptionResponseAsync;
+import com.google.internal.communications.voicemailtranscription.v1.GetTranscriptRequest;
+import com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailAsyncRequest;
+import com.google.internal.communications.voicemailtranscription.v1.TranscriptionStatus;
+
+/**
+ * Background task to get a voicemail transcription using the asynchronous API. The async API works
+ * as follows:
+ *
+ * <ol>
+ *   <li>client uploads voicemail data to the server
+ *   <li>server responds with a transcription-id and an estimated transcription wait time
+ *   <li>client waits appropriate amount of time then begins polling for the result
+ * </ol>
+ *
+ * This implementation blocks until the response or an error is received, even though it is using
+ * the asynchronous server API.
+ */
+public class TranscriptionTaskAsync extends TranscriptionTask {
+  private static final String TAG = "TranscriptionTaskAsync";
+
+  public TranscriptionTaskAsync(
+      Context context,
+      JobCallback callback,
+      JobWorkItem workItem,
+      TranscriptionClientFactory clientFactory,
+      TranscriptionConfigProvider configProvider) {
+    super(context, callback, workItem, clientFactory, configProvider);
+  }
+
+  @Override
+  protected Pair<String, TranscriptionStatus> getTranscription() {
+    VvmLog.i(TAG, "getTranscription");
+
+    TranscriptionResponseAsync uploadResponse =
+        (TranscriptionResponseAsync)
+            sendRequest((client) -> client.sendUploadRequest(getUploadRequest()));
+
+    if (uploadResponse == null) {
+      VvmLog.i(TAG, "getTranscription, failed to upload voicemail.");
+      return new Pair<>(null, TranscriptionStatus.FAILED_NO_RETRY);
+    } else {
+      waitForTranscription(uploadResponse);
+      return pollForTranscription(uploadResponse);
+    }
+  }
+
+  @Override
+  protected DialerImpression.Type getRequestSentImpression() {
+    return DialerImpression.Type.VVM_TRANSCRIPTION_REQUEST_SENT_ASYNC;
+  }
+
+  private static void waitForTranscription(TranscriptionResponseAsync uploadResponse) {
+    long millis = uploadResponse.getEstimatedWaitMillis();
+    VvmLog.i(TAG, "waitForTranscription, " + millis + " millis");
+    sleep(millis);
+  }
+
+  private Pair<String, TranscriptionStatus> pollForTranscription(
+      TranscriptionResponseAsync uploadResponse) {
+    VvmLog.i(TAG, "pollForTranscription");
+    GetTranscriptRequest request = getGetTranscriptRequest(uploadResponse);
+    for (int i = 0; i < configProvider.getMaxGetTranscriptPolls(); i++) {
+      GetTranscriptResponseAsync response =
+          (GetTranscriptResponseAsync)
+              sendRequest((client) -> client.sendGetTranscriptRequest(request));
+      if (response == null) {
+        VvmLog.i(TAG, "pollForTranscription, no transcription result.");
+      } else if (response.isTranscribing()) {
+        VvmLog.i(TAG, "pollForTranscription, poll count: " + (i + 1));
+      } else if (response.hasFatalError()) {
+        VvmLog.i(TAG, "pollForTranscription, fail. " + response.getErrorDescription());
+        return new Pair<>(null, response.getTranscriptionStatus());
+      } else {
+        VvmLog.i(TAG, "pollForTranscription, got transcription");
+        return new Pair<>(response.getTranscript(), TranscriptionStatus.SUCCESS);
+      }
+      sleep(configProvider.getGetTranscriptPollIntervalMillis());
+    }
+    VvmLog.i(TAG, "pollForTranscription, timed out.");
+    return new Pair<>(null, TranscriptionStatus.FAILED_NO_RETRY);
+  }
+
+  private TranscribeVoicemailAsyncRequest getUploadRequest() {
+    return TranscribeVoicemailAsyncRequest.newBuilder()
+        .setVoicemailData(audioData)
+        .setAudioFormat(encoding)
+        .build();
+  }
+
+  private GetTranscriptRequest getGetTranscriptRequest(TranscriptionResponseAsync uploadResponse) {
+    Assert.checkArgument(uploadResponse.getTranscriptionId() != null);
+    return GetTranscriptRequest.newBuilder()
+        .setTranscriptionId(uploadResponse.getTranscriptionId())
+        .build();
+  }
+}
diff --git a/java/com/android/voicemail/impl/transcribe/TranscriptionTaskSync.java b/java/com/android/voicemail/impl/transcribe/TranscriptionTaskSync.java
new file mode 100644
index 0000000..bee6859
--- /dev/null
+++ b/java/com/android/voicemail/impl/transcribe/TranscriptionTaskSync.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2017 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.voicemail.impl.transcribe;
+
+import android.app.job.JobWorkItem;
+import android.content.Context;
+import android.util.Pair;
+import com.android.dialer.logging.DialerImpression;
+import com.android.voicemail.impl.VvmLog;
+import com.android.voicemail.impl.transcribe.TranscriptionService.JobCallback;
+import com.android.voicemail.impl.transcribe.grpc.TranscriptionClientFactory;
+import com.android.voicemail.impl.transcribe.grpc.TranscriptionResponseSync;
+import com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailRequest;
+import com.google.internal.communications.voicemailtranscription.v1.TranscriptionStatus;
+
+/** Background task to get a voicemail transcription using the synchronous API */
+public class TranscriptionTaskSync extends TranscriptionTask {
+  private static final String TAG = "TranscriptionTaskSync";
+
+  public TranscriptionTaskSync(
+      Context context,
+      JobCallback callback,
+      JobWorkItem workItem,
+      TranscriptionClientFactory clientFactory,
+      TranscriptionConfigProvider configProvider) {
+    super(context, callback, workItem, clientFactory, configProvider);
+  }
+
+  @Override
+  protected Pair<String, TranscriptionStatus> getTranscription() {
+    VvmLog.i(TAG, "getTranscription");
+
+    TranscriptionResponseSync response =
+        (TranscriptionResponseSync)
+            sendRequest((client) -> client.sendSyncRequest(getSyncRequest()));
+    if (response == null) {
+      VvmLog.i(TAG, "getTranscription, failed to transcribe voicemail.");
+      return new Pair<>(null, TranscriptionStatus.FAILED_NO_RETRY);
+    } else {
+      VvmLog.i(TAG, "getTranscription, got transcription");
+      return new Pair<>(response.getTranscript(), TranscriptionStatus.SUCCESS);
+    }
+  }
+
+  @Override
+  protected DialerImpression.Type getRequestSentImpression() {
+    return DialerImpression.Type.VVM_TRANSCRIPTION_REQUEST_SENT;
+  }
+
+  private TranscribeVoicemailRequest getSyncRequest() {
+    return TranscribeVoicemailRequest.newBuilder()
+        .setVoicemailData(audioData)
+        .setAudioFormat(encoding)
+        .build();
+  }
+}
diff --git a/java/com/android/voicemail/impl/transcribe/grpc/GetTranscriptResponseAsync.java b/java/com/android/voicemail/impl/transcribe/grpc/GetTranscriptResponseAsync.java
new file mode 100644
index 0000000..f979d69
--- /dev/null
+++ b/java/com/android/voicemail/impl/transcribe/grpc/GetTranscriptResponseAsync.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2017 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.voicemail.impl.transcribe.grpc;
+
+import android.support.annotation.Nullable;
+import android.support.annotation.VisibleForTesting;
+import com.android.dialer.common.Assert;
+import com.google.internal.communications.voicemailtranscription.v1.GetTranscriptResponse;
+import com.google.internal.communications.voicemailtranscription.v1.TranscriptionStatus;
+import io.grpc.Status;
+
+/** Container for response and status objects for an asynchronous get-transcript request */
+public class GetTranscriptResponseAsync extends TranscriptionResponse {
+  @Nullable private final GetTranscriptResponse response;
+
+  @VisibleForTesting
+  public GetTranscriptResponseAsync(GetTranscriptResponse response) {
+    Assert.checkArgument(response != null);
+    this.response = response;
+  }
+
+  @VisibleForTesting
+  public GetTranscriptResponseAsync(Status status) {
+    super(status);
+    this.response = null;
+  }
+
+  public @Nullable String getTranscript() {
+    if (response != null) {
+      return response.getTranscript();
+    }
+    return null;
+  }
+
+  public @Nullable String getErrorDescription() {
+    if (!hasRecoverableError() && !hasFatalError()) {
+      return null;
+    }
+    if (status != null) {
+      return "Grpc error: " + status;
+    }
+    if (response != null) {
+      return "Transcription error: " + response.getStatus();
+    }
+    Assert.fail("Impossible state");
+    return null;
+  }
+
+  public TranscriptionStatus getTranscriptionStatus() {
+    if (response == null) {
+      return TranscriptionStatus.TRANSCRIPTION_STATUS_UNSPECIFIED;
+    } else {
+      return response.getStatus();
+    }
+  }
+
+  public boolean isTranscribing() {
+    return response != null && response.getStatus() == TranscriptionStatus.PENDING;
+  }
+
+  @Override
+  public boolean hasRecoverableError() {
+    if (super.hasRecoverableError()) {
+      return true;
+    }
+
+    if (response != null) {
+      return response.getStatus() == TranscriptionStatus.EXPIRED
+          || response.getStatus() == TranscriptionStatus.FAILED_RETRY;
+    }
+
+    return false;
+  }
+
+  @Override
+  public boolean hasFatalError() {
+    if (super.hasFatalError()) {
+      return true;
+    }
+
+    if (response != null) {
+      return response.getStatus() == TranscriptionStatus.FAILED_NO_RETRY
+          || response.getStatus() == TranscriptionStatus.FAILED_LANGUAGE_NOT_SUPPORTED
+          || response.getStatus() == TranscriptionStatus.FAILED_NO_SPEECH_DETECTED;
+    }
+
+    return false;
+  }
+}
diff --git a/java/com/android/voicemail/impl/transcribe/grpc/TranscriptionClient.java b/java/com/android/voicemail/impl/transcribe/grpc/TranscriptionClient.java
index 27603d9..b18d956 100644
--- a/java/com/android/voicemail/impl/transcribe/grpc/TranscriptionClient.java
+++ b/java/com/android/voicemail/impl/transcribe/grpc/TranscriptionClient.java
@@ -15,13 +15,11 @@
  */
 package com.android.voicemail.impl.transcribe.grpc;
 
-import android.support.annotation.Nullable;
 import android.support.annotation.WorkerThread;
-import com.android.dialer.common.Assert;
+import com.google.internal.communications.voicemailtranscription.v1.GetTranscriptRequest;
+import com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailAsyncRequest;
 import com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailRequest;
-import com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailResponse;
 import com.google.internal.communications.voicemailtranscription.v1.VoicemailTranscriptionServiceGrpc;
-import io.grpc.Status;
 import io.grpc.StatusRuntimeException;
 
 /** Wrapper around Grpc transcription server stub */
@@ -29,33 +27,35 @@
 
   private final VoicemailTranscriptionServiceGrpc.VoicemailTranscriptionServiceBlockingStub stub;
 
-  /** Wraps the server response and status objects, either of which may be null. */
-  public static class TranscriptionResponseWrapper {
-    public final TranscribeVoicemailResponse response;
-    public final Status status;
-
-    public TranscriptionResponseWrapper(
-        @Nullable TranscribeVoicemailResponse response, @Nullable Status status) {
-      Assert.checkArgument(!(response == null && status == null));
-      this.response = response;
-      this.status = status;
-    }
-  }
-
   TranscriptionClient(
       VoicemailTranscriptionServiceGrpc.VoicemailTranscriptionServiceBlockingStub stub) {
     this.stub = stub;
   }
 
   @WorkerThread
-  public TranscriptionResponseWrapper transcribeVoicemail(TranscribeVoicemailRequest request) {
-    TranscribeVoicemailResponse response = null;
-    Status status = null;
+  public TranscriptionResponseSync sendSyncRequest(TranscribeVoicemailRequest request) {
     try {
-      response = stub.transcribeVoicemail(request);
+      return new TranscriptionResponseSync(stub.transcribeVoicemail(request));
     } catch (StatusRuntimeException e) {
-      status = e.getStatus();
+      return new TranscriptionResponseSync(e.getStatus());
     }
-    return new TranscriptionClient.TranscriptionResponseWrapper(response, status);
+  }
+
+  @WorkerThread
+  public TranscriptionResponseAsync sendUploadRequest(TranscribeVoicemailAsyncRequest request) {
+    try {
+      return new TranscriptionResponseAsync(stub.transcribeVoicemailAsync(request));
+    } catch (StatusRuntimeException e) {
+      return new TranscriptionResponseAsync(e.getStatus());
+    }
+  }
+
+  @WorkerThread
+  public GetTranscriptResponseAsync sendGetTranscriptRequest(GetTranscriptRequest request) {
+    try {
+      return new GetTranscriptResponseAsync(stub.getTranscript(request));
+    } catch (StatusRuntimeException e) {
+      return new GetTranscriptResponseAsync(e.getStatus());
+    }
   }
 }
diff --git a/java/com/android/voicemail/impl/transcribe/grpc/TranscriptionClientFactory.java b/java/com/android/voicemail/impl/transcribe/grpc/TranscriptionClientFactory.java
index 6101ed5..c57b01f 100644
--- a/java/com/android/voicemail/impl/transcribe/grpc/TranscriptionClientFactory.java
+++ b/java/com/android/voicemail/impl/transcribe/grpc/TranscriptionClientFactory.java
@@ -76,7 +76,9 @@
 
   public void shutdown() {
     LogUtil.enterBlock("TranscriptionClientFactory.shutdown");
-    originalChannel.shutdown();
+    if (!originalChannel.isShutdown()) {
+      originalChannel.shutdown();
+    }
   }
 
   private static ManagedChannel getManagedChannel(TranscriptionConfigProvider configProvider) {
diff --git a/java/com/android/voicemail/impl/transcribe/grpc/TranscriptionResponse.java b/java/com/android/voicemail/impl/transcribe/grpc/TranscriptionResponse.java
new file mode 100644
index 0000000..f0823de
--- /dev/null
+++ b/java/com/android/voicemail/impl/transcribe/grpc/TranscriptionResponse.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2017 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.voicemail.impl.transcribe.grpc;
+
+import android.support.annotation.Nullable;
+import com.android.dialer.common.Assert;
+import io.grpc.Status;
+
+/**
+ * Base class for encapulating a voicemail transcription server response. This handles the Grpc
+ * status response, subclasses will handle request specific responses.
+ */
+public abstract class TranscriptionResponse {
+  @Nullable public final Status status;
+
+  TranscriptionResponse() {
+    this.status = null;
+  }
+
+  TranscriptionResponse(Status status) {
+    Assert.checkArgument(status != null);
+    this.status = status;
+  }
+
+  public boolean hasRecoverableError() {
+    if (status != null) {
+      return status.getCode() == Status.Code.UNAVAILABLE;
+    }
+
+    return false;
+  }
+
+  public boolean hasFatalError() {
+    if (status != null) {
+      return status.getCode() != Status.Code.OK && status.getCode() != Status.Code.UNAVAILABLE;
+    }
+
+    return false;
+  }
+}
diff --git a/java/com/android/voicemail/impl/transcribe/grpc/TranscriptionResponseAsync.java b/java/com/android/voicemail/impl/transcribe/grpc/TranscriptionResponseAsync.java
new file mode 100644
index 0000000..38b4630
--- /dev/null
+++ b/java/com/android/voicemail/impl/transcribe/grpc/TranscriptionResponseAsync.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2017 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.voicemail.impl.transcribe.grpc;
+
+import android.support.annotation.Nullable;
+import android.support.annotation.VisibleForTesting;
+import com.android.dialer.common.Assert;
+import com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailAsyncResponse;
+import io.grpc.Status;
+
+/** Container for response and status objects for an asynchronous transcription upload request */
+public class TranscriptionResponseAsync extends TranscriptionResponse {
+  @Nullable private final TranscribeVoicemailAsyncResponse response;
+
+  @VisibleForTesting
+  public TranscriptionResponseAsync(TranscribeVoicemailAsyncResponse response) {
+    Assert.checkArgument(response != null);
+    this.response = response;
+  }
+
+  @VisibleForTesting
+  public TranscriptionResponseAsync(Status status) {
+    super(status);
+    this.response = null;
+  }
+
+  public @Nullable String getTranscriptionId() {
+    if (response != null) {
+      return response.getTranscriptionId();
+    }
+    return null;
+  }
+
+  public long getEstimatedWaitMillis() {
+    if (response != null) {
+      return response.getEstimatedWaitSecs() * 1_000L;
+    }
+    return 0;
+  }
+}
diff --git a/java/com/android/voicemail/impl/transcribe/grpc/TranscriptionResponseSync.java b/java/com/android/voicemail/impl/transcribe/grpc/TranscriptionResponseSync.java
new file mode 100644
index 0000000..d2e2e21
--- /dev/null
+++ b/java/com/android/voicemail/impl/transcribe/grpc/TranscriptionResponseSync.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2017 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.voicemail.impl.transcribe.grpc;
+
+import android.support.annotation.Nullable;
+import android.support.annotation.VisibleForTesting;
+import com.android.dialer.common.Assert;
+import com.google.internal.communications.voicemailtranscription.v1.TranscribeVoicemailResponse;
+import io.grpc.Status;
+
+/** Container for response and status objects for a synchronous transcription request */
+public class TranscriptionResponseSync extends TranscriptionResponse {
+  @Nullable private final TranscribeVoicemailResponse response;
+
+  @VisibleForTesting
+  public TranscriptionResponseSync(Status status) {
+    super(status);
+    this.response = null;
+  }
+
+  @VisibleForTesting
+  public TranscriptionResponseSync(TranscribeVoicemailResponse response) {
+    Assert.checkArgument(response != null);
+    this.response = response;
+  }
+
+  public @Nullable String getTranscript() {
+    return (response != null) ? response.getTranscript() : null;
+  }
+}
diff --git a/java/com/android/voicemail/impl/transcribe/grpc/voicemail_transcription.proto b/java/com/android/voicemail/impl/transcribe/grpc/voicemail_transcription.proto
index 4b1e19b..a2064d1 100644
--- a/java/com/android/voicemail/impl/transcribe/grpc/voicemail_transcription.proto
+++ b/java/com/android/voicemail/impl/transcribe/grpc/voicemail_transcription.proto
@@ -5,9 +5,10 @@
 package google.internal.communications.voicemailtranscription.v1;
 
 option java_multiple_files = true;
-option java_package = "com.google.internal.communications.voicemailtranscription.v1";
 option optimize_for = LITE_RUNTIME;
 
+option java_package = "com.google.internal.communications.voicemailtranscription.v1";
+
 // Enum that specifies supported audio formats.
 enum AudioFormat {
   // Default but invalid value.
@@ -18,6 +19,43 @@
   AMR_NB_8KHZ = 1;
 }
 
+// Enum that describes the status of the transcription process.
+enum TranscriptionStatus {
+  // Default but invalid value.
+  TRANSCRIPTION_STATUS_UNSPECIFIED = 0;
+
+  // Transcription was successful and the transcript is present.
+  SUCCESS = 1;
+
+  // Transcription is progress. Check again later.
+  PENDING = 2;
+
+  // Transcription was successful, but the expiration period has passed, which
+  // means that the sensative data (including the transcript) has been deleted.
+  // Resend the voicemail through TranscribeVoicemailAsync to retry.
+  EXPIRED = 3;
+
+  // Internal error encountered during the transcription.
+  // Resend the voicemail through TranscribeVoicemailAsync to retry.
+  // This is a catch-all status for all retriable errors that aren't captured by
+  // a more specfic status.
+  FAILED_RETRY = 4;
+
+  // Internal error encountered during the transcription.
+  // Do not resend the voicemail.
+  // This is a catch-all status for all non-retriable errors that aren't
+  // captured by a more specfic status.
+  FAILED_NO_RETRY = 5;
+
+  // The language detected is not yet supported by this service.
+  // Do not resend the voicemail.
+  FAILED_LANGUAGE_NOT_SUPPORTED = 6;
+
+  // No speech was detected in the voicemail.
+  // Do not resend the voicemail.
+  FAILED_NO_SPEECH_DETECTED = 7;
+}
+
 // Request for synchronous voicemail transcription.
 message TranscribeVoicemailRequest {
   // Voicemail audio file containing the raw bytes we receive from the carrier.
@@ -33,11 +71,62 @@
   optional string transcript = 1;
 }
 
+// Request for asynchronous voicemail transcription.
+message TranscribeVoicemailAsyncRequest {
+  // Voicemail audio data encoded in the format specified by audio_format.
+  optional bytes voicemail_data = 1;
+
+  // Audio format of the voicemail file.
+  optional AudioFormat audio_format = 2;
+}
+
+// Response for asynchronous voicemail transcription containing information
+// needed to fetch the transcription results through the GetTranscript method.
+message TranscribeVoicemailAsyncResponse {
+  // Unique ID for the transcription. This ID is used for retrieving the
+  // voicemail transcript later.
+  optional string transcription_id = 1;
+
+  // The estimated amount of time in seconds before the transcription will be
+  // available.
+  // The client should not call GetTranscript until this time has elapsed, but
+  // the transcript is not guaranteed to be ready by this time.
+  optional int64 estimated_wait_secs = 2;
+}
+
+// Request for retrieving an asynchronously generated transcript.
+message GetTranscriptRequest {
+  // Unique ID for the transcription. This ID was returned by
+  // TranscribeVoicemailAsync.
+  optional string transcription_id = 1;
+}
+
+// Response for retrieving an asynchronously generated transcript.
+message GetTranscriptResponse {
+  // Status of the trascription process.
+  optional TranscriptionStatus status = 1;
+
+  // The transcribed text of the voicemail. This is only present if the status
+  // is SUCCESS.
+  optional string transcript = 2;
+}
+
 // RPC service for transcribing voicemails.
 service VoicemailTranscriptionService {
   // Returns a transcript of the given voicemail.
   rpc TranscribeVoicemail(TranscribeVoicemailRequest)
       returns (TranscribeVoicemailResponse) {}
+
+  // Schedules a transcription of the given voicemail. The transcript can be
+  // retrieved using the returned ID.
+  rpc TranscribeVoicemailAsync(TranscribeVoicemailAsyncRequest)
+      returns (TranscribeVoicemailAsyncResponse) {
+  }
+
+  // Returns the transcript corresponding to the given ID, which was returned
+  // by TranscribeVoicemailAsync.
+  rpc GetTranscript(GetTranscriptRequest) returns (GetTranscriptResponse) {
+  }
 }
 
 // LINT.ThenChange(//depot/google3/google/internal/communications/voicemailtranscription/v1/\
diff --git a/java/com/android/voicemail/stub/StubVoicemailClient.java b/java/com/android/voicemail/stub/StubVoicemailClient.java
index e5d5145..9929503 100644
--- a/java/com/android/voicemail/stub/StubVoicemailClient.java
+++ b/java/com/android/voicemail/stub/StubVoicemailClient.java
@@ -99,4 +99,7 @@
 
   @Override
   public void onShutdown(@NonNull Context context) {}
+
+  @Override
+  public void onTosAccepted(Context context) {}
 }