Merge changes I80ff3852,Ibe1c57bc,I93f35850

* changes:
  Use layout_gravity to horizontally center each dialpad key in landscape mode.
  Unify voicemail call placing
  Stop storing device orientation in DialpadView's instance variable to improve reliability.
diff --git a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java
index fa73bb2..1c106a7 100644
--- a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java
+++ b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java
@@ -547,7 +547,7 @@
       case CallbackAction.VOICE:
         if (mCallLogCache.isVoicemailNumber(accountHandle, number)) {
           // Call to generic voicemail number, in case there are multiple accounts
-          primaryActionButtonView.setTag(IntentProvider.getReturnVoicemailCallIntentProvider());
+          primaryActionButtonView.setTag(IntentProvider.getReturnVoicemailCallIntentProvider(null));
         } else if (canSupportAssistedDialing()) {
           primaryActionButtonView.setTag(
               IntentProvider.getAssistedDialIntentProvider(
diff --git a/java/com/android/dialer/app/calllog/IntentProvider.java b/java/com/android/dialer/app/calllog/IntentProvider.java
index c812bf8..36e62c3 100644
--- a/java/com/android/dialer/app/calllog/IntentProvider.java
+++ b/java/com/android/dialer/app/calllog/IntentProvider.java
@@ -21,6 +21,7 @@
 import android.content.Intent;
 import android.net.Uri;
 import android.provider.ContactsContract;
+import android.support.annotation.Nullable;
 import android.telecom.PhoneAccountHandle;
 import android.telephony.TelephonyManager;
 import com.android.contacts.common.model.Contact;
@@ -32,7 +33,6 @@
 import com.android.dialer.callintent.CallIntentBuilder;
 import com.android.dialer.dialercontact.DialerContact;
 import com.android.dialer.duo.DuoComponent;
-import com.android.dialer.util.CallUtil;
 import com.android.dialer.util.IntentUtil;
 import java.util.ArrayList;
 
@@ -100,11 +100,12 @@
     };
   }
 
-  public static IntentProvider getReturnVoicemailCallIntentProvider() {
+  public static IntentProvider getReturnVoicemailCallIntentProvider(
+      @Nullable PhoneAccountHandle phoneAccountHandle) {
     return new IntentProvider() {
       @Override
       public Intent getIntent(Context context) {
-        return new CallIntentBuilder(CallUtil.getVoicemailUri(), CallInitiationType.Type.CALL_LOG)
+        return CallIntentBuilder.forVoicemail(phoneAccountHandle, CallInitiationType.Type.CALL_LOG)
             .build();
       }
     };
diff --git a/java/com/android/dialer/app/voicemail/error/OmtpVoicemailMessageCreator.java b/java/com/android/dialer/app/voicemail/error/OmtpVoicemailMessageCreator.java
index 9c8b146..4786ca6 100644
--- a/java/com/android/dialer/app/voicemail/error/OmtpVoicemailMessageCreator.java
+++ b/java/com/android/dialer/app/voicemail/error/OmtpVoicemailMessageCreator.java
@@ -66,7 +66,7 @@
       return new VoicemailErrorMessage(
           context.getString(R.string.voicemail_error_activating_title),
           context.getString(R.string.voicemail_error_activating_message),
-          VoicemailErrorMessage.createCallVoicemailAction(context));
+          VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle()));
     }
 
     if (Status.NOTIFICATION_CHANNEL_STATE_NO_CONNECTION == status.notificationChannelState) {
@@ -77,7 +77,7 @@
       return new VoicemailErrorMessage(
           context.getString(R.string.voicemail_error_activation_failed_title),
           context.getString(R.string.voicemail_error_activation_failed_message),
-          VoicemailErrorMessage.createCallVoicemailAction(context),
+          VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle()),
           VoicemailErrorMessage.createRetryAction(context, status));
     }
 
@@ -85,7 +85,7 @@
       return new VoicemailErrorMessage(
           context.getString(R.string.voicemail_error_no_data_title),
           context.getString(R.string.voicemail_error_no_data_message),
-          VoicemailErrorMessage.createCallVoicemailAction(context),
+          VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle()),
           VoicemailErrorMessage.createRetryAction(context, status));
     }
 
@@ -93,7 +93,7 @@
       return new VoicemailErrorMessage(
           context.getString(R.string.voicemail_error_no_data_title),
           context.getString(R.string.voicemail_error_no_data_cellular_required_message),
-          VoicemailErrorMessage.createCallVoicemailAction(context),
+          VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle()),
           VoicemailErrorMessage.createRetryAction(context, status));
     }
 
@@ -101,7 +101,7 @@
       return new VoicemailErrorMessage(
           context.getString(R.string.voicemail_error_bad_config_title),
           context.getString(R.string.voicemail_error_bad_config_message),
-          VoicemailErrorMessage.createCallVoicemailAction(context),
+          VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle()),
           VoicemailErrorMessage.createRetryAction(context, status));
     }
 
@@ -109,7 +109,7 @@
       return new VoicemailErrorMessage(
           context.getString(R.string.voicemail_error_communication_title),
           context.getString(R.string.voicemail_error_communication_message),
-          VoicemailErrorMessage.createCallVoicemailAction(context),
+          VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle()),
           VoicemailErrorMessage.createRetryAction(context, status));
     }
 
@@ -117,7 +117,7 @@
       return new VoicemailErrorMessage(
           context.getString(R.string.voicemail_error_server_title),
           context.getString(R.string.voicemail_error_server_message),
-          VoicemailErrorMessage.createCallVoicemailAction(context),
+          VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle()),
           VoicemailErrorMessage.createRetryAction(context, status));
     }
 
@@ -125,7 +125,7 @@
       return new VoicemailErrorMessage(
           context.getString(R.string.voicemail_error_server_connection_title),
           context.getString(R.string.voicemail_error_server_connection_message),
-          VoicemailErrorMessage.createCallVoicemailAction(context),
+          VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle()),
           VoicemailErrorMessage.createRetryAction(context, status));
     }
 
diff --git a/java/com/android/dialer/app/voicemail/error/VoicemailErrorMessage.java b/java/com/android/dialer/app/voicemail/error/VoicemailErrorMessage.java
index ab269f6..7cc6cda 100644
--- a/java/com/android/dialer/app/voicemail/error/VoicemailErrorMessage.java
+++ b/java/com/android/dialer/app/voicemail/error/VoicemailErrorMessage.java
@@ -25,11 +25,12 @@
 import android.telecom.PhoneAccountHandle;
 import android.view.View;
 import android.view.View.OnClickListener;
+import com.android.dialer.callintent.CallInitiationType;
+import com.android.dialer.callintent.CallIntentBuilder;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.PerAccountSharedPreferences;
 import com.android.dialer.logging.DialerImpression;
 import com.android.dialer.logging.Logger;
-import com.android.dialer.util.CallUtil;
 import com.android.dialer.voicemail.settings.VoicemailChangePinActivity;
 import com.android.voicemail.VoicemailClient;
 import com.android.voicemail.VoicemailComponent;
@@ -156,15 +157,18 @@
   }
 
   @NonNull
-  public static Action createCallVoicemailAction(final Context context) {
+  public static Action createCallVoicemailAction(
+      final Context context, final PhoneAccountHandle phoneAccountHandle) {
     return new Action(
         context.getString(R.string.voicemail_action_call_voicemail),
         new OnClickListener() {
           @Override
           public void onClick(View v) {
             Logger.get(context).logImpression(DialerImpression.Type.VVM_CALL_VOICEMAIL_CLICKED);
-            Intent intent = new Intent(Intent.ACTION_CALL, CallUtil.getVoicemailUri());
-            context.startActivity(intent);
+            context.startActivity(
+                CallIntentBuilder.forVoicemail(
+                        phoneAccountHandle, CallInitiationType.Type.VOICEMAIL_ERROR_MESSAGE)
+                    .build());
           }
         });
   }
diff --git a/java/com/android/dialer/app/voicemail/error/VoicemailStatus.java b/java/com/android/dialer/app/voicemail/error/VoicemailStatus.java
index 1cfbe86..a832b5d 100644
--- a/java/com/android/dialer/app/voicemail/error/VoicemailStatus.java
+++ b/java/com/android/dialer/app/voicemail/error/VoicemailStatus.java
@@ -30,6 +30,7 @@
 import android.telecom.PhoneAccountHandle;
 import android.telephony.ServiceState;
 import android.telephony.TelephonyManager;
+import android.text.TextUtils;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.database.VoicemailStatusQuery;
 
@@ -293,8 +294,15 @@
     return cursor.getString(index);
   }
 
+  @Nullable
   public PhoneAccountHandle getPhoneAccountHandle() {
-    return new PhoneAccountHandle(
-        ComponentName.unflattenFromString(phoneAccountComponentName), phoneAccountId);
+    if (TextUtils.isEmpty(phoneAccountComponentName) || TextUtils.isEmpty(phoneAccountId)) {
+      return null;
+    }
+    ComponentName componentName = ComponentName.unflattenFromString(phoneAccountComponentName);
+    if (componentName == null) {
+      return null;
+    }
+    return new PhoneAccountHandle(componentName, phoneAccountId);
   }
 }
diff --git a/java/com/android/dialer/app/voicemail/error/Vvm3VoicemailMessageCreator.java b/java/com/android/dialer/app/voicemail/error/Vvm3VoicemailMessageCreator.java
index 748b814..d10c7da 100644
--- a/java/com/android/dialer/app/voicemail/error/Vvm3VoicemailMessageCreator.java
+++ b/java/com/android/dialer/app/voicemail/error/Vvm3VoicemailMessageCreator.java
@@ -167,7 +167,7 @@
       return new VoicemailErrorMessage(
           context.getString(R.string.vvm3_error_unknown_user_title),
           getCustomerSupportString(context, R.string.vvm3_error_unknown_user_message),
-          VoicemailErrorMessage.createCallVoicemailAction(context),
+          VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle()),
           createCallCustomerSupportAction(context));
     }
 
@@ -175,7 +175,7 @@
       return new VoicemailErrorMessage(
           context.getString(R.string.vvm3_error_unknown_device_title),
           getCustomerSupportString(context, R.string.vvm3_error_unknown_device_message),
-          VoicemailErrorMessage.createCallVoicemailAction(context),
+          VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle()),
           createCallCustomerSupportAction(context));
     }
 
@@ -183,7 +183,7 @@
       return new VoicemailErrorMessage(
           context.getString(R.string.vvm3_error_invalid_password_title),
           getCustomerSupportString(context, R.string.vvm3_error_invalid_password_message),
-          VoicemailErrorMessage.createCallVoicemailAction(context),
+          VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle()),
           createCallCustomerSupportAction(context));
     }
 
@@ -219,7 +219,7 @@
       return new VoicemailErrorMessage(
           context.getString(R.string.vvm3_error_subscriber_unknown_title),
           getCustomerSupportString(context, R.string.vvm3_error_subscriber_unknown_message),
-          VoicemailErrorMessage.createCallVoicemailAction(context),
+          VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle()),
           createCallCustomerSupportAction(context));
     }
 
@@ -227,7 +227,7 @@
       return new VoicemailErrorMessage(
           context.getString(R.string.vvm3_error_imap_getquota_error_title),
           getCustomerSupportString(context, R.string.vvm3_error_imap_getquota_error_message),
-          VoicemailErrorMessage.createCallVoicemailAction(context),
+          VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle()),
           createCallCustomerSupportAction(context));
     }
 
@@ -235,7 +235,7 @@
       return new VoicemailErrorMessage(
           context.getString(R.string.vvm3_error_imap_select_error_title),
           getCustomerSupportString(context, R.string.vvm3_error_imap_select_error_message),
-          VoicemailErrorMessage.createCallVoicemailAction(context),
+          VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle()),
           createCallCustomerSupportAction(context));
     }
 
@@ -243,7 +243,7 @@
       return new VoicemailErrorMessage(
           context.getString(R.string.vvm3_error_imap_error_title),
           getCustomerSupportString(context, R.string.vvm3_error_imap_error_message),
-          VoicemailErrorMessage.createCallVoicemailAction(context),
+          VoicemailErrorMessage.createCallVoicemailAction(context, status.getPhoneAccountHandle()),
           createCallCustomerSupportAction(context));
     }
 
diff --git a/java/com/android/dialer/callintent/CallIntentBuilder.java b/java/com/android/dialer/callintent/CallIntentBuilder.java
index 2bbd124..25a5803 100644
--- a/java/com/android/dialer/callintent/CallIntentBuilder.java
+++ b/java/com/android/dialer/callintent/CallIntentBuilder.java
@@ -96,6 +96,13 @@
     this(CallUtil.getCallUri(Assert.isNotNull(number)), callInitiationType);
   }
 
+  public static CallIntentBuilder forVoicemail(
+      @Nullable PhoneAccountHandle phoneAccountHandle, CallInitiationType.Type callInitiationType) {
+    return new CallIntentBuilder(
+            Uri.fromParts(PhoneAccount.SCHEME_VOICEMAIL, "", null), callInitiationType)
+        .setPhoneAccountHandle(phoneAccountHandle);
+  }
+
   public CallSpecificAppData getCallSpecificAppData() {
     return callSpecificAppData;
   }
diff --git a/java/com/android/dialer/callintent/call_initiation_type.proto b/java/com/android/dialer/callintent/call_initiation_type.proto
index 32e4e49..27d4461 100644
--- a/java/com/android/dialer/callintent/call_initiation_type.proto
+++ b/java/com/android/dialer/callintent/call_initiation_type.proto
@@ -60,5 +60,9 @@
     CALL_SUBJECT_DIALOG = 16;
 
     IMS_VIDEO_BLOCKED_FALLBACK_TO_VOICE = 17;
+
+    LEGACY_VOICEMAIL_NOTIFICATION = 18;
+
+    VOICEMAIL_ERROR_MESSAGE = 19;
   }
 }
diff --git a/java/com/android/dialer/dialpadview/DialpadFragment.java b/java/com/android/dialer/dialpadview/DialpadFragment.java
index 1f83d55..659d120 100644
--- a/java/com/android/dialer/dialpadview/DialpadFragment.java
+++ b/java/com/android/dialer/dialpadview/DialpadFragment.java
@@ -999,7 +999,7 @@
   public void callVoicemail() {
     DialerUtils.startActivityWithErrorToast(
         getActivity(),
-        new CallIntentBuilder(CallUtil.getVoicemailUri(), CallInitiationType.Type.DIALPAD).build());
+        CallIntentBuilder.forVoicemail(null, CallInitiationType.Type.DIALPAD).build());
     hideAndClearDialpad();
   }
 
diff --git a/java/com/android/dialer/dialpadview/DialpadView.java b/java/com/android/dialer/dialpadview/DialpadView.java
index 5794038..73abd12 100644
--- a/java/com/android/dialer/dialpadview/DialpadView.java
+++ b/java/com/android/dialer/dialpadview/DialpadView.java
@@ -78,7 +78,6 @@
   private final ColorStateList mRippleColor;
   private final String[] mPrimaryLettersMapping;
   private final String[] mSecondaryLettersMapping;
-  private final boolean mIsLandscape; // whether the device is in landscape mode
   private final boolean mIsRtl; // whether the dialpad is shown in a right-to-left locale
   private final int mTranslateDistance;
 
@@ -108,9 +107,6 @@
 
     mTranslateDistance =
         getResources().getDimensionPixelSize(R.dimen.dialpad_key_button_translate_y);
-
-    mIsLandscape =
-        getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
     mIsRtl =
         TextUtils.getLayoutDirectionFromLocale(Locale.getDefault()) == View.LAYOUT_DIRECTION_RTL;
 
@@ -230,7 +226,7 @@
     super.onLayout(changed, l, t, r, b);
 
     if (changed) {
-      if (mIsLandscape) {
+      if (isLandscapeMode()) {
         adjustKeyWidths();
       } else {
         adjustDigitKeyHeights();
@@ -249,7 +245,7 @@
    * framework.
    */
   private void adjustDigitKeyHeights() {
-    Assert.checkState(!mIsLandscape);
+    Assert.checkState(!isLandscapeMode());
 
     int maxHeight = 0;
     for (int i = 0; i <= 9; i++) {
@@ -279,40 +275,23 @@
   }
 
   /**
-   * Adjust key widths to align keys in each column.
+   * Make the widths of all keys the same.
    *
-   * <p>When the device is in landscape mode, we first find the maximum among a pre-defined width
-   * and the width of each key layout. Then we adjust the width of each layout's horizontal
-   * placeholder to align keys in each column. This is to accommodate the scenario where not all
-   * letters associated with a key can be displayed in one line due to large font size.
+   * <p>When the device is in landscape mode, we first find the maximum width among key layouts.
+   * Then we adjust the width of each layout's horizontal placeholder so that each key has the same
+   * width.
    *
    * <p>This method should be called after the sizes of related layouts have been calculated by the
    * framework.
    */
   private void adjustKeyWidths() {
-    Assert.checkState(mIsLandscape);
+    Assert.checkState(isLandscapeMode());
 
-    // A pre-defined minimum width for the letters shown beside a key.
-    final int minimumKeyLettersWidth =
-        getContext().getResources().getDimensionPixelSize(R.dimen.dialpad_key_text_width);
-
-    // The maximum width of the key layouts. A key layout includes both the number and the letters.
     int maxWidth = 0;
-
     for (int buttonId : BUTTON_IDS) {
       DialpadKeyButton dialpadKey = (DialpadKeyButton) findViewById(buttonId);
       LinearLayout keyLayout = (LinearLayout) dialpadKey.findViewById(R.id.dialpad_key_layout);
-      TextView keyLettersView = (TextView) keyLayout.findViewById(R.id.dialpad_key_letters);
-      if (keyLettersView != null && keyLettersView.getWidth() < minimumKeyLettersWidth) {
-        // If the width of the letters is less than the pre-defined minimum, use the pre-defined
-        // minimum to obtain the maximum width.
-        maxWidth =
-            Math.max(
-                maxWidth,
-                keyLayout.getWidth() - keyLettersView.getWidth() + minimumKeyLettersWidth);
-      } else {
-        maxWidth = Math.max(maxWidth, keyLayout.getWidth());
-      }
+      maxWidth = Math.max(maxWidth, keyLayout.getWidth());
     }
 
     for (int buttonId : BUTTON_IDS) {
@@ -395,7 +374,7 @@
       final DialpadKeyButton dialpadKey = (DialpadKeyButton) findViewById(BUTTON_IDS[i]);
 
       ViewPropertyAnimator animator = dialpadKey.animate();
-      if (mIsLandscape) {
+      if (isLandscapeMode()) {
         // Landscape orientation requires translation along the X axis.
         // For RTL locales, ensure we translate negative on the X axis.
         dialpadKey.setTranslationX((mIsRtl ? -1 : 1) * mTranslateDistance);
@@ -434,7 +413,7 @@
    * @return The animation delay.
    */
   private int getKeyButtonAnimationDelay(int buttonId) {
-    if (mIsLandscape) {
+    if (isLandscapeMode()) {
       if (mIsRtl) {
         if (buttonId == R.id.three) {
           return KEY_FRAME_DURATION * 1;
@@ -522,7 +501,7 @@
    * @return The animation duration.
    */
   private int getKeyButtonAnimationDuration(int buttonId) {
-    if (mIsLandscape) {
+    if (isLandscapeMode()) {
       if (mIsRtl) {
         if (buttonId == R.id.one
             || buttonId == R.id.four
@@ -576,4 +555,8 @@
     LogUtil.e(TAG, "Attempted to get animation duration for invalid key button id.");
     return 0;
   }
+
+  private boolean isLandscapeMode() {
+    return getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
+  }
 }
diff --git a/java/com/android/dialer/dialpadview/res/layout-land/dialpad_key.xml b/java/com/android/dialer/dialpadview/res/layout-land/dialpad_key.xml
index d61c636..91d2506 100644
--- a/java/com/android/dialer/dialpadview/res/layout-land/dialpad_key.xml
+++ b/java/com/android/dialer/dialpadview/res/layout-land/dialpad_key.xml
@@ -22,7 +22,7 @@
   <LinearLayout
       android:id="@+id/dialpad_key_layout"
       style="@style/DialpadKeyInternalLayoutStyle"
-      android:layout_gravity="right|center_vertical"
+      android:layout_gravity="center"
       android:baselineAligned="false"
       android:orientation="horizontal">
 
diff --git a/java/com/android/dialer/dialpadview/res/layout-land/dialpad_key_one.xml b/java/com/android/dialer/dialpadview/res/layout-land/dialpad_key_one.xml
index 2f2e725..0a770c2 100644
--- a/java/com/android/dialer/dialpadview/res/layout-land/dialpad_key_one.xml
+++ b/java/com/android/dialer/dialpadview/res/layout-land/dialpad_key_one.xml
@@ -23,7 +23,7 @@
   <LinearLayout
       android:id="@+id/dialpad_key_layout"
       style="@style/DialpadKeyInternalLayoutStyle"
-      android:layout_gravity="right|center_vertical"
+      android:layout_gravity="center"
       android:baselineAligned="false"
       android:orientation="horizontal">
 
diff --git a/java/com/android/dialer/dialpadview/res/layout-land/dialpad_key_pound.xml b/java/com/android/dialer/dialpadview/res/layout-land/dialpad_key_pound.xml
index 613e731..feaa904 100644
--- a/java/com/android/dialer/dialpadview/res/layout-land/dialpad_key_pound.xml
+++ b/java/com/android/dialer/dialpadview/res/layout-land/dialpad_key_pound.xml
@@ -23,7 +23,7 @@
   <LinearLayout
       android:id="@+id/dialpad_key_layout"
       style="@style/DialpadKeyInternalLayoutStyle"
-      android:layout_gravity="right|center_vertical"
+      android:layout_gravity="center"
       android:baselineAligned="false"
       android:orientation="horizontal">
 
diff --git a/java/com/android/dialer/dialpadview/res/layout-land/dialpad_key_star.xml b/java/com/android/dialer/dialpadview/res/layout-land/dialpad_key_star.xml
index 2b0a6b5..5c57f3b 100644
--- a/java/com/android/dialer/dialpadview/res/layout-land/dialpad_key_star.xml
+++ b/java/com/android/dialer/dialpadview/res/layout-land/dialpad_key_star.xml
@@ -23,7 +23,7 @@
   <LinearLayout
       android:id="@+id/dialpad_key_layout"
       style="@style/DialpadKeyInternalLayoutStyle"
-      android:layout_gravity="right|center_vertical"
+      android:layout_gravity="center"
       android:baselineAligned="false"
       android:orientation="horizontal">
 
diff --git a/java/com/android/dialer/dialpadview/res/values-land/dimens.xml b/java/com/android/dialer/dialpadview/res/values-land/dimens.xml
index 376dbc3..50fd394 100644
--- a/java/com/android/dialer/dialpadview/res/values-land/dimens.xml
+++ b/java/com/android/dialer/dialpadview/res/values-land/dimens.xml
@@ -16,7 +16,6 @@
   -->
 <resources>
   <dimen name="dialpad_key_margin_right">5dp</dimen>
-  <dimen name="dialpad_key_text_width">35dp</dimen>
   <dimen name="dialpad_key_number_width">20sp</dimen>
   <dimen name="dialpad_symbol_margin_bottom">0dp</dimen>
 
diff --git a/java/com/android/dialer/util/CallUtil.java b/java/com/android/dialer/util/CallUtil.java
index 0afe930..22cab87 100644
--- a/java/com/android/dialer/util/CallUtil.java
+++ b/java/com/android/dialer/util/CallUtil.java
@@ -52,11 +52,6 @@
     return Uri.fromParts(PhoneAccount.SCHEME_TEL, number, null);
   }
 
-  /** @return Uri that directly dials a user's voicemail inbox. */
-  public static Uri getVoicemailUri() {
-    return Uri.fromParts(PhoneAccount.SCHEME_VOICEMAIL, "", null);
-  }
-
   /**
    * Determines if video calling is available, and if so whether presence checking is available as
    * well.
diff --git a/java/com/android/voicemail/impl/sms/LegacyModeSmsHandler.java b/java/com/android/voicemail/impl/sms/LegacyModeSmsHandler.java
index d55e3b5..2f8dc7a 100644
--- a/java/com/android/voicemail/impl/sms/LegacyModeSmsHandler.java
+++ b/java/com/android/voicemail/impl/sms/LegacyModeSmsHandler.java
@@ -20,14 +20,14 @@
 import android.app.PendingIntent;
 import android.content.Context;
 import android.content.Intent;
-import android.net.Uri;
 import android.os.Build.VERSION_CODES;
 import android.os.Bundle;
 import android.support.annotation.Nullable;
-import android.telecom.PhoneAccount;
 import android.telecom.PhoneAccountHandle;
 import android.telephony.TelephonyManager;
 import android.telephony.VisualVoicemailSms;
+import com.android.dialer.callintent.CallInitiationType;
+import com.android.dialer.callintent.CallIntentBuilder;
 import com.android.voicemail.VoicemailClient;
 import com.android.voicemail.impl.OmtpConstants;
 import com.android.voicemail.impl.OmtpVvmCarrierConfigHelper;
@@ -94,8 +94,9 @@
           PendingIntent.getActivity(
               context,
               CALL_VOICEMAIL_REQUEST_CODE,
-              new Intent(
-                  Intent.ACTION_CALL, Uri.fromParts(PhoneAccount.SCHEME_VOICEMAIL, "", null)),
+              CallIntentBuilder.forVoicemail(
+                      phoneAccountHandle, CallInitiationType.Type.LEGACY_VOICEMAIL_NOTIFICATION)
+                  .build(),
               PendingIntent.FLAG_UPDATE_CURRENT);
     } else {
       Intent launchVoicemailSettingsIntent =