OSDN Git Service

Hide the SelfAvailablePreference if it is not available.
authorDoris Ling <dling@google.com>
Tue, 27 Nov 2018 22:58:55 +0000 (14:58 -0800)
committerDoris Ling <dling@google.com>
Tue, 27 Nov 2018 22:58:55 +0000 (14:58 -0800)
- 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

src/com/android/settings/SettingsPreferenceFragment.java
tests/robotests/src/com/android/settings/SettingsPreferenceFragmentTest.java

index 6933cfd..6b29b2e 100644 (file)
@@ -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);
             }
index 2fc3dcb..76f7043 100644 (file)
@@ -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