diff options
| author | 2020-04-10 18:47:47 -0400 | |
|---|---|---|
| committer | 2020-04-10 18:51:36 -0400 | |
| commit | 0cf2bc2f53705f493254da4f058a1e5b78842381 (patch) | |
| tree | baea99ea4db72fe9276e478f9336c00641cdf959 | |
| parent | bb5e6b49a71775dd86ce938aef2083a93799939e (diff) | |
LiveData#getValue can return null
The documentation recommends not calling this method on a background
thread. The problem is that it returns null until the value is set, and
setting the value requires waiting for the set-task to run on the main
thread.
Fixes: 153697933
Test: seek bar is still working
Change-Id: Idbb02e1c9baafd1676f67c1a5408107ed84c41d2
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/media/SeekBarViewModel.kt | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/media/SeekBarViewModel.kt b/packages/SystemUI/src/com/android/systemui/media/SeekBarViewModel.kt index cf8f26841cf9..dd83e42cde2d 100644 --- a/packages/SystemUI/src/com/android/systemui/media/SeekBarViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/media/SeekBarViewModel.kt @@ -34,8 +34,13 @@ private const val POSITION_UPDATE_INTERVAL_MILLIS = 100L /** ViewModel for seek bar in QS media player. */ class SeekBarViewModel(val bgExecutor: DelayableExecutor) { + private var _data = Progress(false, false, null, null, null) + set(value) { + field = value + _progress.postValue(value) + } private val _progress = MutableLiveData<Progress>().apply { - postValue(Progress(false, false, null, null, null)) + postValue(_data) } val progress: LiveData<Progress> get() = _progress @@ -73,7 +78,7 @@ class SeekBarViewModel(val bgExecutor: DelayableExecutor) { val position = playbackState?.position?.toInt() val duration = mediaMetadata?.getLong(MediaMetadata.METADATA_KEY_DURATION)?.toInt() val enabled = if (duration != null && duration <= 0) false else true - _progress.postValue(Progress(enabled, seekAvailable, position, duration, color)) + _data = Progress(enabled, seekAvailable, position, duration, color) if (shouldPollPlaybackPosition()) { checkPlaybackPosition() } @@ -82,8 +87,8 @@ class SeekBarViewModel(val bgExecutor: DelayableExecutor) { @AnyThread private fun checkPlaybackPosition(): Runnable = bgExecutor.executeDelayed({ val currentPosition = controller?.playbackState?.position?.toInt() - if (currentPosition != null && _progress.value!!.elapsedTime != currentPosition) { - _progress.postValue(_progress.value!!.copy(elapsedTime = currentPosition)) + if (currentPosition != null && _data.elapsedTime != currentPosition) { + _data = _data.copy(elapsedTime = currentPosition) } if (shouldPollPlaybackPosition()) { checkPlaybackPosition() |