Guest User

Untitled

a guest
Jan 15th, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.35 KB | None | 0 0
  1. package test_track
  2.  
  3. import io.reactivex.Observable
  4. import io.reactivex.functions.BiFunction
  5. import io.reactivex.subjects.BehaviorSubject
  6. import java.util.concurrent.TimeUnit
  7.  
  8. data class Track(
  9. val name: String
  10. )
  11.  
  12. class Player(firstTrack: Track) {
  13.  
  14. private val _currentTrack: BehaviorSubject<Track> = BehaviorSubject.createDefault(firstTrack)
  15. val currentTrack: Observable<Track> get() = _currentTrack
  16.  
  17. private val time = Observable.interval(1000, TimeUnit.MILLISECONDS)
  18.  
  19. fun startPlaying(tracks: Observable<Track>) {
  20. Observable.zip(tracks, time, BiFunction { track: Track, _: Long ->
  21. return@BiFunction track
  22. })
  23. .subscribe({ track ->
  24. _currentTrack.onNext(track)
  25. }, {})
  26. }
  27.  
  28. fun changeCurrentTrackName(to: String) {
  29. _currentTrack.onNext(_currentTrack.value.copy(name = to))
  30. }
  31.  
  32. }
  33.  
  34. fun main(args: Array<String>) {
  35. val tracks: Observable<Track> = Observable.just(
  36. Track(name = "Name1"),
  37. Track(name = "Name2"),
  38. Track(name = "Name3"),
  39. Track(name = "Name4")
  40. )
  41.  
  42. val player = Player(Track("Name0"))
  43. player.currentTrack
  44. .subscribe {
  45. println(it)
  46. }
  47.  
  48. player.startPlaying(tracks)
  49. Thread.sleep(500)
  50. player.changeCurrentTrackName("Name5")
  51. Thread.sleep(5000)
  52. }
Add Comment
Please, Sign In to add comment