diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java index 6933cfd6653..6b29b2e1e48 100644 --- a/src/com/android/settings/SettingsPreferenceFragment.java +++ b/src/com/android/settings/SettingsPreferenceFragment.java @@ -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); } diff --git a/tests/robotests/src/com/android/settings/SettingsPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/SettingsPreferenceFragmentTest.java index 2fc3dcb1297..76f70433b48 100644 --- a/tests/robotests/src/com/android/settings/SettingsPreferenceFragmentTest.java +++ b/tests/robotests/src/com/android/settings/SettingsPreferenceFragmentTest.java @@ -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