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
This commit is contained in:
@@ -155,13 +155,14 @@ public abstract class SettingsPreferenceFragment extends InstrumentedPreferenceF
|
|||||||
checkAvailablePrefs(getPreferenceScreen());
|
checkAvailablePrefs(getPreferenceScreen());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkAvailablePrefs(PreferenceGroup preferenceGroup) {
|
@VisibleForTesting
|
||||||
|
void checkAvailablePrefs(PreferenceGroup preferenceGroup) {
|
||||||
if (preferenceGroup == null) return;
|
if (preferenceGroup == null) return;
|
||||||
for (int i = 0; i < preferenceGroup.getPreferenceCount(); i++) {
|
for (int i = 0; i < preferenceGroup.getPreferenceCount(); i++) {
|
||||||
Preference pref = preferenceGroup.getPreference(i);
|
Preference pref = preferenceGroup.getPreference(i);
|
||||||
if (pref instanceof SelfAvailablePreference
|
if (pref instanceof SelfAvailablePreference
|
||||||
&& !((SelfAvailablePreference) pref).isAvailable(getContext())) {
|
&& !((SelfAvailablePreference) pref).isAvailable(getContext())) {
|
||||||
preferenceGroup.removePreference(pref);
|
pref.setVisible(false);
|
||||||
} else if (pref instanceof PreferenceGroup) {
|
} else if (pref instanceof PreferenceGroup) {
|
||||||
checkAvailablePrefs((PreferenceGroup) pref);
|
checkAvailablePrefs((PreferenceGroup) pref);
|
||||||
}
|
}
|
||||||
|
@@ -18,8 +18,10 @@ package com.android.settings;
|
|||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
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.doReturn;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
|
import static org.mockito.Mockito.never;
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
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.FakeFeatureFactory;
|
||||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||||
import com.android.settings.testutils.shadow.SettingsShadowResources;
|
import com.android.settings.testutils.shadow.SettingsShadowResources;
|
||||||
|
import com.android.settings.widget.WorkOnlyCategory;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@@ -174,6 +177,20 @@ public class SettingsPreferenceFragmentTest {
|
|||||||
// no crash
|
// 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 {
|
public static class TestFragment extends SettingsPreferenceFragment {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Reference in New Issue
Block a user