Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dd0fa55f authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Scrim now scales with the album image" into tm-qpr-dev am: f0e063d1 am: dab136db

parents a58e7526 dab136db
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -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 -->
+3 −41
Original line number Diff line number Diff line
@@ -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 }
    }
+16 −2
Original line number Diff line number Diff line
@@ -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();
+3 −3
Original line number Diff line number Diff line
@@ -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
    }
}
+3 −2
Original line number Diff line number Diff line
@@ -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))