diff options
5 files changed, 25 insertions, 49 deletions
diff --git a/packages/SystemUI/res/layout/media_session_view.xml b/packages/SystemUI/res/layout/media_session_view.xml index 0e20fa3f46b5..9c49607d414e 100644 --- a/packages/SystemUI/res/layout/media_session_view.xml +++ b/packages/SystemUI/res/layout/media_session_view.xml @@ -42,7 +42,6 @@ android:adjustViewBounds="true" android:clipToOutline="true" android:background="@drawable/qs_media_outline_album_bg" - android:foreground="@drawable/qs_media_scrim" /> <!-- Guideline for output switcher --> diff --git a/packages/SystemUI/src/com/android/systemui/media/ColorSchemeTransition.kt b/packages/SystemUI/src/com/android/systemui/media/ColorSchemeTransition.kt index f1d5e94bfbf3..d0826553ad2c 100644 --- a/packages/SystemUI/src/com/android/systemui/media/ColorSchemeTransition.kt +++ b/packages/SystemUI/src/com/android/systemui/media/ColorSchemeTransition.kt @@ -17,20 +17,17 @@ package com.android.systemui.media import android.animation.ArgbEvaluator -import android.animation.ValueAnimator.AnimatorUpdateListener import android.animation.ValueAnimator +import android.animation.ValueAnimator.AnimatorUpdateListener import android.content.Context import android.content.res.ColorStateList -import android.graphics.Color -import android.graphics.drawable.GradientDrawable -import android.graphics.drawable.RippleDrawable import android.content.res.Configuration import android.content.res.Configuration.UI_MODE_NIGHT_YES +import android.graphics.drawable.RippleDrawable import com.android.internal.R import com.android.internal.annotations.VisibleForTesting import com.android.settingslib.Utils import com.android.systemui.monet.ColorScheme -import com.android.systemui.util.getColorWithAlpha /** * A [ColorTransition] is an object that updates the colors of views each time [updateColorScheme] @@ -106,7 +103,6 @@ class ColorSchemeTransition internal constructor( constructor(context: Context, mediaViewHolder: MediaViewHolder) : this(context, mediaViewHolder, ::AnimatingColorTransition) - private var isGradientEnabled = true val bgColor = context.getColor(com.android.systemui.R.color.material_dynamic_secondary95) val surfaceColor = animatingColorTransitionFactory( bgColor, @@ -187,16 +183,6 @@ class ColorSchemeTransition internal constructor( mediaViewHolder.seekBar.progressBackgroundTintList = ColorStateList.valueOf(textTertiary) } - val bgGradientStart = animatingColorTransitionFactory( - bgColor, - albumGradientPicker(::backgroundStartFromScheme, 0.25f) - ) { _ -> updateAlbumGradient() } - - val bgGradientEnd = animatingColorTransitionFactory( - bgColor, - albumGradientPicker(::backgroundEndFromScheme, 0.9f) - ) { _ -> updateAlbumGradient() } - val colorTransitions = arrayOf( surfaceColor, colorSeamless, @@ -206,37 +192,13 @@ class ColorSchemeTransition internal constructor( textPrimaryInverse, textSecondary, textTertiary, - bgGradientStart, - bgGradientEnd ) - private fun updateAlbumGradient() { - val gradient = mediaViewHolder.albumView.foreground?.mutate() - if (gradient is GradientDrawable) { - gradient.colors = intArrayOf( - bgGradientStart?.currentColor ?: 0, - bgGradientEnd?.currentColor ?: 0) - } - } - - private fun albumGradientPicker( - inner: (ColorScheme) -> Int, - targetAlpha: Float - ): (ColorScheme) -> Int { - return { scheme -> - if (isGradientEnabled) - getColorWithAlpha(inner(scheme), targetAlpha) - else - Color.TRANSPARENT - } - } - private fun loadDefaultColor(id: Int): Int { return Utils.getColorAttr(context, id).defaultColor } - fun updateColorScheme(colorScheme: ColorScheme?, enableGradient: Boolean) { - isGradientEnabled = enableGradient + fun updateColorScheme(colorScheme: ColorScheme?) { colorTransitions.forEach { it.updateColorScheme(colorScheme) } colorScheme?.let { mediaViewHolder.gutsViewHolder.colorScheme = colorScheme } } diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaControlPanel.java b/packages/SystemUI/src/com/android/systemui/media/MediaControlPanel.java index 68aba6217f8e..1ed65b31dbd0 100644 --- a/packages/SystemUI/src/com/android/systemui/media/MediaControlPanel.java +++ b/packages/SystemUI/src/com/android/systemui/media/MediaControlPanel.java @@ -38,7 +38,9 @@ import android.graphics.Rect; import android.graphics.drawable.Animatable; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; +import android.graphics.drawable.GradientDrawable; import android.graphics.drawable.Icon; +import android.graphics.drawable.LayerDrawable; import android.graphics.drawable.TransitionDrawable; import android.media.session.MediaController; import android.media.session.MediaSession; @@ -82,6 +84,7 @@ import com.android.systemui.plugins.FalsingManager; import com.android.systemui.shared.system.SysUiStatsLog; import com.android.systemui.statusbar.NotificationLockscreenUserManager; import com.android.systemui.statusbar.policy.KeyguardStateController; +import com.android.systemui.util.ColorUtilKt; import com.android.systemui.util.animation.TransitionLayout; import com.android.systemui.util.time.SystemClock; @@ -683,7 +686,18 @@ public class MediaControlPanel { WallpaperColors wallpaperColors = WallpaperColors .fromBitmap(artworkIcon.getBitmap()); mutableColorScheme = new ColorScheme(wallpaperColors, true, Style.CONTENT); - artwork = getScaledBackground(artworkIcon, width, height); + Drawable albumArt = getScaledBackground(artworkIcon, width, height); + GradientDrawable gradient = (GradientDrawable) mContext + .getDrawable(R.drawable.qs_media_scrim); + gradient.setColors(new int[] { + ColorUtilKt.getColorWithAlpha( + MediaColorSchemesKt.backgroundStartFromScheme(mutableColorScheme), + 0.25f), + ColorUtilKt.getColorWithAlpha( + MediaColorSchemesKt.backgroundEndFromScheme(mutableColorScheme), + 0.9f), + }); + artwork = new LayerDrawable(new Drawable[] { albumArt, gradient }); isArtworkBound = true; } else { // If there's no artwork, use colors from the app icon @@ -735,7 +749,7 @@ public class MediaControlPanel { } // Transition Colors to current color scheme - mColorSchemeTransition.updateColorScheme(colorScheme, mIsArtworkBound); + mColorSchemeTransition.updateColorScheme(colorScheme); // App icon - use notification icon ImageView appIconView = mMediaViewHolder.getAppIcon(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/ColorSchemeTransitionTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/ColorSchemeTransitionTest.kt index b97924107322..f56d42ec3fb4 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/ColorSchemeTransitionTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/ColorSchemeTransitionTest.kt @@ -16,7 +16,6 @@ package com.android.systemui.media -import org.mockito.Mockito.`when` as whenever import android.animation.ValueAnimator import android.graphics.Color import android.testing.AndroidTestingRunner @@ -34,6 +33,7 @@ import org.mockito.Mock import org.mockito.Mockito.never import org.mockito.Mockito.times import org.mockito.Mockito.verify +import org.mockito.Mockito.`when` as whenever import org.mockito.junit.MockitoJUnit private const val DEFAULT_COLOR = Color.RED @@ -147,8 +147,8 @@ class ColorSchemeTransitionTest : SysuiTestCase() { @Test fun testColorSchemeTransition_update() { - colorSchemeTransition.updateColorScheme(colorScheme, true) - verify(mockAnimatingTransition, times(10)).updateColorScheme(colorScheme) + colorSchemeTransition.updateColorScheme(colorScheme) + verify(mockAnimatingTransition, times(8)).updateColorScheme(colorScheme) verify(gutsViewHolder).colorScheme = colorScheme } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/MediaControlPanelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/MediaControlPanelTest.kt index 540f2a534854..c13c30baed0a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/MediaControlPanelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/MediaControlPanelTest.kt @@ -21,7 +21,6 @@ import android.animation.AnimatorSet import android.app.PendingIntent import android.app.smartspace.SmartspaceAction import android.content.Context -import org.mockito.Mockito.`when` as whenever import android.content.Intent import android.content.pm.ApplicationInfo import android.content.pm.PackageManager @@ -69,8 +68,8 @@ import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.util.animation.TransitionLayout import com.android.systemui.util.concurrency.FakeExecutor import com.android.systemui.util.mockito.KotlinArgumentCaptor -import com.android.systemui.util.mockito.argumentCaptor import com.android.systemui.util.mockito.any +import com.android.systemui.util.mockito.argumentCaptor import com.android.systemui.util.mockito.eq import com.android.systemui.util.mockito.nullable import com.android.systemui.util.mockito.withArgCaptor @@ -93,6 +92,7 @@ import org.mockito.Mockito.never import org.mockito.Mockito.reset import org.mockito.Mockito.times import org.mockito.Mockito.verify +import org.mockito.Mockito.`when` as whenever import org.mockito.junit.MockitoJUnit private const val KEY = "TEST_KEY" @@ -355,6 +355,7 @@ public class MediaControlPanelTest : SysuiTestCase() { whenever(viewHolder.player).thenReturn(view) whenever(viewHolder.appIcon).thenReturn(appIcon) whenever(viewHolder.albumView).thenReturn(albumView) + whenever(albumView.foreground).thenReturn(mock(Drawable::class.java)) whenever(viewHolder.titleText).thenReturn(titleText) whenever(viewHolder.artistText).thenReturn(artistText) whenever(seamlessBackground.getDrawable(0)).thenReturn(mock(GradientDrawable::class.java)) |