Merge "Verify if overlay exists before applying it" into sc-dev

This commit is contained in:
Lucas Dupin
2021-07-02 00:19:10 +00:00
committed by Android (Google) Code Review
2 changed files with 30 additions and 2 deletions

View File

@@ -239,6 +239,14 @@ public class ThemeOverlayApplier implements Dumpable {
+ category + ": " + enabled); + category + ": " + enabled);
} }
OverlayInfo overlayInfo = mOverlayManager.getOverlayInfo(identifier,
UserHandle.of(currentUser));
if (overlayInfo == null) {
Log.i(TAG, "Won't enable " + identifier + ", it doesn't exist for user"
+ currentUser);
return;
}
transaction.setEnabled(identifier, enabled, currentUser); transaction.setEnabled(identifier, enabled, currentUser);
if (currentUser != UserHandle.SYSTEM.getIdentifier() if (currentUser != UserHandle.SYSTEM.getIdentifier()
&& SYSTEM_USER_CATEGORIES.contains(category)) { && SYSTEM_USER_CATEGORIES.contains(category)) {
@@ -247,7 +255,7 @@ public class ThemeOverlayApplier implements Dumpable {
// Do not apply Launcher or Theme picker overlays to managed users. Apps are not // Do not apply Launcher or Theme picker overlays to managed users. Apps are not
// installed in there. // installed in there.
OverlayInfo overlayInfo = mOverlayManager.getOverlayInfo(identifier, UserHandle.SYSTEM); overlayInfo = mOverlayManager.getOverlayInfo(identifier, UserHandle.SYSTEM);
if (overlayInfo == null || overlayInfo.targetPackageName.equals(mLauncherPackage) if (overlayInfo == null || overlayInfo.targetPackageName.equals(mLauncherPackage)
|| overlayInfo.targetPackageName.equals(mThemePickerPackage)) { || overlayInfo.targetPackageName.equals(mThemePickerPackage)) {
return; return;

View File

@@ -98,6 +98,7 @@ public class ThemeOverlayApplierTest extends SysuiTestCase {
OverlayManagerTransaction.Builder mTransactionBuilder; OverlayManagerTransaction.Builder mTransactionBuilder;
private ThemeOverlayApplier mManager; private ThemeOverlayApplier mManager;
private boolean mGetOverlayInfoEnabled = true;
@Before @Before
public void setup() throws Exception { public void setup() throws Exception {
@@ -159,7 +160,12 @@ public class ThemeOverlayApplierTest extends SysuiTestCase {
OverlayInfo launcherTargetInfo = new OverlayInfo("packageName", LAUNCHER_PACKAGE, OverlayInfo launcherTargetInfo = new OverlayInfo("packageName", LAUNCHER_PACKAGE,
null, null, "/", 0, 0, 0, false); null, null, "/", 0, 0, 0, false);
when(mOverlayManager.getOverlayInfo(any(OverlayIdentifier.class), any())) when(mOverlayManager.getOverlayInfo(any(OverlayIdentifier.class), any()))
.thenReturn(launcherTargetInfo); .thenAnswer(answer -> {
if (mGetOverlayInfoEnabled) {
return launcherTargetInfo;
}
return null;
});
clearInvocations(mOverlayManager); clearInvocations(mOverlayManager);
verify(mDumpManager).registerDumpable(any(), any()); verify(mDumpManager).registerDumpable(any(), any());
} }
@@ -207,6 +213,20 @@ public class ThemeOverlayApplierTest extends SysuiTestCase {
} }
} }
@Test
public void enablesOverlays_onlyIfItExistsForUser() {
mGetOverlayInfoEnabled = false;
Set<UserHandle> userHandles = Sets.newHashSet(TEST_USER_HANDLES);
mManager.applyCurrentUserOverlays(ALL_CATEGORIES_MAP, null, TEST_USER.getIdentifier(),
userHandles);
for (OverlayIdentifier overlayPackage : ALL_CATEGORIES_MAP.values()) {
verify(mTransactionBuilder, never()).setEnabled(eq(overlayPackage), eq(true),
eq(TEST_USER.getIdentifier()));
}
}
@Test @Test
public void applyCurrentUserOverlays_createsPendingOverlays() { public void applyCurrentUserOverlays_createsPendingOverlays() {
FabricatedOverlay[] pendingCreation = new FabricatedOverlay[]{ FabricatedOverlay[] pendingCreation = new FabricatedOverlay[]{