diff --git a/src/com/android/emergency/edit/EditMedicalInfoFragment.java b/src/com/android/emergency/edit/EditMedicalInfoFragment.java
index 6783972..1b0e3a3 100644
--- a/src/com/android/emergency/edit/EditMedicalInfoFragment.java
+++ b/src/com/android/emergency/edit/EditMedicalInfoFragment.java
@@ -29,6 +29,7 @@
 import com.android.emergency.util.PreferenceUtils;
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.settingslib.CustomEditTextPreference;
 
 /**
  * Fragment that displays personal and medical information.
@@ -76,15 +77,20 @@
 
     @Override
     public void onDisplayPreferenceDialog(Preference preference) {
-        if (!(preference instanceof AutoCompleteEditTextPreference)) {
-            super.onDisplayPreferenceDialog(preference);
-            return;
+        DialogFragment fragment = null;
+        if (preference instanceof CustomEditTextPreference) {
+            fragment = CustomEditTextPreference.CustomPreferenceDialogFragment
+                    .newInstance(preference.getKey());
+        } else if (preference instanceof AutoCompleteEditTextPreference) {
+            fragment = AutoCompleteEditTextPreference.AutoCompleteEditTextPreferenceDialogFragment
+                    .newInstance(preference.getKey());
         }
-        DialogFragment fragment =
-                AutoCompleteEditTextPreference.AutoCompleteEditTextPreferenceDialogFragment
-                        .newInstance(preference.getKey());
-        fragment.setTargetFragment(this, 0);
-        fragment.show(getFragmentManager(), "dialog_preference");
+        if (fragment != null) {
+            fragment.setTargetFragment(this, 0);
+            fragment.show(getFragmentManager(), "dialog_preference");
+        } else {
+            super.onDisplayPreferenceDialog(preference);
+        }
     }
 
     /** Reloads all the preferences by reading the value from the shared preferences. */
diff --git a/src/com/android/emergency/preferences/AutoCompleteEditTextPreference.java b/src/com/android/emergency/preferences/AutoCompleteEditTextPreference.java
index 3796c94..d9e2b26 100644
--- a/src/com/android/emergency/preferences/AutoCompleteEditTextPreference.java
+++ b/src/com/android/emergency/preferences/AutoCompleteEditTextPreference.java
@@ -142,6 +142,7 @@
 
         AutoCompleteTextView editText = mAutoCompleteTextView;
         editText.setText(getText());
+        editText.requestFocus();
 
         ViewParent oldParent = editText.getParent();
         if (oldParent != view) {
diff --git a/src/com/android/emergency/preferences/EmergencyEditTextPreference.java b/src/com/android/emergency/preferences/EmergencyEditTextPreference.java
index 1511055..7a6cfe5 100644
--- a/src/com/android/emergency/preferences/EmergencyEditTextPreference.java
+++ b/src/com/android/emergency/preferences/EmergencyEditTextPreference.java
@@ -22,6 +22,7 @@
 import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.view.View;
+import android.widget.EditText;
 import android.widget.TextView;
 
 import com.android.emergency.R;
@@ -80,6 +81,7 @@
     @Override
     protected void onBindDialogView(View view) {
         super.onBindDialogView(view);
-        getEditText().setSelection(getEditText().getText().length());
+        final EditText editText = view.findViewById(android.R.id.edit);
+        editText.setSelection(editText.getText().length());
     }
 }
diff --git a/tests/robolectric/src/com/android/emergency/preferences/NameAutoCompletePreferenceTest.java b/tests/robolectric/src/com/android/emergency/preferences/NameAutoCompletePreferenceTest.java
index 305010a..c191325 100644
--- a/tests/robolectric/src/com/android/emergency/preferences/NameAutoCompletePreferenceTest.java
+++ b/tests/robolectric/src/com/android/emergency/preferences/NameAutoCompletePreferenceTest.java
@@ -17,8 +17,10 @@
 
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.nullable;
 import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import android.content.Context;
@@ -26,7 +28,8 @@
 import android.support.v7.preference.PreferenceGroup;
 import android.support.v7.preference.PreferenceManager;
 import android.support.v7.preference.PreferenceScreen;
-import android.test.suitebuilder.annotation.SmallTest;
+import android.text.Editable;
+import android.view.View;
 import android.widget.AutoCompleteTextView;
 
 import com.android.emergency.PreferenceKeys;
@@ -40,9 +43,9 @@
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
+import org.robolectric.util.ReflectionHelpers;
 
 /** Unit tests for {@link NameAutoCompletePreference}. */
-@SmallTest
 @RunWith(RobolectricTestRunner.class)
 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
 public class NameAutoCompletePreferenceTest {
@@ -116,4 +119,17 @@
         when(mAutoCompleteSuggestionProvider.getNameSuggestion()).thenReturn(name);
         assertThat(mPreference.createAutocompleteSuggestions()).isEqualTo(new String[] {name});
     }
+
+    @Test
+    public void testBindDialog_shouldFocusOnEditText() {
+        final AutoCompleteTextView editText = mock(AutoCompleteTextView.class);
+        final Editable text = mock(Editable.class);
+        when(editText.getText()).thenReturn(text);
+        when(text.length()).thenReturn(0);
+        ReflectionHelpers.setField(mPreference, "mAutoCompleteTextView", editText);
+
+        mPreference.onBindDialogView(mock(View.class));
+
+        verify(editText).requestFocus();
+    }
 }
