Merge "Scrim now scales with the album image" into tm-qpr-dev am: f0e063d10e am: dab136db36
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19015188 Change-Id: I9cbc9a6afeeaabd301459833641e3166b95c902b Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -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 -->
|
||||
|
||||
@@ -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 }
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user