package Ġde . dom radio . radio Ċ Ċ import Ġandroid . app . Notification Ċ import Ġandroid . app . Service Ċ import Ġandroid . content . Intent Ċ import Ġandroid . media . MediaPlayer Ċ import Ġandroid . support . v 4 . media . session . Media Session Compat Ċ import Ġandroid . support . v 4 . media . session . Playback State Compat Ċ import Ġandroidx . media . session . Media Button Receiver Ċ import Ġde . dom radio . Dom radio Application Ċ import Ġde . dom radio . use case . Station Info UseCase Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġio . reactivex . subjects . Behavior Subject Ċ import Ġorg . k oin . android . ext . android . inject Ċ import Ġtim ber . log . Tim ber ĊĊ Ċ class ĠRadio Service Ġ: ĠService () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġis Running Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġstate : ĠBehavior Subject < Radio State > Ġ= ĠBehavior Subject . create () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġstation Info Disposable : ĠDis posable ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġstation Info UseCase : ĠStation Info UseCase Ġby Ġinject () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnotification : ĠNotification ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmedia Session : ĠMedia Session Compat ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmedia Player : ĠMedia Player ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfocus Manager : ĠRadio Focus Manager ĊĊĠĠĠ Ġprivate Ġval Ġmedia Session Callback Ġ= Ġobject Ġ: ĠMedia Session Compat . Callback () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Play () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Media Session Compat . Callback Ġon Play () Ġcalled ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfocus Manager . request Audio Focus () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Session . set Playback State ( Radio Media Session . playing Playback State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . onNext ( Radio State . PLAY ING ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Foreground ( Dom radio Application . NOTIFICATION _ ID , Ġnotification ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Media Session Compat . Callback Ġon Stop () Ġcalled ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfocus Manager . ab and on Audio Focus () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Player . stop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Session . set Playback State ( Radio Media Session . stopped Playback State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . onNext ( Radio State . STOP PED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Foreground ( Dom radio Application . NOTIFICATION _ ID , Ġnotification ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Self () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate () ĊĠĠĠĠĠĠĠ Ġis Running Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġfocus Manager Ġ= ĠRadio Focus Manager ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Button Receiver . build Media Button Pending Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlay back State Compat . ACTION _ STOP ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). send () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfocus Manager . request Audio Focus () ĊĠĠĠĠĠĠĠ Ġmedia Session Ġ= ĠRadio Media Session . build ( this , Ġmedia Session Callback ) ĊĠĠĠĠĠĠĠ Ġmedia Player Ġ= ĠRadio MediaPlayer . build ( this , Ġmedia Session ) ĊĠĠĠĠĠĠĠ Ġnotification Ġ= ĠRadio Media Notification . build ( this , Ġmedia Session ) ĊĊĠĠĠĠĠĠĠ Ġstart Foreground ( Dom radio Application . NOTIFICATION _ ID , Ġnotification ) ĊĊĠĠĠĠĠĠĠ Ġmedia Session . set Playback State ( Radio Media Session . playing Playback State ) ĊĠĠĠĠĠĠĠ Ġstate . onNext ( Radio State . PLAY ING ) ĊĊĠĠĠĠĠĠĠ Ġstation Info Disposable ?. dispose () ĊĠĠĠĠĠĠĠ Ġstation Info Disposable Ġ= Ġstation Info UseCase . poll Station Information (). subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRadio Media Notification . update Notification ( this , Ġmedia Session , Ġit ) ĊĠĠĠĠĠĠĠ Ġ}, Ġ{ ĠTim ber . e ( it ) Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġstation Info Disposable ?. dispose () ĊĠĠĠĠĠĠĠ Ġfocus Manager . ab and on Audio Focus () ĊĠĠĠĠĠĠĠ Ġmedia Player . release () ĊĠĠĠĠĠĠĠ Ġmedia Session . release () ĊĠĠĠĠĠĠĠ Ġis Running Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ( intent : ĠIntent ?): ĠRadio Service Binder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠRadio Service Binder () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Media Session () Ġ= Ġmedia Session ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart Command ( intent : ĠIntent , Ġflags : ĠInt , Ġstart Id : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ ĠMedia Button Receiver . handle Intent ( media Session , Ġintent ) ĊĠĠĠĠĠĠĠ Ġreturn ĠSTART _ STICK Y ĊĠĠĠ Ġ} Ċ Ċ }