diff --git a/java/com/android/dialer/assisteddialing/AndroidManifest.xml b/java/com/android/dialer/assisteddialing/AndroidManifest.xml
new file mode 100644
index 0000000..6625dff
--- /dev/null
+++ b/java/com/android/dialer/assisteddialing/AndroidManifest.xml
@@ -0,0 +1,22 @@
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.dialer.assisteddialing">
+
+  <uses-sdk
+      android:minSdkVersion="23"
+      android:targetSdkVersion="24"/>
+
+</manifest>
\ No newline at end of file
diff --git a/java/com/android/dialer/assisteddialing/ConcreteCreator.java b/java/com/android/dialer/assisteddialing/ConcreteCreator.java
index 8a5661e..73817d7 100644
--- a/java/com/android/dialer/assisteddialing/ConcreteCreator.java
+++ b/java/com/android/dialer/assisteddialing/ConcreteCreator.java
@@ -25,7 +25,6 @@
 import android.support.annotation.VisibleForTesting;
 import android.support.v4.os.UserManagerCompat;
 import android.telephony.TelephonyManager;
-import com.android.dialer.assisteddialing.ui.R;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.configprovider.ConfigProvider;
 import com.android.dialer.configprovider.ConfigProviderBindings;
diff --git a/java/com/android/dialer/assisteddialing/CountryCodeProvider.java b/java/com/android/dialer/assisteddialing/CountryCodeProvider.java
index b12b3dd..118696e 100644
--- a/java/com/android/dialer/assisteddialing/CountryCodeProvider.java
+++ b/java/com/android/dialer/assisteddialing/CountryCodeProvider.java
@@ -34,7 +34,7 @@
 /** A class to provide the appropriate country codes related to assisted dialing. */
 @TargetApi(VERSION_CODES.N)
 @SuppressWarnings("AndroidApiChecker") // Java 8 APIs
-final class CountryCodeProvider {
+public final class CountryCodeProvider {
 
   // TODO(erfanian): Ensure the below standard is consistent between libphonenumber and the
   // platform.
diff --git a/java/com/android/dialer/assisteddialing/res/values/strings.xml b/java/com/android/dialer/assisteddialing/res/values/strings.xml
new file mode 100644
index 0000000..f9cb123
--- /dev/null
+++ b/java/com/android/dialer/assisteddialing/res/values/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<resources>
+  <!-- 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>
+</resources>
\ No newline at end of file
diff --git a/java/com/android/dialer/assisteddialing/ui/AndroidManifest.xml b/java/com/android/dialer/assisteddialing/ui/AndroidManifest.xml
index 6625dff..7248747 100644
--- a/java/com/android/dialer/assisteddialing/ui/AndroidManifest.xml
+++ b/java/com/android/dialer/assisteddialing/ui/AndroidManifest.xml
@@ -13,7 +13,7 @@
      limitations under the License.
 -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.android.dialer.assisteddialing">
+    package="com.android.dialer.assisteddialing.ui">
 
   <uses-sdk
       android:minSdkVersion="23"
diff --git a/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java b/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java
index 05ca6d9..0341894 100644
--- a/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java
+++ b/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java
@@ -15,22 +15,53 @@
  */
 package com.android.dialer.assisteddialing.ui;
 
+import android.annotation.TargetApi;
+import android.os.Build.VERSION_CODES;
 import android.os.Bundle;
 import android.preference.ListPreference;
 import android.preference.Preference;
 import android.preference.PreferenceFragment;
 import android.preference.SwitchPreference;
 import android.text.TextUtils;
+import com.android.dialer.assisteddialing.ConcreteCreator;
+import com.android.dialer.assisteddialing.CountryCodeProvider;
+import com.android.dialer.configprovider.ConfigProviderBindings;
 import com.android.dialer.logging.DialerImpression;
 import com.android.dialer.logging.Logger;
+import com.google.auto.value.AutoValue;
+import java.util.ArrayList;
+import java.util.List;
 
 /** The setting for Assisted Dialing */
+@TargetApi(VERSION_CODES.N)
+@SuppressWarnings("AndroidApiChecker") // Java 8 APIs
 public class AssistedDialingSettingFragment extends PreferenceFragment {
 
+  private CountryCodeProvider countryCodeProvider;
+
+  @AutoValue
+  abstract static class DisplayNameAndCountryCodeTuple {
+
+    static DisplayNameAndCountryCodeTuple create(
+        CharSequence countryDisplayName, CharSequence countryCode) {
+      return new AutoValue_AssistedDialingSettingFragment_DisplayNameAndCountryCodeTuple(
+          countryDisplayName, countryCode);
+    }
+
+    // The user-readable name of the country.
+    abstract CharSequence countryDisplayname();
+
+    // The ISO 3166-2 country code of the country.
+    abstract CharSequence countryCode();
+  }
+
   @Override
   public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
 
+    countryCodeProvider =
+        ConcreteCreator.getCountryCodeProvider(ConfigProviderBindings.get(getContext()));
+
     // Load the preferences from an XML resource
     addPreferencesFromResource(R.xml.assisted_dialing_setting);
     SwitchPreference switchPref =
@@ -41,6 +72,8 @@
         (ListPreference)
             findPreference(getContext().getString(R.string.assisted_dialing_setting_cc_key));
 
+    updateCountryChoices(countryChooserPref);
+
     if (!TextUtils.isEmpty(countryChooserPref.getEntry())) {
       countryChooserPref.setSummary(countryChooserPref.getEntry());
     }
@@ -48,6 +81,49 @@
     switchPref.setOnPreferenceChangeListener(this::logIfUserDisabledFeature);
   }
 
+  /**
+   * Filters the default entries in the country chooser by only showing those countries in which the
+   * feature in enabled.
+   */
+  private void updateCountryChoices(ListPreference countryChooserPref) {
+
+    List<DisplayNameAndCountryCodeTuple> defaultCountryChoices =
+        buildDefaultCountryChooserKeysAndValues(countryChooserPref);
+
+    // Always include the default preference.
+    List<CharSequence> newKeys = new ArrayList<>();
+    List<CharSequence> newValues = new ArrayList<>();
+    newKeys.add(countryChooserPref.getEntries()[0]);
+    newValues.add(countryChooserPref.getEntryValues()[0]);
+
+    for (DisplayNameAndCountryCodeTuple tuple : defaultCountryChoices) {
+      if (countryCodeProvider.isSupportedCountryCode(tuple.countryCode().toString())) {
+        newKeys.add(tuple.countryDisplayname());
+        newValues.add(tuple.countryCode());
+      }
+    }
+
+    countryChooserPref.setEntries(newKeys.toArray(new CharSequence[newKeys.size()]));
+    countryChooserPref.setEntryValues(newValues.toArray(new CharSequence[newValues.size()]));
+  }
+
+  private List<DisplayNameAndCountryCodeTuple> buildDefaultCountryChooserKeysAndValues(
+      ListPreference countryChooserPref) {
+    CharSequence[] keys = countryChooserPref.getEntries();
+    CharSequence[] values = countryChooserPref.getEntryValues();
+
+    if (keys.length != values.length) {
+      throw new IllegalStateException("Unexpected mismatch in country chooser key/value size");
+    }
+
+    List<DisplayNameAndCountryCodeTuple> displayNamesandCountryCodes = new ArrayList<>();
+    for (int i = 0; i < keys.length; i++) {
+      displayNamesandCountryCodes.add(DisplayNameAndCountryCodeTuple.create(keys[i], values[i]));
+    }
+
+    return displayNamesandCountryCodes;
+  }
+
   boolean updateListSummary(Preference pref, Object newValue) {
     ListPreference listPref = (ListPreference) pref;
     CharSequence[] entries = listPref.getEntries();
diff --git a/java/com/android/dialer/assisteddialing/ui/res/values/strings.xml b/java/com/android/dialer/assisteddialing/ui/res/values/strings.xml
index 1dc778f..3a81780 100644
--- a/java/com/android/dialer/assisteddialing/ui/res/values/strings.xml
+++ b/java/com/android/dialer/assisteddialing/ui/res/values/strings.xml
@@ -22,12 +22,6 @@
   <!-- Label for a setting enabling assisted dialing switch preference-->
   <string name="assisted_dialing_setting_summary">Predict and add a country code when you call while traveling abroad</string>
 
-  <!-- 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>
 
diff --git a/packages.mk b/packages.mk
index c86e276..ce425a9 100644
--- a/packages.mk
+++ b/packages.mk
@@ -8,6 +8,7 @@
 	com.android.dialer.app \
 	com.android.dialer.app.manifests.activities \
 	com.android.dialer.app.voicemail.error \
+	com.android.dialer.assisteddialing \
 	com.android.dialer.assisteddialing.ui \
 	com.android.dialer.backup \
 	com.android.dialer.binary.aosp.testing \
