Fix a NPE and add logging to catch offender in the future
Change-Id: Ic177ad71231e2210b17601e6718123b47634f26f Fixes: 121116425 Test: robotests
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
package com.android.settingslib.core;
|
||||
|
||||
import android.content.Context;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceGroup;
|
||||
@@ -11,6 +13,8 @@ import androidx.preference.PreferenceScreen;
|
||||
*/
|
||||
public abstract class AbstractPreferenceController {
|
||||
|
||||
private static final String TAG = "AbstractPrefController";
|
||||
|
||||
protected final Context mContext;
|
||||
|
||||
public AbstractPreferenceController(Context context) {
|
||||
@@ -22,6 +26,10 @@ public abstract class AbstractPreferenceController {
|
||||
*/
|
||||
public void displayPreference(PreferenceScreen screen) {
|
||||
final String prefKey = getPreferenceKey();
|
||||
if (TextUtils.isEmpty(prefKey)) {
|
||||
Log.w(TAG, "Skipping displayPreference because key is empty:" + getClass().getName());
|
||||
return;
|
||||
}
|
||||
if (isAvailable()) {
|
||||
setVisible(screen, prefKey, true /* visible */);
|
||||
if (this instanceof Preference.OnPreferenceChangeListener) {
|
||||
|
||||
@@ -35,6 +35,8 @@ import org.robolectric.RuntimeEnvironment;
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class AbstractPreferenceControllerTest {
|
||||
|
||||
private static final String KEY_PREF = "test_pref";
|
||||
|
||||
@Mock
|
||||
private PreferenceScreen mScreen;
|
||||
|
||||
@@ -47,9 +49,9 @@ public class AbstractPreferenceControllerTest {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mContext = RuntimeEnvironment.application;
|
||||
mPreference = new Preference(mContext);
|
||||
mPreference.setKey(TestPrefController.KEY_PREF);
|
||||
when(mScreen.findPreference(TestPrefController.KEY_PREF)).thenReturn(mPreference);
|
||||
mTestPrefController = new TestPrefController(mContext);
|
||||
mPreference.setKey(KEY_PREF);
|
||||
when(mScreen.findPreference(KEY_PREF)).thenReturn(mPreference);
|
||||
mTestPrefController = new TestPrefController(mContext, KEY_PREF);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -61,16 +63,25 @@ public class AbstractPreferenceControllerTest {
|
||||
assertThat(mPreference.isVisible()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void displayPref_noKey_shouldDoNothing() {
|
||||
mTestPrefController.isAvailable = true;
|
||||
|
||||
mTestPrefController.displayPreference(mScreen);
|
||||
|
||||
assertThat(mPreference.isVisible()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setVisible_prefIsVisible_shouldSetToVisible() {
|
||||
mTestPrefController.setVisible(mScreen, TestPrefController.KEY_PREF, true /* visible */);
|
||||
mTestPrefController.setVisible(mScreen, KEY_PREF, true /* visible */);
|
||||
|
||||
assertThat(mPreference.isVisible()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setVisible_prefNotVisible_shouldSetToInvisible() {
|
||||
mTestPrefController.setVisible(mScreen, TestPrefController.KEY_PREF, false /* visible */);
|
||||
mTestPrefController.setVisible(mScreen, KEY_PREF, false /* visible */);
|
||||
|
||||
assertThat(mPreference.isVisible()).isFalse();
|
||||
}
|
||||
@@ -92,13 +103,14 @@ public class AbstractPreferenceControllerTest {
|
||||
}
|
||||
|
||||
private static class TestPrefController extends AbstractPreferenceController {
|
||||
private static final String KEY_PREF = "test_pref";
|
||||
private static final CharSequence TEST_SUMMARY = "Test";
|
||||
|
||||
public boolean isAvailable;
|
||||
private final String mPrefKey;
|
||||
|
||||
public TestPrefController(Context context) {
|
||||
TestPrefController(Context context, String key) {
|
||||
super(context);
|
||||
mPrefKey = key;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -113,7 +125,7 @@ public class AbstractPreferenceControllerTest {
|
||||
|
||||
@Override
|
||||
public String getPreferenceKey() {
|
||||
return KEY_PREF;
|
||||
return mPrefKey;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user