Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 820df355 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Change underlying preferenceControllers to an ArrayMap of Lists."

parents 4082c6b2 92751770
Loading
Loading
Loading
Loading
+39 −24
Original line number Diff line number Diff line
@@ -54,7 +54,7 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
        SummaryLoader.SummaryConsumer {
    private static final String TAG = "DashboardFragment";

    private final Map<Class, AbstractPreferenceController> mPreferenceControllers =
    private final Map<Class, List<AbstractPreferenceController>> mPreferenceControllers =
            new ArrayMap<>();
    private final Set<String> mDashboardTilePrefKeys = new ArraySet<>();

@@ -156,16 +156,19 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment

    @Override
    public boolean onPreferenceTreeClick(Preference preference) {
        Collection<AbstractPreferenceController> controllers = mPreferenceControllers.values();
        Collection<List<AbstractPreferenceController>> controllers =
                mPreferenceControllers.values();
        // If preference contains intent, log it before handling.
        mMetricsFeatureProvider.logDashboardStartIntent(
                getContext(), preference.getIntent(), getMetricsCategory());
        // Give all controllers a chance to handle click.
        for (AbstractPreferenceController controller : controllers) {
        for (List<AbstractPreferenceController> controllerList : controllers) {
            for (AbstractPreferenceController controller : controllerList) {
                if (controller.handlePreferenceTreeClick(preference)) {
                    return true;
                }
            }
        }
        return super.onPreferenceTreeClick(preference);
    }

@@ -189,12 +192,23 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
    protected abstract int getPreferenceScreenResId();

    protected <T extends AbstractPreferenceController> T getPreferenceController(Class<T> clazz) {
        AbstractPreferenceController controller = mPreferenceControllers.get(clazz);
        return (T) controller;
        List<AbstractPreferenceController> controllerList = mPreferenceControllers.get(clazz);
        if (controllerList != null) {
            if (controllerList.size() > 1) {
                Log.w(TAG, "Multiple controllers of Class " + clazz.getSimpleName()
                        + " found, returning first one.");
            }
            return (T) controllerList.get(0);
        }

        return null;
    }

    protected void addPreferenceController(AbstractPreferenceController controller) {
        mPreferenceControllers.put(controller.getClass(), controller);
        if (mPreferenceControllers.get(controller.getClass()) == null) {
            mPreferenceControllers.put(controller.getClass(), new ArrayList<>());
        }
        mPreferenceControllers.get(controller.getClass()).add(controller);
    }

    /**
@@ -249,19 +263,19 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
        }
        addPreferencesFromResource(resId);
        final PreferenceScreen screen = getPreferenceScreen();
        Collection<AbstractPreferenceController> controllers = mPreferenceControllers.values();
        for (AbstractPreferenceController controller : controllers) {
            controller.displayPreference(screen);
        }
        mPreferenceControllers.values().stream().flatMap(Collection::stream).forEach(
                controller -> controller.displayPreference(screen));
    }

    /**
     * Update state of each preference managed by PreferenceController.
     */
    protected void updatePreferenceStates() {
        Collection<AbstractPreferenceController> controllers = mPreferenceControllers.values();
        final PreferenceScreen screen = getPreferenceScreen();
        for (AbstractPreferenceController controller : controllers) {
        Collection<List<AbstractPreferenceController>> controllerLists =
                mPreferenceControllers.values();
        for (List<AbstractPreferenceController> controllerList : controllerLists) {
            for (AbstractPreferenceController controller : controllerList) {
                if (!controller.isAvailable()) {
                    continue;
                }
@@ -276,6 +290,7 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
                controller.updateState(preference);
            }
        }
    }

    /**
     * Refresh all preference items, including both static prefs from xml, and dynamic items from
+30 −0
Original line number Diff line number Diff line
@@ -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();
+6 −2
Original line number Diff line number Diff line
@@ -33,6 +33,8 @@ import org.junit.runner.RunWith;
import org.robolectric.annotation.Config;
import org.robolectric.util.ReflectionHelpers;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@RunWith(SettingsRobolectricTestRunner.class)
@@ -55,10 +57,12 @@ public class ScreenLockSettingsTest {

    @Test
    public void onOwnerInfoUpdated_shouldUpdateOwnerInfoController() {
        final Map<Class, AbstractPreferenceController> preferenceControllers =
        final Map<Class, List<AbstractPreferenceController>> preferenceControllers =
                ReflectionHelpers.getField(mSettings, "mPreferenceControllers");
        final OwnerInfoPreferenceController controller = mock(OwnerInfoPreferenceController.class);
        preferenceControllers.put(OwnerInfoPreferenceController.class, controller);
        List<AbstractPreferenceController> controllerList = new ArrayList<>();
        controllerList.add(controller);
        preferenceControllers.put(OwnerInfoPreferenceController.class, controllerList);

        mSettings.onOwnerInfoUpdated();