Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package test_track
- import io.reactivex.Observable
- import io.reactivex.functions.BiFunction
- import io.reactivex.subjects.BehaviorSubject
- import java.util.concurrent.TimeUnit
- data class Track(
- val name: String
- )
- class Player(firstTrack: Track) {
- private val _currentTrack: BehaviorSubject<Track> = BehaviorSubject.createDefault(firstTrack)
- val currentTrack: Observable<Track> get() = _currentTrack
- private val time = Observable.interval(1000, TimeUnit.MILLISECONDS)
- fun startPlaying(tracks: Observable<Track>) {
- Observable.zip(tracks, time, BiFunction { track: Track, _: Long ->
- return@BiFunction track
- })
- .subscribe({ track ->
- _currentTrack.onNext(track)
- }, {})
- }
- fun changeCurrentTrackName(to: String) {
- _currentTrack.onNext(_currentTrack.value.copy(name = to))
- }
- }
- fun main(args: Array<String>) {
- val tracks: Observable<Track> = Observable.just(
- Track(name = "Name1"),
- Track(name = "Name2"),
- Track(name = "Name3"),
- Track(name = "Name4")
- )
- val player = Player(Track("Name0"))
- player.currentTrack
- .subscribe {
- println(it)
- }
- player.startPlaying(tracks)
- Thread.sleep(500)
- player.changeCurrentTrackName("Name5")
- Thread.sleep(5000)
- }
Add Comment
Please, Sign In to add comment