Merge "Scrim now scales with the album image" into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
f0e063d10e
@@ -42,7 +42,6 @@
|
|||||||
android:adjustViewBounds="true"
|
android:adjustViewBounds="true"
|
||||||
android:clipToOutline="true"
|
android:clipToOutline="true"
|
||||||
android:background="@drawable/qs_media_outline_album_bg"
|
android:background="@drawable/qs_media_outline_album_bg"
|
||||||
android:foreground="@drawable/qs_media_scrim"
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<!-- Guideline for output switcher -->
|
<!-- Guideline for output switcher -->
|
||||||
|
|||||||
@@ -17,20 +17,17 @@
|
|||||||
package com.android.systemui.media
|
package com.android.systemui.media
|
||||||
|
|
||||||
import android.animation.ArgbEvaluator
|
import android.animation.ArgbEvaluator
|
||||||
import android.animation.ValueAnimator.AnimatorUpdateListener
|
|
||||||
import android.animation.ValueAnimator
|
import android.animation.ValueAnimator
|
||||||
|
import android.animation.ValueAnimator.AnimatorUpdateListener
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.res.ColorStateList
|
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
|
||||||
import android.content.res.Configuration.UI_MODE_NIGHT_YES
|
import android.content.res.Configuration.UI_MODE_NIGHT_YES
|
||||||
|
import android.graphics.drawable.RippleDrawable
|
||||||
import com.android.internal.R
|
import com.android.internal.R
|
||||||
import com.android.internal.annotations.VisibleForTesting
|
import com.android.internal.annotations.VisibleForTesting
|
||||||
import com.android.settingslib.Utils
|
import com.android.settingslib.Utils
|
||||||
import com.android.systemui.monet.ColorScheme
|
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]
|
* 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) :
|
constructor(context: Context, mediaViewHolder: MediaViewHolder) :
|
||||||
this(context, mediaViewHolder, ::AnimatingColorTransition)
|
this(context, mediaViewHolder, ::AnimatingColorTransition)
|
||||||
|
|
||||||
private var isGradientEnabled = true
|
|
||||||
val bgColor = context.getColor(com.android.systemui.R.color.material_dynamic_secondary95)
|
val bgColor = context.getColor(com.android.systemui.R.color.material_dynamic_secondary95)
|
||||||
val surfaceColor = animatingColorTransitionFactory(
|
val surfaceColor = animatingColorTransitionFactory(
|
||||||
bgColor,
|
bgColor,
|
||||||
@@ -187,16 +183,6 @@ class ColorSchemeTransition internal constructor(
|
|||||||
mediaViewHolder.seekBar.progressBackgroundTintList = ColorStateList.valueOf(textTertiary)
|
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(
|
val colorTransitions = arrayOf(
|
||||||
surfaceColor,
|
surfaceColor,
|
||||||
colorSeamless,
|
colorSeamless,
|
||||||
@@ -206,37 +192,13 @@ class ColorSchemeTransition internal constructor(
|
|||||||
textPrimaryInverse,
|
textPrimaryInverse,
|
||||||
textSecondary,
|
textSecondary,
|
||||||
textTertiary,
|
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 {
|
private fun loadDefaultColor(id: Int): Int {
|
||||||
return Utils.getColorAttr(context, id).defaultColor
|
return Utils.getColorAttr(context, id).defaultColor
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateColorScheme(colorScheme: ColorScheme?, enableGradient: Boolean) {
|
fun updateColorScheme(colorScheme: ColorScheme?) {
|
||||||
isGradientEnabled = enableGradient
|
|
||||||
colorTransitions.forEach { it.updateColorScheme(colorScheme) }
|
colorTransitions.forEach { it.updateColorScheme(colorScheme) }
|
||||||
colorScheme?.let { mediaViewHolder.gutsViewHolder.colorScheme = colorScheme }
|
colorScheme?.let { mediaViewHolder.gutsViewHolder.colorScheme = colorScheme }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,9 @@ import android.graphics.Rect;
|
|||||||
import android.graphics.drawable.Animatable;
|
import android.graphics.drawable.Animatable;
|
||||||
import android.graphics.drawable.ColorDrawable;
|
import android.graphics.drawable.ColorDrawable;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.graphics.drawable.GradientDrawable;
|
||||||
import android.graphics.drawable.Icon;
|
import android.graphics.drawable.Icon;
|
||||||
|
import android.graphics.drawable.LayerDrawable;
|
||||||
import android.graphics.drawable.TransitionDrawable;
|
import android.graphics.drawable.TransitionDrawable;
|
||||||
import android.media.session.MediaController;
|
import android.media.session.MediaController;
|
||||||
import android.media.session.MediaSession;
|
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.shared.system.SysUiStatsLog;
|
||||||
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
|
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
|
||||||
import com.android.systemui.statusbar.policy.KeyguardStateController;
|
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.animation.TransitionLayout;
|
||||||
import com.android.systemui.util.time.SystemClock;
|
import com.android.systemui.util.time.SystemClock;
|
||||||
|
|
||||||
@@ -683,7 +686,18 @@ public class MediaControlPanel {
|
|||||||
WallpaperColors wallpaperColors = WallpaperColors
|
WallpaperColors wallpaperColors = WallpaperColors
|
||||||
.fromBitmap(artworkIcon.getBitmap());
|
.fromBitmap(artworkIcon.getBitmap());
|
||||||
mutableColorScheme = new ColorScheme(wallpaperColors, true, Style.CONTENT);
|
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;
|
isArtworkBound = true;
|
||||||
} else {
|
} else {
|
||||||
// If there's no artwork, use colors from the app icon
|
// If there's no artwork, use colors from the app icon
|
||||||
@@ -735,7 +749,7 @@ public class MediaControlPanel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Transition Colors to current color scheme
|
// Transition Colors to current color scheme
|
||||||
mColorSchemeTransition.updateColorScheme(colorScheme, mIsArtworkBound);
|
mColorSchemeTransition.updateColorScheme(colorScheme);
|
||||||
|
|
||||||
// App icon - use notification icon
|
// App icon - use notification icon
|
||||||
ImageView appIconView = mMediaViewHolder.getAppIcon();
|
ImageView appIconView = mMediaViewHolder.getAppIcon();
|
||||||
|
|||||||
@@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
package com.android.systemui.media
|
package com.android.systemui.media
|
||||||
|
|
||||||
import org.mockito.Mockito.`when` as whenever
|
|
||||||
import android.animation.ValueAnimator
|
import android.animation.ValueAnimator
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.testing.AndroidTestingRunner
|
import android.testing.AndroidTestingRunner
|
||||||
@@ -34,6 +33,7 @@ import org.mockito.Mock
|
|||||||
import org.mockito.Mockito.never
|
import org.mockito.Mockito.never
|
||||||
import org.mockito.Mockito.times
|
import org.mockito.Mockito.times
|
||||||
import org.mockito.Mockito.verify
|
import org.mockito.Mockito.verify
|
||||||
|
import org.mockito.Mockito.`when` as whenever
|
||||||
import org.mockito.junit.MockitoJUnit
|
import org.mockito.junit.MockitoJUnit
|
||||||
|
|
||||||
private const val DEFAULT_COLOR = Color.RED
|
private const val DEFAULT_COLOR = Color.RED
|
||||||
@@ -147,8 +147,8 @@ class ColorSchemeTransitionTest : SysuiTestCase() {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testColorSchemeTransition_update() {
|
fun testColorSchemeTransition_update() {
|
||||||
colorSchemeTransition.updateColorScheme(colorScheme, true)
|
colorSchemeTransition.updateColorScheme(colorScheme)
|
||||||
verify(mockAnimatingTransition, times(10)).updateColorScheme(colorScheme)
|
verify(mockAnimatingTransition, times(8)).updateColorScheme(colorScheme)
|
||||||
verify(gutsViewHolder).colorScheme = colorScheme
|
verify(gutsViewHolder).colorScheme = colorScheme
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import android.animation.AnimatorSet
|
|||||||
import android.app.PendingIntent
|
import android.app.PendingIntent
|
||||||
import android.app.smartspace.SmartspaceAction
|
import android.app.smartspace.SmartspaceAction
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import org.mockito.Mockito.`when` as whenever
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.pm.ApplicationInfo
|
import android.content.pm.ApplicationInfo
|
||||||
import android.content.pm.PackageManager
|
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.animation.TransitionLayout
|
||||||
import com.android.systemui.util.concurrency.FakeExecutor
|
import com.android.systemui.util.concurrency.FakeExecutor
|
||||||
import com.android.systemui.util.mockito.KotlinArgumentCaptor
|
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.any
|
||||||
|
import com.android.systemui.util.mockito.argumentCaptor
|
||||||
import com.android.systemui.util.mockito.eq
|
import com.android.systemui.util.mockito.eq
|
||||||
import com.android.systemui.util.mockito.nullable
|
import com.android.systemui.util.mockito.nullable
|
||||||
import com.android.systemui.util.mockito.withArgCaptor
|
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.reset
|
||||||
import org.mockito.Mockito.times
|
import org.mockito.Mockito.times
|
||||||
import org.mockito.Mockito.verify
|
import org.mockito.Mockito.verify
|
||||||
|
import org.mockito.Mockito.`when` as whenever
|
||||||
import org.mockito.junit.MockitoJUnit
|
import org.mockito.junit.MockitoJUnit
|
||||||
|
|
||||||
private const val KEY = "TEST_KEY"
|
private const val KEY = "TEST_KEY"
|
||||||
@@ -355,6 +355,7 @@ public class MediaControlPanelTest : SysuiTestCase() {
|
|||||||
whenever(viewHolder.player).thenReturn(view)
|
whenever(viewHolder.player).thenReturn(view)
|
||||||
whenever(viewHolder.appIcon).thenReturn(appIcon)
|
whenever(viewHolder.appIcon).thenReturn(appIcon)
|
||||||
whenever(viewHolder.albumView).thenReturn(albumView)
|
whenever(viewHolder.albumView).thenReturn(albumView)
|
||||||
|
whenever(albumView.foreground).thenReturn(mock(Drawable::class.java))
|
||||||
whenever(viewHolder.titleText).thenReturn(titleText)
|
whenever(viewHolder.titleText).thenReturn(titleText)
|
||||||
whenever(viewHolder.artistText).thenReturn(artistText)
|
whenever(viewHolder.artistText).thenReturn(artistText)
|
||||||
whenever(seamlessBackground.getDrawable(0)).thenReturn(mock(GradientDrawable::class.java))
|
whenever(seamlessBackground.getDrawable(0)).thenReturn(mock(GradientDrawable::class.java))
|
||||||
|
|||||||
Reference in New Issue
Block a user