diff options
| author | 2019-05-09 11:30:56 -0700 | |
|---|---|---|
| committer | 2019-05-10 11:00:33 -0700 | |
| commit | d9b9847ad63ae0a97552de757dee8102f0d8cc0c (patch) | |
| tree | 0dbc2dc40c01f18cc7adfdc6293aed83e267c2b9 | |
| parent | 0d04871fb3831f1e2fc1f8aeb5058477821a6c74 (diff) | |
Notify OverviewProxyService of scrim colors
Bug: 130451254
Test: manual
Test: atest SysuiColorExtractorTests
Change-Id: I0ce271d3250ff5292a8e195c4c19ee99328ebad4
4 files changed, 77 insertions, 7 deletions
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 577e3bbefdad..670980420a57 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 05665b5ae4a2..de1069064518 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 78c7cd406ba1..c5591cf9d947 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<OverviewProxyLis dispatchNavButtonBounds(); } + public void onScrimColorsChanged(@ColorInt int color, @ScrimType int type) { + if (mOverviewProxy != null) { + try { + mOverviewProxy.onScrimColorsChanged(color, type); + } catch (RemoteException e) { + Log.e(TAG_OPS, "Failed to call onScrimColorsChanged()", e); + } + } + } + private void dispatchNavButtonBounds() { if (mOverviewProxy != null && mActiveNavBarRegion != null) { try { diff --git a/packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java b/packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java index 67df60a3dcfc..3d3c29564910 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java +++ b/packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java @@ -34,10 +34,14 @@ import androidx.test.runner.AndroidJUnit4; import com.android.internal.colorextraction.ColorExtractor; import com.android.internal.colorextraction.types.Tonal; import com.android.systemui.SysuiTestCase; +import com.android.systemui.recents.OverviewProxyService; import com.android.systemui.statusbar.policy.ConfigurationController; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; /** * Tests color extraction generation. @@ -53,6 +57,13 @@ public class SysuiColorExtractorTests extends SysuiTestCase { ColorExtractor.TYPE_NORMAL, ColorExtractor.TYPE_DARK, ColorExtractor.TYPE_EXTRA_DARK}; + @Mock + private OverviewProxyService mOverviewProxyService; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + } @Test public void getColors_usesGreyIfWallpaperNotVisible() { @@ -118,7 +129,8 @@ public class SysuiColorExtractorTests extends SysuiTestCase { Tonal tonal = mock(Tonal.class); ConfigurationController configurationController = mock(ConfigurationController.class); SysuiColorExtractor sysuiColorExtractor = new SysuiColorExtractor(getContext(), - tonal, configurationController, false /* registerVisibility */); + tonal, configurationController, false /* registerVisibility */, + mOverviewProxyService); verify(configurationController).addCallback(eq(sysuiColorExtractor)); reset(tonal); @@ -133,7 +145,7 @@ public class SysuiColorExtractorTests extends SysuiTestCase { outGradientColorsNormal.set(colors); outGradientColorsDark.set(colors); outGradientColorsExtraDark.set(colors); - }, mock(ConfigurationController.class), false); + }, mock(ConfigurationController.class), false, mOverviewProxyService); } private void simulateEvent(SysuiColorExtractor extractor) { |