From 427e19e03a3d210acdaf14b128cd4c0bece5907a Mon Sep 17 00:00:00 2001 From: Doris Ling Date: Tue, 14 Nov 2017 13:59:25 -0800 Subject: [PATCH] Fix NullPointerException in CustomEditTextPreference. - check for valid dialog in getEditText() when trying to retrieve the edit view from the dialog. Change-Id: Ia8e2273ab0f3d75567ab16e1175bef88f7516a5d Fixes: 69281837 Test: make RunSettingsLibRoboTests --- .../com/android/settingslib/CustomEditTextPreference.java | 9 +++++++-- .../android/settingslib/CustomEditTextPreferenceTest.java | 12 ++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/CustomEditTextPreference.java b/packages/SettingsLib/src/com/android/settingslib/CustomEditTextPreference.java index 90124f1f558f..8e29e50fc848 100644 --- a/packages/SettingsLib/src/com/android/settingslib/CustomEditTextPreference.java +++ b/packages/SettingsLib/src/com/android/settingslib/CustomEditTextPreference.java @@ -49,8 +49,13 @@ public class CustomEditTextPreference extends EditTextPreference { } public EditText getEditText() { - return mFragment != null ? (EditText) mFragment.getDialog().findViewById(android.R.id.edit) - : null; + if (mFragment != null) { + final Dialog dialog = mFragment.getDialog(); + if (dialog != null) { + return (EditText) dialog.findViewById(android.R.id.edit); + } + } + return null; } public boolean isDialogOpen() { diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/CustomEditTextPreferenceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/CustomEditTextPreferenceTest.java index 17c7d13fe67e..7e374931b767 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/CustomEditTextPreferenceTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/CustomEditTextPreferenceTest.java @@ -16,6 +16,7 @@ package com.android.settingslib; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -31,6 +32,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; +import org.robolectric.util.ReflectionHelpers; @RunWith(SettingsLibRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) @@ -59,6 +61,16 @@ public class CustomEditTextPreferenceTest { verify(editText).requestFocus(); } + @Test + public void getEditText_noDialog_shouldNotCrash() { + ReflectionHelpers.setField(mPreference, "mFragment", + mock(CustomEditTextPreference.CustomPreferenceDialogFragment.class)); + + mPreference.getEditText(); + + // no crash + } + private static class TestPreference extends CustomEditTextPreference { public TestPreference(Context context) { super(context); -- 2.11.0