diff options
| author | 2020-10-16 12:58:24 -0400 | |
|---|---|---|
| committer | 2020-10-21 15:12:31 +0000 | |
| commit | 8c85832c915e50a57c86d127235d857aa80380ed (patch) | |
| tree | 3573e0c934b0e3284b19cefc730d0e208d2d59de | |
| parent | 7ce178e6cb68d8c5b625ec7e01e8b4df30f2c6e2 (diff) | |
Handle possible null PlaybackState
Fixes: 170706598
Test: atest SeekBarViewModelTest
Change-Id: I78428dd2d48658878957a7b58948a73d3f6bfaad
(cherry picked from commit f06e4ffffea3d94c1611af51124cc898306344fe)
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/media/SeekBarViewModel.kt | 4 | ||||
| -rw-r--r-- | packages/SystemUI/tests/src/com/android/systemui/media/SeekBarViewModelTest.kt | 17 |
2 files changed, 19 insertions, 2 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/media/SeekBarViewModel.kt b/packages/SystemUI/src/com/android/systemui/media/SeekBarViewModel.kt index 9e326aaec3c1..c8244589ce44 100644 --- a/packages/SystemUI/src/com/android/systemui/media/SeekBarViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/media/SeekBarViewModel.kt @@ -91,9 +91,9 @@ class SeekBarViewModel @Inject constructor(@Background private val bgExecutor: R } private var playbackState: PlaybackState? = null private var callback = object : MediaController.Callback() { - override fun onPlaybackStateChanged(state: PlaybackState) { + override fun onPlaybackStateChanged(state: PlaybackState?) { playbackState = state - if (PlaybackState.STATE_NONE.equals(playbackState)) { + if (playbackState == null || PlaybackState.STATE_NONE.equals(playbackState)) { clearController() } else { checkIfPollingNeeded() diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/SeekBarViewModelTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/SeekBarViewModelTest.kt index b81ab74458ce..1f9862c07a4c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/SeekBarViewModelTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/SeekBarViewModelTest.kt @@ -654,4 +654,21 @@ public class SeekBarViewModelTest : SysuiTestCase() { fakeExecutor.runAllReady() verify(mockController).unregisterCallback(any()) } + + @Test + fun nullPlaybackStateUnregistersCallback() { + viewModel.updateController(mockController) + val captor = ArgumentCaptor.forClass(MediaController.Callback::class.java) + verify(mockController).registerCallback(captor.capture()) + val callback = captor.value + // WHEN the callback receives a null state + callback.onPlaybackStateChanged(null) + with(fakeExecutor) { + advanceClockToNext() + runAllReady() + } + // THEN we unregister callback (as a result of clearing the controller) + fakeExecutor.runAllReady() + verify(mockController).unregisterCallback(any()) + } } |