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

This commit is contained in:
TreeHugger Robot
2019-09-24 09:57:50 +00:00
committed by Android (Google) Code Review
2 changed files with 27 additions and 11 deletions

View File

@@ -63,6 +63,7 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
private final Map<Class, List<AbstractPreferenceController>> mPreferenceControllers = private final Map<Class, List<AbstractPreferenceController>> mPreferenceControllers =
new ArrayMap<>(); new ArrayMap<>();
private final Set<String> mDashboardTilePrefKeys = new ArraySet<>(); private final Set<String> mDashboardTilePrefKeys = new ArraySet<>();
private final List<AbstractPreferenceController> mControllers = new ArrayList<>();
private DashboardFeatureProvider mDashboardFeatureProvider; private DashboardFeatureProvider mDashboardFeatureProvider;
private DashboardTilePlaceholderPreferenceController mPlaceholderPreferenceController; private DashboardTilePlaceholderPreferenceController mPlaceholderPreferenceController;
@@ -79,7 +80,6 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
R.array.config_suppress_injected_tile_keys)); R.array.config_suppress_injected_tile_keys));
mDashboardFeatureProvider = FeatureFactory.getFactory(context). mDashboardFeatureProvider = FeatureFactory.getFactory(context).
getDashboardFeatureProvider(context); getDashboardFeatureProvider(context);
final List<AbstractPreferenceController> controllers = new ArrayList<>();
// Load preference controllers from code // Load preference controllers from code
final List<AbstractPreferenceController> controllersFromCode = final List<AbstractPreferenceController> controllersFromCode =
createPreferenceControllers(context); createPreferenceControllers(context);
@@ -93,9 +93,9 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
// Add unique controllers to list. // Add unique controllers to list.
if (controllersFromCode != null) { if (controllersFromCode != null) {
controllers.addAll(controllersFromCode); mControllers.addAll(controllersFromCode);
} }
controllers.addAll(uniqueControllerFromXml); mControllers.addAll(uniqueControllerFromXml);
// And wire up with lifecycle. // And wire up with lifecycle.
final Lifecycle lifecycle = getSettingsLifecycle(); final Lifecycle lifecycle = getSettingsLifecycle();
@@ -107,12 +107,10 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
mPlaceholderPreferenceController = mPlaceholderPreferenceController =
new DashboardTilePlaceholderPreferenceController(context); new DashboardTilePlaceholderPreferenceController(context);
controllers.add(mPlaceholderPreferenceController); mControllers.add(mPlaceholderPreferenceController);
for (AbstractPreferenceController controller : controllers) { for (AbstractPreferenceController controller : mControllers) {
addPreferenceController(controller); addPreferenceController(controller);
} }
checkUiBlocker(controllers);
} }
@VisibleForTesting @VisibleForTesting
@@ -122,8 +120,10 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
.stream() .stream()
.filter(controller -> controller instanceof BasePreferenceController.UiBlocker) .filter(controller -> controller instanceof BasePreferenceController.UiBlocker)
.forEach(controller -> { .forEach(controller -> {
((BasePreferenceController) controller).setUiBlockListener(this); if (controller.isAvailable()) {
keys.add(controller.getPreferenceKey()); ((BasePreferenceController) controller).setUiBlockListener(this);
keys.add(controller.getPreferenceKey());
}
}); });
if (!keys.isEmpty()) { if (!keys.isEmpty()) {
@@ -157,6 +157,7 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
@Override @Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
checkUiBlocker(mControllers);
refreshAllPreferences(getLogTag()); refreshAllPreferences(getLogTag());
} }

View File

@@ -31,6 +31,7 @@ import static org.mockito.Mockito.when;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
import android.content.Context; import android.content.Context;
import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import androidx.preference.Preference; import androidx.preference.Preference;
@@ -240,14 +241,28 @@ public class DashboardFragmentTest {
} }
@Test @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; mTestFragment.mBlockerController = null;
mControllers.add(new TestPreferenceController(mContext)); mControllers.add(new TestPreferenceController(mContext));
mControllers.add(new BlockingSlicePrefController(mContext, "pref_key")); mControllers.add(new BlockingSlicePrefController(mContext, "pref_key"));
mTestFragment.checkUiBlocker(mControllers); mTestFragment.checkUiBlocker(mControllers);
assertThat(mTestFragment.mBlockerController).isNotNull(); assertThat(mTestFragment.mBlockerController).isNull();
} }
public static class TestPreferenceController extends AbstractPreferenceController public static class TestPreferenceController extends AbstractPreferenceController