Merge "Improve theme application transition." into qt-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
07deba3ce1
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user