diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java index f2e3d73c8fe..178c5a2be7d 100644 --- a/src/com/android/settings/dashboard/DashboardFragment.java +++ b/src/com/android/settings/dashboard/DashboardFragment.java @@ -63,6 +63,7 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment private final Map> mPreferenceControllers = new ArrayMap<>(); private final Set mDashboardTilePrefKeys = new ArraySet<>(); + private final List 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 controllers = new ArrayList<>(); // Load preference controllers from code final List 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 -> { - ((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 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment @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 9aae249c79b..188f5668f6a 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 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,14 +241,28 @@ 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(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