summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Lucas Dupin <dupin@google.com> 2019-05-09 11:30:56 -0700
committer Lucas Dupin <dupin@google.com> 2019-05-10 11:00:33 -0700
commitd9b9847ad63ae0a97552de757dee8102f0d8cc0c (patch)
tree0dbc2dc40c01f18cc7adfdc6293aed83e267c2b9
parent0d04871fb3831f1e2fc1f8aeb5058477821a6c74 (diff)
Notify OverviewProxyService of scrim colors
Bug: 130451254 Test: manual Test: atest SysuiColorExtractorTests Change-Id: I0ce271d3250ff5292a8e195c4c19ee99328ebad4
-rw-r--r--packages/SystemUI/shared/src/com/android/systemui/shared/recents/IOverviewProxy.aidl5
-rw-r--r--packages/SystemUI/src/com/android/systemui/colorextraction/SysuiColorExtractor.java51
-rw-r--r--packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java12
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/colorextraction/SysuiColorExtractorTests.java16
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) {