Merge "Align taskbar children to Y value instead of X." into tm-qpr-dev
diff --git a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java
index 9ff2cfc..5ddf2a8 100644
--- a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java
+++ b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java
@@ -299,7 +299,7 @@
ItemInfo tag = (ItemInfo) v.getTag();
if (tag != null && tag.shouldUseBackgroundAnimation()) {
ContainerAnimationRunner containerAnimationRunner =
- ContainerAnimationRunner.from(v, mStartingWindowListener);
+ ContainerAnimationRunner.from(v, mStartingWindowListener, onEndCallback);
if (containerAnimationRunner != null) {
delegateRunner = containerAnimationRunner;
}
@@ -1757,7 +1757,7 @@
@Nullable
private static ContainerAnimationRunner from(
- View v, StartingWindowListener startingWindowListener) {
+ View v, StartingWindowListener startingWindowListener, RunnableList onEndCallback) {
View viewToUse = findViewWithBackground(v);
if (viewToUse == null) {
viewToUse = v;
@@ -1784,8 +1784,15 @@
ActivityLaunchAnimator.Callback callback = task -> ColorUtils.setAlphaComponent(
startingWindowListener.getBackgroundColor(), 255);
+ ActivityLaunchAnimator.Listener listener = new ActivityLaunchAnimator.Listener() {
+ @Override
+ public void onLaunchAnimationEnd() {
+ onEndCallback.executeAllAndDestroy();
+ }
+ };
+
return new ContainerAnimationRunner(
- new ActivityLaunchAnimator.AnimationDelegate(controller, callback));
+ new ActivityLaunchAnimator.AnimationDelegate(controller, callback, listener));
}
/** Finds the closest parent of [view] (inclusive) with a background drawable. */
diff --git a/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java b/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java
index ac2c44b..793c68e 100644
--- a/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java
@@ -25,7 +25,6 @@
import android.animation.Animator;
import android.animation.AnimatorSet;
-import android.annotation.ColorInt;
import android.os.RemoteException;
import android.util.Log;
import android.view.TaskTransitionSpec;
@@ -223,17 +222,10 @@
WindowManagerGlobal.getWindowManagerService().clearTaskTransitionSpec();
} else {
// Adjust task transition spec to account for taskbar being visible
- @ColorInt int taskAnimationBackgroundColor =
- DisplayController.isTransientTaskbar(mLauncher)
- ? mLauncher.getColor(R.color.transient_taskbar_background)
- : mLauncher.getColor(R.color.taskbar_background);
-
- TaskTransitionSpec customTaskAnimationSpec = new TaskTransitionSpec(
- taskAnimationBackgroundColor,
- Set.of(ITYPE_EXTRA_NAVIGATION_BAR)
- );
- WindowManagerGlobal.getWindowManagerService()
- .setTaskTransitionSpec(customTaskAnimationSpec);
+ WindowManagerGlobal.getWindowManagerService().setTaskTransitionSpec(
+ new TaskTransitionSpec(
+ mLauncher.getColor(R.color.taskbar_background),
+ Set.of(ITYPE_EXTRA_NAVIGATION_BAR)));
}
} catch (RemoteException e) {
// This shouldn't happen but if it does task animations won't look good until the
diff --git a/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java b/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java
index 728c91f..bafd5b4 100644
--- a/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java
@@ -125,8 +125,10 @@
private static final int FLAG_SMALL_SCREEN = 1 << 13;
private static final int FLAG_SLIDE_IN_VIEW_VISIBLE = 1 << 14;
- /** Flags where a UI could be over a slide in view, so the color override should be disabled. */
- private static final int FLAGS_SLIDE_IN_VIEW_ICON_COLOR_OVERRIDE_DISABLED =
+ /**
+ * Flags where a UI could be over Taskbar surfaces, so the color override should be disabled.
+ */
+ private static final int FLAGS_ON_BACKGROUND_COLOR_OVERRIDE_DISABLED =
FLAG_NOTIFICATION_SHADE_EXPANDED | FLAG_VOICE_INTERACTION_WINDOW_SHOWING;
private static final String NAV_BUTTONS_SEPARATE_WINDOW_TITLE = "Taskbar Nav Buttons";
@@ -148,8 +150,8 @@
private final ViewGroup mStartContextualContainer;
private final int mLightIconColor;
private final int mDarkIconColor;
- /** Color to use for navigation bar buttons, if a slide in view is visible. */
- private final int mSlideInViewIconColor;
+ /** Color to use for navigation bar buttons, if they are on on a Taskbar surface background. */
+ private final int mOnBackgroundIconColor;
private final AnimatedFloat mTaskbarNavButtonTranslationY = new AnimatedFloat(
this::updateNavButtonTranslationY);
@@ -160,13 +162,18 @@
// Used for System UI state updates that should translate the nav button for in-app display.
private final AnimatedFloat mNavButtonInAppDisplayProgressForSysui = new AnimatedFloat(
this::updateNavButtonInAppDisplayProgressForSysui);
+ /** Expected nav button dark intensity communicated via the framework. */
private final AnimatedFloat mTaskbarNavButtonDarkIntensity = new AnimatedFloat(
- this::updateNavButtonDarkIntensity);
- private final AnimatedFloat mNavButtonDarkIntensityMultiplier = new AnimatedFloat(
- this::updateNavButtonDarkIntensity);
- /** Overrides the navigation button color to {@code mSlideInViewIconColor} when {@code 1}. */
- private final AnimatedFloat mSlideInViewNavButtonColorOverride = new AnimatedFloat(
- this::updateNavButtonDarkIntensity);
+ this::updateNavButtonColor);
+ /** {@code 1} if the Taskbar background color is fully opaque. */
+ private final AnimatedFloat mOnTaskbarBackgroundNavButtonColorOverride = new AnimatedFloat(
+ this::updateNavButtonColor);
+ /** {@code 1} if a Taskbar slide in overlay is visible over Taskbar. */
+ private final AnimatedFloat mSlideInViewVisibleNavButtonColorOverride = new AnimatedFloat(
+ this::updateNavButtonColor);
+ /** Disables the {@link #mOnBackgroundIconColor} override if {@code 0}. */
+ private final AnimatedFloat mOnBackgroundNavButtonColorOverrideMultiplier = new AnimatedFloat(
+ this::updateNavButtonColor);
private final RotationButtonListener mRotationButtonListener = new RotationButtonListener();
private final Rect mFloatingRotationButtonBounds = new Rect();
@@ -199,8 +206,7 @@
mLightIconColor = context.getColor(R.color.taskbar_nav_icon_light_color);
mDarkIconColor = context.getColor(R.color.taskbar_nav_icon_dark_color);
- // Can precompute color since dark theme change recreates taskbar.
- mSlideInViewIconColor = Utilities.isDarkTheme(context) ? mLightIconColor : mDarkIconColor;
+ mOnBackgroundIconColor = Utilities.isDarkTheme(context) ? mLightIconColor : mDarkIconColor;
}
/**
@@ -266,10 +272,15 @@
flags -> (flags & FLAG_IME_VISIBLE) != 0 && !isInKidsMode, AnimatedFloat.VALUE,
transForIme, defaultButtonTransY));
+ // Start at 1 because relevant flags are unset at init.
+ mOnBackgroundNavButtonColorOverrideMultiplier.value = 1;
mPropertyHolders.add(new StatePropertyHolder(
- mSlideInViewNavButtonColorOverride,
- flags -> ((flags & FLAG_SLIDE_IN_VIEW_VISIBLE) != 0)
- && ((flags & FLAGS_SLIDE_IN_VIEW_ICON_COLOR_OVERRIDE_DISABLED) == 0)));
+ mOnBackgroundNavButtonColorOverrideMultiplier,
+ flags -> (flags & FLAGS_ON_BACKGROUND_COLOR_OVERRIDE_DISABLED) == 0));
+
+ mPropertyHolders.add(new StatePropertyHolder(
+ mSlideInViewVisibleNavButtonColorOverride,
+ flags -> (flags & FLAG_SLIDE_IN_VIEW_VISIBLE) != 0));
if (alwaysShowButtons) {
initButtons(mNavButtonContainer, mEndContextualContainer,
@@ -569,9 +580,9 @@
return mTaskbarNavButtonDarkIntensity;
}
- /** Use to determine whether to use the dark intensity requested by the underlying app */
- public AnimatedFloat getNavButtonDarkIntensityMultiplier() {
- return mNavButtonDarkIntensityMultiplier;
+ /** Use to override the nav button color with {@link #mOnBackgroundIconColor}. */
+ public AnimatedFloat getOnTaskbarBackgroundNavButtonColorOverride() {
+ return mOnTaskbarBackgroundNavButtonColorOverride;
}
/**
@@ -617,14 +628,20 @@
+ inAppDisplayAdjustmentTranslationY);
}
- private void updateNavButtonDarkIntensity() {
- float darkIntensity = mTaskbarNavButtonDarkIntensity.value
- * mNavButtonDarkIntensityMultiplier.value;
- ArgbEvaluator argbEvaluator = ArgbEvaluator.getInstance();
- int iconColor = (int) argbEvaluator.evaluate(
- darkIntensity, mLightIconColor, mDarkIconColor);
- iconColor = (int) argbEvaluator.evaluate(
- mSlideInViewNavButtonColorOverride.value, iconColor, mSlideInViewIconColor);
+ private void updateNavButtonColor() {
+ final ArgbEvaluator argbEvaluator = ArgbEvaluator.getInstance();
+ final int sysUiNavButtonIconColor = (int) argbEvaluator.evaluate(
+ mTaskbarNavButtonDarkIntensity.value,
+ mLightIconColor,
+ mDarkIconColor);
+ // Override the color from framework if nav buttons are over an opaque Taskbar surface.
+ final int iconColor = (int) argbEvaluator.evaluate(
+ mOnBackgroundNavButtonColorOverrideMultiplier.value
+ * Math.max(
+ mOnTaskbarBackgroundNavButtonColorOverride.value,
+ mSlideInViewVisibleNavButtonColorOverride.value),
+ sysUiNavButtonIconColor,
+ mOnBackgroundIconColor);
for (ImageView button : mAllButtons) {
button.setImageTintList(ColorStateList.valueOf(iconColor));
}
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarBackgroundRenderer.kt b/quickstep/src/com/android/launcher3/taskbar/TaskbarBackgroundRenderer.kt
index e00bc59..3375877 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarBackgroundRenderer.kt
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarBackgroundRenderer.kt
@@ -66,8 +66,6 @@
paint.style = Paint.Style.FILL
if (isTransientTaskbar) {
- paint.color = context.getColor(R.color.transient_taskbar_background)
-
val res = context.resources
bottomMargin = res.getDimensionPixelSize(R.dimen.transient_taskbar_margin)
shadowBlur = res.getDimension(R.dimen.transient_taskbar_shadow_blur)
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java
index 7c4071f..7c3d14d 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java
@@ -59,10 +59,9 @@
// Initialized in init.
private TaskbarControllers mControllers;
- private AnimatedFloat mNavButtonDarkIntensityMultiplier;
+ private AnimatedFloat mOnBackgroundNavButtonColorIntensity;
private float mLastSetBackgroundAlpha;
- private boolean mIsBackgroundDrawnElsewhere;
public TaskbarDragLayerController(TaskbarActivityContext activity,
TaskbarDragLayer taskbarDragLayer) {
@@ -77,8 +76,8 @@
mControllers = controllers;
mTaskbarDragLayer.init(new TaskbarDragLayerCallbacks());
- mNavButtonDarkIntensityMultiplier = mControllers.navbarButtonsViewController
- .getNavButtonDarkIntensityMultiplier();
+ mOnBackgroundNavButtonColorIntensity = mControllers.navbarButtonsViewController
+ .getOnTaskbarBackgroundNavButtonColorOverride();
mBgTaskbar.value = 1;
mKeyguardBgTaskbar.value = 1;
@@ -152,7 +151,7 @@
mLastSetBackgroundAlpha = mBgOverride.value * Math.max(bgNavbar, bgTaskbar);
mTaskbarDragLayer.setTaskbarBackgroundAlpha(mLastSetBackgroundAlpha);
- updateNavBarDarkIntensityMultiplier();
+ updateOnBackgroundNavButtonColorIntensity();
}
/**
@@ -165,7 +164,7 @@
private void updateBackgroundOffset() {
mTaskbarDragLayer.setTaskbarBackgroundOffset(mBgOffset.value);
- updateNavBarDarkIntensityMultiplier();
+ updateOnBackgroundNavButtonColorIntensity();
}
@Override
@@ -174,23 +173,16 @@
}
/**
- * Set if another controller is temporarily handling background drawing. In this case we:
- * - Override our background alpha to be 0.
- * - Keep the nav bar dark intensity assuming taskbar background is at full alpha.
+ * Set if another controller is temporarily handling background drawing. In this case we
+ * override our background alpha to be {@code 0}.
*/
public void setIsBackgroundDrawnElsewhere(boolean isBackgroundDrawnElsewhere) {
- mIsBackgroundDrawnElsewhere = isBackgroundDrawnElsewhere;
- mBgOverride.updateValue(mIsBackgroundDrawnElsewhere ? 0 : 1);
- updateNavBarDarkIntensityMultiplier();
+ mBgOverride.updateValue(isBackgroundDrawnElsewhere ? 0 : 1);
}
- private void updateNavBarDarkIntensityMultiplier() {
- // Zero out the app-requested dark intensity when we're drawing our own background.
- float effectiveBgAlpha = mLastSetBackgroundAlpha * (1 - mBgOffset.value);
- if (mIsBackgroundDrawnElsewhere) {
- effectiveBgAlpha = 1;
- }
- mNavButtonDarkIntensityMultiplier.updateValue(1 - effectiveBgAlpha);
+ private void updateOnBackgroundNavButtonColorIntensity() {
+ mOnBackgroundNavButtonColorIntensity.updateValue(
+ mLastSetBackgroundAlpha * (1 - mBgOffset.value));
}
@Override
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java
index 0b275a8..3d5089f 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java
@@ -142,9 +142,8 @@
: R.drawable.ic_taskbar_all_apps_button));
mAllAppsButton.setScaleX(mIsRtl ? -1 : 1);
mAllAppsButton.setPadding(mItemPadding, mItemPadding, mItemPadding, mItemPadding);
- mAllAppsButton.setForegroundTint(mActivityContext.getColor(isTransientTaskbar
- ? R.color.all_apps_button_color
- : R.color.all_apps_button_color_dark));
+ mAllAppsButton.setForegroundTint(
+ mActivityContext.getColor(R.color.all_apps_button_color));
if (FeatureFlags.ENABLE_TASKBAR_PINNING.get()) {
mTaskbarDivider = LayoutInflater.from(context).inflate(R.layout.taskbar_divider,
diff --git a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
index a56300a..a53f08a 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
@@ -20,10 +20,11 @@
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_OPTIMIZE_MEASURE;
import static android.view.accessibility.AccessibilityEvent.TYPE_VIEW_FOCUSED;
+import static com.android.launcher3.LauncherSettings.Animation.DEFAULT_NO_ICON;
+import static com.android.launcher3.LauncherSettings.Animation.VIEW_BACKGROUND;
import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_HOTSEAT;
import static com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_APPLICATION;
import static com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_DEEP_SHORTCUT;
-import static com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_SEARCH_ACTION;
import static com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT;
import static com.android.launcher3.LauncherState.ALL_APPS;
import static com.android.launcher3.LauncherState.NORMAL;
@@ -1053,7 +1054,8 @@
activityOptions.options.setSourceInfo(ActivityOptions.SourceInfo.TYPE_LAUNCHER,
mLastTouchUpTime);
}
- if (item != null && item.itemType == ITEM_TYPE_SEARCH_ACTION) {
+ if (item != null && (item.animationType == DEFAULT_NO_ICON
+ || item.animationType == VIEW_BACKGROUND)) {
activityOptions.options.setSplashScreenStyle(
SplashScreen.SPLASH_SCREEN_STYLE_SOLID_COLOR);
} else {
diff --git a/quickstep/src/com/android/launcher3/uioverrides/QuickstepWidgetHolder.java b/quickstep/src/com/android/launcher3/uioverrides/QuickstepWidgetHolder.java
index 278a45a..ff3a292 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/QuickstepWidgetHolder.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/QuickstepWidgetHolder.java
@@ -22,6 +22,7 @@
import android.appwidget.AppWidgetHostView;
import android.appwidget.AppWidgetProviderInfo;
import android.content.Context;
+import android.util.Log;
import android.util.SparseArray;
import android.widget.RemoteViews;
@@ -33,14 +34,14 @@
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.model.WidgetsModel;
import com.android.launcher3.util.IntSet;
-import com.android.launcher3.util.Thunk;
import com.android.launcher3.widget.LauncherAppWidgetHostView;
import com.android.launcher3.widget.LauncherAppWidgetProviderInfo;
import com.android.launcher3.widget.LauncherWidgetHolder;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
-import java.util.Map;
+import java.util.Set;
import java.util.WeakHashMap;
import java.util.function.BiConsumer;
import java.util.function.IntConsumer;
@@ -50,6 +51,8 @@
*/
public final class QuickstepWidgetHolder extends LauncherWidgetHolder {
+ private static final String TAG = "QuickstepWidgetHolder";
+
private static final UpdateKey<AppWidgetProviderInfo> KEY_PROVIDER_UPDATE =
AppWidgetHostView::onUpdateProviderInfo;
private static final UpdateKey<RemoteViews> KEY_VIEWS_UPDATE =
@@ -63,6 +66,8 @@
private static AppWidgetHost sWidgetHost = null;
+ private final SparseArray<AppWidgetHostView> mViews = new SparseArray<>();
+
private final @Nullable RemoteViews.InteractionHandler mInteractionHandler;
private final @NonNull IntConsumer mAppWidgetRemovedCallback;
@@ -71,15 +76,14 @@
// Map to all pending updated keyed with appWidgetId;
private final SparseArray<PendingUpdate> mPendingUpdateMap = new SparseArray<>();
- @Thunk
- QuickstepWidgetHolder(@NonNull Context context,
+ private QuickstepWidgetHolder(@NonNull Context context,
@Nullable IntConsumer appWidgetRemovedCallback,
@Nullable RemoteViews.InteractionHandler interactionHandler) {
super(context, appWidgetRemovedCallback);
mAppWidgetRemovedCallback = appWidgetRemovedCallback != null ? appWidgetRemovedCallback
: i -> {};
mInteractionHandler = interactionHandler;
- sHolders.add(this);
+ MAIN_EXECUTOR.execute(() -> sHolders.add(this));
}
@Override
@@ -92,7 +96,7 @@
sHolders.forEach(h -> h.mAppWidgetRemovedCallback.accept(i))),
() -> MAIN_EXECUTOR.execute(() ->
sHolders.forEach(h -> h.mProviderChangedListeners.forEach(
- ProviderChangedListener::notifyWidgetProvidersChanged))),
+ ProviderChangedListener::notifyWidgetProvidersChanged))),
UI_HELPER_EXECUTOR.getLooper());
if (!WidgetsModel.GO_DISABLE_WIDGETS) {
sWidgetHost.startListening();
@@ -107,11 +111,7 @@
int count = mPendingUpdateMap.size();
for (int i = 0; i < count; i++) {
int widgetId = mPendingUpdateMap.keyAt(i);
- QuickstepWidgetHolderListener listener = sListeners.get(widgetId);
- if (listener == null) {
- continue;
- }
- AppWidgetHostView view = listener.mView.get(this);
+ AppWidgetHostView view = mViews.get(widgetId);
if (view == null) {
continue;
}
@@ -131,7 +131,16 @@
mPendingUpdateMap.clear();
}
- private <T> void addPendingAction(int widgetId, UpdateKey<T> key, T data) {
+ private <T> void onWidgetUpdate(int widgetId, UpdateKey<T> key, T data) {
+ if (isListening()) {
+ AppWidgetHostView view = mViews.get(widgetId);
+ if (view == null) {
+ return;
+ }
+ key.accept(view, data);
+ return;
+ }
+
PendingUpdate pendingUpdate = mPendingUpdateMap.get(widgetId);
if (pendingUpdate == null) {
pendingUpdate = new PendingUpdate();
@@ -167,7 +176,11 @@
*/
@Override
public void destroy() {
- sHolders.remove(this);
+ try {
+ MAIN_EXECUTOR.submit(() -> sHolders.remove(this)).get();
+ } catch (Exception e) {
+ Log.e(TAG, "Failed to remove self from holder list", e);
+ }
}
@Override
@@ -228,15 +241,16 @@
}
widgetView.setInteractionHandler(mInteractionHandler);
widgetView.setAppWidget(appWidgetId, appWidget);
+ mViews.put(appWidgetId, widgetView);
QuickstepWidgetHolderListener listener = sListeners.get(appWidgetId);
if (listener == null) {
- listener = new QuickstepWidgetHolderListener(appWidgetId, this, widgetView);
+ listener = new QuickstepWidgetHolderListener(appWidgetId);
sWidgetHost.setListener(appWidgetId, listener);
sListeners.put(appWidgetId, listener);
- } else {
- listener.resetView(this, widgetView);
}
+ RemoteViews remoteViews = listener.addHolder(this);
+ widgetView.updateAppWidget(remoteViews);
return widgetView;
}
@@ -247,31 +261,30 @@
@Override
public void clearViews() {
for (int i = sListeners.size() - 1; i >= 0; i--) {
- sListeners.valueAt(i).mView.remove(this);
+ sListeners.valueAt(i).mListeningHolders.remove(this);
}
}
private static class QuickstepWidgetHolderListener
implements AppWidgetHost.AppWidgetHostListener {
- @NonNull
- private final Map<QuickstepWidgetHolder, AppWidgetHostView> mView = new WeakHashMap<>();
+ // Static listeners should use a set that is backed by WeakHashMap to avoid memory leak
+ private final Set<QuickstepWidgetHolder> mListeningHolders = Collections.newSetFromMap(
+ new WeakHashMap<>());
private final int mWidgetId;
- @Nullable private RemoteViews mRemoteViews = null;
+ private @Nullable RemoteViews mRemoteViews;
- QuickstepWidgetHolderListener(int widgetId, @NonNull QuickstepWidgetHolder holder,
- @NonNull LauncherAppWidgetHostView view) {
+ QuickstepWidgetHolderListener(int widgetId) {
mWidgetId = widgetId;
- mView.put(holder, view);
}
@UiThread
- public void resetView(@NonNull QuickstepWidgetHolder holder,
- @NonNull AppWidgetHostView view) {
- mView.put(holder, view);
- view.updateAppWidget(mRemoteViews);
+ @Nullable
+ public RemoteViews addHolder(@NonNull QuickstepWidgetHolder holder) {
+ mListeningHolders.add(holder);
+ return mRemoteViews;
}
@Override
@@ -295,13 +308,8 @@
}
private <T> void executeOnMainExecutor(UpdateKey<T> key, T data) {
- MAIN_EXECUTOR.execute(() -> mView.forEach((holder, view) -> {
- if (holder.isListening()) {
- key.accept(view, data);
- } else {
- holder.addPendingAction(mWidgetId, key, data);
- }
- }));
+ MAIN_EXECUTOR.execute(() -> mListeningHolders.forEach(holder ->
+ holder.onWidgetUpdate(mWidgetId, key, data)));
}
}
diff --git a/quickstep/src/com/android/quickstep/util/SwipePipToHomeAnimator.java b/quickstep/src/com/android/quickstep/util/SwipePipToHomeAnimator.java
index e4c2dae..f94d80f 100644
--- a/quickstep/src/com/android/quickstep/util/SwipePipToHomeAnimator.java
+++ b/quickstep/src/com/android/quickstep/util/SwipePipToHomeAnimator.java
@@ -150,7 +150,7 @@
// to other classes like PipTaskOrganizer / RecentsAnimationController to complete
// the cleanup.
if (SystemProperties.getBoolean(
- "persist.wm.debug.enable_pip_app_icon_overlay", false)) {
+ "persist.wm.debug.enable_pip_app_icon_overlay", true)) {
mPipContentOverlay = new PipContentOverlay.PipAppIconOverlay(view.getContext(),
mAppBounds, mActivityInfo);
} else {
diff --git a/res/color-night-v31/transient_taskbar_background.xml b/res/color-night-v31/taskbar_background.xml
similarity index 93%
rename from res/color-night-v31/transient_taskbar_background.xml
rename to res/color-night-v31/taskbar_background.xml
index 40f6494..8df1686 100644
--- a/res/color-night-v31/transient_taskbar_background.xml
+++ b/res/color-night-v31/taskbar_background.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2022 The Android Open Source Project
+<!-- Copyright (C) 2023 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -16,4 +16,3 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@android:color/system_neutral1_500" android:lStar="15" />
</selector>
-
diff --git a/res/color-v31/taskbar_background.xml b/res/color-v31/taskbar_background.xml
index eaf676f..c2bcab8 100644
--- a/res/color-v31/taskbar_background.xml
+++ b/res/color-v31/taskbar_background.xml
@@ -14,5 +14,5 @@
limitations under the License.
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:color="@android:color/system_neutral1_500" android:lStar="15" />
+ <item android:color="@android:color/system_neutral1_500" android:lStar="95" />
</selector>
diff --git a/res/color-v31/transient_taskbar_background.xml b/res/color-v31/transient_taskbar_background.xml
deleted file mode 100644
index bce947d..0000000
--- a/res/color-v31/transient_taskbar_background.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2022 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:color="@android:color/system_neutral1_500" android:lStar="95" />
-</selector>
-
diff --git a/res/values-night-v31/colors.xml b/res/values-night-v31/colors.xml
index 2c1bc90..f331361 100644
--- a/res/values-night-v31/colors.xml
+++ b/res/values-night-v31/colors.xml
@@ -24,4 +24,6 @@
<color name="home_settings_thumb_off_color">@android:color/system_neutral2_300</color>
<color name="home_settings_track_on_color">@android:color/system_accent2_700</color>
<color name="home_settings_track_off_color">@android:color/system_neutral1_700</color>
+
+ <color name="all_apps_button_color">@android:color/system_neutral2_200</color>
</resources>
\ No newline at end of file
diff --git a/res/values-night/colors.xml b/res/values-night/colors.xml
index 4ba77fa..17fe419 100644
--- a/res/values-night/colors.xml
+++ b/res/values-night/colors.xml
@@ -17,5 +17,5 @@
-->
<resources>
- <color name="all_apps_button_color">@color/all_apps_button_color_dark</color>
+ <color name="all_apps_button_color">#BFC8CC</color>
</resources>
\ No newline at end of file
diff --git a/res/values-v31/colors.xml b/res/values-v31/colors.xml
index f87d9fc..054fe47 100644
--- a/res/values-v31/colors.xml
+++ b/res/values-v31/colors.xml
@@ -62,8 +62,7 @@
<color name="preload_icon_accent_color_dark">@android:color/system_accent1_300</color>
<color name="preload_icon_background_color_dark">@android:color/system_neutral2_700</color>
- <color name="all_apps_button_color_light">@android:color/system_neutral2_700</color>
- <color name="all_apps_button_color_dark">@android:color/system_neutral2_200</color>
+ <color name="all_apps_button_color">@android:color/system_neutral2_700</color>
<color name="widget_picker_background_selected">@android:color/system_accent2_100</color>
</resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index ef7bf91..9d6927b 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -80,9 +80,7 @@
<color name="workspace_accent_color_light">#ff8df5e3</color>
<color name="workspace_accent_color_dark">#ff3d665f</color>
- <color name="all_apps_button_color">@color/all_apps_button_color_light</color>
- <color name="all_apps_button_color_light">#40484B</color>
- <color name="all_apps_button_color_dark">#BFC8CC</color>
+ <color name="all_apps_button_color">#40484B</color>
<color name="preload_icon_accent_color_light">#00668B</color>
<color name="preload_icon_background_color_light">#B5CAD7</color>
diff --git a/src/com/android/launcher3/LauncherSettings.java b/src/com/android/launcher3/LauncherSettings.java
index 66ea616..76cae6a 100644
--- a/src/com/android/launcher3/LauncherSettings.java
+++ b/src/com/android/launcher3/LauncherSettings.java
@@ -41,6 +41,10 @@
* An animation using the view's background.
*/
public static final int VIEW_BACKGROUND = 1;
+ /**
+ * The default animation for a given view/item info type, but without the splash icon.
+ */
+ public static final int DEFAULT_NO_ICON = 2;
}
/**
diff --git a/src/com/android/launcher3/views/ActivityContext.java b/src/com/android/launcher3/views/ActivityContext.java
index b6f6223..10f40b7 100644
--- a/src/com/android/launcher3/views/ActivityContext.java
+++ b/src/com/android/launcher3/views/ActivityContext.java
@@ -45,6 +45,7 @@
import android.view.WindowInsetsController;
import android.view.inputmethod.InputMethodManager;
import android.widget.Toast;
+import android.window.SplashScreen;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -320,7 +321,14 @@
return false;
}
- Bundle optsBundle = (v != null) ? getActivityLaunchOptions(v, item).toBundle() : null;
+ Bundle optsBundle = null;
+ if (v != null) {
+ optsBundle = getActivityLaunchOptions(v, item).toBundle();
+ } else if (item != null && item.animationType == LauncherSettings.Animation.DEFAULT_NO_ICON
+ && Utilities.ATLEAST_T) {
+ optsBundle = ActivityOptions.makeBasic()
+ .setSplashScreenStyle(SplashScreen.SPLASH_SCREEN_STYLE_SOLID_COLOR).toBundle();
+ }
UserHandle user = item == null ? null : item.user;
// Prepare intent
diff --git a/tests/Android.bp b/tests/Android.bp
index dfbaf86..81853d1 100644
--- a/tests/Android.bp
+++ b/tests/Android.bp
@@ -116,7 +116,8 @@
manifest: "AndroidManifest.xml",
platform_apis: true,
test_config: "Launcher3Tests.xml",
- data: [":Launcher3"]
+ data: [":Launcher3"],
+ test_suites: ["general-tests"],
}
// Shared between tests and launcher