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