Merge "Do not block UI when this page didn't have slice"
diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java
index f2e3d73..178c5a2 100644
--- a/src/com/android/settings/dashboard/DashboardFragment.java
+++ b/src/com/android/settings/dashboard/DashboardFragment.java
@@ -63,6 +63,7 @@
     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 @@
                 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 @@
 
         // 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 @@
 
         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 @@
                 .stream()
                 .filter(controller -> controller instanceof BasePreferenceController.UiBlocker)
                 .forEach(controller -> {
-                    ((BasePreferenceController) controller).setUiBlockListener(this);
-                    keys.add(controller.getPreferenceKey());
+                    if (controller.isAvailable()) {
+                        ((BasePreferenceController) controller).setUiBlockListener(this);
+                        keys.add(controller.getPreferenceKey());
+                    }
                 });
 
         if (!keys.isEmpty()) {
@@ -157,6 +157,7 @@
 
     @Override
     public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
+        checkUiBlocker(mControllers);
         refreshAllPreferences(getLogTag());
     }
 
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
index 9aae249..188f566 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
@@ -31,6 +31,7 @@
 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,14 +241,28 @@
     }
 
     @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(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).isNotNull();
+        assertThat(mTestFragment.mBlockerController).isNull();
     }
 
     public static class TestPreferenceController extends AbstractPreferenceController