Fix crash for UiBlockerController
1. Don't create UiBlockerController if there is no related controller 2. Don't update visibility if UiBlockerController is null 3. Use findPreference() from DashboardFragment, which already has null check. Change-Id: Iee24c64317fb9d5a1cf2076d25728af485d390c5 Fixes: 122807414 Fixes: 122805831 Test: RunSettingsRoboTests
This commit is contained in:
committed by
Tsung-Mao Fang
parent
8b9529e533
commit
a5f1b5c629
@@ -68,7 +68,8 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
|
||||
private DashboardTilePlaceholderPreferenceController mPlaceholderPreferenceController;
|
||||
private boolean mListeningToCategoryChange;
|
||||
private SummaryLoader mSummaryLoader;
|
||||
private UiBlockerController mBlockerController;
|
||||
@VisibleForTesting
|
||||
UiBlockerController mBlockerController;
|
||||
|
||||
@Override
|
||||
public void onAttach(Context context) {
|
||||
@@ -111,7 +112,8 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
|
||||
checkUiBlocker(controllers);
|
||||
}
|
||||
|
||||
private void checkUiBlocker(List<AbstractPreferenceController> controllers) {
|
||||
@VisibleForTesting
|
||||
void checkUiBlocker(List<AbstractPreferenceController> controllers) {
|
||||
final List<String> keys = new ArrayList<>();
|
||||
controllers
|
||||
.stream()
|
||||
@@ -121,8 +123,10 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
|
||||
keys.add(controller.getPreferenceKey());
|
||||
});
|
||||
|
||||
mBlockerController = new UiBlockerController(keys);
|
||||
mBlockerController.start(()->updatePreferenceVisibility());
|
||||
if (!keys.isEmpty()) {
|
||||
mBlockerController = new UiBlockerController(keys);
|
||||
mBlockerController.start(()->updatePreferenceVisibility(mPreferenceControllers));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -355,21 +359,23 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
|
||||
activity.reportFullyDrawn();
|
||||
}
|
||||
|
||||
updatePreferenceVisibility();
|
||||
updatePreferenceVisibility(mPreferenceControllers);
|
||||
}
|
||||
|
||||
private void updatePreferenceVisibility() {
|
||||
@VisibleForTesting
|
||||
void updatePreferenceVisibility(
|
||||
Map<Class, List<AbstractPreferenceController>> preferenceControllers) {
|
||||
final PreferenceScreen screen = getPreferenceScreen();
|
||||
if (screen == null) {
|
||||
if (screen == null || preferenceControllers == null || mBlockerController == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
final boolean visible = mBlockerController.isBlockerFinished();
|
||||
for (List<AbstractPreferenceController> controllerList :
|
||||
mPreferenceControllers.values()) {
|
||||
preferenceControllers.values()) {
|
||||
for (AbstractPreferenceController controller : controllerList) {
|
||||
final String key = controller.getPreferenceKey();
|
||||
final Preference preference = screen.findPreference(key);
|
||||
final Preference preference = findPreference(key);
|
||||
if (preference != null) {
|
||||
preference.setVisible(visible && controller.isAvailable());
|
||||
}
|
||||
|
Reference in New Issue
Block a user