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

Commit caa478c8 authored by Michael Mikhail's avatar Michael Mikhail Committed by Android (Google) Code Review
Browse files

Merge "Add listening field to be used to set animate" into main

parents 575b0b5c 500bd80e
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -22,9 +22,12 @@ import android.text.format.DateUtils
import androidx.annotation.UiThread
import androidx.lifecycle.Observer
import com.android.app.animation.Interpolators
import com.android.app.tracing.TraceStateLogger
import com.android.internal.annotations.VisibleForTesting
import com.android.systemui.res.R
import com.android.systemui.media.controls.ui.SquigglyProgress
import com.android.systemui.res.R

private const val TAG = "SeekBarObserver"

/**
 * Observer for changes from SeekBarViewModel.
@@ -39,6 +42,10 @@ open class SeekBarObserver(private val holder: MediaViewHolder) :
        @JvmStatic val RESET_ANIMATION_THRESHOLD_MS: Int = 250
    }

    // Trace state loggers for playing and listening states of progress bar.
    private val playingStateLogger = TraceStateLogger("$TAG#playing")
    private val listeningStateLogger = TraceStateLogger("$TAG#listening")

    val seekBarEnabledMaxHeight =
        holder.seekBar.context.resources.getDimensionPixelSize(
            R.dimen.qs_media_enabled_seekbar_height
@@ -103,9 +110,13 @@ open class SeekBarObserver(private val holder: MediaViewHolder) :
            return
        }

        playingStateLogger.log("${data.playing}")
        listeningStateLogger.log("${data.listening}")

        holder.seekBar.thumb.alpha = if (data.seekAvailable) 255 else 0
        holder.seekBar.isEnabled = data.seekAvailable
        progressDrawable?.animate = data.playing && !data.scrubbing && animationEnabled
        progressDrawable?.animate =
            data.playing && !data.scrubbing && animationEnabled && data.listening
        progressDrawable?.transitionEnabled = !data.seekAvailable

        if (holder.seekBar.maxHeight != seekBarEnabledMaxHeight) {
+16 −3
Original line number Diff line number Diff line
@@ -84,7 +84,16 @@ constructor(
    @Background private val bgExecutor: RepeatableExecutor,
    private val falsingManager: FalsingManager,
) {
    private var _data = Progress(false, false, false, false, null, 0)
    private var _data =
        Progress(
            enabled = false,
            seekAvailable = false,
            playing = false,
            scrubbing = false,
            elapsedTime = null,
            duration = 0,
            listening = false
        )
        set(value) {
            val enabledChanged = value.enabled != field.enabled
            field = value
@@ -239,7 +248,7 @@ constructor(
            )
                false
            else true
        _data = Progress(enabled, seekAvailable, playing, scrubbing, position, duration)
        _data = Progress(enabled, seekAvailable, playing, scrubbing, position, duration, listening)
        checkIfPollingNeeded()
    }

@@ -258,6 +267,7 @@ constructor(
                scrubbing = false,
                elapsedTime = position,
                duration = 100,
                listening = false,
            )
    }

@@ -548,9 +558,12 @@ constructor(
    data class Progress(
        val enabled: Boolean,
        val seekAvailable: Boolean,
        /** whether playback state is not paused or connecting */
        val playing: Boolean,
        val scrubbing: Boolean,
        val elapsedTime: Int?,
        val duration: Int
        val duration: Int,
        /** whether seekBar is listening to progress updates */
        val listening: Boolean,
    )
}
+18 −16
Original line number Diff line number Diff line
@@ -24,9 +24,9 @@ import android.view.View
import android.widget.SeekBar
import android.widget.TextView
import androidx.test.filters.SmallTest
import com.android.systemui.res.R
import com.android.systemui.SysuiTestCase
import com.android.systemui.media.controls.ui.SquigglyProgress
import com.android.systemui.res.R
import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Rule
@@ -86,7 +86,7 @@ class SeekBarObserverTest : SysuiTestCase() {
    fun seekBarGone() {
        // WHEN seek bar is disabled
        val isEnabled = false
        val data = SeekBarViewModel.Progress(isEnabled, false, false, false, null, 0)
        val data = SeekBarViewModel.Progress(isEnabled, false, false, false, null, 0, false)
        observer.onChanged(data)
        // THEN seek bar shows just a thin line with no text
        assertThat(seekBarView.isEnabled()).isFalse()
@@ -99,7 +99,7 @@ class SeekBarObserverTest : SysuiTestCase() {
    fun seekBarVisible() {
        // WHEN seek bar is enabled
        val isEnabled = true
        val data = SeekBarViewModel.Progress(isEnabled, true, false, false, 3000, 12000)
        val data = SeekBarViewModel.Progress(isEnabled, true, false, false, 3000, 12000, true)
        observer.onChanged(data)
        // THEN seek bar is visible and thick
        assertThat(seekBarView.getVisibility()).isEqualTo(View.VISIBLE)
@@ -109,7 +109,7 @@ class SeekBarObserverTest : SysuiTestCase() {
    @Test
    fun seekBarProgress() {
        // WHEN part of the track has been played
        val data = SeekBarViewModel.Progress(true, true, true, false, 3000, 120000)
        val data = SeekBarViewModel.Progress(true, true, true, false, 3000, 120000, true)
        observer.onChanged(data)
        // THEN seek bar shows the progress
        assertThat(seekBarView.progress).isEqualTo(3000)
@@ -123,7 +123,8 @@ class SeekBarObserverTest : SysuiTestCase() {
    fun seekBarDisabledWhenSeekNotAvailable() {
        // WHEN seek is not available
        val isSeekAvailable = false
        val data = SeekBarViewModel.Progress(true, isSeekAvailable, false, false, 3000, 120000)
        val data =
            SeekBarViewModel.Progress(true, isSeekAvailable, false, false, 3000, 120000, false)
        observer.onChanged(data)
        // THEN seek bar is not enabled
        assertThat(seekBarView.isEnabled()).isFalse()
@@ -133,7 +134,8 @@ class SeekBarObserverTest : SysuiTestCase() {
    fun seekBarEnabledWhenSeekNotAvailable() {
        // WHEN seek is available
        val isSeekAvailable = true
        val data = SeekBarViewModel.Progress(true, isSeekAvailable, false, false, 3000, 120000)
        val data =
            SeekBarViewModel.Progress(true, isSeekAvailable, false, false, 3000, 120000, false)
        observer.onChanged(data)
        // THEN seek bar is not enabled
        assertThat(seekBarView.isEnabled()).isTrue()
@@ -144,7 +146,7 @@ class SeekBarObserverTest : SysuiTestCase() {
        // WHEN playing
        val isPlaying = true
        val isScrubbing = false
        val data = SeekBarViewModel.Progress(true, true, isPlaying, isScrubbing, 3000, 120000)
        val data = SeekBarViewModel.Progress(true, true, isPlaying, isScrubbing, 3000, 120000, true)
        observer.onChanged(data)
        // THEN progress drawable is animating
        verify(mockSquigglyProgress).animate = true
@@ -155,7 +157,7 @@ class SeekBarObserverTest : SysuiTestCase() {
        // WHEN not playing & not scrubbing
        val isPlaying = false
        val isScrubbing = false
        val data = SeekBarViewModel.Progress(true, true, isPlaying, isScrubbing, 3000, 120000)
        val data = SeekBarViewModel.Progress(true, true, isPlaying, isScrubbing, 3000, 120000, true)
        observer.onChanged(data)
        // THEN progress drawable is not animating
        verify(mockSquigglyProgress).animate = false
@@ -166,7 +168,7 @@ class SeekBarObserverTest : SysuiTestCase() {
        // WHEN playing & scrubbing
        val isPlaying = true
        val isScrubbing = true
        val data = SeekBarViewModel.Progress(true, true, isPlaying, isScrubbing, 3000, 120000)
        val data = SeekBarViewModel.Progress(true, true, isPlaying, isScrubbing, 3000, 120000, true)
        observer.onChanged(data)
        // THEN progress drawable is not animating
        verify(mockSquigglyProgress).animate = false
@@ -177,7 +179,7 @@ class SeekBarObserverTest : SysuiTestCase() {
        // WHEN playing & scrubbing
        val isPlaying = false
        val isScrubbing = true
        val data = SeekBarViewModel.Progress(true, true, isPlaying, isScrubbing, 3000, 120000)
        val data = SeekBarViewModel.Progress(true, true, isPlaying, isScrubbing, 3000, 120000, true)
        observer.onChanged(data)
        // THEN progress drawable is not animating
        verify(mockSquigglyProgress).animate = false
@@ -187,7 +189,7 @@ class SeekBarObserverTest : SysuiTestCase() {
    fun seekBarProgress_enabledAndScrubbing_timeViewsHaveTime() {
        val isEnabled = true
        val isScrubbing = true
        val data = SeekBarViewModel.Progress(isEnabled, true, true, isScrubbing, 3000, 120000)
        val data = SeekBarViewModel.Progress(isEnabled, true, true, isScrubbing, 3000, 120000, true)

        observer.onChanged(data)

@@ -199,7 +201,7 @@ class SeekBarObserverTest : SysuiTestCase() {
    fun seekBarProgress_disabledAndScrubbing_timeViewsEmpty() {
        val isEnabled = false
        val isScrubbing = true
        val data = SeekBarViewModel.Progress(isEnabled, true, true, isScrubbing, 3000, 120000)
        val data = SeekBarViewModel.Progress(isEnabled, true, true, isScrubbing, 3000, 120000, true)

        observer.onChanged(data)

@@ -211,7 +213,7 @@ class SeekBarObserverTest : SysuiTestCase() {
    fun seekBarProgress_enabledAndNotScrubbing_timeViewsEmpty() {
        val isEnabled = true
        val isScrubbing = false
        val data = SeekBarViewModel.Progress(isEnabled, true, true, isScrubbing, 3000, 120000)
        val data = SeekBarViewModel.Progress(isEnabled, true, true, isScrubbing, 3000, 120000, true)

        observer.onChanged(data)

@@ -221,8 +223,8 @@ class SeekBarObserverTest : SysuiTestCase() {

    @Test
    fun seekBarJumpAnimation() {
        val data0 = SeekBarViewModel.Progress(true, true, true, false, 4000, 120000)
        val data1 = SeekBarViewModel.Progress(true, true, true, false, 10, 120000)
        val data0 = SeekBarViewModel.Progress(true, true, true, false, 4000, 120000, true)
        val data1 = SeekBarViewModel.Progress(true, true, true, false, 10, 120000, true)

        // Set initial position of progress bar
        observer.onChanged(data0)
@@ -241,7 +243,7 @@ class SeekBarObserverTest : SysuiTestCase() {
        observer.animationEnabled = false
        val isPlaying = true
        val isScrubbing = false
        val data = SeekBarViewModel.Progress(true, true, isPlaying, isScrubbing, 3000, 120000)
        val data = SeekBarViewModel.Progress(true, true, isPlaying, isScrubbing, 3000, 120000, true)
        observer.onChanged(data)

        // THEN progress drawable does not animate