summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayApplier.java72
1 files changed, 39 insertions, 33 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayApplier.java b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayApplier.java
index 278663b270bc..3c1e12327d8f 100644
--- a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayApplier.java
+++ b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayApplier.java
@@ -15,6 +15,7 @@
*/
package com.android.systemui.theme;
+import android.annotation.AnyThread;
import android.content.om.FabricatedOverlay;
import android.content.om.OverlayIdentifier;
import android.content.om.OverlayInfo;
@@ -159,44 +160,48 @@ public class ThemeOverlayApplier implements Dumpable {
FabricatedOverlay[] pendingCreation,
int currentUser,
Set<UserHandle> managedProfiles) {
- // Disable all overlays that have not been specified in the user setting.
- final Set<String> overlayCategoriesToDisable = new HashSet<>(THEME_CATEGORIES);
- final Set<String> targetPackagesToQuery = overlayCategoriesToDisable.stream()
- .map(category -> mCategoryToTargetPackage.get(category))
- .collect(Collectors.toSet());
- final List<OverlayInfo> overlays = new ArrayList<>();
- targetPackagesToQuery.forEach(targetPackage -> overlays.addAll(mOverlayManager
- .getOverlayInfosForTarget(targetPackage, UserHandle.SYSTEM)));
- final List<Pair<String, String>> overlaysToDisable = overlays.stream()
- .filter(o ->
- mTargetPackageToCategories.get(o.targetPackageName).contains(o.category))
- .filter(o -> overlayCategoriesToDisable.contains(o.category))
- .filter(o -> !categoryToPackage.containsValue(new OverlayIdentifier(o.packageName)))
- .filter(o -> o.isEnabled())
- .map(o -> new Pair<>(o.category, o.packageName))
- .collect(Collectors.toList());
-
- OverlayManagerTransaction.Builder transaction = getTransactionBuilder();
- if (pendingCreation != null) {
- for (FabricatedOverlay overlay : pendingCreation) {
- transaction.registerFabricatedOverlay(overlay);
+ mExecutor.execute(() -> {
+
+ // Disable all overlays that have not been specified in the user setting.
+ final Set<String> overlayCategoriesToDisable = new HashSet<>(THEME_CATEGORIES);
+ final Set<String> targetPackagesToQuery = overlayCategoriesToDisable.stream()
+ .map(category -> mCategoryToTargetPackage.get(category))
+ .collect(Collectors.toSet());
+ final List<OverlayInfo> overlays = new ArrayList<>();
+ targetPackagesToQuery.forEach(targetPackage -> overlays.addAll(mOverlayManager
+ .getOverlayInfosForTarget(targetPackage, UserHandle.SYSTEM)));
+ final List<Pair<String, String>> overlaysToDisable = overlays.stream()
+ .filter(o ->
+ mTargetPackageToCategories.get(o.targetPackageName).contains(
+ o.category))
+ .filter(o -> overlayCategoriesToDisable.contains(o.category))
+ .filter(o -> !categoryToPackage.containsValue(
+ new OverlayIdentifier(o.packageName)))
+ .filter(o -> o.isEnabled())
+ .map(o -> new Pair<>(o.category, o.packageName))
+ .collect(Collectors.toList());
+
+ OverlayManagerTransaction.Builder transaction = getTransactionBuilder();
+ if (pendingCreation != null) {
+ for (FabricatedOverlay overlay : pendingCreation) {
+ transaction.registerFabricatedOverlay(overlay);
+ }
}
- }
- for (Pair<String, String> packageToDisable : overlaysToDisable) {
- OverlayIdentifier overlayInfo = new OverlayIdentifier(packageToDisable.second);
- setEnabled(transaction, overlayInfo, packageToDisable.first, currentUser,
- managedProfiles, false);
- }
+ for (Pair<String, String> packageToDisable : overlaysToDisable) {
+ OverlayIdentifier overlayInfo = new OverlayIdentifier(packageToDisable.second);
+ setEnabled(transaction, overlayInfo, packageToDisable.first, currentUser,
+ managedProfiles, false);
+ }
- for (String category : THEME_CATEGORIES) {
- if (categoryToPackage.containsKey(category)) {
- OverlayIdentifier overlayInfo = categoryToPackage.get(category);
- setEnabled(transaction, overlayInfo, category, currentUser, managedProfiles, true);
+ for (String category : THEME_CATEGORIES) {
+ if (categoryToPackage.containsKey(category)) {
+ OverlayIdentifier overlayInfo = categoryToPackage.get(category);
+ setEnabled(transaction, overlayInfo, category, currentUser, managedProfiles,
+ true);
+ }
}
- }
- mExecutor.execute(() -> {
try {
mOverlayManager.commit(transaction.build());
} catch (SecurityException | IllegalStateException e) {
@@ -210,6 +215,7 @@ public class ThemeOverlayApplier implements Dumpable {
return new OverlayManagerTransaction.Builder();
}
+ @AnyThread
private void setEnabled(OverlayManagerTransaction.Builder transaction,
OverlayIdentifier identifier, String category, int currentUser,
Set<UserHandle> managedProfiles, boolean enabled) {