Fix focus behavior of ValidatedEditTextPreference

The bug report was that the cursor is set to the beginning of the
EditText for wifi hotspot password field, instead of at the end (or
having the entire field selected). This fix makes it so that all
ValidatedEditTextPreference's will put the cursor at the end of the
EditText.

Bug: 65413206
Test: make RunSettingsRoboTests
Change-Id: I23f3bb1b3f1b49b2f193c0ae2e103eae5c1a1019
This commit is contained in:
Antony Sargent
2017-09-07 16:19:17 -07:00
parent 5b017f7b05
commit 9be8c3fbfe
2 changed files with 43 additions and 13 deletions

View File

@@ -35,9 +35,10 @@ import org.robolectric.annotation.Config;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
@@ -58,10 +59,36 @@ public class ValidatedEditTextPreferenceTest {
}
@Test
public void bindDialogView_noTextWatcher_shouldDoNothing() {
public void bindDialogView_nullEditText_shouldNotCrash() {
when(mView.findViewById(android.R.id.edit)).thenReturn(null);
// should not crash trying to get the EditText text
mPreference.onBindDialogView(mView);
}
@Test
public void bindDialogView_emptyEditText_shouldNotSetSelection() {
final String testText = "";
final EditText editText = spy(new EditText(RuntimeEnvironment.application));
editText.setText(testText);
when(mView.findViewById(android.R.id.edit)).thenReturn(editText);
mPreference.onBindDialogView(mView);
verifyZeroInteractions(mView);
// no need to setSelection if text was empty
verify(editText, never()).setSelection(anyInt());
}
@Test
public void bindDialogView_nonemptyEditText_shouldSetSelection() {
final String testText = "whatever";
final EditText editText = spy(new EditText(RuntimeEnvironment.application));
editText.setText(testText);
when(mView.findViewById(android.R.id.edit)).thenReturn(editText);
mPreference.onBindDialogView(mView);
// selection should be set to end of string
verify(editText).setSelection(testText.length());
}
@Test