package Ġcom . ree e chart . ric om usic . activities Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . net . Uri Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Toast Ċ import Ġcom . google . android . ex op layer 2 . Default Load Control Ċ import Ġcom . google . android . ex op layer 2 . Default Render ers Factory Ċ import Ġcom . google . android . ex op layer 2 . Exo Player Factory Ċ import Ġcom . google . android . ex op layer 2 . Simple Exo Player Ċ import Ġcom . google . android . ex op layer 2 . source . Extractor Media Source Ċ import Ġcom . google . android . ex op layer 2 . source . Media Source Ċ import Ġcom . google . android . ex op layer 2 . track selection . Default Track Selector Ċ import Ġcom . google . android . ex op layer 2 . upstream . Default DataSource Factory Ċ import Ġcom . google . android . ex op layer 2 . util . Util Ċ import Ġcom . ree e chart . ric om usic . R Ċ import Ġcom . ree e chart . ric om usic . models . History Ċ import Ġcom . ree e chart . ric om usic . network . ric om m ender . R icom m ender ApiService Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġkotlinx . android . synt hetic . main . activity _ now _ playing .* Ċ import Ġkotlinx . android . synt hetic . main . component _ music _ player .* Ċ Ċ class ĠNow Playing Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġval ĠDEBUG _ TAG : ĠString Ġ= Ġthis . java Class . simple Name ĊĊĠĠĠ Ġprivate Ġvar Ġdis posable : ĠDis posable ? Ġ= Ġnull ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSAMPLE _ URI Ġ= Ġ" https :// www . sound helix . com / examples / mp 3 / Sound Hel ix - Song - 1 . mp 3 " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠR ICO MM ENDER _ URI Ġ= Ġ" http :// 1 5 7 . 2 3 0 . 2 4 3 . 2 0 4 / music / stream /" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġr icom m ender Api Caller Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠR icom m ender ApiService . create () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmusic Player : ĠSimple Exo Player ĊĠĠĠ Ġprivate Ġvar Ġplayed Music Id : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġplayed Music Rank : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġplayed Music Title : ĠString Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġplayed Music Artist : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ now _ playing ) ĊĊĠĠĠĠĠĠĠ Ġplayed Music Id Ġ= Ġintent . getInt Extra (" music Id ", Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġplayed Music Rank Ġ= Ġintent . getInt Extra (" music Rank ", Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġplayed Music Title Ġ= Ġintent . getString Extra (" music Title ") ĊĠĠĠĠĠĠĠ Ġplayed Music Artist Ġ= Ġintent . getString Extra (" music Artist ") Ċ Ċ // ĠĠĠĠĠĠĠ Ġval Ġplay Music Intent Ġ= ĠIntent ( this , ĠAudio Player Service :: class . java ) Ċ // ĠĠĠĠĠĠĠ ĠUtil . start Foreground Service ( this , Ġplay Music Intent ) ĊĠĠĠĠĠĠĠ Ġadd Music To History () ĊĠĠĠĠĠĠĠ Ġset Music Metadata To View () ĊĊĠĠĠĠĠĠĠ Ġinitialize Player () ĊĊĠĠĠĠĠĠĠ Ġval ĠdataSource Factory Ġ= ĠDefault DataSource Factory ( this , ĠUtil . getUser Agent ( this , ĠgetString ( R . string . app _ name ))) ĊĊĠĠĠĠĠĠĠ Ġval Ġmusic URL Ġ= Ġget Music URL () ĊĠĠĠĠĠĠĠ Ġval Ġmedia Source : ĠMedia Source Ġ= ĠExtract or Media Source . Factory ( dataSource Factory ). create Media Source ( Uri . parse ( music URL )) ĊĊĠĠĠĠĠĠĠ Ġmusic Player . prepare ( media Source ) ĊĠĠĠĠĠĠĠ Ġmusic Player . play When Ready Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġmusic Player View . player Ġ= Ġmusic Player ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( DEBUG _ TAG , Ġ" Now Playing Ġdestroy ") ĊĠĠĠĠĠĠĠ Ġrelease Player () ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinitialize Player () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtrack Selector Ġ= ĠDefault Track Selector () ĊĠĠĠĠĠĠĠ Ġval Ġload Control Ġ= ĠDefault Load Control () ĊĠĠĠĠĠĠĠ Ġval Ġrender ers Factory Ġ= Ġ ĠDefault Render ers Factory ( application Context ) ĊĊĠĠĠĠĠĠĠ Ġmusic Player Ġ= ĠEx o Player Factory . new Simple Instance ( render ers Factory , Ġtrack Selector , Ġload Control ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrelease Player () Ġ{ ĊĠĠĠĠĠĠĠ Ġmusic Player . stop () ĊĠĠĠĠĠĠĠ Ġmusic Player . release () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Music URL (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠR ICO MM ENDER _ URI Ġ+ Ġplayed Music Id . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Music To History () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpreferences : ĠSharedPreferences Ġ= Ġget SharedPreferences ( getString ( R . string . app _ name ), ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠ Ġval Ġusername : ĠString Ġ= Ġpreferences . getString (" username ", Ġ"") ĊĠĠĠĠĠĠĠ Ġval Ġlocation : ĠString Ġ= Ġpreferences . getString (" location ", Ġ""). toLowerCase () ĊĠĠĠĠĠĠĠ Ġval Ġweather : ĠString Ġ= Ġpreferences . getString (" weather ", Ġ""). toLowerCase () ĊĠĠĠĠĠĠĠ Ġval Ġhistory Ġ= ĠHistory ( username , Ġlocation , Ġweather , Ġplayed Music Id , Ġplayed Music Rank ) ĊĠĠĠĠĠĠĠ ĠLog . d ( DEBUG _ TAG , Ġusername ) ĊĠĠĠĠĠĠĠ ĠLog . d ( DEBUG _ TAG , Ġlocation ) ĊĠĠĠĠĠĠĠ ĠLog . d ( DEBUG _ TAG , Ġweather ) ĊĠĠĠĠĠĠĠ ĠLog . d ( DEBUG _ TAG , Ġplayed Music Id . toString ()) ĊĠĠĠĠĠĠĠ ĠLog . d ( DEBUG _ TAG , Ġplayed Music Rank . toString ()) ĊĠĠĠĠĠĠĠ Ġdis posable Ġ= Ġr icom m ender Api Caller . add History ( history ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġresult Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġerror . message , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Music Metadata To View () Ġ{ ĊĠĠĠĠĠĠĠ Ġmusic Title . text Ġ= Ġplayed Music Title ĊĠĠĠĠĠĠĠ Ġmusic Artist . text Ġ= Ġplayed Music Artist ĊĠĠĠĠĠĠĠ Ġmusic Title . isSelected Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġmusic Artist . isSelected Ġ= Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ