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
This commit is contained in:
@@ -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());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user