Handle possible null PlaybackState

Fixes: 170706598
Test: atest SeekBarViewModelTest
Change-Id: I78428dd2d48658878957a7b58948a73d3f6bfaad
(cherry picked from commit f06e4ffffe)
This commit is contained in:
Beth Thibodeau
2020-10-16 12:58:24 -04:00
parent 7ce178e6cb
commit 8c85832c91
2 changed files with 19 additions and 2 deletions

View File

@@ -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()

View File

@@ -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())
}
}