summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayApplier.java57
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayApplierTest.java57
2 files changed, 72 insertions, 42 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayApplier.java b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayApplier.java
index e357577f88c8..78639147a375 100644
--- a/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayApplier.java
+++ b/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayApplier.java
@@ -15,12 +15,15 @@
*/
package com.android.systemui.theme;
+import android.content.om.OverlayIdentifier;
import android.content.om.OverlayInfo;
import android.content.om.OverlayManager;
+import android.content.om.OverlayManagerTransaction;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.util.ArrayMap;
import android.util.Log;
+import android.util.Pair;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
@@ -229,49 +232,53 @@ public class ThemeOverlayApplier implements Dumpable {
final List<OverlayInfo> overlays = new ArrayList<>();
targetPackagesToQuery.forEach(targetPackage -> overlays.addAll(mOverlayManager
.getOverlayInfosForTarget(targetPackage, UserHandle.SYSTEM)));
- final Map<String, String> overlaysToDisable = overlays.stream()
+ 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 -> o.isEnabled())
- .collect(Collectors.toMap((o) -> o.category, (o) -> o.packageName));
+ .map(o -> new Pair<>(o.category, o.packageName))
+ .collect(Collectors.toList());
+ OverlayManagerTransaction.Builder transaction = getTransactionBuilder();
// Toggle overlays in the order of THEME_CATEGORIES.
for (String category : THEME_CATEGORIES) {
if (categoryToPackage.containsKey(category)) {
- setEnabled(categoryToPackage.get(category), category, userHandles, true);
- } else if (overlaysToDisable.containsKey(category)) {
- setEnabled(overlaysToDisable.get(category), category, userHandles, false);
+ OverlayIdentifier overlayInfo =
+ new OverlayIdentifier(categoryToPackage.get(category));
+ setEnabled(transaction, overlayInfo, category, userHandles, true);
}
}
+ for (Pair<String, String> packageToDisable : overlaysToDisable) {
+ OverlayIdentifier overlayInfo = new OverlayIdentifier(packageToDisable.second);
+ setEnabled(transaction, overlayInfo, packageToDisable.first, userHandles, false);
+ }
+
+ mExecutor.execute(() -> {
+ mOverlayManager.commit(transaction.build());
+ });
+ }
+
+ @VisibleForTesting
+ protected OverlayManagerTransaction.Builder getTransactionBuilder() {
+ return new OverlayManagerTransaction.Builder();
}
- private void setEnabled(
- String packageName, String category, Set<UserHandle> handles, boolean enabled) {
+ private void setEnabled(OverlayManagerTransaction.Builder transaction,
+ OverlayIdentifier identifier, String category, Set<UserHandle> handles,
+ boolean enabled) {
+ if (DEBUG) {
+ Log.d(TAG, "setEnabled: " + identifier.getPackageName() + " category: "
+ + category + ": " + enabled);
+ }
for (UserHandle userHandle : handles) {
- setEnabledAsync(packageName, userHandle, enabled);
+ transaction.setEnabled(identifier, enabled, userHandle.getIdentifier());
}
if (!handles.contains(UserHandle.SYSTEM) && SYSTEM_USER_CATEGORIES.contains(category)) {
- setEnabledAsync(packageName, UserHandle.SYSTEM, enabled);
+ transaction.setEnabled(identifier, enabled, UserHandle.SYSTEM.getIdentifier());
}
}
- private void setEnabledAsync(String pkg, UserHandle userHandle, boolean enabled) {
- mExecutor.execute(() -> {
- if (DEBUG) Log.d(TAG, String.format("setEnabled: %s %s %b", pkg, userHandle, enabled));
- try {
- if (enabled) {
- mOverlayManager.setEnabledExclusiveInCategory(pkg, userHandle);
- } else {
- mOverlayManager.setEnabled(pkg, false, userHandle);
- }
- } catch (SecurityException | IllegalStateException e) {
- Log.e(TAG,
- String.format("setEnabled failed: %s %s %b", pkg, userHandle, enabled), e);
- }
- });
- }
-
/**
* @inherit
*/
diff --git a/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayApplierTest.java b/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayApplierTest.java
index edaff5ff0f10..6c99efcc7128 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayApplierTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/theme/ThemeOverlayApplierTest.java
@@ -32,13 +32,16 @@ import static com.android.systemui.theme.ThemeOverlayApplier.THEME_CATEGORIES;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.content.om.OverlayIdentifier;
import android.content.om.OverlayInfo;
import android.content.om.OverlayManager;
+import android.content.om.OverlayManagerTransaction;
import android.os.UserHandle;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
@@ -87,6 +90,8 @@ public class ThemeOverlayApplierTest extends SysuiTestCase {
OverlayManager mOverlayManager;
@Mock
DumpManager mDumpManager;
+ @Mock
+ OverlayManagerTransaction.Builder mTransactionBuilder;
private ThemeOverlayApplier mManager;
@@ -94,7 +99,12 @@ public class ThemeOverlayApplierTest extends SysuiTestCase {
public void setup() throws Exception {
MockitoAnnotations.initMocks(this);
mManager = new ThemeOverlayApplier(mOverlayManager, MoreExecutors.directExecutor(),
- LAUNCHER_PACKAGE, THEMEPICKER_PACKAGE, mDumpManager);
+ LAUNCHER_PACKAGE, THEMEPICKER_PACKAGE, mDumpManager) {
+ @Override
+ protected OverlayManagerTransaction.Builder getTransactionBuilder() {
+ return mTransactionBuilder;
+ }
+ };
when(mOverlayManager.getOverlayInfosForTarget(ANDROID_PACKAGE, UserHandle.SYSTEM))
.thenReturn(Lists.newArrayList(
createOverlayInfo(TEST_DISABLED_PREFIX + OVERLAY_CATEGORY_ACCENT_COLOR,
@@ -148,9 +158,11 @@ public class ThemeOverlayApplierTest extends SysuiTestCase {
@Test
public void allCategoriesSpecified_allEnabledExclusively() {
mManager.applyCurrentUserOverlays(ALL_CATEGORIES_MAP, TEST_USER_HANDLES);
+ verify(mOverlayManager).commit(any());
for (String overlayPackage : ALL_CATEGORIES_MAP.values()) {
- verify(mOverlayManager).setEnabledExclusiveInCategory(overlayPackage, TEST_USER);
+ verify(mTransactionBuilder).setEnabled(eq(new OverlayIdentifier(overlayPackage)),
+ eq(true), eq(TEST_USER.getIdentifier()));
}
}
@@ -160,11 +172,12 @@ public class ThemeOverlayApplierTest extends SysuiTestCase {
for (Map.Entry<String, String> entry : ALL_CATEGORIES_MAP.entrySet()) {
if (SYSTEM_USER_CATEGORIES.contains(entry.getKey())) {
- verify(mOverlayManager).setEnabledExclusiveInCategory(
- entry.getValue(), UserHandle.SYSTEM);
+ verify(mTransactionBuilder).setEnabled(eq(new OverlayIdentifier(entry.getValue())),
+ eq(true), eq(UserHandle.SYSTEM.getIdentifier()));
} else {
- verify(mOverlayManager, never()).setEnabledExclusiveInCategory(
- entry.getValue(), UserHandle.SYSTEM);
+ verify(mTransactionBuilder, never()).setEnabled(
+ eq(new OverlayIdentifier(entry.getValue())),
+ eq(true), eq(UserHandle.SYSTEM.getIdentifier()));
}
}
}
@@ -177,8 +190,10 @@ public class ThemeOverlayApplierTest extends SysuiTestCase {
mManager.applyCurrentUserOverlays(ALL_CATEGORIES_MAP, userHandles);
for (String overlayPackage : ALL_CATEGORIES_MAP.values()) {
- verify(mOverlayManager).setEnabledExclusiveInCategory(overlayPackage, TEST_USER);
- verify(mOverlayManager).setEnabledExclusiveInCategory(overlayPackage, newUserHandle);
+ verify(mTransactionBuilder).setEnabled(eq(new OverlayIdentifier(overlayPackage)),
+ eq(true), eq(TEST_USER.getIdentifier()));
+ verify(mTransactionBuilder).setEnabled(eq(new OverlayIdentifier(overlayPackage)),
+ eq(true), eq(newUserHandle.getIdentifier()));
}
}
@@ -199,12 +214,15 @@ public class ThemeOverlayApplierTest extends SysuiTestCase {
mManager.applyCurrentUserOverlays(categoryToPackage, TEST_USER_HANDLES);
for (String overlayPackage : categoryToPackage.values()) {
- verify(mOverlayManager).setEnabledExclusiveInCategory(overlayPackage, TEST_USER);
+ verify(mTransactionBuilder).setEnabled(eq(new OverlayIdentifier(overlayPackage)),
+ eq(true), eq(TEST_USER.getIdentifier()));
}
- verify(mOverlayManager).setEnabled(TEST_ENABLED_PREFIX + OVERLAY_CATEGORY_ICON_SETTINGS,
- false, TEST_USER);
- verify(mOverlayManager).setEnabled(TEST_ENABLED_PREFIX + OVERLAY_CATEGORY_ICON_ANDROID,
- false, TEST_USER);
+ verify(mTransactionBuilder).setEnabled(
+ eq(new OverlayIdentifier(TEST_ENABLED_PREFIX + OVERLAY_CATEGORY_ICON_SETTINGS)),
+ eq(false), eq(TEST_USER.getIdentifier()));
+ verify(mTransactionBuilder).setEnabled(
+ eq(new OverlayIdentifier(TEST_ENABLED_PREFIX + OVERLAY_CATEGORY_ICON_ANDROID)),
+ eq(false), eq(TEST_USER.getIdentifier()));
}
@Test
@@ -212,7 +230,9 @@ public class ThemeOverlayApplierTest extends SysuiTestCase {
mManager.applyCurrentUserOverlays(Maps.newArrayMap(), TEST_USER_HANDLES);
for (String category : THEME_CATEGORIES) {
- verify(mOverlayManager).setEnabled(TEST_ENABLED_PREFIX + category, false, TEST_USER);
+ verify(mTransactionBuilder).setEnabled(
+ eq(new OverlayIdentifier(TEST_ENABLED_PREFIX + category)), eq(false),
+ eq(TEST_USER.getIdentifier()));
}
}
@@ -223,9 +243,12 @@ public class ThemeOverlayApplierTest extends SysuiTestCase {
mManager.applyCurrentUserOverlays(categoryToPackage, TEST_USER_HANDLES);
- verify(mOverlayManager, never()).setEnabled("com.example.blah.category", false, TEST_USER);
- verify(mOverlayManager, never()).setEnabledExclusiveInCategory("com.example.blah.category",
- TEST_USER);
+ verify(mTransactionBuilder, never()).setEnabled(
+ eq(new OverlayIdentifier("com.example.blah.category")), eq(false),
+ eq(TEST_USER.getIdentifier()));
+ verify(mTransactionBuilder, never()).setEnabled(
+ eq(new OverlayIdentifier("com.example.blah.category")), eq(true),
+ eq(TEST_USER.getIdentifier()));
}
@Test