Change underlying preferenceControllers to an ArrayMap of Lists.

Previously, DashboardFragment stores preference controllers in an
ArrayMap of <Class, AbstractPreferenceController>. Thus when there are
multiple controllers of same class (ie. multiple
PreferenceCategoryControllers), they cannot be stored simultaneously.
This changes the value to a List so we can store multiple controllers of
the same Class without extraneous sub-classing.

Bug: 70949662
Test: All existing tests still pass.
Added
DashboardFragmentTest#testPreferenceControllerSetter_shouldAddAndNotReplace
and DashboardFragmentTest#updateState_doesNotSkipControllersOfSameClass.
Change-Id: I397e8c91977ea1180d48a3af75dd4058bf1175c0
This commit is contained in:
Ben Lin
2017-12-21 17:32:34 -08:00
parent e0f8db5d64
commit 9275177002
3 changed files with 75 additions and 26 deletions

View File

@@ -90,6 +90,19 @@ public class DashboardFragmentTest {
assertThat(controller).isSameAs(retrievedController);
}
@Test
public void testPreferenceControllerSetter_shouldAddAndNotReplace() {
final TestPreferenceController controller1 = new TestPreferenceController(mContext);
mTestFragment.addPreferenceController(controller1);
final TestPreferenceController controller2 = new TestPreferenceController(mContext);
mTestFragment.addPreferenceController(controller2);
final TestPreferenceController retrievedController = mTestFragment.getPreferenceController
(TestPreferenceController.class);
assertThat(controller1).isSameAs(retrievedController);
}
@Test
public void displayTilesAsPreference_shouldAddTilesWithIntent() {
when(mFakeFeatureFactory.dashboardFeatureProvider
@@ -145,6 +158,23 @@ public class DashboardFragmentTest {
verify(mockController2).getPreferenceKey();
}
@Test
public void updateState_doesNotSkipControllersOfSameClass() {
final AbstractPreferenceController mockController1 =
mock(AbstractPreferenceController.class);
final AbstractPreferenceController mockController2 =
mock(AbstractPreferenceController.class);
mTestFragment.addPreferenceController(mockController1);
mTestFragment.addPreferenceController(mockController2);
when(mockController1.isAvailable()).thenReturn(true);
when(mockController2.isAvailable()).thenReturn(true);
mTestFragment.updatePreferenceStates();
verify(mockController1).getPreferenceKey();
verify(mockController2).getPreferenceKey();
}
@Test
public void tintTileIcon_hasMetadata_shouldReturnIconTintableMetadata() {
final Tile tile = new Tile();