Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b990de24 authored by Lucas Dupin's avatar Lucas Dupin
Browse files

Verify if overlay exists before applying it

Fixes: 192557418
Test: ThemeOverlayApplierTest
Change-Id: Id47ad96ca5494f803c92d6bb8dc338a15621a961
parent a46f5245
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -239,6 +239,14 @@ public class ThemeOverlayApplier implements Dumpable {
                    + 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);
        if (currentUser != UserHandle.SYSTEM.getIdentifier()
                && 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
        // installed in there.
        OverlayInfo overlayInfo = mOverlayManager.getOverlayInfo(identifier, UserHandle.SYSTEM);
        overlayInfo = mOverlayManager.getOverlayInfo(identifier, UserHandle.SYSTEM);
        if (overlayInfo == null || overlayInfo.targetPackageName.equals(mLauncherPackage)
                || overlayInfo.targetPackageName.equals(mThemePickerPackage)) {
            return;
+21 −1
Original line number Diff line number Diff line
@@ -98,6 +98,7 @@ public class ThemeOverlayApplierTest extends SysuiTestCase {
    OverlayManagerTransaction.Builder mTransactionBuilder;

    private ThemeOverlayApplier mManager;
    private boolean mGetOverlayInfoEnabled = true;

    @Before
    public void setup() throws Exception {
@@ -159,7 +160,12 @@ public class ThemeOverlayApplierTest extends SysuiTestCase {
        OverlayInfo launcherTargetInfo = new OverlayInfo("packageName", LAUNCHER_PACKAGE,
                null, null, "/", 0, 0, 0, false);
        when(mOverlayManager.getOverlayInfo(any(OverlayIdentifier.class), any()))
                .thenReturn(launcherTargetInfo);
                .thenAnswer(answer -> {
                    if (mGetOverlayInfoEnabled) {
                        return launcherTargetInfo;
                    }
                    return null;
                });
        clearInvocations(mOverlayManager);
        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
    public void applyCurrentUserOverlays_createsPendingOverlays() {
        FabricatedOverlay[] pendingCreation = new FabricatedOverlay[]{