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

Commit fe525949 authored by Doris Ling's avatar Doris Ling
Browse files

Hide the SelfAvailablePreference if it is not available.

- instead of removing it from the preference screen, set its visibility
to false, so that if it becomes available later, it will still be found
on the screen.

Bug: 119838520
Test: make RunSettingsRoboTests
Change-Id: Idc7079bb5846aef247dd87c0b0dba2546f2d8f8f
parent 92b6f1b6
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -155,13 +155,14 @@ public abstract class SettingsPreferenceFragment extends InstrumentedPreferenceF
        checkAvailablePrefs(getPreferenceScreen());
    }

    private void checkAvailablePrefs(PreferenceGroup preferenceGroup) {
    @VisibleForTesting
    void checkAvailablePrefs(PreferenceGroup preferenceGroup) {
        if (preferenceGroup == null) return;
        for (int i = 0; i < preferenceGroup.getPreferenceCount(); i++) {
            Preference pref = preferenceGroup.getPreference(i);
            if (pref instanceof SelfAvailablePreference
                    && !((SelfAvailablePreference) pref).isAvailable(getContext())) {
                preferenceGroup.removePreference(pref);
                pref.setVisible(false);
            } else if (pref instanceof PreferenceGroup) {
                checkAvailablePrefs((PreferenceGroup) pref);
            }
+17 −0
Original line number Diff line number Diff line
@@ -18,8 +18,10 @@ package com.android.settings;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.Matchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -37,6 +39,7 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.SettingsShadowResources;
import com.android.settings.widget.WorkOnlyCategory;

import org.junit.Before;
import org.junit.Test;
@@ -174,6 +177,20 @@ public class SettingsPreferenceFragmentTest {
        // no crash
    }

    @Test
    public void checkAvailablePrefs_selfAvialbalePreferenceNotAvailable_shouldHidePreference() {
        doReturn(mPreferenceScreen).when(mFragment).getPreferenceScreen();
        final WorkOnlyCategory workOnlyCategory = mock(WorkOnlyCategory.class);
        when(mPreferenceScreen.getPreferenceCount()).thenReturn(1);
        when(mPreferenceScreen.getPreference(0)).thenReturn(workOnlyCategory);
        when(workOnlyCategory.isAvailable(any(Context.class))).thenReturn(false);

        mFragment.checkAvailablePrefs(mPreferenceScreen);

        verify(mPreferenceScreen, never()).removePreference(workOnlyCategory);
        verify(workOnlyCategory).setVisible(false);
    }

    public static class TestFragment extends SettingsPreferenceFragment {

        @Override