From 7eecfccb6f25900b95d3f322c1871ac47ea41a8d Mon Sep 17 00:00:00 2001 From: Lucas Dupin Date: Wed, 21 Jul 2021 13:06:23 -0700 Subject: [PATCH] Enable overlays that are pending creation They don't exist yet, but enabling them won't make OverlayManager fail, creation will be exectured on the same transaction. Test: manual Fixes: 194155751 Change-Id: I388f382592dfd1aa4db5bfa047b9cfcb4d489e78 --- .../android/systemui/theme/ThemeOverlayApplier.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayApplier.java b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayApplier.java index 843630b35e17c..c3b4fbe9a13dd 100644 --- a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayApplier.java +++ b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayApplier.java @@ -197,8 +197,10 @@ public class ThemeOverlayApplier implements Dumpable { .collect(Collectors.toList()); OverlayManagerTransaction.Builder transaction = getTransactionBuilder(); + HashSet identifiersPending = new HashSet<>(); if (pendingCreation != null) { for (FabricatedOverlay overlay : pendingCreation) { + identifiersPending.add(overlay.getIdentifier()); transaction.registerFabricatedOverlay(overlay); } } @@ -206,14 +208,14 @@ public class ThemeOverlayApplier implements Dumpable { for (Pair packageToDisable : overlaysToDisable) { OverlayIdentifier overlayInfo = new OverlayIdentifier(packageToDisable.second); setEnabled(transaction, overlayInfo, packageToDisable.first, currentUser, - managedProfiles, false); + managedProfiles, false, identifiersPending.contains(overlayInfo)); } for (String category : THEME_CATEGORIES) { if (categoryToPackage.containsKey(category)) { OverlayIdentifier overlayInfo = categoryToPackage.get(category); setEnabled(transaction, overlayInfo, category, currentUser, managedProfiles, - true); + true, identifiersPending.contains(overlayInfo)); } } @@ -233,7 +235,7 @@ public class ThemeOverlayApplier implements Dumpable { @AnyThread private void setEnabled(OverlayManagerTransaction.Builder transaction, OverlayIdentifier identifier, String category, int currentUser, - Set managedProfiles, boolean enabled) { + Set managedProfiles, boolean enabled, boolean pendingCreation) { if (DEBUG) { Log.d(TAG, "setEnabled: " + identifier.getPackageName() + " category: " + category + ": " + enabled); @@ -241,7 +243,7 @@ public class ThemeOverlayApplier implements Dumpable { OverlayInfo overlayInfo = mOverlayManager.getOverlayInfo(identifier, UserHandle.of(currentUser)); - if (overlayInfo == null) { + if (overlayInfo == null && !pendingCreation) { Log.i(TAG, "Won't enable " + identifier + ", it doesn't exist for user" + currentUser); return;