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

Commit d49de61f authored by hughchen's avatar hughchen
Browse files

Do not block UI when this page didn't have slice

This CL before, if controller have UIBlocker interface
will going to blocker condition to make whole page
invisible for a certain time until slice is fully loaded.

This CL add the check condition that if the controller
have UIBlocker inferface but didn't have slice uri will
not go to blocker condition.

Bug: 141292712
Test: make -j42 RunSettingsRoboTests ROBOTEST_FILTER=DashboardFragmentTest
Change-Id: I79daae131654f8fd823a9c8f1be46ad6c7921908
parent c6ef1edd
Loading
Loading
Loading
Loading
+10 −9
Original line number Diff line number Diff line
@@ -63,6 +63,7 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
    private final Map<Class, List<AbstractPreferenceController>> mPreferenceControllers =
            new ArrayMap<>();
    private final Set<String> mDashboardTilePrefKeys = new ArraySet<>();
    private final List<AbstractPreferenceController> mControllers = new ArrayList<>();

    private DashboardFeatureProvider mDashboardFeatureProvider;
    private DashboardTilePlaceholderPreferenceController mPlaceholderPreferenceController;
@@ -79,7 +80,6 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
                R.array.config_suppress_injected_tile_keys));
        mDashboardFeatureProvider = FeatureFactory.getFactory(context).
                getDashboardFeatureProvider(context);
        final List<AbstractPreferenceController> controllers = new ArrayList<>();
        // Load preference controllers from code
        final List<AbstractPreferenceController> controllersFromCode =
                createPreferenceControllers(context);
@@ -93,9 +93,9 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment

        // Add unique controllers to list.
        if (controllersFromCode != null) {
            controllers.addAll(controllersFromCode);
            mControllers.addAll(controllersFromCode);
        }
        controllers.addAll(uniqueControllerFromXml);
        mControllers.addAll(uniqueControllerFromXml);

        // And wire up with lifecycle.
        final Lifecycle lifecycle = getSettingsLifecycle();
@@ -107,12 +107,10 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment

        mPlaceholderPreferenceController =
                new DashboardTilePlaceholderPreferenceController(context);
        controllers.add(mPlaceholderPreferenceController);
        for (AbstractPreferenceController controller : controllers) {
        mControllers.add(mPlaceholderPreferenceController);
        for (AbstractPreferenceController controller : mControllers) {
            addPreferenceController(controller);
        }

        checkUiBlocker(controllers);
    }

    @VisibleForTesting
@@ -122,8 +120,10 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
                .stream()
                .filter(controller -> controller instanceof BasePreferenceController.UiBlocker)
                .forEach(controller -> {
                    if (controller.isAvailable()) {
                        ((BasePreferenceController) controller).setUiBlockListener(this);
                        keys.add(controller.getPreferenceKey());
                    }
                });

        if (!keys.isEmpty()) {
@@ -157,6 +157,7 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment

    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
        checkUiBlocker(mControllers);
        refreshAllPreferences(getLogTag());
    }

+17 −2
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import static org.mockito.Mockito.when;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.net.Uri;
import android.os.Bundle;

import androidx.preference.Preference;
@@ -240,16 +241,30 @@ public class DashboardFragmentTest {
    }

    @Test
    public void checkUiBlocker_hasUiBlocker_controllerNotNull() {
    public void checkUiBlocker_hasUiBlockerAndControllerIsAvailable_controllerNotNull() {
        final BlockingSlicePrefController controller =
                new BlockingSlicePrefController(mContext, "pref_key");
        controller.setSliceUri(Uri.parse("testUri"));
        mTestFragment.mBlockerController = null;
        mControllers.add(new TestPreferenceController(mContext));
        mControllers.add(new BlockingSlicePrefController(mContext, "pref_key"));
        mControllers.add(controller);

        mTestFragment.checkUiBlocker(mControllers);

        assertThat(mTestFragment.mBlockerController).isNotNull();
    }

    @Test
    public void checkUiBlocker_hasUiBlockerAndControllerIsNotAvailable_controllerIsNull() {
        mTestFragment.mBlockerController = null;
        mControllers.add(new TestPreferenceController(mContext));
        mControllers.add(new BlockingSlicePrefController(mContext, "pref_key"));

        mTestFragment.checkUiBlocker(mControllers);

        assertThat(mTestFragment.mBlockerController).isNull();
    }

    public static class TestPreferenceController extends AbstractPreferenceController
            implements PreferenceControllerMixin {