Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 849aee13 authored by Aurimas Liutikas's avatar Aurimas Liutikas Committed by Android (Google) Code Review
Browse files

Merge "Fix a NPE and add logging to catch offender in the future"

parents b194ee65 b2944525
Loading
Loading
Loading
Loading
+8 −0
Original line number Original line Diff line number Diff line
package com.android.settingslib.core;
package com.android.settingslib.core;


import android.content.Context;
import android.content.Context;
import android.text.TextUtils;
import android.util.Log;


import androidx.preference.Preference;
import androidx.preference.Preference;
import androidx.preference.PreferenceGroup;
import androidx.preference.PreferenceGroup;
@@ -11,6 +13,8 @@ import androidx.preference.PreferenceScreen;
 */
 */
public abstract class AbstractPreferenceController {
public abstract class AbstractPreferenceController {


    private static final String TAG = "AbstractPrefController";

    protected final Context mContext;
    protected final Context mContext;


    public AbstractPreferenceController(Context context) {
    public AbstractPreferenceController(Context context) {
@@ -22,6 +26,10 @@ public abstract class AbstractPreferenceController {
     */
     */
    public void displayPreference(PreferenceScreen screen) {
    public void displayPreference(PreferenceScreen screen) {
        final String prefKey = getPreferenceKey();
        final String prefKey = getPreferenceKey();
        if (TextUtils.isEmpty(prefKey)) {
            Log.w(TAG, "Skipping displayPreference because key is empty:" + getClass().getName());
            return;
        }
        if (isAvailable()) {
        if (isAvailable()) {
            setVisible(screen, prefKey, true /* visible */);
            setVisible(screen, prefKey, true /* visible */);
            if (this instanceof Preference.OnPreferenceChangeListener) {
            if (this instanceof Preference.OnPreferenceChangeListener) {
+20 −8
Original line number Original line Diff line number Diff line
@@ -35,6 +35,8 @@ import org.robolectric.RuntimeEnvironment;
@RunWith(RobolectricTestRunner.class)
@RunWith(RobolectricTestRunner.class)
public class AbstractPreferenceControllerTest {
public class AbstractPreferenceControllerTest {


    private static final String KEY_PREF = "test_pref";

    @Mock
    @Mock
    private PreferenceScreen mScreen;
    private PreferenceScreen mScreen;


@@ -47,9 +49,9 @@ public class AbstractPreferenceControllerTest {
        MockitoAnnotations.initMocks(this);
        MockitoAnnotations.initMocks(this);
        mContext = RuntimeEnvironment.application;
        mContext = RuntimeEnvironment.application;
        mPreference = new Preference(mContext);
        mPreference = new Preference(mContext);
        mPreference.setKey(TestPrefController.KEY_PREF);
        mPreference.setKey(KEY_PREF);
        when(mScreen.findPreference(TestPrefController.KEY_PREF)).thenReturn(mPreference);
        when(mScreen.findPreference(KEY_PREF)).thenReturn(mPreference);
        mTestPrefController = new TestPrefController(mContext);
        mTestPrefController = new TestPrefController(mContext, KEY_PREF);
    }
    }


    @Test
    @Test
@@ -61,16 +63,25 @@ public class AbstractPreferenceControllerTest {
        assertThat(mPreference.isVisible()).isTrue();
        assertThat(mPreference.isVisible()).isTrue();
    }
    }


    @Test
    public void displayPref_noKey_shouldDoNothing() {
        mTestPrefController.isAvailable = true;

        mTestPrefController.displayPreference(mScreen);

        assertThat(mPreference.isVisible()).isTrue();
    }

    @Test
    @Test
    public void setVisible_prefIsVisible_shouldSetToVisible() {
    public void setVisible_prefIsVisible_shouldSetToVisible() {
        mTestPrefController.setVisible(mScreen, TestPrefController.KEY_PREF, true /* visible */);
        mTestPrefController.setVisible(mScreen, KEY_PREF, true /* visible */);


        assertThat(mPreference.isVisible()).isTrue();
        assertThat(mPreference.isVisible()).isTrue();
    }
    }


    @Test
    @Test
    public void setVisible_prefNotVisible_shouldSetToInvisible() {
    public void setVisible_prefNotVisible_shouldSetToInvisible() {
        mTestPrefController.setVisible(mScreen, TestPrefController.KEY_PREF, false /* visible */);
        mTestPrefController.setVisible(mScreen, KEY_PREF, false /* visible */);


        assertThat(mPreference.isVisible()).isFalse();
        assertThat(mPreference.isVisible()).isFalse();
    }
    }
@@ -92,13 +103,14 @@ public class AbstractPreferenceControllerTest {
    }
    }


    private static class TestPrefController extends AbstractPreferenceController {
    private static class TestPrefController extends AbstractPreferenceController {
        private static final String KEY_PREF = "test_pref";
        private static final CharSequence TEST_SUMMARY = "Test";
        private static final CharSequence TEST_SUMMARY = "Test";


        public boolean isAvailable;
        public boolean isAvailable;
        private final String mPrefKey;


        public TestPrefController(Context context) {
        TestPrefController(Context context, String key) {
            super(context);
            super(context);
            mPrefKey = key;
        }
        }


        @Override
        @Override
@@ -113,7 +125,7 @@ public class AbstractPreferenceControllerTest {


        @Override
        @Override
        public String getPreferenceKey() {
        public String getPreferenceKey() {
            return KEY_PREF;
            return mPrefKey;
        }
        }


        @Override
        @Override