Loading packages/SystemUI/src/com/android/systemui/media/ColorSchemeTransition.kt +8 −4 Original line number Diff line number Diff line Loading @@ -34,7 +34,7 @@ import com.android.systemui.monet.ColorScheme * is triggered. */ interface ColorTransition { fun updateColorScheme(scheme: ColorScheme?) fun updateColorScheme(scheme: ColorScheme?): Boolean } /** Loading Loading @@ -64,14 +64,16 @@ open class AnimatingColorTransition( applyColor(currentColor) } override fun updateColorScheme(scheme: ColorScheme?) { override fun updateColorScheme(scheme: ColorScheme?): Boolean { val newTargetColor = if (scheme == null) defaultColor else extractColor(scheme) if (newTargetColor != targetColor) { sourceColor = currentColor targetColor = newTargetColor valueAnimator.cancel() valueAnimator.start() return true } return false } init { Loading Loading @@ -198,8 +200,10 @@ class ColorSchemeTransition internal constructor( return Utils.getColorAttr(context, id).defaultColor } fun updateColorScheme(colorScheme: ColorScheme?) { colorTransitions.forEach { it.updateColorScheme(colorScheme) } fun updateColorScheme(colorScheme: ColorScheme?): Boolean { var anyChanged = false colorTransitions.forEach { anyChanged = it.updateColorScheme(colorScheme) || anyChanged } colorScheme?.let { mediaViewHolder.gutsViewHolder.colorScheme = colorScheme } return anyChanged } } packages/SystemUI/src/com/android/systemui/media/MediaControlPanel.java +5 −4 Original line number Diff line number Diff line Loading @@ -741,10 +741,14 @@ public class MediaControlPanel { } mArtworkBoundId = reqId; // Transition Colors to current color scheme boolean colorSchemeChanged = mColorSchemeTransition.updateColorScheme(colorScheme); // Bind the album view to the artwork or a transition drawable ImageView albumView = mMediaViewHolder.getAlbumView(); albumView.setPadding(0, 0, 0, 0); if (updateBackground || (!mIsArtworkBound && isArtworkBound)) { if (updateBackground || colorSchemeChanged || (!mIsArtworkBound && isArtworkBound)) { if (mPrevArtwork == null) { albumView.setImageDrawable(artwork); } else { Loading @@ -767,9 +771,6 @@ public class MediaControlPanel { mIsArtworkBound = isArtworkBound; } // Transition Colors to current color scheme mColorSchemeTransition.updateColorScheme(colorScheme); // App icon - use notification icon ImageView appIconView = mMediaViewHolder.getAppIcon(); appIconView.clearColorFilter(); Loading packages/SystemUI/tests/src/com/android/systemui/media/MediaControlPanelTest.kt +18 −6 Original line number Diff line number Diff line Loading @@ -591,14 +591,20 @@ public class MediaControlPanelTest : SysuiTestCase() { @Test fun bindAlbumView_bitmapInLaterStates_setAfterExecutors() { val bmp = Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888) val canvas = Canvas(bmp) canvas.drawColor(Color.RED) val albumArt = Icon.createWithBitmap(bmp) val redBmp = Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888) val redCanvas = Canvas(redBmp) redCanvas.drawColor(Color.RED) val redArt = Icon.createWithBitmap(redBmp) val greenBmp = Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888) val greenCanvas = Canvas(greenBmp) greenCanvas.drawColor(Color.GREEN) val greenArt = Icon.createWithBitmap(greenBmp) val state0 = mediaData.copy(artwork = null) val state1 = mediaData.copy(artwork = albumArt) val state2 = mediaData.copy(artwork = albumArt) val state1 = mediaData.copy(artwork = redArt) val state2 = mediaData.copy(artwork = redArt) val state3 = mediaData.copy(artwork = greenArt) player.attachPlayer(viewHolder) // First binding sets (empty) drawable Loading Loading @@ -627,6 +633,12 @@ public class MediaControlPanelTest : SysuiTestCase() { bgExecutor.runAllReady() mainExecutor.runAllReady() verify(albumView, times(2)).setImageDrawable(any(Drawable::class.java)) // Fourth binding to new image runs transition due to color scheme change player.bindPlayer(state3, PACKAGE) bgExecutor.runAllReady() mainExecutor.runAllReady() verify(albumView, times(3)).setImageDrawable(any(Drawable::class.java)) } @Test Loading Loading
packages/SystemUI/src/com/android/systemui/media/ColorSchemeTransition.kt +8 −4 Original line number Diff line number Diff line Loading @@ -34,7 +34,7 @@ import com.android.systemui.monet.ColorScheme * is triggered. */ interface ColorTransition { fun updateColorScheme(scheme: ColorScheme?) fun updateColorScheme(scheme: ColorScheme?): Boolean } /** Loading Loading @@ -64,14 +64,16 @@ open class AnimatingColorTransition( applyColor(currentColor) } override fun updateColorScheme(scheme: ColorScheme?) { override fun updateColorScheme(scheme: ColorScheme?): Boolean { val newTargetColor = if (scheme == null) defaultColor else extractColor(scheme) if (newTargetColor != targetColor) { sourceColor = currentColor targetColor = newTargetColor valueAnimator.cancel() valueAnimator.start() return true } return false } init { Loading Loading @@ -198,8 +200,10 @@ class ColorSchemeTransition internal constructor( return Utils.getColorAttr(context, id).defaultColor } fun updateColorScheme(colorScheme: ColorScheme?) { colorTransitions.forEach { it.updateColorScheme(colorScheme) } fun updateColorScheme(colorScheme: ColorScheme?): Boolean { var anyChanged = false colorTransitions.forEach { anyChanged = it.updateColorScheme(colorScheme) || anyChanged } colorScheme?.let { mediaViewHolder.gutsViewHolder.colorScheme = colorScheme } return anyChanged } }
packages/SystemUI/src/com/android/systemui/media/MediaControlPanel.java +5 −4 Original line number Diff line number Diff line Loading @@ -741,10 +741,14 @@ public class MediaControlPanel { } mArtworkBoundId = reqId; // Transition Colors to current color scheme boolean colorSchemeChanged = mColorSchemeTransition.updateColorScheme(colorScheme); // Bind the album view to the artwork or a transition drawable ImageView albumView = mMediaViewHolder.getAlbumView(); albumView.setPadding(0, 0, 0, 0); if (updateBackground || (!mIsArtworkBound && isArtworkBound)) { if (updateBackground || colorSchemeChanged || (!mIsArtworkBound && isArtworkBound)) { if (mPrevArtwork == null) { albumView.setImageDrawable(artwork); } else { Loading @@ -767,9 +771,6 @@ public class MediaControlPanel { mIsArtworkBound = isArtworkBound; } // Transition Colors to current color scheme mColorSchemeTransition.updateColorScheme(colorScheme); // App icon - use notification icon ImageView appIconView = mMediaViewHolder.getAppIcon(); appIconView.clearColorFilter(); Loading
packages/SystemUI/tests/src/com/android/systemui/media/MediaControlPanelTest.kt +18 −6 Original line number Diff line number Diff line Loading @@ -591,14 +591,20 @@ public class MediaControlPanelTest : SysuiTestCase() { @Test fun bindAlbumView_bitmapInLaterStates_setAfterExecutors() { val bmp = Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888) val canvas = Canvas(bmp) canvas.drawColor(Color.RED) val albumArt = Icon.createWithBitmap(bmp) val redBmp = Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888) val redCanvas = Canvas(redBmp) redCanvas.drawColor(Color.RED) val redArt = Icon.createWithBitmap(redBmp) val greenBmp = Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888) val greenCanvas = Canvas(greenBmp) greenCanvas.drawColor(Color.GREEN) val greenArt = Icon.createWithBitmap(greenBmp) val state0 = mediaData.copy(artwork = null) val state1 = mediaData.copy(artwork = albumArt) val state2 = mediaData.copy(artwork = albumArt) val state1 = mediaData.copy(artwork = redArt) val state2 = mediaData.copy(artwork = redArt) val state3 = mediaData.copy(artwork = greenArt) player.attachPlayer(viewHolder) // First binding sets (empty) drawable Loading Loading @@ -627,6 +633,12 @@ public class MediaControlPanelTest : SysuiTestCase() { bgExecutor.runAllReady() mainExecutor.runAllReady() verify(albumView, times(2)).setImageDrawable(any(Drawable::class.java)) // Fourth binding to new image runs transition due to color scheme change player.bindPlayer(state3, PACKAGE) bgExecutor.runAllReady() mainExecutor.runAllReady() verify(albumView, times(3)).setImageDrawable(any(Drawable::class.java)) } @Test Loading