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

Commit 07deba3c authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Improve theme application transition." into qt-dev

parents b6ef6268 96e60d7b
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -1064,6 +1064,7 @@ public final class ActivityThread extends ClientTransactionHandler {
        }

        public void scheduleApplicationInfoChanged(ApplicationInfo ai) {
            mH.removeMessages(H.APPLICATION_INFO_CHANGED);
            sendMessage(H.APPLICATION_INFO_CHANGED, ai);
        }

@@ -5126,6 +5127,7 @@ public final class ActivityThread extends ClientTransactionHandler {
     * handling current transaction item before relaunching the activity.
     */
    void scheduleRelaunchActivity(IBinder token) {
        mH.removeMessages(H.RELAUNCH_ACTIVITY, token);
        sendMessage(H.RELAUNCH_ACTIVITY, token);
    }

+2 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.content.om.OverlayManager;
import android.content.pm.UserInfo;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.UserHandle;
import android.os.UserManager;
@@ -66,6 +67,7 @@ public class ThemeOverlayController extends SystemUI {
        mUserManager = mContext.getSystemService(UserManager.class);
        mThemeManager = new ThemeOverlayManager(
                mContext.getSystemService(OverlayManager.class),
                AsyncTask.THREAD_POOL_EXECUTOR,
                mContext.getString(R.string.launcher_overlayable_package));
        final Handler bgHandler = Dependency.get(Dependency.BG_HANDLER);
        final IntentFilter filter = new IntentFilter();
+16 −10
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.Executor;
import java.util.stream.Collectors;

class ThemeOverlayManager {
@@ -91,10 +92,13 @@ class ThemeOverlayManager {
    /* Target package for each overlay category. */
    private final Map<String, String> mCategoryToTargetPackage = new ArrayMap<>();
    private final OverlayManager mOverlayManager;
    private final Executor mExecutor;
    private final String mLauncherPackage;

    ThemeOverlayManager(OverlayManager overlayManager, String launcherPackage) {
    ThemeOverlayManager(OverlayManager overlayManager, Executor executor,
            String launcherPackage) {
        mOverlayManager = overlayManager;
        mExecutor = executor;
        mLauncherPackage = launcherPackage;
        mTargetPackageToCategories.put(ANDROID_PACKAGE, Sets.newHashSet(
                OVERLAY_CATEGORY_COLOR, OVERLAY_CATEGORY_FONT,
@@ -149,19 +153,21 @@ class ThemeOverlayManager {
    private void setEnabled(
            String packageName, String category, Set<UserHandle> handles, boolean enabled) {
        for (UserHandle userHandle : handles) {
            setEnabled(packageName, userHandle, enabled);
            setEnabledAsync(packageName, userHandle, enabled);
        }
        if (!handles.contains(UserHandle.SYSTEM) && SYSTEM_USER_CATEGORIES.contains(category)) {
            setEnabled(packageName, UserHandle.SYSTEM, enabled);
            setEnabledAsync(packageName, UserHandle.SYSTEM, enabled);
        }
    }

    private void setEnabled(String pkg, UserHandle userHandle, boolean enabled) {
    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));
            if (enabled) {
                mOverlayManager.setEnabledExclusiveInCategory(pkg, userHandle);
            } else {
                mOverlayManager.setEnabled(pkg, false, userHandle);
            }
        });
    }
}
+3 −14
Original line number Diff line number Diff line
@@ -47,13 +47,12 @@ import com.android.systemui.SysuiTestCase;
import com.google.android.collect.Maps;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.google.common.util.concurrent.MoreExecutors;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InOrder;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;

import java.util.HashMap;
@@ -87,7 +86,8 @@ public class ThemeOverlayManagerTest extends SysuiTestCase {
    @Before
    public void setup() throws Exception {
        MockitoAnnotations.initMocks(this);
        mManager = new ThemeOverlayManager(mOverlayManager, LAUNCHER_PACKAGE);
        mManager = new ThemeOverlayManager(mOverlayManager, MoreExecutors.directExecutor(),
                LAUNCHER_PACKAGE);
        when(mOverlayManager.getOverlayInfosForTarget(ANDROID_PACKAGE, UserHandle.SYSTEM))
                .thenReturn(Lists.newArrayList(
                        createOverlayInfo(TEST_DISABLED_PREFIX + OVERLAY_CATEGORY_COLOR,
@@ -135,17 +135,6 @@ public class ThemeOverlayManagerTest extends SysuiTestCase {
        }
    }

    @Test
    public void allCategoriesSpecified_enabledInOrder() {
        mManager.applyCurrentUserOverlays(ALL_CATEGORIES_MAP, TEST_USER_HANDLES);

        InOrder inOrder = Mockito.inOrder(mOverlayManager);
        for (String category : THEME_CATEGORIES) {
            inOrder.verify(mOverlayManager)
                    .setEnabledExclusiveInCategory(ALL_CATEGORIES_MAP.get(category), TEST_USER);
        }
    }

    @Test
    public void allCategoriesSpecified_sysuiCategoriesAlsoAppliedToSysuiUser() {
        mManager.applyCurrentUserOverlays(ALL_CATEGORIES_MAP, TEST_USER_HANDLES);