diff options
3 files changed, 39 insertions, 14 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/media/SeekBarObserver.kt b/packages/SystemUI/src/com/android/systemui/media/SeekBarObserver.kt index e5b41b1a6771..b76f6bb305fe 100644 --- a/packages/SystemUI/src/com/android/systemui/media/SeekBarObserver.kt +++ b/packages/SystemUI/src/com/android/systemui/media/SeekBarObserver.kt @@ -78,7 +78,7 @@ class SeekBarObserver( holder.seekBar.thumb.alpha = if (data.seekAvailable) 255 else 0 holder.seekBar.isEnabled = data.seekAvailable - progressDrawable?.animate = data.playing + progressDrawable?.animate = data.playing && !data.scrubbing if (holder.seekBar.maxHeight != seekBarEnabledMaxHeight) { holder.seekBar.maxHeight = seekBarEnabledMaxHeight diff --git a/packages/SystemUI/src/com/android/systemui/media/SeekBarViewModel.kt b/packages/SystemUI/src/com/android/systemui/media/SeekBarViewModel.kt index 49cd16175f0a..a9a8fd1c0e9d 100644 --- a/packages/SystemUI/src/com/android/systemui/media/SeekBarViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/media/SeekBarViewModel.kt @@ -74,7 +74,7 @@ private fun PlaybackState.computePosition(duration: Long): Long { class SeekBarViewModel @Inject constructor( @Background private val bgExecutor: RepeatableExecutor ) { - private var _data = Progress(false, false, false, null, 0) + private var _data = Progress(false, false, false, false, null, 0) set(value) { field = value _progress.postValue(value) @@ -127,6 +127,7 @@ class SeekBarViewModel @Inject constructor( if (field != value) { field = value checkIfPollingNeeded() + _data = _data.copy(scrubbing = value) } } @@ -200,7 +201,7 @@ class SeekBarViewModel @Inject constructor( val enabled = if (playbackState == null || playbackState?.getState() == PlaybackState.STATE_NONE || (duration <= 0)) false else true - _data = Progress(enabled, seekAvailable, playing, position, duration) + _data = Progress(enabled, seekAvailable, playing, scrubbing, position, duration) checkIfPollingNeeded() } @@ -418,6 +419,7 @@ class SeekBarViewModel @Inject constructor( val enabled: Boolean, val seekAvailable: Boolean, val playing: Boolean, + val scrubbing: Boolean, val elapsedTime: Int?, val duration: Int ) diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/SeekBarObserverTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/SeekBarObserverTest.kt index 99901a0cd0b3..e719e841d9a0 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/SeekBarObserverTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/SeekBarObserverTest.kt @@ -53,7 +53,6 @@ class SeekBarObserverTest : SysuiTestCase() { @Before fun setUp() { - context.orCreateTestableResources .addOverride(R.dimen.qs_media_enabled_seekbar_height, enabledHeight) context.orCreateTestableResources @@ -72,7 +71,7 @@ class SeekBarObserverTest : SysuiTestCase() { fun seekBarGone() { // WHEN seek bar is disabled val isEnabled = false - val data = SeekBarViewModel.Progress(isEnabled, false, false, null, 0) + val data = SeekBarViewModel.Progress(isEnabled, false, false, false, null, 0) observer.onChanged(data) // THEN seek bar shows just a thin line with no text assertThat(seekBarView.isEnabled()).isFalse() @@ -85,7 +84,7 @@ class SeekBarObserverTest : SysuiTestCase() { fun seekBarVisible() { // WHEN seek bar is enabled val isEnabled = true - val data = SeekBarViewModel.Progress(isEnabled, true, false, 3000, 12000) + val data = SeekBarViewModel.Progress(isEnabled, true, false, false, 3000, 12000) observer.onChanged(data) // THEN seek bar is visible and thick assertThat(seekBarView.getVisibility()).isEqualTo(View.VISIBLE) @@ -95,7 +94,7 @@ class SeekBarObserverTest : SysuiTestCase() { @Test fun seekBarProgress() { // WHEN part of the track has been played - val data = SeekBarViewModel.Progress(true, true, true, 3000, 120000) + val data = SeekBarViewModel.Progress(true, true, true, false, 3000, 120000) observer.onChanged(data) // THEN seek bar shows the progress assertThat(seekBarView.progress).isEqualTo(3000) @@ -109,7 +108,7 @@ class SeekBarObserverTest : SysuiTestCase() { fun seekBarDisabledWhenSeekNotAvailable() { // WHEN seek is not available val isSeekAvailable = false - val data = SeekBarViewModel.Progress(true, isSeekAvailable, false, 3000, 120000) + val data = SeekBarViewModel.Progress(true, isSeekAvailable, false, false, 3000, 120000) observer.onChanged(data) // THEN seek bar is not enabled assertThat(seekBarView.isEnabled()).isFalse() @@ -119,27 +118,51 @@ class SeekBarObserverTest : SysuiTestCase() { fun seekBarEnabledWhenSeekNotAvailable() { // WHEN seek is available val isSeekAvailable = true - val data = SeekBarViewModel.Progress(true, isSeekAvailable, false, 3000, 120000) + val data = SeekBarViewModel.Progress(true, isSeekAvailable, false, false, 3000, 120000) observer.onChanged(data) // THEN seek bar is not enabled assertThat(seekBarView.isEnabled()).isTrue() } @Test - fun seekBarPlaying() { + fun seekBarPlayingNotScrubbing() { // WHEN playing val isPlaying = true - val data = SeekBarViewModel.Progress(true, true, isPlaying, 3000, 120000) + val isScrubbing = false + val data = SeekBarViewModel.Progress(true, true, isPlaying, isScrubbing, 3000, 120000) observer.onChanged(data) // THEN progress drawable is animating verify(mockSquigglyProgress).animate = true } @Test - fun seekBarNotPlaying() { - // WHEN not playing + fun seekBarNotPlayingNotScrubbing() { + // WHEN not playing & not scrubbing + val isPlaying = false + val isScrubbing = false + val data = SeekBarViewModel.Progress(true, true, isPlaying, isScrubbing, 3000, 120000) + observer.onChanged(data) + // THEN progress drawable is not animating + verify(mockSquigglyProgress).animate = false + } + + @Test + fun seekBarPlayingScrubbing() { + // WHEN playing & scrubbing + val isPlaying = true + val isScrubbing = true + val data = SeekBarViewModel.Progress(true, true, isPlaying, isScrubbing, 3000, 120000) + observer.onChanged(data) + // THEN progress drawable is not animating + verify(mockSquigglyProgress).animate = false + } + + @Test + fun seekBarNotPlayingScrubbing() { + // WHEN playing & scrubbing val isPlaying = false - val data = SeekBarViewModel.Progress(true, true, isPlaying, 3000, 120000) + val isScrubbing = true + val data = SeekBarViewModel.Progress(true, true, isPlaying, isScrubbing, 3000, 120000) observer.onChanged(data) // THEN progress drawable is not animating verify(mockSquigglyProgress).animate = false |