diff --git a/java/com/android/dialer/app/calllog/MissedCallNotificationReceiver.java b/java/com/android/dialer/app/calllog/MissedCallNotificationReceiver.java
index 744c0de..641be85 100644
--- a/java/com/android/dialer/app/calllog/MissedCallNotificationReceiver.java
+++ b/java/com/android/dialer/app/calllog/MissedCallNotificationReceiver.java
@@ -21,7 +21,7 @@
 import android.content.Intent;
 import android.support.v4.util.Pair;
 import com.android.dialer.common.LogUtil;
-import com.android.dialer.common.concurrent.DialerExecutors;
+import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import me.leolin.shortcutbadger.ShortcutBadger;
 
 /**
@@ -30,7 +30,7 @@
  */
 public class MissedCallNotificationReceiver extends BroadcastReceiver {
 
-  //TODO: Use compat class for these methods.
+  // TODO: Use compat class for these methods.
   public static final String ACTION_SHOW_MISSED_CALLS_NOTIFICATION =
       "android.telecom.action.SHOW_MISSED_CALLS_NOTIFICATION";
 
@@ -53,7 +53,9 @@
 
     PendingResult pendingResult = goAsync();
 
-    DialerExecutors.createNonUiTaskBuilder(context, MissedCallNotifier.getInstance(context))
+    DialerExecutorComponent.get(context)
+        .dialerExecutorFactory()
+        .createNonUiTaskBuilder(MissedCallNotifier.getInstance(context))
         .onSuccess(
             output -> {
               LogUtil.i(
diff --git a/java/com/android/dialer/app/calllog/VisualVoicemailCallLogFragment.java b/java/com/android/dialer/app/calllog/VisualVoicemailCallLogFragment.java
index 9d8b040..33fcba0 100644
--- a/java/com/android/dialer/app/calllog/VisualVoicemailCallLogFragment.java
+++ b/java/com/android/dialer/app/calllog/VisualVoicemailCallLogFragment.java
@@ -38,7 +38,7 @@
 import com.android.dialer.app.voicemail.error.VoicemailStatusWorker;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.DialerExecutor;
-import com.android.dialer.common.concurrent.DialerExecutors;
+import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import com.android.dialer.logging.DialerImpression;
 import com.android.dialer.logging.Logger;
 import com.android.dialer.util.PermissionsUtil;
@@ -79,8 +79,9 @@
     super.onActivityCreated(savedInstanceState);
 
     mPreSyncVoicemailStatusCheckExecutor =
-        DialerExecutors.createUiTaskBuilder(
-                getContext(),
+        DialerExecutorComponent.get(getContext())
+            .dialerExecutorFactory()
+            .createUiTaskBuilder(
                 getActivity().getFragmentManager(),
                 "fetchVoicemailStatus",
                 new VoicemailStatusWorker())
diff --git a/java/com/android/dialer/app/calllog/VisualVoicemailUpdateTask.java b/java/com/android/dialer/app/calllog/VisualVoicemailUpdateTask.java
index fd0be5f..e3279ce 100644
--- a/java/com/android/dialer/app/calllog/VisualVoicemailUpdateTask.java
+++ b/java/com/android/dialer/app/calllog/VisualVoicemailUpdateTask.java
@@ -31,7 +31,7 @@
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.DialerExecutor.Worker;
-import com.android.dialer.common.concurrent.DialerExecutors;
+import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import com.android.dialer.notification.DialerNotificationManager;
 import com.android.dialer.phonenumbercache.ContactInfo;
 import com.android.dialer.telecom.TelecomUtil;
@@ -184,7 +184,9 @@
             context,
             CallLogNotificationsQueryHelper.getInstance(context),
             new FilteredNumberAsyncQueryHandler(context));
-    DialerExecutors.createNonUiTaskBuilder(context, new VisualVoicemailUpdateTask())
+    DialerExecutorComponent.get(context)
+        .dialerExecutorFactory()
+        .createNonUiTaskBuilder(new VisualVoicemailUpdateTask())
         .onSuccess(
             output -> {
               LogUtil.i("VisualVoicemailUpdateTask.scheduleTask", "update successful");
diff --git a/java/com/android/dialer/app/list/RegularSearchFragment.java b/java/com/android/dialer/app/list/RegularSearchFragment.java
index ca19432..48f77dc 100644
--- a/java/com/android/dialer/app/list/RegularSearchFragment.java
+++ b/java/com/android/dialer/app/list/RegularSearchFragment.java
@@ -32,7 +32,7 @@
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.DialerExecutor;
 import com.android.dialer.common.concurrent.DialerExecutor.Worker;
-import com.android.dialer.common.concurrent.DialerExecutors;
+import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import com.android.dialer.phonenumbercache.CachedNumberLookupService;
 import com.android.dialer.phonenumbercache.CachedNumberLookupService.CachedContactInfo;
 import com.android.dialer.phonenumbercache.PhoneNumberCache;
@@ -66,8 +66,9 @@
     super.onCreate(savedState);
 
     addContactTask =
-        DialerExecutors.createUiTaskBuilder(
-                getContext(),
+        DialerExecutorComponent.get(getContext())
+            .dialerExecutorFactory()
+            .createUiTaskBuilder(
                 getFragmentManager(),
                 "RegularSearchFragment.addContact",
                 new AddContactWorker(getContext().getApplicationContext()))
diff --git a/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java b/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java
index 2d21bd6..10afe47 100644
--- a/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java
+++ b/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java
@@ -51,7 +51,7 @@
 import com.android.dialer.common.concurrent.AsyncTaskExecutor;
 import com.android.dialer.common.concurrent.AsyncTaskExecutors;
 import com.android.dialer.common.concurrent.DialerExecutor;
-import com.android.dialer.common.concurrent.DialerExecutors;
+import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import com.android.dialer.configprovider.ConfigProviderBindings;
 import com.android.dialer.constants.Constants;
 import com.android.dialer.logging.DialerImpression;
@@ -220,11 +220,10 @@
         mActivity.getWindow().clearFlags(LayoutParams.FLAG_KEEP_SCREEN_ON);
       }
       shareVoicemailExecutor =
-          DialerExecutors.createUiTaskBuilder(
-                  mContext,
-                  mActivity.getFragmentManager(),
-                  "shareVoicemail",
-                  new ShareVoicemailWorker())
+          DialerExecutorComponent.get(mContext)
+              .dialerExecutorFactory()
+              .createUiTaskBuilder(
+                  mActivity.getFragmentManager(), "shareVoicemail", new ShareVoicemailWorker())
               .onSuccess(
                   output -> {
                     if (output == null) {
diff --git a/java/com/android/dialer/assisteddialing/ConcreteCreator.java b/java/com/android/dialer/assisteddialing/ConcreteCreator.java
index 9244f69..c3721a7 100644
--- a/java/com/android/dialer/assisteddialing/ConcreteCreator.java
+++ b/java/com/android/dialer/assisteddialing/ConcreteCreator.java
@@ -89,7 +89,11 @@
         new Constraints(
             context, configProvider.getString("assisted_dialing_csv_country_codes", ""));
     return new AssistedDialingMediatorImpl(
-        new LocationDetector(telephonyManager), new NumberTransformer(constraints));
+        new LocationDetector(
+            telephonyManager,
+            PreferenceManager.getDefaultSharedPreferences(context)
+                .getString(context.getString(R.string.assisted_dialing_setting_cc_key), null)),
+        new NumberTransformer(constraints));
   }
 
   /** Returns a boolean indicating whether or not the assisted dialing feature is enabled. */
diff --git a/java/com/android/dialer/assisteddialing/LocationDetector.java b/java/com/android/dialer/assisteddialing/LocationDetector.java
index 6840689..8e7535c 100644
--- a/java/com/android/dialer/assisteddialing/LocationDetector.java
+++ b/java/com/android/dialer/assisteddialing/LocationDetector.java
@@ -19,7 +19,9 @@
 import android.annotation.TargetApi;
 import android.os.Build.VERSION_CODES;
 import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
 import android.telephony.TelephonyManager;
+import android.text.TextUtils;
 import com.android.dialer.common.LogUtil;
 import java.util.Locale;
 import java.util.Optional;
@@ -32,12 +34,16 @@
 final class LocationDetector {
 
   private final TelephonyManager telephonyManager;
+  private final String userProvidedHomeCountry;
 
-  public LocationDetector(@NonNull TelephonyManager telephonyManager) {
+  public LocationDetector(
+      @NonNull TelephonyManager telephonyManager, @Nullable String userProvidedHomeCountry) {
     if (telephonyManager == null) {
       throw new NullPointerException("Provided TelephonyManager was null");
     }
+
     this.telephonyManager = telephonyManager;
+    this.userProvidedHomeCountry = userProvidedHomeCountry;
   }
 
   // TODO(erfanian):  confirm this is based on ISO 3166-1 alpha-2. libphonenumber expects Unicode's
@@ -50,8 +56,16 @@
   @SuppressWarnings("AndroidApiChecker") // Use of optional
   @TargetApi(VERSION_CODES.N)
   public Optional<String> getUpperCaseUserHomeCountry() {
+
+    if (!TextUtils.isEmpty(userProvidedHomeCountry)) {
+      LogUtil.i(
+          "LocationDetector.getUpperCaseUserRoamingCountry", "user provided home country code");
+      return Optional.of(userProvidedHomeCountry.toUpperCase(Locale.US));
+    }
+
     String simCountryIso = telephonyManager.getSimCountryIso();
     if (simCountryIso != null) {
+      LogUtil.i("LocationDetector.getUpperCaseUserRoamingCountry", "using sim country iso");
       return Optional.of(telephonyManager.getSimCountryIso().toUpperCase(Locale.US));
     }
     LogUtil.i("LocationDetector.getUpperCaseUserHomeCountry", "user home country was null");
diff --git a/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java b/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java
index 8847448..a70844f 100644
--- a/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java
+++ b/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java
@@ -16,7 +16,10 @@
 package com.android.dialer.assisteddialing.ui;
 
 import android.os.Bundle;
+import android.preference.ListPreference;
+import android.preference.Preference;
 import android.preference.PreferenceFragment;
+import android.text.TextUtils;
 
 /** The setting for Assisted Dialing */
 public class AssistedDialingSettingFragment extends PreferenceFragment {
@@ -27,5 +30,20 @@
 
     // Load the preferences from an XML resource
     addPreferencesFromResource(R.xml.assisted_dialing_setting);
+    ListPreference countryChooserPref =
+        (ListPreference)
+            findPreference(getContext().getString(R.string.assisted_dialing_setting_cc_key));
+
+    if (!TextUtils.isEmpty(countryChooserPref.getEntry())) {
+      countryChooserPref.setSummary(countryChooserPref.getEntry());
+    }
+    countryChooserPref.setOnPreferenceChangeListener(this::updateListSummary);
+  }
+
+  boolean updateListSummary(Preference pref, Object newValue) {
+    ListPreference listPref = (ListPreference) pref;
+    CharSequence[] entries = listPref.getEntries();
+    listPref.setSummary(entries[listPref.findIndexOfValue(newValue.toString())]);
+    return true;
   }
 }
diff --git a/java/com/android/dialer/assisteddialing/ui/res/values/string.xml b/java/com/android/dialer/assisteddialing/ui/res/values/string.xml
index cd159bf..3b40817 100644
--- a/java/com/android/dialer/assisteddialing/ui/res/values/string.xml
+++ b/java/com/android/dialer/assisteddialing/ui/res/values/string.xml
@@ -15,7 +15,7 @@
   ~ limitations under the License
   -->
 
-<resources>
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <!-- Label for a setting enabling assisted dialing [CHAR LIMIT=40]-->
   <string name="assisted_dialing_setting_title">Assisted dialing</string>
 
@@ -24,4 +24,511 @@
 
   <!-- Key for the assisted dialing setting toggle-->
   <string name="assisted_dialing_setting_toggle_key" translatable="false">assisted_dialing_setting_toggle_key</string>
+
+  <!-- Key for the assisted dialing home country setting-->
+  <string name="assisted_dialing_setting_cc_key" translatable="false">assisted_dialing_setting_cc_key</string>
+
+  <!-- Indicates the default state for the home country selector-->
+  <string name="assisted_dialing_setting_cc_default_summary">Automatically detected</string>
+
+  <!-- Category title for the country code picker in assisted dialing [CHAR LIMIT=40]-->
+  <string name="assisted_dialing_setting_cc_category_title">Home country</string>
+
+  <!-- Label for the country code picker in assisted dialing [CHAR LIMIT=40]-->
+  <string name="assisted_dialing_setting_cc_title">Default home country</string>
+
+  <!-- Composed from https://www.iso.org/obp/ui/#search and
+       https://github.com/googlei18n/libphonenumber/blob/master/javascript/i18n/phonenumbers/metadata.js#L34 -->
+  <!-- Excluding ['Antarctica', 'Bouvet Island', 'French Southern Territories (the)', 'Heard Island and McDonald Islands', 'Pitcairn', 'South Georgia and the South Sandwich Islands', 'United States Minor Outlying Islands (the)'] -->
+  <!-- Options for the country codes used in assisted dialing. DO NOT TRANSLATE NUMBERS. [CHAR LIMIT=40] -->
+  <string-array name="assisted_dialing_cc_entries">
+    <item>@string/assisted_dialing_setting_cc_default_summary</item>
+    <item>Afghanistan <xliff:g>(+93)</xliff:g></item>
+    <item>Åland Islands <xliff:g>(+358)</xliff:g></item>
+    <item>Albania <xliff:g>(+355)</xliff:g></item>
+    <item>Algeria <xliff:g>(+213)</xliff:g></item>
+    <item>American Samoa <xliff:g>(+1)</xliff:g></item>
+    <item>Andorra <xliff:g>(+376)</xliff:g></item>
+    <item>Angola <xliff:g>(+244)</xliff:g></item>
+    <item>Anguilla <xliff:g>(+1)</xliff:g></item>
+    <item>Antigua and Barbuda <xliff:g>(+1)</xliff:g></item>
+    <item>Argentina <xliff:g>(+54)</xliff:g></item>
+    <item>Armenia <xliff:g>(+374)</xliff:g></item>
+    <item>Aruba <xliff:g>(+297)</xliff:g></item>
+    <item>Australia <xliff:g>(+61)</xliff:g></item>
+    <item>Austria <xliff:g>(+43)</xliff:g></item>
+    <item>Azerbaijan <xliff:g>(+994)</xliff:g></item>
+    <item>Bahamas <xliff:g>(+1)</xliff:g></item>
+    <item>Bahrain <xliff:g>(+973)</xliff:g></item>
+    <item>Bangladesh <xliff:g>(+880)</xliff:g></item>
+    <item>Barbados <xliff:g>(+1)</xliff:g></item>
+    <item>Belarus <xliff:g>(+375)</xliff:g></item>
+    <item>Belgium <xliff:g>(+32)</xliff:g></item>
+    <item>Belize <xliff:g>(+501)</xliff:g></item>
+    <item>Benin <xliff:g>(+229)</xliff:g></item>
+    <item>Bermuda <xliff:g>(+1)</xliff:g></item>
+    <item>Bhutan <xliff:g>(+975)</xliff:g></item>
+    <item>Bolivia <xliff:g>(+591)</xliff:g></item>
+    <item>Caribbean Netherlands <xliff:g>(+599)</xliff:g></item>
+    <item>Bosnia and Herzegovina <xliff:g>(+387)</xliff:g></item>
+    <item>Botswana <xliff:g>(+267)</xliff:g></item>
+    <item>Brazil <xliff:g>(+55)</xliff:g></item>
+    <item>British Indian Ocean Territory <xliff:g>(+246)</xliff:g></item>
+    <item>Brunei <xliff:g>(+673)</xliff:g></item>
+    <item>Bulgaria <xliff:g>(+359)</xliff:g></item>
+    <item>Burkina Faso <xliff:g>(+226)</xliff:g></item>
+    <item>Burundi <xliff:g>(+257)</xliff:g></item>
+    <item>Cabo Verde <xliff:g>(+238)</xliff:g></item>
+    <item>Cambodia <xliff:g>(+855)</xliff:g></item>
+    <item>Cameroon <xliff:g>(+237)</xliff:g></item>
+    <item>Canada <xliff:g>(+1)</xliff:g></item>
+    <item>Cayman Islands <xliff:g>(+1)</xliff:g></item>
+    <item>Central African Republic <xliff:g>(+236)</xliff:g></item>
+    <item>Chad <xliff:g>(+235)</xliff:g></item>
+    <item>Chile <xliff:g>(+56)</xliff:g></item>
+    <item>China <xliff:g>(+86)</xliff:g></item>
+    <item>Christmas Island <xliff:g>(+61)</xliff:g></item>
+    <item>Cocos (Keeling) Islands <xliff:g>(+61)</xliff:g></item>
+    <item>Colombia <xliff:g>(+57)</xliff:g></item>
+    <item>Comoros <xliff:g>(+269)</xliff:g></item>
+    <item>Democratic Republic of the Congo <xliff:g>(+243)</xliff:g></item>
+    <item>Congo <xliff:g>(+242)</xliff:g></item>
+    <item>Cook Islands <xliff:g>(+682)</xliff:g></item>
+    <item>Costa Rica <xliff:g>(+506)</xliff:g></item>
+    <item>Côte d\'Ivoire <xliff:g>(+225)</xliff:g></item>
+    <item>Croatia <xliff:g>(+385)</xliff:g></item>
+    <item>Cuba <xliff:g>(+53)</xliff:g></item>
+    <item>Curaçao <xliff:g>(+599)</xliff:g></item>
+    <item>Cyprus <xliff:g>(+357)</xliff:g></item>
+    <item>Czechia <xliff:g>(+420)</xliff:g></item>
+    <item>Denmark <xliff:g>(+45)</xliff:g></item>
+    <item>Djibouti <xliff:g>(+253)</xliff:g></item>
+    <item>Dominica <xliff:g>(+1)</xliff:g></item>
+    <item>Dominican Republic <xliff:g>(+1)</xliff:g></item>
+    <item>Ecuador <xliff:g>(+593)</xliff:g></item>
+    <item>Egypt <xliff:g>(+20)</xliff:g></item>
+    <item>El Salvador <xliff:g>(+503)</xliff:g></item>
+    <item>Equatorial Guinea <xliff:g>(+240)</xliff:g></item>
+    <item>Eritrea <xliff:g>(+291)</xliff:g></item>
+    <item>Estonia <xliff:g>(+372)</xliff:g></item>
+    <item>Ethiopia <xliff:g>(+251)</xliff:g></item>
+    <item>Falkland Islands (Islas Malvinas) <xliff:g>(+500)</xliff:g></item>
+    <item>Faroe Islands <xliff:g>(+298)</xliff:g></item>
+    <item>Fiji <xliff:g>(+679)</xliff:g></item>
+    <item>Finland <xliff:g>(+358)</xliff:g></item>
+    <item>France <xliff:g>(+33)</xliff:g></item>
+    <item>French Guiana <xliff:g>(+594)</xliff:g></item>
+    <item>French Polynesia <xliff:g>(+689)</xliff:g></item>
+    <item>Gabon <xliff:g>(+241)</xliff:g></item>
+    <item>Gambia <xliff:g>(+220)</xliff:g></item>
+    <item>Georgia <xliff:g>(+995)</xliff:g></item>
+    <item>Germany <xliff:g>(+49)</xliff:g></item>
+    <item>Ghana <xliff:g>(+233)</xliff:g></item>
+    <item>Gibraltar <xliff:g>(+350)</xliff:g></item>
+    <item>Greece <xliff:g>(+30)</xliff:g></item>
+    <item>Greenland <xliff:g>(+299)</xliff:g></item>
+    <item>Grenada <xliff:g>(+1)</xliff:g></item>
+    <item>Guadeloupe <xliff:g>(+590)</xliff:g></item>
+    <item>Guam <xliff:g>(+1)</xliff:g></item>
+    <item>Guatemala <xliff:g>(+502)</xliff:g></item>
+    <item>Guernsey <xliff:g>(+44)</xliff:g></item>
+    <item>Guinea <xliff:g>(+224)</xliff:g></item>
+    <item>Guinea-Bissau <xliff:g>(+245)</xliff:g></item>
+    <item>Guyana <xliff:g>(+592)</xliff:g></item>
+    <item>Haiti <xliff:g>(+509)</xliff:g></item>
+    <item>Holy See <xliff:g>(+39)</xliff:g></item>
+    <item>Honduras <xliff:g>(+504)</xliff:g></item>
+    <item>Hong Kong <xliff:g>(+852)</xliff:g></item>
+    <item>Hungary <xliff:g>(+36)</xliff:g></item>
+    <item>Iceland <xliff:g>(+354)</xliff:g></item>
+    <item>India <xliff:g>(+91)</xliff:g></item>
+    <item>Indonesia <xliff:g>(+62)</xliff:g></item>
+    <item>Iran <xliff:g>(+98)</xliff:g></item>
+    <item>Iraq <xliff:g>(+964)</xliff:g></item>
+    <item>Ireland <xliff:g>(+353)</xliff:g></item>
+    <item>Isle of Man <xliff:g>(+44)</xliff:g></item>
+    <item>Israel <xliff:g>(+972)</xliff:g></item>
+    <item>Italy <xliff:g>(+39)</xliff:g></item>
+    <item>Jamaica <xliff:g>(+1)</xliff:g></item>
+    <item>Japan <xliff:g>(+81)</xliff:g></item>
+    <item>Jersey <xliff:g>(+44)</xliff:g></item>
+    <item>Jordan <xliff:g>(+962)</xliff:g></item>
+    <item>Kazakhstan <xliff:g>(+7)</xliff:g></item>
+    <item>Kenya <xliff:g>(+254)</xliff:g></item>
+    <item>Kiribati <xliff:g>(+686)</xliff:g></item>
+    <item>North Korea <xliff:g>(+850)</xliff:g></item>
+    <item>South Korea <xliff:g>(+82)</xliff:g></item>
+    <item>Kuwait <xliff:g>(+965)</xliff:g></item>
+    <item>Kyrgyzstan <xliff:g>(+996)</xliff:g></item>
+    <item>Laos <xliff:g>(+856)</xliff:g></item>
+    <item>Latvia <xliff:g>(+371)</xliff:g></item>
+    <item>Lebanon <xliff:g>(+961)</xliff:g></item>
+    <item>Lesotho <xliff:g>(+266)</xliff:g></item>
+    <item>Liberia <xliff:g>(+231)</xliff:g></item>
+    <item>Libya <xliff:g>(+218)</xliff:g></item>
+    <item>Liechtenstein <xliff:g>(+423)</xliff:g></item>
+    <item>Lithuania <xliff:g>(+370)</xliff:g></item>
+    <item>Luxembourg <xliff:g>(+352)</xliff:g></item>
+    <item>Macao <xliff:g>(+853)</xliff:g></item>
+    <item>Macedonia (FYROM) <xliff:g>(+389)</xliff:g></item>
+    <item>Madagascar <xliff:g>(+261)</xliff:g></item>
+    <item>Malawi <xliff:g>(+265)</xliff:g></item>
+    <item>Malaysia <xliff:g>(+60)</xliff:g></item>
+    <item>Maldives <xliff:g>(+960)</xliff:g></item>
+    <item>Mali <xliff:g>(+223)</xliff:g></item>
+    <item>Malta <xliff:g>(+356)</xliff:g></item>
+    <item>Marshall Islands <xliff:g>(+692)</xliff:g></item>
+    <item>Martinique <xliff:g>(+596)</xliff:g></item>
+    <item>Mauritania <xliff:g>(+222)</xliff:g></item>
+    <item>Mauritius <xliff:g>(+230)</xliff:g></item>
+    <item>Mayotte <xliff:g>(+262)</xliff:g></item>
+    <item>Mexico <xliff:g>(+52)</xliff:g></item>
+    <item>Micronesia <xliff:g>(+691)</xliff:g></item>
+    <item>Moldova <xliff:g>(+373)</xliff:g></item>
+    <item>Monaco <xliff:g>(+377)</xliff:g></item>
+    <item>Mongolia <xliff:g>(+976)</xliff:g></item>
+    <item>Montenegro <xliff:g>(+382)</xliff:g></item>
+    <item>Montserrat <xliff:g>(+1)</xliff:g></item>
+    <item>Morocco <xliff:g>(+212)</xliff:g></item>
+    <item>Mozambique <xliff:g>(+258)</xliff:g></item>
+    <item>Myanmar <xliff:g>(+95)</xliff:g></item>
+    <item>Namibia <xliff:g>(+264)</xliff:g></item>
+    <item>Nauru <xliff:g>(+674)</xliff:g></item>
+    <item>Nepal <xliff:g>(+977)</xliff:g></item>
+    <item>Netherlands <xliff:g>(+31)</xliff:g></item>
+    <item>New Caledonia <xliff:g>(+687)</xliff:g></item>
+    <item>New Zealand <xliff:g>(+64)</xliff:g></item>
+    <item>Nicaragua <xliff:g>(+505)</xliff:g></item>
+    <item>Niger <xliff:g>(+227)</xliff:g></item>
+    <item>Nigeria <xliff:g>(+234)</xliff:g></item>
+    <item>Niue <xliff:g>(+683)</xliff:g></item>
+    <item>Norfolk Island <xliff:g>(+672)</xliff:g></item>
+    <item>Northern Mariana Islands <xliff:g>(+1)</xliff:g></item>
+    <item>Norway <xliff:g>(+47)</xliff:g></item>
+    <item>Oman <xliff:g>(+968)</xliff:g></item>
+    <item>Pakistan <xliff:g>(+92)</xliff:g></item>
+    <item>Palau <xliff:g>(+680)</xliff:g></item>
+    <item>Palestine <xliff:g>(+970)</xliff:g></item>
+    <item>Panama <xliff:g>(+507)</xliff:g></item>
+    <item>Papua New Guinea <xliff:g>(+675)</xliff:g></item>
+    <item>Paraguay <xliff:g>(+595)</xliff:g></item>
+    <item>Peru <xliff:g>(+51)</xliff:g></item>
+    <item>Philippines <xliff:g>(+63)</xliff:g></item>
+    <item>Poland <xliff:g>(+48)</xliff:g></item>
+    <item>Portugal <xliff:g>(+351)</xliff:g></item>
+    <item>Puerto Rico <xliff:g>(+1)</xliff:g></item>
+    <item>Qatar <xliff:g>(+974)</xliff:g></item>
+    <item>Réunion <xliff:g>(+262)</xliff:g></item>
+    <item>Romania <xliff:g>(+40)</xliff:g></item>
+    <item>Russian <xliff:g>(+7)</xliff:g></item>
+    <item>Rwanda <xliff:g>(+250)</xliff:g></item>
+    <item>St. Barthélemy <xliff:g>(+590)</xliff:g></item>
+    <item>St. Helena <xliff:g>(+290)</xliff:g></item>
+    <item>St. Kitts and Nevis <xliff:g>(+1)</xliff:g></item>
+    <item>St. Lucia <xliff:g>(+1)</xliff:g></item>
+    <item>St. Martin <xliff:g>(+590)</xliff:g></item>
+    <item>St. Pierre and Miquelon <xliff:g>(+508)</xliff:g></item>
+    <item>St. Vincent and the Grenadines <xliff:g>(+1)</xliff:g></item>
+    <item>Samoa <xliff:g>(+685)</xliff:g></item>
+    <item>San Marino <xliff:g>(+378)</xliff:g></item>
+    <item>Sao Tome and Principe <xliff:g>(+239)</xliff:g></item>
+    <item>Saudi Arabia <xliff:g>(+966)</xliff:g></item>
+    <item>Senegal <xliff:g>(+221)</xliff:g></item>
+    <item>Serbia <xliff:g>(+381)</xliff:g></item>
+    <item>Seychelles <xliff:g>(+248)</xliff:g></item>
+    <item>Sierra Leone <xliff:g>(+232)</xliff:g></item>
+    <item>Singapore <xliff:g>(+65)</xliff:g></item>
+    <item>Sint Maarten <xliff:g>(+1)</xliff:g></item>
+    <item>Slovakia <xliff:g>(+421)</xliff:g></item>
+    <item>Slovenia <xliff:g>(+386)</xliff:g></item>
+    <item>Solomon Islands <xliff:g>(+677)</xliff:g></item>
+    <item>Somalia <xliff:g>(+252)</xliff:g></item>
+    <item>South Africa <xliff:g>(+27)</xliff:g></item>
+    <item>South Sudan <xliff:g>(+211)</xliff:g></item>
+    <item>Spain <xliff:g>(+34)</xliff:g></item>
+    <item>Sri Lanka <xliff:g>(+94)</xliff:g></item>
+    <item>Sudan <xliff:g>(+249)</xliff:g></item>
+    <item>Suriname <xliff:g>(+597)</xliff:g></item>
+    <item>Svalbard and Jan Mayen <xliff:g>(+47)</xliff:g></item>
+    <item>Swaziland <xliff:g>(+268)</xliff:g></item>
+    <item>Sweden <xliff:g>(+46)</xliff:g></item>
+    <item>Switzerland <xliff:g>(+41)</xliff:g></item>
+    <item>Syria <xliff:g>(+963)</xliff:g></item>
+    <item>Taiwan <xliff:g>(+886)</xliff:g></item>
+    <item>Tajikistan <xliff:g>(+992)</xliff:g></item>
+    <item>Tanzania <xliff:g>(+255)</xliff:g></item>
+    <item>Thailand <xliff:g>(+66)</xliff:g></item>
+    <item>Timor-Leste <xliff:g>(+670)</xliff:g></item>
+    <item>Togo <xliff:g>(+228)</xliff:g></item>
+    <item>Tokelau <xliff:g>(+690)</xliff:g></item>
+    <item>Tonga <xliff:g>(+676)</xliff:g></item>
+    <item>Trinidad and Tobago <xliff:g>(+1)</xliff:g></item>
+    <item>Tunisia <xliff:g>(+216)</xliff:g></item>
+    <item>Turkey <xliff:g>(+90)</xliff:g></item>
+    <item>Turkmenistan <xliff:g>(+993)</xliff:g></item>
+    <item>Turks and Caicos Islands <xliff:g>(+1)</xliff:g></item>
+    <item>Tuvalu <xliff:g>(+688)</xliff:g></item>
+    <item>Uganda <xliff:g>(+256)</xliff:g></item>
+    <item>Ukraine <xliff:g>(+380)</xliff:g></item>
+    <item>United Arab Emirates <xliff:g>(+971)</xliff:g></item>
+    <item>United Kingdom <xliff:g>(+44)</xliff:g></item>
+    <item>United States <xliff:g>(+1)</xliff:g></item>
+    <item>Uruguay <xliff:g>(+598)</xliff:g></item>
+    <item>Uzbekistan <xliff:g>(+998)</xliff:g></item>
+    <item>Vanuatu <xliff:g>(+678)</xliff:g></item>
+    <item>Venezuela <xliff:g>(+58)</xliff:g></item>
+    <item>Viet Nam <xliff:g>(+84)</xliff:g></item>
+    <item>Virgin Islands (British) <xliff:g>(+1)</xliff:g></item>
+    <item>Virgin Islands (U.S.) <xliff:g>(+1)</xliff:g></item>
+    <item>Wallis and Futuna <xliff:g>(+681)</xliff:g></item>
+    <item>Western Sahara <xliff:g>(+212)</xliff:g></item>
+    <item>Yemen <xliff:g>(+967)</xliff:g></item>
+    <item>Zambia <xliff:g>(+260)</xliff:g></item>
+    <item>Zimbabwe <xliff:g>(+263)</xliff:g></item>
+  </string-array>
+  <string-array name="assisted_dialing_cc_values" translatable="false">
+    <item></item>
+    <item>AF</item>
+    <item>AX</item>
+    <item>AL</item>
+    <item>DZ</item>
+    <item>AS</item>
+    <item>AD</item>
+    <item>AO</item>
+    <item>AI</item>
+    <item>AG</item>
+    <item>AR</item>
+    <item>AM</item>
+    <item>AW</item>
+    <item>AU</item>
+    <item>AT</item>
+    <item>AZ</item>
+    <item>BS</item>
+    <item>BH</item>
+    <item>BD</item>
+    <item>BB</item>
+    <item>BY</item>
+    <item>BE</item>
+    <item>BZ</item>
+    <item>BJ</item>
+    <item>BM</item>
+    <item>BT</item>
+    <item>BO</item>
+    <item>BQ</item>
+    <item>BA</item>
+    <item>BW</item>
+    <item>BR</item>
+    <item>IO</item>
+    <item>BN</item>
+    <item>BG</item>
+    <item>BF</item>
+    <item>BI</item>
+    <item>CV</item>
+    <item>KH</item>
+    <item>CM</item>
+    <item>CA</item>
+    <item>KY</item>
+    <item>CF</item>
+    <item>TD</item>
+    <item>CL</item>
+    <item>CN</item>
+    <item>CX</item>
+    <item>CC</item>
+    <item>CO</item>
+    <item>KM</item>
+    <item>CD</item>
+    <item>CG</item>
+    <item>CK</item>
+    <item>CR</item>
+    <item>CI</item>
+    <item>HR</item>
+    <item>CU</item>
+    <item>CW</item>
+    <item>CY</item>
+    <item>CZ</item>
+    <item>DK</item>
+    <item>DJ</item>
+    <item>DM</item>
+    <item>DO</item>
+    <item>EC</item>
+    <item>EG</item>
+    <item>SV</item>
+    <item>GQ</item>
+    <item>ER</item>
+    <item>EE</item>
+    <item>ET</item>
+    <item>FK</item>
+    <item>FO</item>
+    <item>FJ</item>
+    <item>FI</item>
+    <item>FR</item>
+    <item>GF</item>
+    <item>PF</item>
+    <item>GA</item>
+    <item>GM</item>
+    <item>GE</item>
+    <item>DE</item>
+    <item>GH</item>
+    <item>GI</item>
+    <item>GR</item>
+    <item>GL</item>
+    <item>GD</item>
+    <item>GP</item>
+    <item>GU</item>
+    <item>GT</item>
+    <item>GG</item>
+    <item>GN</item>
+    <item>GW</item>
+    <item>GY</item>
+    <item>HT</item>
+    <item>VA</item>
+    <item>HN</item>
+    <item>HK</item>
+    <item>HU</item>
+    <item>IS</item>
+    <item>IN</item>
+    <item>ID</item>
+    <item>IR</item>
+    <item>IQ</item>
+    <item>IE</item>
+    <item>IM</item>
+    <item>IL</item>
+    <item>IT</item>
+    <item>JM</item>
+    <item>JP</item>
+    <item>JE</item>
+    <item>JO</item>
+    <item>KZ</item>
+    <item>KE</item>
+    <item>KI</item>
+    <item>KP</item>
+    <item>KR</item>
+    <item>KW</item>
+    <item>KG</item>
+    <item>LA</item>
+    <item>LV</item>
+    <item>LB</item>
+    <item>LS</item>
+    <item>LR</item>
+    <item>LY</item>
+    <item>LI</item>
+    <item>LT</item>
+    <item>LU</item>
+    <item>MO</item>
+    <item>MK</item>
+    <item>MG</item>
+    <item>MW</item>
+    <item>MY</item>
+    <item>MV</item>
+    <item>ML</item>
+    <item>MT</item>
+    <item>MH</item>
+    <item>MQ</item>
+    <item>MR</item>
+    <item>MU</item>
+    <item>YT</item>
+    <item>MX</item>
+    <item>FM</item>
+    <item>MD</item>
+    <item>MC</item>
+    <item>MN</item>
+    <item>ME</item>
+    <item>MS</item>
+    <item>MA</item>
+    <item>MZ</item>
+    <item>MM</item>
+    <item>NA</item>
+    <item>NR</item>
+    <item>NP</item>
+    <item>NL</item>
+    <item>NC</item>
+    <item>NZ</item>
+    <item>NI</item>
+    <item>NE</item>
+    <item>NG</item>
+    <item>NU</item>
+    <item>NF</item>
+    <item>MP</item>
+    <item>NO</item>
+    <item>OM</item>
+    <item>PK</item>
+    <item>PW</item>
+    <item>PS</item>
+    <item>PA</item>
+    <item>PG</item>
+    <item>PY</item>
+    <item>PE</item>
+    <item>PH</item>
+    <item>PL</item>
+    <item>PT</item>
+    <item>PR</item>
+    <item>QA</item>
+    <item>RE</item>
+    <item>RO</item>
+    <item>RU</item>
+    <item>RW</item>
+    <item>BL</item>
+    <item>SH</item>
+    <item>KN</item>
+    <item>LC</item>
+    <item>MF</item>
+    <item>PM</item>
+    <item>VC</item>
+    <item>WS</item>
+    <item>SM</item>
+    <item>ST</item>
+    <item>SA</item>
+    <item>SN</item>
+    <item>RS</item>
+    <item>SC</item>
+    <item>SL</item>
+    <item>SG</item>
+    <item>SX</item>
+    <item>SK</item>
+    <item>SI</item>
+    <item>SB</item>
+    <item>SO</item>
+    <item>ZA</item>
+    <item>SS</item>
+    <item>ES</item>
+    <item>LK</item>
+    <item>SD</item>
+    <item>SR</item>
+    <item>SJ</item>
+    <item>SZ</item>
+    <item>SE</item>
+    <item>CH</item>
+    <item>SY</item>
+    <item>TW</item>
+    <item>TJ</item>
+    <item>TZ</item>
+    <item>TH</item>
+    <item>TL</item>
+    <item>TG</item>
+    <item>TK</item>
+    <item>TO</item>
+    <item>TT</item>
+    <item>TN</item>
+    <item>TR</item>
+    <item>TM</item>
+    <item>TC</item>
+    <item>TV</item>
+    <item>UG</item>
+    <item>UA</item>
+    <item>AE</item>
+    <item>GB</item>
+    <item>US</item>
+    <item>UY</item>
+    <item>UZ</item>
+    <item>VU</item>
+    <item>VE</item>
+    <item>VN</item>
+    <item>VG</item>
+    <item>VI</item>
+    <item>WF</item>
+    <item>EH</item>
+    <item>YE</item>
+    <item>ZM</item>
+    <item>ZW</item>
+  </string-array>
 </resources>
\ No newline at end of file
diff --git a/java/com/android/dialer/assisteddialing/ui/res/xml/assisted_dialing_setting.xml b/java/com/android/dialer/assisteddialing/ui/res/xml/assisted_dialing_setting.xml
index 806edfc..c1706b2 100644
--- a/java/com/android/dialer/assisteddialing/ui/res/xml/assisted_dialing_setting.xml
+++ b/java/com/android/dialer/assisteddialing/ui/res/xml/assisted_dialing_setting.xml
@@ -17,10 +17,22 @@
 <PreferenceScreen
     xmlns:android="http://schemas.android.com/apk/res/android">
 
-    <SwitchPreference
-        android:defaultValue="true"
-        android:key="@string/assisted_dialing_setting_toggle_key"
-        android:title="@string/assisted_dialing_setting_title"
-        android:summary="@string/assisted_dialing_setting_summary" />
+  <SwitchPreference
+      android:defaultValue="true"
+      android:key="@string/assisted_dialing_setting_toggle_key"
+      android:summary="@string/assisted_dialing_setting_summary"
+      android:title="@string/assisted_dialing_setting_title"/>
+
+  <PreferenceCategory
+      android:title="@string/assisted_dialing_setting_cc_category_title">
+    <ListPreference
+        android:dependency="@string/assisted_dialing_setting_toggle_key"
+        android:defaultValue=""
+        android:entries="@array/assisted_dialing_cc_entries"
+        android:entryValues="@array/assisted_dialing_cc_values"
+        android:key="@string/assisted_dialing_setting_cc_key"
+        android:summary="@string/assisted_dialing_setting_cc_default_summary"
+        android:title="@string/assisted_dialing_setting_cc_title"/>
+  </PreferenceCategory>
 
 </PreferenceScreen>
diff --git a/java/com/android/dialer/callcomposer/CallComposerActivity.java b/java/com/android/dialer/callcomposer/CallComposerActivity.java
index eedf073..cd0c741 100644
--- a/java/com/android/dialer/callcomposer/CallComposerActivity.java
+++ b/java/com/android/dialer/callcomposer/CallComposerActivity.java
@@ -58,7 +58,7 @@
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.UiUtil;
 import com.android.dialer.common.concurrent.DialerExecutor;
-import com.android.dialer.common.concurrent.DialerExecutors;
+import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import com.android.dialer.common.concurrent.ThreadUtil;
 import com.android.dialer.configprovider.ConfigProviderBindings;
 import com.android.dialer.constants.Constants;
@@ -223,8 +223,9 @@
     setMediaIconSelected(currentIndex);
 
     copyAndResizeExecutor =
-        DialerExecutors.createUiTaskBuilder(
-                getApplicationContext(),
+        DialerExecutorComponent.get(getApplicationContext())
+            .dialerExecutorFactory()
+            .createUiTaskBuilder(
                 getFragmentManager(),
                 "copyAndResizeImageToSend",
                 new CopyAndResizeImageWorker(this.getApplicationContext()))
diff --git a/java/com/android/dialer/callcomposer/camera/CameraManager.java b/java/com/android/dialer/callcomposer/camera/CameraManager.java
index 9a9577f..b850a19 100644
--- a/java/com/android/dialer/callcomposer/camera/CameraManager.java
+++ b/java/com/android/dialer/callcomposer/camera/CameraManager.java
@@ -35,7 +35,7 @@
 import com.android.dialer.callcomposer.camera.camerafocus.RenderOverlay;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
-import com.android.dialer.common.concurrent.DialerExecutors;
+import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -468,8 +468,9 @@
             }
             LogUtil.i(
                 "CameraManager.onPictureTaken", "taken picture size: " + bytes.length + " bytes");
-            DialerExecutors.createNonUiTaskBuilder(
-                    mCameraPreview.getContext(),
+            DialerExecutorComponent.get(mCameraPreview.getContext())
+                .dialerExecutorFactory()
+                .createNonUiTaskBuilder(
                     new ImagePersistWorker(
                         width, height, heightPercent, bytes, mCameraPreview.getContext()))
                 .onSuccess(
diff --git a/java/com/android/dialer/calllog/CallLogFramework.java b/java/com/android/dialer/calllog/CallLogFramework.java
index 788e56b..e4bb4c8 100644
--- a/java/com/android/dialer/calllog/CallLogFramework.java
+++ b/java/com/android/dialer/calllog/CallLogFramework.java
@@ -18,7 +18,6 @@
 
 import android.content.Context;
 import android.content.SharedPreferences;
-import android.preference.PreferenceManager;
 import android.support.annotation.MainThread;
 import android.support.annotation.Nullable;
 import com.android.dialer.buildtype.BuildType;
@@ -26,6 +25,7 @@
 import com.android.dialer.calllog.datasources.DataSources;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.storage.Unencrypted;
 import javax.inject.Inject;
 import javax.inject.Singleton;
 
@@ -41,12 +41,14 @@
   static final String PREF_FORCE_REBUILD = "callLogFrameworkForceRebuild";
 
   private final DataSources dataSources;
+  private final SharedPreferences sharedPreferences;
 
   @Nullable private CallLogUi ui;
 
   @Inject
-  CallLogFramework(DataSources dataSources) {
+  CallLogFramework(DataSources dataSources, @Unencrypted SharedPreferences sharedPreferences) {
     this.dataSources = dataSources;
+    this.sharedPreferences = sharedPreferences;
   }
 
   /** Registers the content observers for all data sources. */
@@ -99,7 +101,6 @@
     Assert.isMainThread();
     LogUtil.enterBlock("CallLogFramework.markDirtyAndNotify");
 
-    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(appContext);
     sharedPreferences.edit().putBoolean(PREF_FORCE_REBUILD, true).apply();
 
     if (ui != null) {
diff --git a/java/com/android/dialer/calllog/RefreshAnnotatedCallLogWorker.java b/java/com/android/dialer/calllog/RefreshAnnotatedCallLogWorker.java
index 2732466..72f73cd 100644
--- a/java/com/android/dialer/calllog/RefreshAnnotatedCallLogWorker.java
+++ b/java/com/android/dialer/calllog/RefreshAnnotatedCallLogWorker.java
@@ -22,7 +22,6 @@
 import android.content.SharedPreferences;
 import android.os.Build;
 import android.os.RemoteException;
-import android.preference.PreferenceManager;
 import android.support.annotation.WorkerThread;
 import com.android.dialer.calllog.database.CallLogDatabaseComponent;
 import com.android.dialer.calllog.datasources.CallLogDataSource;
@@ -32,6 +31,7 @@
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.DialerExecutor.Worker;
 import com.android.dialer.inject.ApplicationContext;
+import com.android.dialer.storage.Unencrypted;
 import javax.inject.Inject;
 
 /**
@@ -43,11 +43,16 @@
 
   private final Context appContext;
   private final DataSources dataSources;
+  private final SharedPreferences sharedPreferences;
 
   @Inject
-  RefreshAnnotatedCallLogWorker(@ApplicationContext Context appContext, DataSources dataSources) {
+  RefreshAnnotatedCallLogWorker(
+      @ApplicationContext Context appContext,
+      DataSources dataSources,
+      @Unencrypted SharedPreferences sharedPreferences) {
     this.appContext = appContext;
     this.dataSources = dataSources;
+    this.sharedPreferences = sharedPreferences;
   }
 
   @Override
@@ -71,7 +76,6 @@
 
     long startTime = System.currentTimeMillis();
 
-    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(appContext);
     // Default to true. If the pref doesn't exist, the annotated call log hasn't been created and
     // we just skip isDirty checks and force a rebuild.
     boolean forceRebuildPrefValue =
@@ -171,8 +175,6 @@
           dataSourceName,
           System.currentTimeMillis() - startTime);
     }
-
-    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(appContext);
     sharedPreferences.edit().putBoolean(CallLogFramework.PREF_FORCE_REBUILD, false).apply();
   }
 
diff --git a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
index 1fe3507..5ca1607 100644
--- a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
@@ -25,7 +25,6 @@
 import android.net.Uri;
 import android.os.Build;
 import android.os.Handler;
-import android.preference.PreferenceManager;
 import android.provider.CallLog;
 import android.provider.CallLog.Calls;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
@@ -48,6 +47,7 @@
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.ThreadUtil;
 import com.android.dialer.phonenumberproto.DialerPhoneNumberUtil;
+import com.android.dialer.storage.StorageComponent;
 import com.android.dialer.theme.R;
 import com.android.dialer.util.PermissionsUtil;
 import com.google.i18n.phonenumbers.PhoneNumberUtil;
@@ -107,7 +107,8 @@
      *
      * Just return false unless the table has never been written to.
      */
-    return !PreferenceManager.getDefaultSharedPreferences(appContext)
+    return !StorageComponent.get(appContext)
+        .unencryptedSharedPrefs()
         .contains(PREF_LAST_TIMESTAMP_PROCESSED);
   }
 
@@ -142,7 +143,8 @@
   public void onSuccessfulFill(Context appContext) {
     // If a fill operation was a no-op, lastTimestampProcessed could still be null.
     if (lastTimestampProcessed != null) {
-      PreferenceManager.getDefaultSharedPreferences(appContext)
+      StorageComponent.get(appContext)
+          .unencryptedSharedPrefs()
           .edit()
           .putLong(PREF_LAST_TIMESTAMP_PROCESSED, lastTimestampProcessed)
           .apply();
@@ -190,7 +192,8 @@
   private void handleInsertsAndUpdates(
       Context appContext, CallLogMutations mutations, Set<Long> existingAnnotatedCallLogIds) {
     long previousTimestampProcessed =
-        PreferenceManager.getDefaultSharedPreferences(appContext)
+        StorageComponent.get(appContext)
+            .unencryptedSharedPrefs()
             .getLong(PREF_LAST_TIMESTAMP_PROCESSED, 0L);
 
     DialerPhoneNumberUtil dialerPhoneNumberUtil =
diff --git a/java/com/android/dialer/common/concurrent/DialerExecutor.java b/java/com/android/dialer/common/concurrent/DialerExecutor.java
index 0414581..3ee0644 100644
--- a/java/com/android/dialer/common/concurrent/DialerExecutor.java
+++ b/java/com/android/dialer/common/concurrent/DialerExecutor.java
@@ -25,7 +25,95 @@
 /**
  * Provides a consistent interface for doing background work in either UI or non-UI contexts.
  *
- * <p>See {@link DialerExecutors} for usage examples.
+ * <p>You may create an executor from a UI component (activity or fragment) or a non-UI component.
+ * Using this class provides a number of benefits:
+ *
+ * <ul>
+ *   <li>Ensures that UI tasks keep running across configuration changes by using a headless
+ *       fragment.
+ *   <li>Forces exceptions to crash the application, unless the user implements their own onFailure
+ *       method.
+ *   <li>Checks for dead UI components which can be encountered if a UI task runs longer than its
+ *       UI. If a dead UI component is encountered, onSuccess/onFailure are not called (because they
+ *       can't be) but a message is logged.
+ *   <li>Helps prevent memory leaks in UI tasks by ensuring that callbacks are nulled out when the
+ *       headless fragment is detached.
+ *   <li>UI and non-UI threads are shared across the application and run at reasonable priorities
+ * </ul>
+ *
+ * <p>Executors accept a single input and output parameter which should be immutable data objects.
+ * If you don't require an input or output, use Void and null as needed.
+ *
+ * <p>You may optionally specify onSuccess and onFailure listeners; the default behavior on success
+ * is a no-op and the default behavior on failure is to crash the application.
+ *
+ * <p>To use an executor from a UI component, you must create it in your onCreate method and then
+ * use it from anywhere:
+ *
+ * <pre><code>
+ *
+ * public class MyActivity extends Activity {
+ *
+ *   private final DialerExecutor&lt;MyInputType&gt; myExecutor;
+ *
+ *   public void onCreate(Bundle state) {
+ *     super.onCreate(bundle);
+ *
+ *     // Must be called in onCreate; don't use non-static or anonymous inner classes for worker!
+ *     myExecutor = DialerExecutorComponent.get(context).dialerExecutorFactory()
+ *         .createUiTaskBuilder(fragmentManager, taskId, worker)
+ *         .onSuccess(this::onSuccess)  // Lambdas, anonymous, or non-static inner classes all fine
+ *         .onFailure(this::onFailure)  // Lambdas, anonymous, or non-static inner classes all fine
+ *         .build();
+ *     );
+ *   }
+ *
+ *   private static class MyWorker implements Worker&lt;MyInputType, MyOutputType&gt; {
+ *     MyOutputType doInBackground(MyInputType input) { ... }
+ *   }
+ *   private void onSuccess(MyOutputType output) { ... }
+ *   private void onFailure(Throwable throwable) { ... }
+ *
+ *   private void userDidSomething() { myExecutor.executeParallel(input); }
+ * }
+ * </code></pre>
+ *
+ * <p>Usage for non-UI tasks is the same, except that tasks can be created from anywhere instead of
+ * in onCreate. Non-UI tasks use low-priority threads separate from the UI task threads so as not to
+ * compete with more critical UI tasks.
+ *
+ * <pre><code>
+ *
+ * public class MyManager {
+ *
+ *   private final DialerExecutor&lt;MyInputType&gt; myExecutor;
+ *
+ *   public void init() {
+ *     // Don't use non-static or anonymous inner classes for worker!
+ *     myExecutor = DialerExecutorComponent.get(context).dialerExecutorFactory()
+ *         .createNonUiTaskBuilder(worker)
+ *         .onSuccess(this::onSuccess)  // Lambdas, anonymous, or non-static inner classes all fine
+ *         .onFailure(this::onFailure)  // Lambdas, anonymous, or non-static inner classes all fine
+ *         .build();
+ *     );
+ *   }
+ *
+ *   private static class MyWorker implements Worker&lt;MyInputType, MyOutputType&gt; {
+ *     MyOutputType doInBackground(MyInputType input) { ... }
+ *   }
+ *   private void onSuccess(MyOutputType output) { ... }
+ *   private void onFailure(Throwable throwable) { ... }
+ *
+ *   private void userDidSomething() { myExecutor.executeParallel(input); }
+ * }
+ * </code></pre>
+ *
+ * Note that non-UI tasks are intended to be relatively quick; for example reading/writing shared
+ * preferences or doing simple database work. If you submit long running non-UI tasks you may
+ * saturate the shared application threads and block other tasks. Also, this class does not create
+ * any wakelocks, so a long running task could be killed if the device goes to sleep while your task
+ * is still running. If you have to do long running or periodic work, consider using a job
+ * scheduler.
  */
 public interface DialerExecutor<InputT> {
 
diff --git a/java/com/android/dialer/common/concurrent/DialerExecutors.java b/java/com/android/dialer/common/concurrent/DialerExecutors.java
index 4d8331f..b29bf5d 100644
--- a/java/com/android/dialer/common/concurrent/DialerExecutors.java
+++ b/java/com/android/dialer/common/concurrent/DialerExecutors.java
@@ -16,135 +16,15 @@
 
 package com.android.dialer.common.concurrent;
 
-import android.app.FragmentManager;
 import android.content.Context;
 import android.support.annotation.NonNull;
 import com.android.dialer.common.Assert;
-import com.android.dialer.common.concurrent.DialerExecutor.Worker;
 import java.util.concurrent.ExecutorService;
 
-/**
- * Factory methods for creating {@link DialerExecutor} objects for doing background work.
- *
- * <p>You may create an executor from a UI component (activity or fragment) or a non-UI component.
- * Using this class provides a number of benefits:
- *
- * <ul>
- *   <li>Ensures that UI tasks keep running across configuration changes by using a headless
- *       fragment.
- *   <li>Forces exceptions to crash the application, unless the user implements their own onFailure
- *       method.
- *   <li>Checks for dead UI components which can be encountered if a UI task runs longer than its
- *       UI. If a dead UI component is encountered, onSuccess/onFailure are not called (because they
- *       can't be) but a message is logged.
- *   <li>Helps prevents memory leaks in UI tasks by ensuring that callbacks are nulled out when the
- *       headless fragment is detached.
- *   <li>UI and non-UI threads are shared across the application and run at reasonable priorities
- * </ul>
- *
- * <p>Executors accept a single input and output parameter which should be immutable data objects.
- * If you don't require an input or output, use Void and null as needed.
- *
- * <p>You may optionally specify onSuccess and onFailure listeners; the default behavior on success
- * is a no-op and the default behavior on failure is to crash the application.
- *
- * <p>To use an executor from a UI component, you must create it in your onCreate method and then
- * use it from anywhere:
- *
- * <pre><code>
- *
- * public class MyActivity extends Activity {
- *
- *   private final DialerExecutor&lt;MyInputType&gt; myExecutor;
- *
- *   public void onCreate(Bundle state) {
- *     super.onCreate(bundle);
- *
- *     // Must be called in onCreate; don't use non-static or anonymous inner classes for worker!
- *     myExecutor = DialerExecutors.createUiTaskBuilder(fragmentManager, taskId, worker)
- *         .onSuccess(this::onSuccess)  // Lambdas, anonymous, or non-static inner classes all fine
- *         .onFailure(this::onFailure)  // Lambdas, anonymous, or non-static inner classes all fine
- *         .build();
- *     );
- *   }
- *
- *   private static class MyWorker implements Worker&lt;MyInputType, MyOutputType&gt; {
- *     MyOutputType doInBackground(MyInputType input) { ... }
- *   }
- *   private void onSuccess(MyOutputType output) { ... }
- *   private void onFailure(Throwable throwable) { ... }
- *
- *   private void userDidSomething() { myExecutor.executeParallel(input); }
- * }
- * </code></pre>
- *
- * <p>Usage for non-UI tasks is the same, except that tasks can be created from anywhere instead of
- * in onCreate. Non-UI tasks use low-priority threads separate from the UI task threads so as not to
- * compete with more critical UI tasks.
- *
- * <pre><code>
- *
- * public class MyManager {
- *
- *   private final DialerExecutor&lt;MyInputType&gt; myExecutor;
- *
- *   public void init() {
- *     // Don't use non-static or anonymous inner classes for worker!
- *     myExecutor = DialerExecutors.createNonUiTaskBuilder(worker)
- *         .onSuccess(this::onSuccess)  // Lambdas, anonymous, or non-static inner classes all fine
- *         .onFailure(this::onFailure)  // Lambdas, anonymous, or non-static inner classes all fine
- *         .build();
- *     );
- *   }
- *
- *   private static class MyWorker implements Worker&lt;MyInputType, MyOutputType&gt; {
- *     MyOutputType doInBackground(MyInputType input) { ... }
- *   }
- *   private void onSuccess(MyOutputType output) { ... }
- *   private void onFailure(Throwable throwable) { ... }
- *
- *   private void userDidSomething() { myExecutor.executeParallel(input); }
- * }
- * </code></pre>
- *
- * Note that non-UI tasks are intended to be relatively quick; for example reading/writing shared
- * preferences or doing simple database work. If you submit long running non-UI tasks you may
- * saturate the shared application threads and block other tasks. Also, this class does not create
- * any wakelocks, so a long running task could be killed if the device goes to sleep while your task
- * is still running. If you have to do long running or periodic work, consider using a job
- * scheduler.
- */
+/** Shared application executors. */
 public final class DialerExecutors {
 
   /**
-   * @param context any valid context object from which the application context can be retrieved
-   * @see DialerExecutorFactory#createUiTaskBuilder(FragmentManager, String, Worker)
-   */
-  @NonNull
-  public static <InputT, OutputT> DialerExecutor.Builder<InputT, OutputT> createUiTaskBuilder(
-      @NonNull Context context,
-      @NonNull FragmentManager fragmentManager,
-      @NonNull String taskId,
-      @NonNull Worker<InputT, OutputT> worker) {
-    return DialerExecutorComponent.get(Assert.isNotNull(context))
-        .dialerExecutorFactory()
-        .createUiTaskBuilder(
-            Assert.isNotNull(fragmentManager), Assert.isNotNull(taskId), Assert.isNotNull(worker));
-  }
-
-  /**
-   * @param context any valid context object from which the application context can be retrieved
-   * @see DialerExecutorFactory#createNonUiTaskBuilder(Worker)
-   */
-  @NonNull
-  public static <InputT, OutputT> DialerExecutor.Builder<InputT, OutputT> createNonUiTaskBuilder(
-      Context context, @NonNull Worker<InputT, OutputT> worker) {
-    return DialerExecutorComponent.get(Assert.isNotNull(context))
-        .dialerExecutorFactory()
-        .createNonUiTaskBuilder(Assert.isNotNull(worker));
-  }
-
-  /**
    * An application-wide thread pool used for low priority (non-UI) tasks.
    *
    * <p>This exists to prevent each individual dialer component from having to create its own
diff --git a/java/com/android/dialer/dialpadview/DialpadFragment.java b/java/com/android/dialer/dialpadview/DialpadFragment.java
index 7b551f7..1f83d55 100644
--- a/java/com/android/dialer/dialpadview/DialpadFragment.java
+++ b/java/com/android/dialer/dialpadview/DialpadFragment.java
@@ -77,7 +77,7 @@
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.DialerExecutor;
 import com.android.dialer.common.concurrent.DialerExecutor.Worker;
-import com.android.dialer.common.concurrent.DialerExecutors;
+import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import com.android.dialer.common.concurrent.ThreadUtil;
 import com.android.dialer.location.GeoUtil;
 import com.android.dialer.logging.UiAction;
@@ -343,8 +343,9 @@
     }
 
     initPhoneNumberFormattingTextWatcherExecutor =
-        DialerExecutors.createUiTaskBuilder(
-                getContext(),
+        DialerExecutorComponent.get(getContext())
+            .dialerExecutorFactory()
+            .createUiTaskBuilder(
                 getFragmentManager(),
                 "DialpadFragment.initPhoneNumberFormattingTextWatcher",
                 new InitPhoneNumberFormattingTextWatcherWorker())
diff --git a/java/com/android/dialer/dialpadview/DialpadTextView.java b/java/com/android/dialer/dialpadview/DialpadTextView.java
index 5b1b7bb..b1eee4b 100644
--- a/java/com/android/dialer/dialpadview/DialpadTextView.java
+++ b/java/com/android/dialer/dialpadview/DialpadTextView.java
@@ -24,8 +24,8 @@
 import android.widget.TextView;
 
 /**
- * This is a custom text view intended only for rendering the numerals (and star and pound) on the
- * dialpad. TextView has built in top/bottom padding to help account for ascenders/descenders.
+ * This is a custom text view intended for rendering text on the dialpad. TextView has built-in
+ * top/bottom padding to help account for ascenders/descenders.
  *
  * <p>Since vertical space is at a premium on the dialpad, particularly if the font size is scaled
  * to a larger default, for the dialpad we use this class to more precisely render characters
diff --git a/java/com/android/dialer/dialpadview/DialpadView.java b/java/com/android/dialer/dialpadview/DialpadView.java
index d70b0a6..5e79cb5 100644
--- a/java/com/android/dialer/dialpadview/DialpadView.java
+++ b/java/com/android/dialer/dialpadview/DialpadView.java
@@ -223,29 +223,32 @@
       if (mIsLandscape) {
         adjustKeyWidths();
       } else {
-        adjustKeyHeightsInFirstRow();
+        adjustDigitKeyHeights();
       }
     }
   }
 
   /**
-   * Adjust key heights in the first row.
+   * Make the heights of all digit keys the same.
    *
-   * <p>A voice mail icon is shown under key "1", which makes its height different from other keys
-   * in the first row.
+   * <p>When the device is in portrait mode, we first find the maximum height among digit key
+   * layouts. Then for each key, we adjust the height of the layout containing letters/the voice
+   * mail icon to ensure the height of each digit key is the same.
    *
    * <p>This method should be called after the sizes of related layouts have been calculated by the
    * framework.
    */
-  private void adjustKeyHeightsInFirstRow() {
+  private void adjustDigitKeyHeights() {
+    Assert.checkState(!mIsLandscape);
+
     int maxHeight = 0;
-    for (int i = 1; i <= 3; i++) {
+    for (int i = 0; i <= 9; i++) {
       DialpadKeyButton dialpadKey = (DialpadKeyButton) findViewById(BUTTON_IDS[i]);
       LinearLayout keyLayout = (LinearLayout) dialpadKey.findViewById(R.id.dialpad_key_layout);
       maxHeight = Math.max(maxHeight, keyLayout.getHeight());
     }
 
-    for (int i = 1; i <= 3; i++) {
+    for (int i = 0; i <= 9; i++) {
       DialpadKeyButton dialpadKey = (DialpadKeyButton) findViewById(BUTTON_IDS[i]);
       LinearLayout keyLayout = (LinearLayout) dialpadKey.findViewById(R.id.dialpad_key_layout);
 
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 12f24ac..769e2d8 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
@@ -39,7 +39,7 @@
         android:id="@+id/dialpad_key_icon_or_letters_layout"
         style="@style/DialpadKeyInternalLayoutStyle">
 
-      <TextView
+      <com.android.dialer.dialpadview.DialpadTextView
           android:id="@+id/dialpad_key_letters"
           style="@style/DialpadKeyLettersStyle"/>
     </LinearLayout>
diff --git a/java/com/android/dialer/dialpadview/res/layout-land/dialpad_key_zero.xml b/java/com/android/dialer/dialpadview/res/layout-land/dialpad_key_zero.xml
deleted file mode 100644
index 7145072..0000000
--- a/java/com/android/dialer/dialpadview/res/layout-land/dialpad_key_zero.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<!-- A layout representing key "0" in the dialpad -->
-<com.android.dialer.dialpadview.DialpadKeyButton
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/zero"
-    style="@style/DialpadKeyButtonStyle">
-
-  <LinearLayout
-      android:id="@+id/dialpad_key_layout"
-      style="@style/DialpadKeyInternalLayoutStyle"
-      android:layout_gravity="right|center_vertical"
-      android:baselineAligned="false"
-      android:orientation="horizontal">
-
-    <FrameLayout
-        android:layout_width="@dimen/dialpad_key_number_width"
-        android:layout_height="wrap_content"
-        android:layout_marginRight="@dimen/dialpad_key_margin_right">
-      <com.android.dialer.dialpadview.DialpadTextView
-          android:id="@+id/dialpad_key_number"
-          style="@style/DialpadBottomKeyNumberStyle"/>
-    </FrameLayout>
-
-    <TextView
-        android:id="@+id/dialpad_key_letters"
-        style="@style/DialpadKeyLettersStyle"/>
-    <!-- A placeholder to make the width the same as other keys. -->
-    <View
-        android:id="@+id/dialpad_key_horizontal_placeholder"
-        android:layout_width="0dp"
-        android:layout_height="match_parent"/>
-  </LinearLayout>
-</com.android.dialer.dialpadview.DialpadKeyButton>
diff --git a/java/com/android/dialer/dialpadview/res/layout/dialpad.xml b/java/com/android/dialer/dialpadview/res/layout/dialpad.xml
index 5a14d14..0061d54 100644
--- a/java/com/android/dialer/dialpadview/res/layout/dialpad.xml
+++ b/java/com/android/dialer/dialpadview/res/layout/dialpad.xml
@@ -16,84 +16,86 @@
 
 <!-- Dialpad in the Phone app. -->
 <LinearLayout
-  xmlns:android="http://schemas.android.com/apk/res/android"
-  android:id="@+id/dialpad"
-  android:layout_width="match_parent"
-  android:layout_height="match_parent"
-  android:clipChildren="false"
-  android:orientation="vertical">
-  <LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/dialpad"
     android:layout_width="match_parent"
-    android:layout_height="0dp"
-    android:layout_weight="1"
-    android:orientation="horizontal">
+    android:layout_height="match_parent"
+    android:clipChildren="false"
+    android:orientation="vertical">
+  <LinearLayout
+      android:layout_width="match_parent"
+      android:layout_height="0dp"
+      android:layout_weight="1"
+      android:orientation="horizontal">
     <Space style="@style/DialpadSpaceStyle"/>
     <include layout="@layout/dialpad_key_one"/>
     <include
-      android:id="@+id/two"
-      style="@style/DialpadKeyButtonStyle"
-      layout="@layout/dialpad_key"/>
+        android:id="@+id/two"
+        style="@style/DialpadKeyButtonStyle"
+        layout="@layout/dialpad_key"/>
     <include
-      android:id="@+id/three"
-      style="@style/DialpadKeyButtonStyle"
-      layout="@layout/dialpad_key"/>
+        android:id="@+id/three"
+        style="@style/DialpadKeyButtonStyle"
+        layout="@layout/dialpad_key"/>
     <Space style="@style/DialpadSpaceStyle"/>
   </LinearLayout>
 
   <LinearLayout
-    android:layout_width="match_parent"
-    android:layout_height="0dp"
-    android:layout_weight="1"
-    android:orientation="horizontal">
+      android:layout_width="match_parent"
+      android:layout_height="0dp"
+      android:layout_weight="1"
+      android:orientation="horizontal">
     <Space style="@style/DialpadSpaceStyle"/>
     <include
-      android:id="@+id/four"
-      style="@style/DialpadKeyButtonStyle"
-      layout="@layout/dialpad_key"/>
+        android:id="@+id/four"
+        style="@style/DialpadKeyButtonStyle"
+        layout="@layout/dialpad_key"/>
     <include
-      android:id="@+id/five"
-      style="@style/DialpadKeyButtonStyle"
-      layout="@layout/dialpad_key"/>
+        android:id="@+id/five"
+        style="@style/DialpadKeyButtonStyle"
+        layout="@layout/dialpad_key"/>
     <include
-      android:id="@+id/six"
-      style="@style/DialpadKeyButtonStyle"
-      layout="@layout/dialpad_key"/>
+        android:id="@+id/six"
+        style="@style/DialpadKeyButtonStyle"
+        layout="@layout/dialpad_key"/>
     <Space style="@style/DialpadSpaceStyle"/>
   </LinearLayout>
 
   <LinearLayout
-    android:layout_width="match_parent"
-    android:layout_height="0dp"
-    android:layout_weight="1"
-    android:orientation="horizontal">
+      android:layout_width="match_parent"
+      android:layout_height="0dp"
+      android:layout_weight="1"
+      android:orientation="horizontal">
     <Space style="@style/DialpadSpaceStyle"/>
     <include
-      android:id="@+id/seven"
-      style="@style/DialpadKeyButtonStyle"
-      layout="@layout/dialpad_key"/>
+        android:id="@+id/seven"
+        style="@style/DialpadKeyButtonStyle"
+        layout="@layout/dialpad_key"/>
     <include
-      android:id="@+id/eight"
-      style="@style/DialpadKeyButtonStyle"
-      layout="@layout/dialpad_key"/>
+        android:id="@+id/eight"
+        style="@style/DialpadKeyButtonStyle"
+        layout="@layout/dialpad_key"/>
     <include
-      android:id="@+id/nine"
-      style="@style/DialpadKeyButtonStyle"
-      layout="@layout/dialpad_key"/>
+        android:id="@+id/nine"
+        style="@style/DialpadKeyButtonStyle"
+        layout="@layout/dialpad_key"/>
     <Space style="@style/DialpadSpaceStyle"/>
   </LinearLayout>
 
   <LinearLayout
-    android:layout_width="match_parent"
-    android:layout_height="0dp"
-    android:layout_weight="1"
-    android:orientation="horizontal">
+      android:layout_width="match_parent"
+      android:layout_height="0dp"
+      android:layout_weight="1"
+      android:orientation="horizontal">
     <Space style="@style/DialpadSpaceStyle"/>
     <include layout="@layout/dialpad_key_star"/>
-    <include layout="@layout/dialpad_key_zero"/>
+    <include
+        android:id="@+id/zero"
+        layout="@layout/dialpad_key"/>
     <include layout="@layout/dialpad_key_pound"/>
     <Space style="@style/DialpadSpaceStyle"/>
   </LinearLayout>
   <Space
-    android:layout_width="match_parent"
-    android:layout_height="?attr/dialpad_end_key_spacing"/>
+      android:layout_width="match_parent"
+      android:layout_height="?attr/dialpad_end_key_spacing"/>
 </LinearLayout>
diff --git a/java/com/android/dialer/dialpadview/res/layout/dialpad_key.xml b/java/com/android/dialer/dialpadview/res/layout/dialpad_key.xml
index 6c87cd2..bb9ec63 100644
--- a/java/com/android/dialer/dialpadview/res/layout/dialpad_key.xml
+++ b/java/com/android/dialer/dialpadview/res/layout/dialpad_key.xml
@@ -31,7 +31,7 @@
         android:id="@+id/dialpad_key_icon_or_letters_layout"
         style="@style/DialpadKeyInternalLayoutStyle">
 
-      <TextView
+      <com.android.dialer.dialpadview.DialpadTextView
           android:id="@+id/dialpad_key_letters"
           style="@style/DialpadKeyLettersStyle"/>
     </LinearLayout>
diff --git a/java/com/android/dialer/dialpadview/res/layout/dialpad_key_zero.xml b/java/com/android/dialer/dialpadview/res/layout/dialpad_key_zero.xml
deleted file mode 100644
index 8d9c7b2..0000000
--- a/java/com/android/dialer/dialpadview/res/layout/dialpad_key_zero.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<!-- A layout representing key "0" in the dialpad -->
-<com.android.dialer.dialpadview.DialpadKeyButton
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/zero"
-    style="@style/DialpadKeyButtonStyle">
-
-  <LinearLayout
-      android:id="@+id/dialpad_key_layout"
-      style="@style/DialpadKeyInternalLayoutStyle">
-
-    <com.android.dialer.dialpadview.DialpadTextView
-        android:id="@+id/dialpad_key_number"
-        style="@style/DialpadBottomKeyNumberStyle"/>
-    <TextView
-        android:id="@+id/dialpad_key_letters"
-        style="@style/DialpadKeyLettersStyle"/>
-  </LinearLayout>
-</com.android.dialer.dialpadview.DialpadKeyButton>
diff --git a/java/com/android/dialer/dialpadview/res/values-land/styles.xml b/java/com/android/dialer/dialpadview/res/values-land/styles.xml
index 012cfa2..de9ef1f 100644
--- a/java/com/android/dialer/dialpadview/res/values-land/styles.xml
+++ b/java/com/android/dialer/dialpadview/res/values-land/styles.xml
@@ -37,8 +37,6 @@
     <item name="android:layout_gravity">center</item>
   </style>
 
-  <style name="DialpadBottomKeyNumberStyle" parent="DialpadKeyNumberStyle"/>
-
   <style name="DialpadKeyPoundStyle">
     <item name="android:textColor">?attr/dialpad_text_color_secondary</item>
     <item name="android:textSize">@dimen/dialpad_key_pound_size</item>
@@ -56,6 +54,6 @@
     <item name="android:fontFamily">sans-serif-regular</item>
     <item name="android:layout_width">wrap_content</item>
     <item name="android:layout_height">wrap_content</item>
-    <item name="android:gravity">left</item>
+    <item name="android:layout_gravity">left|center_vertical</item>
   </style>
 </resources>
diff --git a/java/com/android/dialer/dialpadview/res/values/attrs.xml b/java/com/android/dialer/dialpadview/res/values/attrs.xml
index d73946e..9722638 100644
--- a/java/com/android/dialer/dialpadview/res/values/attrs.xml
+++ b/java/com/android/dialer/dialpadview/res/values/attrs.xml
@@ -25,7 +25,6 @@
     <attr format="dimension" name="dialpad_digits_adjustable_height"/>
     <attr format="dimension" name="dialpad_key_numbers_size"/>
     <attr format="dimension" name="dialpad_key_number_margin_bottom"/>
-    <attr format="dimension" name="dialpad_zero_key_number_margin_bottom"/>
   </declare-styleable>
 
   <declare-styleable name="Theme.Dialpad">
diff --git a/java/com/android/dialer/dialpadview/res/values/dimens.xml b/java/com/android/dialer/dialpadview/res/values/dimens.xml
index 1e5880a..797d7e8 100644
--- a/java/com/android/dialer/dialpadview/res/values/dimens.xml
+++ b/java/com/android/dialer/dialpadview/res/values/dimens.xml
@@ -22,8 +22,6 @@
   <dimen name="dialpad_key_star_size">36sp</dimen>
   <dimen name="dialpad_key_height">64dp</dimen>
   <dimen name="dialpad_key_number_default_margin_bottom">3dp</dimen>
-  <!-- Zero key should have less space between self and text because "+" is smaller -->
-  <dimen name="dialpad_zero_key_number_default_margin_bottom">1dp</dimen>
   <dimen name="dialpad_symbol_margin_bottom">13dp</dimen>
   <dimen name="dialpad_digits_text_size">34sp</dimen>
   <dimen name="dialpad_digits_text_min_size">24sp</dimen>
diff --git a/java/com/android/dialer/dialpadview/res/values/styles.xml b/java/com/android/dialer/dialpadview/res/values/styles.xml
index 9d30021..653fe48 100644
--- a/java/com/android/dialer/dialpadview/res/values/styles.xml
+++ b/java/com/android/dialer/dialpadview/res/values/styles.xml
@@ -32,10 +32,6 @@
     <item name="android:gravity">center</item>
   </style>
 
-  <style name="DialpadBottomKeyNumberStyle" parent="DialpadKeyNumberStyle">
-    <item name="android:layout_marginBottom">?attr/dialpad_zero_key_number_margin_bottom</item>
-  </style>
-
   <style name="DialpadKeyStarStyle">
     <item name="android:textColor">?attr/dialpad_text_color_secondary</item>
     <item name="android:textSize">@dimen/dialpad_key_star_size</item>
@@ -44,7 +40,7 @@
     <item name="android:layout_width">wrap_content</item>
     <item name="android:layout_height">wrap_content</item>
     <item name="android:layout_marginBottom">@dimen/dialpad_symbol_margin_bottom</item>
-    <item name="android:gravity">center</item>
+    <item name="android:layout_gravity">center</item>
   </style>
 
   <style name="DialpadKeyPoundStyle">
@@ -55,7 +51,7 @@
     <item name="android:layout_width">wrap_content</item>
     <item name="android:layout_height">wrap_content</item>
     <item name="android:layout_marginBottom">@dimen/dialpad_symbol_margin_bottom</item>
-    <item name="android:gravity">center</item>
+    <item name="android:layout_gravity">center</item>
   </style>
 
   <style name="DialpadKeyLettersStyle">
@@ -64,7 +60,7 @@
     <item name="android:fontFamily">sans-serif-regular</item>
     <item name="android:layout_width">wrap_content</item>
     <item name="android:layout_height">wrap_content</item>
-    <item name="android:gravity">center_horizontal</item>
+    <item name="android:layout_gravity">center</item>
   </style>
 
   <style name="DialpadKeyButtonStyle">
@@ -92,9 +88,6 @@
     <item name="dialpad_key_numbers_size">@dimen/dialpad_key_numbers_default_size</item>
     <item name="dialpad_key_number_margin_bottom">@dimen/dialpad_key_number_default_margin_bottom
     </item>
-    <item name="dialpad_zero_key_number_margin_bottom">
-      @dimen/dialpad_zero_key_number_default_margin_bottom
-    </item>
     <item name="dialpad_end_key_spacing">@dimen/dialpad_bottom_space_height</item>
     <item name="dialpad_elevation">0dp</item>
   </style>
diff --git a/java/com/android/dialer/shortcuts/ShortcutRefresher.java b/java/com/android/dialer/shortcuts/ShortcutRefresher.java
index 7fd02a9..3201d59 100644
--- a/java/com/android/dialer/shortcuts/ShortcutRefresher.java
+++ b/java/com/android/dialer/shortcuts/ShortcutRefresher.java
@@ -24,7 +24,7 @@
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.DialerExecutor.Worker;
-import com.android.dialer.common.concurrent.DialerExecutors;
+import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -45,7 +45,9 @@
       return;
     }
 
-    DialerExecutors.createNonUiTaskBuilder(context, new RefreshWorker(context))
+    DialerExecutorComponent.get(context)
+        .dialerExecutorFactory()
+        .createNonUiTaskBuilder(new RefreshWorker(context))
         .build()
         .executeSerial(new ArrayList<>(contacts));
   }
diff --git a/java/com/android/dialer/simulator/Simulator.java b/java/com/android/dialer/simulator/Simulator.java
index bfa202c..2094b42 100644
--- a/java/com/android/dialer/simulator/Simulator.java
+++ b/java/com/android/dialer/simulator/Simulator.java
@@ -35,10 +35,12 @@
   @Retention(RetentionPolicy.SOURCE)
   @IntDef({
     CONFERENCE_TYPE_GSM,
+    CONFERENCE_TYPE_VOLTE,
   })
   @interface ConferenceType {}
 
   static final int CONFERENCE_TYPE_GSM = 1;
+  static final int CONFERENCE_TYPE_VOLTE = 2;
 
   /** Information about a connection event. */
   public static class Event {
diff --git a/java/com/android/dialer/simulator/impl/SimulatorConference.java b/java/com/android/dialer/simulator/impl/SimulatorConference.java
index 7468b56..1a12d2a 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorConference.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorConference.java
@@ -58,6 +58,17 @@
     return simulatorConference;
   }
 
+  static SimulatorConference newVoLteConference(PhoneAccountHandle handle) {
+    SimulatorConference simulatorConference =
+        new SimulatorConference(handle, Simulator.CONFERENCE_TYPE_VOLTE);
+    simulatorConference.setConnectionCapabilities(
+        Connection.CAPABILITY_MUTE
+            | Connection.CAPABILITY_SUPPORT_HOLD
+            | Connection.CAPABILITY_HOLD
+            | Connection.CAPABILITY_MANAGE_CONFERENCE);
+    return simulatorConference;
+  }
+
   public void addListener(@NonNull Listener listener) {
     listeners.add(Assert.isNotNull(listener));
   }
@@ -120,6 +131,11 @@
   public void onSeparate(Connection connection) {
     LogUtil.i("SimulatorConference.onSeparate", "connection: " + connection);
     onEvent(new Event(Event.SEPARATE, SimulatorSimCallManager.getConnectionTag(connection), null));
+    // if there is only 1 connection in a gsm conference, destroy the conference.
+    if (conferenceType == Simulator.CONFERENCE_TYPE_GSM && getConnections().size() == 1) {
+      removeConnection(getConnections().get(0));
+      destroy();
+    }
   }
 
   @Override
diff --git a/java/com/android/dialer/simulator/impl/SimulatorConferenceCreator.java b/java/com/android/dialer/simulator/impl/SimulatorConferenceCreator.java
index 838b58d..d024993 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorConferenceCreator.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorConferenceCreator.java
@@ -64,6 +64,13 @@
     String callerId = String.format(Locale.US, "+1-650-234%04d", callCount);
     Bundle extras = new Bundle();
     extras.putInt(EXTRA_CALL_COUNT, callCount - 1);
+    switch (conferenceType) {
+      case Simulator.CONFERENCE_TYPE_VOLTE:
+        extras.putBoolean("ISVOLTE", true);
+        break;
+      default:
+        break;
+    }
     connectionTags.add(
         SimulatorSimCallManager.addNewIncomingCall(context, callerId, false /* isVideo */, extras));
   }
@@ -78,16 +85,11 @@
     LogUtil.i("SimulatorConferenceCreator.onNewOutgoingConnection", "connection created");
     connection.addListener(this);
 
-    // Telecom will force the connection to switch to DIALING when we return it. Wait until after
-    // we're returned it before changing call state.
-    ThreadUtil.postOnUiThread(() -> connection.setActive());
-
     // Once the connection is active, go ahead and conference it and add the next call.
     ThreadUtil.postDelayedOnUiThread(
         () -> {
           SimulatorConference conference = findCurrentConference();
           if (conference == null) {
-            Assert.checkArgument(conferenceType == Simulator.CONFERENCE_TYPE_GSM);
             conference =
                 SimulatorConference.newGsmConference(
                     SimulatorSimCallManager.getSystemPhoneAccountHandle(context));
@@ -95,6 +97,7 @@
             SimulatorConnectionService.getInstance().addConference(conference);
           }
           updateConferenceableConnections();
+          connection.setActive();
           conference.addConnection(connection);
           addNextCall(getCallCount(connection));
         },
diff --git a/java/com/android/dialer/simulator/impl/SimulatorConnection.java b/java/com/android/dialer/simulator/impl/SimulatorConnection.java
index e4a34b5..168f5db 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorConnection.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorConnection.java
@@ -42,8 +42,10 @@
             | CAPABILITY_SUPPORT_HOLD
             | CAPABILITY_HOLD
             | CAPABILITY_CAN_UPGRADE_TO_VIDEO
-            | CAPABILITY_DISCONNECT_FROM_CONFERENCE
-            | CAPABILITY_SEPARATE_FROM_CONFERENCE);
+            | CAPABILITY_DISCONNECT_FROM_CONFERENCE);
+    if (request.getExtras() != null && !request.getExtras().getBoolean("ISVOLTE")) {
+      setConnectionCapabilities(getConnectionCapabilities() | CAPABILITY_SEPARATE_FROM_CONFERENCE);
+    }
     setVideoProvider(new SimulatorVideoProvider(context, this));
   }
 
diff --git a/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java b/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java
index 1a2cae1..f4b1916 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java
@@ -23,7 +23,7 @@
 import android.support.annotation.Nullable;
 import android.view.ActionProvider;
 import com.android.dialer.common.concurrent.DialerExecutor.Worker;
-import com.android.dialer.common.concurrent.DialerExecutors;
+import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import com.android.dialer.databasepopulator.CallLogPopulator;
 import com.android.dialer.databasepopulator.ContactsPopulator;
 import com.android.dialer.databasepopulator.VoicemailPopulator;
@@ -48,13 +48,17 @@
   }
 
   private static void populateDatabase(@NonNull Context context) {
-    DialerExecutors.createNonUiTaskBuilder(context, new PopulateDatabaseWorker())
+    DialerExecutorComponent.get(context)
+        .dialerExecutorFactory()
+        .createNonUiTaskBuilder(new PopulateDatabaseWorker())
         .build()
         .executeSerial(context);
   }
 
   private static void cleanDatabase(@NonNull Context context) {
-    DialerExecutors.createNonUiTaskBuilder(context, new CleanDatabaseWorker())
+    DialerExecutorComponent.get(context)
+        .dialerExecutorFactory()
+        .createNonUiTaskBuilder(new CleanDatabaseWorker())
         .build()
         .executeSerial(context);
   }
@@ -65,7 +69,9 @@
   }
 
   private static void sharePersistentLog(@NonNull Context context) {
-    DialerExecutors.createNonUiTaskBuilder(context, new ShareLogWorker())
+    DialerExecutorComponent.get(context)
+        .dialerExecutorFactory()
+        .createNonUiTaskBuilder(new ShareLogWorker())
         .onSuccess(
             (String log) -> {
               Intent intent = new Intent(Intent.ACTION_SEND);
diff --git a/java/com/android/dialer/simulator/impl/SimulatorVoiceCall.java b/java/com/android/dialer/simulator/impl/SimulatorVoiceCall.java
index f2a1d09..d2eba6b 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorVoiceCall.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorVoiceCall.java
@@ -42,7 +42,11 @@
         .addItem("Emergency call", () -> new SimulatorVoiceCall(context).addNewEmergencyCall())
         .addItem(
             "GSM conference",
-            () -> new SimulatorConferenceCreator(context, Simulator.CONFERENCE_TYPE_GSM).start(5));
+            () -> new SimulatorConferenceCreator(context, Simulator.CONFERENCE_TYPE_GSM).start(5))
+        .addItem(
+            "VoLTE conference",
+            () ->
+                new SimulatorConferenceCreator(context, Simulator.CONFERENCE_TYPE_VOLTE).start(5));
   }
 
   private SimulatorVoiceCall(@NonNull Context context) {
diff --git a/java/com/android/dialer/storage/StorageComponent.java b/java/com/android/dialer/storage/StorageComponent.java
index 067b994..cb5c4a8 100644
--- a/java/com/android/dialer/storage/StorageComponent.java
+++ b/java/com/android/dialer/storage/StorageComponent.java
@@ -28,7 +28,11 @@
   /**
    * Returns unencrypted default shared preferences. This method should not be used for private
    * data.
+   *
+   * <p>These shared prefs are available even when the device is in FBE mode and are generally the
+   * ones that should be used, because Dialer needs to function while in FBE mode.
    */
+  @Unencrypted
   public abstract SharedPreferences unencryptedSharedPrefs();
 
   public static StorageComponent get(Context context) {
diff --git a/java/com/android/dialer/storage/StorageModule.java b/java/com/android/dialer/storage/StorageModule.java
index 3ee72c8..e1c5b4b 100644
--- a/java/com/android/dialer/storage/StorageModule.java
+++ b/java/com/android/dialer/storage/StorageModule.java
@@ -30,6 +30,7 @@
 
   @Provides
   @Singleton
+  @Unencrypted
   static SharedPreferences provideUnencryptedSharedPrefs(@ApplicationContext Context appContext) {
     // #createDeviceProtectedStorageContext returns a new context each time, so we cache the shared
     // preferences object in order to avoid accessing disk for every operation.
diff --git a/java/com/android/dialer/storage/DeviceProtected.java b/java/com/android/dialer/storage/Unencrypted.java
similarity index 86%
rename from java/com/android/dialer/storage/DeviceProtected.java
rename to java/com/android/dialer/storage/Unencrypted.java
index 862259a..02c9021 100644
--- a/java/com/android/dialer/storage/DeviceProtected.java
+++ b/java/com/android/dialer/storage/Unencrypted.java
@@ -17,6 +17,6 @@
 
 import javax.inject.Qualifier;
 
-/** Annotation for retrieving device protected storage objects. */
+/** Annotation for retrieving unencrypted storage objects. */
 @Qualifier
-public @interface DeviceProtected {}
+public @interface Unencrypted {}
diff --git a/java/com/android/incallui/ContactInfoCache.java b/java/com/android/incallui/ContactInfoCache.java
index 2735461..67a294f 100644
--- a/java/com/android/incallui/ContactInfoCache.java
+++ b/java/com/android/incallui/ContactInfoCache.java
@@ -45,7 +45,7 @@
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.concurrent.DialerExecutor;
 import com.android.dialer.common.concurrent.DialerExecutor.Worker;
-import com.android.dialer.common.concurrent.DialerExecutors;
+import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import com.android.dialer.logging.ContactLookupResult;
 import com.android.dialer.logging.ContactSource;
 import com.android.dialer.oem.CequintCallerIdManager;
@@ -126,7 +126,10 @@
     mContext = context;
     mPhoneNumberService = Bindings.get(context).newPhoneNumberService(context);
     cachedNumberLookupExecutor =
-        DialerExecutors.createNonUiTaskBuilder(mContext, new CachedNumberLookupWorker()).build();
+        DialerExecutorComponent.get(mContext)
+            .dialerExecutorFactory()
+            .createNonUiTaskBuilder(new CachedNumberLookupWorker())
+            .build();
     Trace.endSection();
   }
 
diff --git a/java/com/android/incallui/ContactsAsyncHelper.java b/java/com/android/incallui/ContactsAsyncHelper.java
index 2e893b0..abca924 100644
--- a/java/com/android/incallui/ContactsAsyncHelper.java
+++ b/java/com/android/incallui/ContactsAsyncHelper.java
@@ -27,7 +27,7 @@
 import android.support.annotation.WorkerThread;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.DialerExecutor;
-import com.android.dialer.common.concurrent.DialerExecutors;
+import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import java.io.IOException;
 import java.io.InputStream;
 
@@ -94,7 +94,9 @@
     args.displayPhotoUri = displayPhotoUri;
     args.listener = listener;
 
-    DialerExecutors.createNonUiTaskBuilder(context, new Worker())
+    DialerExecutorComponent.get(context)
+        .dialerExecutorFactory()
+        .createNonUiTaskBuilder(new Worker())
         .onSuccess(
             output -> {
               if (args.listener != null) {
diff --git a/java/com/android/incallui/res/values-sw360dp/dimens.xml b/java/com/android/incallui/res/values-sw360dp/dimens.xml
index ad782e8..bb74a02 100644
--- a/java/com/android/incallui/res/values-sw360dp/dimens.xml
+++ b/java/com/android/incallui/res/values-sw360dp/dimens.xml
@@ -21,10 +21,6 @@
   <dimen name="incall_dialpad_key_number_margin_bottom">
     @dimen/dialpad_key_number_default_margin_bottom
   </dimen>
-  <!-- Zero key should have less space between self and text because "+" is smaller -->
-  <dimen name="incall_dialpad_zero_key_number_margin_bottom">
-    @dimen/dialpad_zero_key_number_default_margin_bottom
-  </dimen>
   <dimen name="incall_dialpad_digits_adjustable_text_size">@dimen/dialpad_digits_text_size</dimen>
   <dimen name="incall_dialpad_digits_adjustable_height">@dimen/dialpad_digits_height</dimen>
   <dimen name="incall_dialpad_key_numbers_size">@dimen/dialpad_key_numbers_default_size</dimen>
diff --git a/java/com/android/incallui/res/values/dimens.xml b/java/com/android/incallui/res/values/dimens.xml
index 9310281..6e37229 100644
--- a/java/com/android/incallui/res/values/dimens.xml
+++ b/java/com/android/incallui/res/values/dimens.xml
@@ -20,8 +20,6 @@
        from dialer. Note, these are the default sizes for small devices. Larger
        screen sizes apply the values in values-sw360dp/dimens.xml. -->
   <dimen name="incall_dialpad_key_number_margin_bottom">1dp</dimen>
-  <!-- Zero key should have less space between self and text because "+" is smaller -->
-  <dimen name="incall_dialpad_zero_key_number_margin_bottom">0dp</dimen>
   <dimen name="incall_dialpad_digits_adjustable_text_size">20sp</dimen>
   <dimen name="incall_dialpad_digits_adjustable_height">50dp</dimen>
   <dimen name="incall_dialpad_key_numbers_size">36dp</dimen>
diff --git a/java/com/android/incallui/res/values/styles.xml b/java/com/android/incallui/res/values/styles.xml
index 5f1aefd..6a26e9c 100644
--- a/java/com/android/incallui/res/values/styles.xml
+++ b/java/com/android/incallui/res/values/styles.xml
@@ -46,9 +46,6 @@
     <item name="dialpad_key_number_margin_bottom">
       @dimen/incall_dialpad_key_number_margin_bottom
     </item>
-    <item name="dialpad_zero_key_number_margin_bottom">
-      @dimen/incall_dialpad_zero_key_number_margin_bottom
-    </item>
     <item name="dialpad_digits_adjustable_text_size">
       @dimen/incall_dialpad_digits_adjustable_text_size
     </item>
