Add visibility control for the UiBlocker

The existing UiBlocker mechanism doesn't support additional visibility
control. With that, controllers that want to control their own
visibility won't be able to use UiBlocker.

Fixes: 223340393
Test: robotest
Change-Id: I2df2eb1ce77e2c94bb271a8b68cc8c6004df5c70
This commit is contained in:
Yi-Ling Chuang
2022-03-08 18:20:15 +08:00
parent 6b9a904500
commit a28770e459
3 changed files with 59 additions and 2 deletions

View File

@@ -250,6 +250,11 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
}
mListeningToCategoryChange = false;
}
mControllers.forEach(controller -> {
if (controller instanceof BasePreferenceController.UiBlocker) {
((BasePreferenceController) controller).revokeFirstLaunch();
}
});
}
@Override
@@ -424,7 +429,14 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
for (AbstractPreferenceController controller : controllerList) {
final String key = controller.getPreferenceKey();
final Preference preference = findPreference(key);
if (preference != null) {
if (preference == null) {
continue;
}
if (controller instanceof BasePreferenceController.UiBlocker) {
final boolean prefVisible =
((BasePreferenceController) controller).getSavedPrefVisibility();
preference.setVisible(visible && controller.isAvailable() && prefVisible);
} else {
preference.setVisible(visible && controller.isAvailable());
}
}
@@ -496,6 +508,7 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
@Override
public void onBlockerWorkFinished(BasePreferenceController controller) {
mBlockerController.countDown(controller.getPreferenceKey());
controller.setUiBlockerFinished(mBlockerController.isBlockerFinished());
}
protected Preference createPreference(Tile tile) {