diff options
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayApplier.java | 72 |
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) { |