diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/IOverviewProxy.aidl b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/IOverviewProxy.aidl index 577e3bbefdade..670980420a57e 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/IOverviewProxy.aidl +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/IOverviewProxy.aidl @@ -134,4 +134,9 @@ oneway interface IOverviewProxy { * Sent when some system ui state changes. */ void onSystemUiStateChanged(int stateFlags) = 16; + + /** + * Sent when the scrim colors (based on wallpaper) change. + */ + void onScrimColorsChanged(int color, int type) = 17; } diff --git a/packages/SystemUI/src/com/android/systemui/colorextraction/SysuiColorExtractor.java b/packages/SystemUI/src/com/android/systemui/colorextraction/SysuiColorExtractor.java index 05665b5ae4a2d..de1069064518b 100644 --- a/packages/SystemUI/src/com/android/systemui/colorextraction/SysuiColorExtractor.java +++ b/packages/SystemUI/src/com/android/systemui/colorextraction/SysuiColorExtractor.java @@ -16,6 +16,8 @@ package com.android.systemui.colorextraction; +import android.annotation.ColorInt; +import android.annotation.IntDef; import android.app.WallpaperColors; import android.app.WallpaperManager; import android.content.Context; @@ -34,10 +36,13 @@ import com.android.internal.colorextraction.types.ExtractionType; import com.android.internal.colorextraction.types.Tonal; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.Dumpable; +import com.android.systemui.recents.OverviewProxyService; import com.android.systemui.statusbar.policy.ConfigurationController; import java.io.FileDescriptor; import java.io.PrintWriter; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; import java.util.Arrays; import javax.inject.Inject; @@ -50,23 +55,41 @@ import javax.inject.Singleton; public class SysuiColorExtractor extends ColorExtractor implements Dumpable, ConfigurationController.ConfigurationListener { private static final String TAG = "SysuiColorExtractor"; + + public static final int SCRIM_TYPE_REGULAR = 1; + public static final int SCRIM_TYPE_LIGHT = 2; + public static final int SCRIM_TYPE_DARK = 3; + + @IntDef(prefix = {"SCRIM_TYPE_"}, value = { + SCRIM_TYPE_REGULAR, + SCRIM_TYPE_LIGHT, + SCRIM_TYPE_DARK + }) + @Retention(RetentionPolicy.SOURCE) + public @interface ScrimType { + } + private final Tonal mTonal; + private final OverviewProxyService mOverviewProxyService; private boolean mWallpaperVisible; private boolean mHasBackdrop; // Colors to return when the wallpaper isn't visible private final GradientColors mWpHiddenColors; @Inject - public SysuiColorExtractor(Context context, ConfigurationController configurationController) { - this(context, new Tonal(context), configurationController, true); + public SysuiColorExtractor(Context context, ConfigurationController configurationController, + OverviewProxyService overviewProxyService) { + this(context, new Tonal(context), configurationController, true, overviewProxyService); } @VisibleForTesting public SysuiColorExtractor(Context context, ExtractionType type, - ConfigurationController configurationController, boolean registerVisibility) { + ConfigurationController configurationController, boolean registerVisibility, + OverviewProxyService overviewProxyService) { super(context, type, false /* immediately */); mTonal = type instanceof Tonal ? (Tonal) type : new Tonal(context); mWpHiddenColors = new GradientColors(); + mOverviewProxyService = overviewProxyService; configurationController.addCallback(this); WallpaperColors systemColors = getWallpaperColors(WallpaperManager.FLAG_SYSTEM); @@ -110,17 +133,35 @@ public class SysuiColorExtractor extends ColorExtractor implements Dumpable, return; } - super.onColorsChanged(colors, which); - if ((which & WallpaperManager.FLAG_SYSTEM) != 0) { updateDefaultGradients(colors); } + super.onColorsChanged(colors, which); } @Override public void onUiModeChanged() { WallpaperColors systemColors = getWallpaperColors(WallpaperManager.FLAG_SYSTEM); updateDefaultGradients(systemColors); + triggerColorsChanged(WallpaperManager.FLAG_SYSTEM); + } + + @Override + protected void triggerColorsChanged(int which) { + super.triggerColorsChanged(which); + + if (mWpHiddenColors != null && (which & WallpaperManager.FLAG_SYSTEM) != 0) { + @ColorInt int colorInt = mWpHiddenColors.getMainColor(); + @ScrimType int scrimType; + if (colorInt == Tonal.MAIN_COLOR_LIGHT) { + scrimType = SCRIM_TYPE_LIGHT; + } else if (colorInt == Tonal.MAIN_COLOR_DARK) { + scrimType = SCRIM_TYPE_DARK; + } else { + scrimType = SCRIM_TYPE_REGULAR; + } + mOverviewProxyService.onScrimColorsChanged(colorInt, scrimType); + } } /** diff --git a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java index 78c7cd406ba1b..c5591cf9d9476 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java +++ b/packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java @@ -31,6 +31,7 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_B import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NAV_BAR_HIDDEN; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED; +import android.annotation.ColorInt; import android.annotation.FloatRange; import android.app.ActivityTaskManager; import android.content.BroadcastReceiver; @@ -59,6 +60,7 @@ import com.android.internal.policy.ScreenDecorationsUtils; import com.android.systemui.Dependency; import com.android.systemui.Dumpable; import com.android.systemui.SysUiServiceProvider; +import com.android.systemui.colorextraction.SysuiColorExtractor.ScrimType; import com.android.systemui.recents.OverviewProxyService.OverviewProxyListener; import com.android.systemui.shared.recents.IOverviewProxy; import com.android.systemui.shared.recents.ISystemUiProxy; @@ -535,6 +537,16 @@ public class OverviewProxyService implements CallbackController