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

This commit is contained in:
TreeHugger Robot
2019-04-25 20:11:26 +00:00
committed by Android (Google) Code Review
4 changed files with 23 additions and 24 deletions

View File

@@ -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);
}

View File

@@ -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();

View File

@@ -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) {
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);
}
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);
}
});
}
}

View File

@@ -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);