diff options
| author | 2017-11-10 00:03:03 +0000 | |
|---|---|---|
| committer | 2017-11-10 00:03:03 +0000 | |
| commit | 1b1e16bb8f72fbca075642c2775f53e847180b8b (patch) | |
| tree | 1b6d0fa5aee019de0bde6d8091ed7d0a7f8233fd | |
| parent | 570d4db0c9d46458b3bda68e5a44a8d1ea38cbe4 (diff) | |
| parent | 7293cf44ba3a2cb7be4a47790d31aa294d86609f (diff) | |
Merge "Show/hide preference instead of removing it in display."
5 files changed, 38 insertions, 160 deletions
| diff --git a/packages/SettingsLib/src/com/android/settingslib/core/AbstractPreferenceController.java b/packages/SettingsLib/src/com/android/settingslib/core/AbstractPreferenceController.java index 386c4e0fc466..88f0d2be311f 100644 --- a/packages/SettingsLib/src/com/android/settingslib/core/AbstractPreferenceController.java +++ b/packages/SettingsLib/src/com/android/settingslib/core/AbstractPreferenceController.java @@ -20,14 +20,16 @@ public abstract class AbstractPreferenceController {       * Displays preference in this controller.       */      public void displayPreference(PreferenceScreen screen) { +        final String prefKey = getPreferenceKey();          if (isAvailable()) { +            setVisible(screen, prefKey, true /* visible */);              if (this instanceof Preference.OnPreferenceChangeListener) { -                final Preference preference = screen.findPreference(getPreferenceKey()); +                final Preference preference = screen.findPreference(prefKey);                  preference.setOnPreferenceChangeListener(                          (Preference.OnPreferenceChangeListener) this);              }          } else { -            removePreference(screen, getPreferenceKey()); +            setVisible(screen, prefKey, false /* visible */);          }      } @@ -59,13 +61,6 @@ public abstract class AbstractPreferenceController {      public abstract String getPreferenceKey();      /** -     * Removes preference from screen. -     */ -    protected final void removePreference(PreferenceScreen screen, String key) { -        findAndRemovePreference(screen, key); -    } - -    /**       * Show/hide a preference.       */      protected final void setVisible(PreferenceGroup group, String key, boolean isVisible) { @@ -74,25 +69,4 @@ public abstract class AbstractPreferenceController {              pref.setVisible(isVisible);          }      } - -    // finds the preference recursively and removes it from its parent -    private boolean findAndRemovePreference(PreferenceGroup prefGroup, String key) { -        final int preferenceCount = prefGroup.getPreferenceCount(); -        for (int i = 0; i < preferenceCount; i++) { -            final Preference preference = prefGroup.getPreference(i); -            final String curKey = preference.getKey(); - -            if (curKey != null && curKey.equals(key)) { -                return prefGroup.removePreference(preference); -            } - -            if (preference instanceof PreferenceGroup) { -                if (findAndRemovePreference((PreferenceGroup) preference, key)) { -                    return true; -                } -            } -        } -        return false; -    } -  } diff --git a/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractSerialNumberPreferenceController.java b/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractSerialNumberPreferenceController.java index ff7536adb808..90f14ef4c32c 100644 --- a/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractSerialNumberPreferenceController.java +++ b/packages/SettingsLib/src/com/android/settingslib/deviceinfo/AbstractSerialNumberPreferenceController.java @@ -18,18 +18,20 @@ package com.android.settingslib.deviceinfo;  import android.content.Context;  import android.os.Build; +import android.support.annotation.VisibleForTesting;  import android.support.v7.preference.Preference;  import android.support.v7.preference.PreferenceScreen;  import android.text.TextUtils; -import com.android.internal.annotations.VisibleForTesting;  import com.android.settingslib.core.AbstractPreferenceController;  /**   * Preference controller for displaying device serial number. Wraps {@link Build#getSerial()}.   */  public class AbstractSerialNumberPreferenceController extends AbstractPreferenceController { -    private static final String KEY_SERIAL_NUMBER = "serial_number"; + +    @VisibleForTesting +    static final String KEY_SERIAL_NUMBER = "serial_number";      private final String mSerialNumber; diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/AbstractPreferenceControllerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/AbstractPreferenceControllerTest.java index c08bc2a193d3..26970e1c7aff 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/AbstractPreferenceControllerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/AbstractPreferenceControllerTest.java @@ -16,17 +16,10 @@  package com.android.settingslib.core;  import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Matchers.any; -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;  import android.content.Context;  import android.support.v7.preference.Preference; -import android.support.v7.preference.PreferenceGroup; -import android.support.v7.preference.PreferenceManager;  import android.support.v7.preference.PreferenceScreen;  import com.android.settingslib.TestConfig; @@ -39,134 +32,58 @@ import org.mockito.MockitoAnnotations;  import org.robolectric.RobolectricTestRunner;  import org.robolectric.RuntimeEnvironment;  import org.robolectric.annotation.Config; -import org.robolectric.shadows.ShadowApplication;  @RunWith(RobolectricTestRunner.class)  @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)  public class AbstractPreferenceControllerTest {      @Mock -    private Context mContext; -    @Mock      private PreferenceScreen mScreen; +    private Context mContext;      private Preference mPreference;      private TestPrefController mTestPrefController;      @Before      public void setUp() {          MockitoAnnotations.initMocks(this); -        mPreference = new Preference(RuntimeEnvironment.application); +        mContext = RuntimeEnvironment.application; +        mPreference = new Preference(mContext);          mPreference.setKey(TestPrefController.KEY_PREF); +        when(mScreen.findPreference(TestPrefController.KEY_PREF)).thenReturn(mPreference);          mTestPrefController = new TestPrefController(mContext);      }      @Test -    public void removeExistingPref_shouldBeRemoved() { -        when(mScreen.getPreferenceCount()).thenReturn(1); -        when(mScreen.getPreference(0)).thenReturn(mPreference); - -        mTestPrefController.removePreference(mScreen, TestPrefController.KEY_PREF); - -        verify(mScreen).removePreference(mPreference); -    } - -    @Test -    public void removeNonExistingPref_shouldNotRemoveAnything() { -        mTestPrefController.removePreference(mScreen, TestPrefController.KEY_PREF); - -        verify(mScreen, never()).removePreference(any(Preference.class)); -    } - -    @Test      public void displayPref_ifAvailable() {          mTestPrefController.isAvailable = true;          mTestPrefController.displayPreference(mScreen); -        verify(mScreen, never()).removePreference(any(Preference.class)); +        assertThat(mPreference.isVisible()).isTrue();      }      @Test      public void setVisible_prefIsVisible_shouldSetToVisible() { -        when(mScreen.findPreference(TestPrefController.KEY_PREF)).thenReturn(mPreference); -          mTestPrefController.setVisible(mScreen, TestPrefController.KEY_PREF, true /* visible */); +          assertThat(mPreference.isVisible()).isTrue();      }      @Test      public void setVisible_prefNotVisible_shouldSetToInvisible() { -        when(mScreen.findPreference(TestPrefController.KEY_PREF)).thenReturn(mPreference); -          mTestPrefController.setVisible(mScreen, TestPrefController.KEY_PREF, false /* visible */); +          assertThat(mPreference.isVisible()).isFalse();      }      @Test      public void doNotDisplayPref_ifNotAvailable() { -        when(mScreen.getPreferenceCount()).thenReturn(1); -        when(mScreen.getPreference(0)).thenReturn(mPreference);          mTestPrefController.isAvailable = false;          mTestPrefController.displayPreference(mScreen); -        verify(mScreen).removePreference(any(Preference.class)); -    } - -    @Test -    public void removePreference_shouldRemoveRecursively() { -        final Context context = ShadowApplication.getInstance().getApplicationContext(); -        final PreferenceManager preferenceManager = mock(PreferenceManager.class); -        // Top level -        PreferenceScreen prefRoot = spy(new PreferenceScreen(context, null)); -        when(prefRoot.getPreferenceManager()).thenReturn(preferenceManager); -        Preference pref1 = mock(Preference.class); -        when(pref1.getKey()).thenReturn("key1"); -        PreferenceGroup prefGroup2 = spy(new PreferenceScreen(context, null)); -        when(prefGroup2.getPreferenceManager()).thenReturn(preferenceManager); -        when(prefGroup2.getKey()).thenReturn("group2"); -        Preference pref3 = mock(Preference.class); -        when(pref3.getKey()).thenReturn("key3"); -        PreferenceGroup prefGroup4 = spy(new PreferenceScreen(context, null)); -        when(prefGroup4.getPreferenceManager()).thenReturn(preferenceManager); -        when(prefGroup4.getKey()).thenReturn("group4"); -        prefRoot.addPreference(pref1); -        prefRoot.addPreference(prefGroup2); -        prefRoot.addPreference(pref3); -        prefRoot.addPreference(prefGroup4); - -        // 2nd level -        Preference pref21 = mock(Preference.class); -        when(pref21.getKey()).thenReturn("key21"); -        Preference pref22 = mock(Preference.class); -        when(pref22.getKey()).thenReturn("key22"); -        prefGroup2.addPreference(pref21); -        prefGroup2.addPreference(pref22); -        PreferenceGroup prefGroup41 = spy(new PreferenceScreen(context, null)); -        when(prefGroup41.getKey()).thenReturn("group41"); -        when(prefGroup41.getPreferenceManager()).thenReturn(preferenceManager); -        Preference pref42 = mock(Preference.class); -        when(pref42.getKey()).thenReturn("key42"); -        prefGroup4.addPreference(prefGroup41); -        prefGroup4.addPreference(pref42); - -        // 3rd level -        Preference pref411 = mock(Preference.class); -        when(pref411.getKey()).thenReturn("key411"); -        Preference pref412 = mock(Preference.class); -        when(pref412.getKey()).thenReturn("key412"); -        prefGroup41.addPreference(pref411); -        prefGroup41.addPreference(pref412); - -        mTestPrefController.removePreference(prefRoot, "key1"); -        verify(prefRoot).removePreference(pref1); - -        mTestPrefController.removePreference(prefRoot, "key411"); -        verify(prefGroup41).removePreference(pref411); - -        mTestPrefController.removePreference(prefRoot, "group41"); -        verify(prefGroup4).removePreference(prefGroup41); +        assertThat(mPreference.isVisible()).isFalse();      }      private class TestPrefController extends AbstractPreferenceController { diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/EnableAdbPreferenceControllerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/EnableAdbPreferenceControllerTest.java index 32fa01c52f21..aac736a94832 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/EnableAdbPreferenceControllerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/development/EnableAdbPreferenceControllerTest.java @@ -17,14 +17,9 @@  package com.android.settingslib.development;  import static com.google.common.truth.Truth.assertThat; -  import static org.mockito.Answers.RETURNS_DEEP_STUBS; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyString;  import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.never;  import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when;  import android.content.Context; @@ -67,21 +62,19 @@ public class EnableAdbPreferenceControllerTest {          shadowContext.setSystemService(Context.USER_SERVICE, mUserManager);          mContext = spy(shadowContext.getApplicationContext());          when(mContext.getPackageManager()).thenReturn(mPackageManager); -        mPreference = new SwitchPreference(mContext); -        when(mScreen.findPreference(anyString())).thenReturn(mPreference);          mController = new ConcreteEnableAdbPreferenceController(mContext); +        mPreference = new SwitchPreference(mContext);          mPreference.setKey(mController.getPreferenceKey()); +        when(mScreen.findPreference(mPreference.getKey())).thenReturn(mPreference);      }      @Test      public void displayPreference_isNotAdmin_shouldRemovePreference() {          when(mUserManager.isAdminUser()).thenReturn(false); -        when(mScreen.getPreferenceCount()).thenReturn(1); -        when(mScreen.getPreference(0)).thenReturn(mPreference);          mController.displayPreference(mScreen); -        verify(mScreen).removePreference(any(Preference.class)); +        assertThat(mPreference.isVisible()).isFalse();      }      @Test @@ -90,7 +83,7 @@ public class EnableAdbPreferenceControllerTest {          mController.displayPreference(mScreen); -        verify(mScreen, never()).removePreference(any(Preference.class)); +        assertThat(mPreference.isVisible()).isTrue();      } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/SerialNumberPreferenceControllerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/SerialNumberPreferenceControllerTest.java index 4dbb957f2748..34bbf4f14d07 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/SerialNumberPreferenceControllerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/deviceinfo/SerialNumberPreferenceControllerTest.java @@ -17,13 +17,6 @@  package com.android.settingslib.deviceinfo;  import static com.google.common.truth.Truth.assertThat; - -import static org.mockito.Answers.RETURNS_DEEP_STUBS; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyString; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify;  import static org.mockito.Mockito.when;  import android.content.Context; @@ -38,68 +31,67 @@ import org.junit.Test;  import org.junit.runner.RunWith;  import org.mockito.Mock;  import org.mockito.MockitoAnnotations; +import org.robolectric.RuntimeEnvironment;  import org.robolectric.annotation.Config;  @RunWith(SettingsLibRobolectricTestRunner.class)  @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)  public class SerialNumberPreferenceControllerTest { -    @Mock(answer = RETURNS_DEEP_STUBS) -    private Context mContext; -    @Mock(answer = RETURNS_DEEP_STUBS) +    @Mock      private PreferenceScreen mScreen; +    private Context mContext; +    private Preference mPreference;      private AbstractSerialNumberPreferenceController mController;      @Before      public void setUp() {          MockitoAnnotations.initMocks(this); +        mContext = RuntimeEnvironment.application; +        mPreference = new Preference(mContext); +        mPreference.setKey(AbstractSerialNumberPreferenceController.KEY_SERIAL_NUMBER); +        when(mScreen.findPreference(mPreference.getKey())).thenReturn(mPreference);      }      @Test      public void testIsAvaiable_noSerial_shouldReturnFalse() { -        mController = new ConcreteSerialNumberPreferenceController(mContext, null); +        mController = new TestPreferenceController(mContext, null);          assertThat(mController.isAvailable()).isFalse();      }      @Test -    public void testIsAvaiable_hasSerial_shouldReturnTrue() { -        mController = new ConcreteSerialNumberPreferenceController(mContext, "123"); +    public void testIsAvailable_hasSerial_shouldReturnTrue() { +        mController = new TestPreferenceController(mContext, "123");          assertThat(mController.isAvailable()).isTrue();      }      @Test      public void testDisplay_noSerial_shouldHidePreference() { -        final Preference preference = mock(Preference.class); -        when(mScreen.getPreferenceCount()).thenReturn(1); -        when(mScreen.getPreference(0)).thenReturn(preference); -        mController = new ConcreteSerialNumberPreferenceController(mContext, null); -        when(preference.getKey()).thenReturn(mController.getPreferenceKey()); +        mController = new TestPreferenceController(mContext, null);          mController.displayPreference(mScreen); -        verify(mScreen).removePreference(any(Preference.class)); +        assertThat(mPreference.isVisible()).isFalse();      }      @Test      public void testDisplay_hasSerial_shouldSetSummary() {          final String serial = "123"; -        final Preference preference = mock(Preference.class); -        when(mScreen.findPreference(anyString())).thenReturn(preference); -        mController = new ConcreteSerialNumberPreferenceController(mContext, serial); +        mController = new TestPreferenceController(mContext, serial);          mController.displayPreference(mScreen); -        verify(mScreen, never()).removePreference(any(Preference.class)); -        verify(preference).setSummary(serial); +        assertThat(mPreference.isVisible()).isTrue(); +        assertThat(mPreference.getSummary()).isEqualTo(serial);      } -    private static class ConcreteSerialNumberPreferenceController +    private static class TestPreferenceController              extends AbstractSerialNumberPreferenceController { -        ConcreteSerialNumberPreferenceController(Context context, String serialNumber) { +        TestPreferenceController(Context context, String serialNumber) {              super(context, serialNumber);          }      } |