Loading src/com/android/settings/SettingsPreferenceFragment.java +3 −2 Original line number Diff line number Diff line Loading @@ -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); } Loading tests/robotests/src/com/android/settings/SettingsPreferenceFragmentTest.java +17 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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 Loading Loading
src/com/android/settings/SettingsPreferenceFragment.java +3 −2 Original line number Diff line number Diff line Loading @@ -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); } Loading
tests/robotests/src/com/android/settings/SettingsPreferenceFragmentTest.java +17 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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 Loading