@@ -8,6 +8,7 @@ import android.support.v4.media.MediaMetadataCompat
8
8
import android.support.v4.media.session.MediaControllerCompat
9
9
import android.support.v4.media.session.PlaybackStateCompat
10
10
import android.text.format.DateUtils
11
+ import android.util.Log
11
12
import android.view.LayoutInflater
12
13
import android.view.View
13
14
import android.view.ViewGroup
@@ -17,6 +18,7 @@ import androidx.fragment.app.Fragment
17
18
import androidx.lifecycle.ViewModelProviders
18
19
import com.koalatea.sedaily.R
19
20
import io.reactivex.android.schedulers.AndroidSchedulers
21
+ import io.reactivex.disposables.CompositeDisposable
20
22
import io.reactivex.observers.DisposableObserver
21
23
import io.reactivex.schedulers.Schedulers
22
24
import kotlinx.android.synthetic.main.fragment_playback_controls.view.*
@@ -33,9 +35,7 @@ class PlaybarFragment: Fragment() {
33
35
private var mScheduleFuture: ScheduledFuture <* >? = null
34
36
private val mExecutorService = Executors .newSingleThreadScheduledExecutor()
35
37
private val mUpdateProgressTask = { updateProgress() }
36
- private var speedSubscription: DisposableObserver <Int >? = null
37
- private var mediaItemSubscription: DisposableObserver <MediaMetadataCompat >? = null
38
- private var playbackStateSub: DisposableObserver <PlaybackStateCompat >? = null
38
+ private var composeDispose: CompositeDisposable = CompositeDisposable ()
39
39
40
40
// @TODO: Change to binding
41
41
private var rootView: View ? = null
@@ -44,6 +44,21 @@ class PlaybarFragment: Fragment() {
44
44
savedInstanceState : Bundle ? ): View ? {
45
45
rootView = inflater.inflate(R .layout.fragment_playback_controls, container, false )
46
46
47
+ initDisplay()
48
+
49
+ return rootView
50
+ }
51
+
52
+ override fun onStart () {
53
+ super .onStart()
54
+
55
+ initListeners()
56
+ if (rootView != null ) {
57
+ initDisplay()
58
+ }
59
+ }
60
+
61
+ fun initDisplay () {
47
62
playbarViewModel = ViewModelProviders
48
63
.of(this )
49
64
.get(PlaybarViewModel ::class .java)
@@ -87,11 +102,14 @@ class PlaybarFragment: Fragment() {
87
102
setUpMediaChangeSubscription()
88
103
setupPlaybackStateSub()
89
104
90
- return rootView
105
+ val metaData = PodcastSessionStateManager
106
+ .getInstance().getMediaMetaData()
107
+ if (metaData != null ) {
108
+ updateWithMeta(metaData)
109
+ }
91
110
}
92
111
93
- override fun onStart () {
94
- super .onStart()
112
+ fun initListeners () {
95
113
val currentPlayTime = PodcastSessionStateManager .getInstance().currentProgress
96
114
mLastPlaybackState = PodcastSessionStateManager .getInstance().lastPlaybackState
97
115
@@ -101,26 +119,17 @@ class PlaybarFragment: Fragment() {
101
119
rootView?.startText?.text = DateUtils .formatElapsedTime(currentPlayTime / 1000 )
102
120
setSpeedTextView()
103
121
104
- speedSubscription ?.isDisposed?.run {
122
+ composeDispose ?.isDisposed?.run {
105
123
setUpSpeedSubscription()
106
- }
107
-
108
- mediaItemSubscription?.isDisposed?.run {
109
124
setUpMediaChangeSubscription()
110
- }
111
-
112
- playbackStateSub?.isDisposed?.run {
113
125
setupPlaybackStateSub()
114
126
}
115
127
}
116
128
117
129
override fun onStop () {
118
130
super .onStop()
119
131
120
- // @TODO: Use composite disposable - See Github Arch example
121
- speedSubscription?.dispose()
122
- mediaItemSubscription?.dispose()
123
- playbackStateSub?.dispose()
132
+ composeDispose.clear()
124
133
125
134
stopSeekbarUpdate()
126
135
}
@@ -256,7 +265,7 @@ class PlaybarFragment: Fragment() {
256
265
}
257
266
258
267
private fun setUpSpeedSubscription () {
259
- speedSubscription = object : DisposableObserver <Int >() {
268
+ val speedSubscription = object : DisposableObserver <Int >() {
260
269
override fun onError (e : Throwable ) {}
261
270
262
271
override fun onComplete () {}
@@ -266,6 +275,8 @@ class PlaybarFragment: Fragment() {
266
275
}
267
276
}
268
277
278
+ composeDispose.addAll(speedSubscription)
279
+
269
280
PodcastSessionStateManager
270
281
.getInstance()
271
282
.speedChanges
@@ -275,7 +286,7 @@ class PlaybarFragment: Fragment() {
275
286
}
276
287
277
288
private fun setupPlaybackStateSub () {
278
- playbackStateSub = object : DisposableObserver <PlaybackStateCompat >() {
289
+ val playbackStateSub = object : DisposableObserver <PlaybackStateCompat >() {
279
290
override fun onError (e : Throwable ) {}
280
291
281
292
override fun onComplete () {}
@@ -285,6 +296,8 @@ class PlaybarFragment: Fragment() {
285
296
}
286
297
}
287
298
299
+ composeDispose.addAll(playbackStateSub)
300
+
288
301
PodcastSessionStateManager
289
302
.getInstance()
290
303
.playbackStateChanges
@@ -294,7 +307,7 @@ class PlaybarFragment: Fragment() {
294
307
}
295
308
296
309
private fun setUpMediaChangeSubscription () {
297
- mediaItemSubscription = object : DisposableObserver <MediaMetadataCompat >() {
310
+ val mediaItemSubscription = object : DisposableObserver <MediaMetadataCompat >() {
298
311
override fun onNext (mediaMetadataCompat : MediaMetadataCompat ) {
299
312
updateDuration(mediaMetadataCompat)
300
313
updateWithMeta(mediaMetadataCompat)
@@ -309,6 +322,8 @@ class PlaybarFragment: Fragment() {
309
322
}
310
323
}
311
324
325
+ composeDispose.addAll(mediaItemSubscription)
326
+
312
327
PodcastSessionStateManager
313
328
.getInstance()
314
329
.metadataChanges
@@ -327,7 +342,7 @@ class PlaybarFragment: Fragment() {
327
342
328
343
private fun setSpeedText () {
329
344
val currentSpeed = setSpeedTextView()
330
-
345
+ Log .v( " keithtest " , currentSpeed.toString());
331
346
if (this .activity == null ) return
332
347
// @TODO: Make reactive
333
348
playbarViewModel?.sendSpeedChangeIntent(currentSpeed, this .activity as Activity )
0 commit comments