package Ġb zh . z ely on . music . ui . view . activity Ċ Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Service Connection Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . IB inder Ċ import Ġandroidx . activity . view Models Ċ import Ġandroidx . core . view . View Compat Ċ import Ġandroidx . vect ord raw able . graphics . drawable . Animated Vector Drawable Compat Ċ import Ġb zh . z ely on . lib . extension . Action Fragment Ċ import Ġb zh . z ely on . lib . extension . action Fragment Ċ import Ġb zh . z ely on . lib . extension . getCurrent Fragment Ċ import Ġb zh . z ely on . lib . ui . view . activity . Abs Bottom Navigation Activity Ċ import Ġb zh . z ely on . lib . ui . view . fragment . Abs Fragment Ċ import Ġb zh . z ely on . music . R Ċ import Ġb zh . z ely on . music . ui . view . fragment . main . Library Fragment Ċ import Ġb zh . z ely on . music . ui . view . fragment . main . Playing Fragment Ċ import Ġb zh . z ely on . music . ui . view . fragment . main . Play lists Fragment Ċ import Ġb zh . z ely on . music . ui . view . view model . Main ViewModel Ċ import Ġb zh . z ely on . music . util . Music Content Ċ import Ġb zh . z ely on . music . util . Music Player Ċ import Ġb zh . z ely on . music . util . Music Service Ċ import Ġcom . google . android . material . bottomnavigation . Bottom Navigation View Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ Ċ class ĠMainActivity Ġ: ĠAbs Bottom Navigation Activity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlibrary Fragment Ġ= ĠLibrary Fragment () ĊĠĠĠ Ġprivate Ġval Ġplay lists Fragment Ġ= ĠPlay lists Fragment () ĊĠĠĠ Ġprivate Ġval Ġplaying Fragment Ġ= ĠPlay ing Fragment () ĊĊĠĠĠ Ġprivate Ġvar Ġcurrent FAB State : ĠMain ViewModel . FAB State ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġmain ViewModel : ĠMain ViewModel Ġby Ġview Models () ĊĊĠĠĠ Ġprivate Ġval Ġservice Connection Ġ= Ġobject Ġ: ĠService Connection Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Service Connected ( name : ĠComponent Name ?, Ġservice : ĠI Binder ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( service Ġis ĠMusic Service . Music Binder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . service . update Broadcast Met adat as Not ifs () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Service Disconnected ( name : ĠComponent Name ?) Ġ{} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmusic Service Intent Ġ= ĠIntent ( this , ĠMusic Service :: class . java ) ĊĠĠĠĠĠĠĠ Ġstart Service ( music Service Intent ) ĊĠĠĠĠĠĠĠ Ġbind Service ( music Service Intent , Ġservice Connection , ĠContext . BIND _ AUTO _ CREATE ) ĊĊĠĠĠĠĠĠĠ ĠView Compat . setOn Apply Window Insets Listener ( activity _ main _ root ) Ġ{ Ġ_, Ġin sets Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin sets . consume System Window Insets () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠMusic Player . main ViewModel Ġ= Ġmain ViewModel ĊĠĠĠĠĠĠĠ Ġmain ViewModel . current Fragment . observe ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate NavigationBar ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmain ViewModel . fab State . observe ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate FAB State ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsupport FragmentManager . add On Back Stack Changed Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . current Fragment . value Ġ= ĠgetCurrent Fragment () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmain ViewModel . is Playing . value Ġ= ĠMusic Player . is Playing ĊĠĠĠĠĠĠĠ Ġmain ViewModel . has Playing List . value Ġ= ĠMusic Player . is Playing ĊĊĠĠĠĠĠĠĠ Ġactivity _ main _ fab . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( getCurrent Fragment () Ġ== Ġplaying Fragment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMusic Player . play Or Pause () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Fragment ( playing Fragment , ĠAction Fragment . Add , Ġanim From Bottom Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġun bind Service ( service Connection ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Layout Id () Ġ= ĠR . layout . activity _ main ĊĊĠĠĠ Ġoverride Ġfun Ġget Fragment Container Id () Ġ= ĠR . id . activity _ main _ container ĊĊĠĠĠ Ġoverride Ġfun Ġhandle Intent ( intent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . handle Intent ( intent ) ĊĠĠĠĠĠĠĠ Ġintent . data ?. let Ġ{ Ġuri Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMusic Content . getM us ics From Uri ( this , Ġuri )?. let Ġ{ Ġmus ics Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMusic Player . play M us ics ( mus ics ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Bottom Navigation View (): ĠBottom Navigation View Ġ= Ġactivity _ main _ bottomnavigation view ĊĊĠĠĠ Ġoverride Ġfun Ġget Selected Navigation ItemId () Ġ= ĠR . id . activity _ main _ library ĊĊĠĠĠ Ġoverride Ġfun Ġget Navigation Menu Id () Ġ= ĠR . menu . activity _ main ĊĊĠĠĠ Ġoverride Ġfun Ġget Navigation Items () Ġ= ĠlistOf ( Navigation Item ( R . id . activity _ main _ library , Ġlibrary Fragment ), ĠNavigation Item ( R . id . activity _ main _ play lists , Ġplay lists Fragment )) ĊĊĠĠĠ Ġprivate Ġfun Ġupdate NavigationBar ( fragment : ĠAbs Fragment ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity _ main _ bottomnavigation view . animate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. translation Y ( if Ġ( fragment Ġin ĠlistOf ( library Fragment , Ġplay lists Fragment )) Ġ 0 F Ġelse Ġactivity _ main _ bottomnavigation view . height . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( 4 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate FAB State ( fab State : ĠMain ViewModel . FAB State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( current FAB State Ġ!= Ġfab State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent FAB State Ġ= Ġfab State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current FAB State Ġ== ĠMain ViewModel . FAB State . HIDE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity _ main _ fab . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity _ main _ fab . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( current FAB State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMain ViewModel . FAB State . ANIM _ PLAY Ġ-> ĠR . drawable . anim _ playing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMain ViewModel . FAB State . ANIM _ PAUSE Ġ-> ĠR . drawable . anim _ pause ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMain ViewModel . FAB State . ICON _ PLAY Ġ-> ĠR . drawable . anim _ play _ to _ pause ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMain ViewModel . FAB State . ICON _ PAUSE Ġ-> ĠR . drawable . anim _ pause _ to _ play ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. let Ġ{ Ġres Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanim Ġ= ĠAnimated Vector Drawable Compat . create ( this , Ġres Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity _ main _ fab . setImage Drawable ( anim ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim ?. start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }