diff options
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); } } |