Merge cherrypicks of [3094267, 3095329, 3095257, 3095367] into pi-release

Change-Id: I5bfbf0e26a0e9229f26c34da8960a2ad5b0a3829
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();
+    }
 }