package Ġcom . erm . artists . ui . details Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . widget . ImageView Ċ import Ġandroidx . activity . view Models Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . squareup . pic asso . Pic asso Ċ import Ġkotlinx . android . synt hetic . main . details _ activity .* Ċ import Ġcom . erm . artists . R Ċ import Ġcom . erm . artists . constants . Bundle Key Ċ import Ġcom . erm . artists . data . model . relation . Event With Artist Ċ import Ġcom . erm . artists . extensions . Orientation Ċ import Ġcom . erm . artists . extensions . circular Re veal Ċ import Ġcom . erm . artists . extensions . g one Ċ import Ġcom . erm . artists . extensions . visible Ċ import Ġcom . erm . artists . ui . base . Base Activity Ċ import Ġcom . erm . artists . ui . events . Events Adapter Ċ import Ġcom . erm . artists . util . Intent Util ĊĊ Ċ /** Ċ Ġ* ĠSince Ġthe ĠArtist Ġis Ġfound Ġat Ġthe ĠMainActivity , Ġthis Ġview Ġmodel Ġwill Ġreturn Ġthe Ġstored Ġartist , Ġbut Ġalways Ġsearch Ċ Ġ* Ġfor Ġthe Ġlatest Ġevents Ċ Ġ* Ġ@ property ĠviewModel ĠDetails Activity ViewModel Ċ Ġ*/ Ċ class ĠDetails Activity Ġ: ĠBase Activity (), ĠEvents Adapter . Artist Events Listener Ġ{ ĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby Ġview Models < Details Activity ViewModel Impl > Ġ{ Ġfactory Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . details _ activity ) ĊĠĠĠĠĠĠĠ Ġsetup Observer s () ĊĠĠĠĠĠĠĠ Ġ// if Ġinstance Ġstate Ġwas Ġsaved , Ġuse Ġit Ġover Ġthe Ġintent Ġbundle ĊĠĠĠĠĠĠĠ ĠsetCurrent State ( savedInstanceState Ġ?: Ġintent . extras ) ĊĠĠĠĠĠĠĠ Ġsetup UI () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetCurrent State ( bundle : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . artist Name . value Ġ= Ġbundle ?. getString ( Bundle Key . AR TI ST _ NAME . name , Ġnull ) ĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel . artist Name . value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Details ĠActivity Ġrequires ĠArtist ĠName ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel . get Artist And Event Details ( viewModel . artist Name . value !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup UI () Ġ{ ĊĠĠĠĠĠĠĠ Ġtoolbar . title Ġ= ĠviewModel . artist Name . value ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) ĊĊĠĠĠĠĠĠĠ Ġfab _ favorite . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . toggle Artist Favorite Value () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= Ġmenu Inflater ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . details , Ġmenu ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġreturn Ġtrue Ġso Ġthat Ġthe Ġmain _ page _ menu Ġpop Ġup Ġis Ġopened ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Menu Opened ( feature Id : ĠInt , Ġmenu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu ?. find Item ( R . id . action _ menu _ favorite _ or _ un favorite )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . title Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . artist F avor ited . value !! ) ĠgetString ( R . string . un favorite ) Ġelse ĠgetString ( R . string . favorite ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem ?. itemId Ġ== ĠR . id . action _ menu _ visit _ website Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent Util . open Web Page From Url ( this , ĠviewModel . artist Web page . value !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem ?. itemId Ġ== ĠR . id . action _ menu _ favorite _ or _ un favorite Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . toggle Artist Favorite Value () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem ?. itemId Ġ== Ġandroid . R . id . home Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Back Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Save InstanceState ( savedInstanceState : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsavedInstanceState . putString ( Bundle Key . AR TI ST _ NAME . name , ĠviewModel . artist Name . value !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Observer s () Ġ{ ĊĊĠĠĠĠĠĠĠ ĠviewModel . artist F avor ited . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfab _ favorite . setImage Resource ( R . drawable . ic _ favorite _ light ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfab _ favorite . setImage Resource ( R . drawable . ic _ non _ favorite _ light ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . artist Image . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPic asso . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( backdrop ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . artist Event Details . observe ( this , ĠObserver Ġ{ Ġartist Events Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( artist Events . is Successful ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( artist Events . has Data () Ġ&& Ġartist Events . getData () !!. isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv _ events . layout Manager Ġ= ĠLinearLayoutManager ( this @ Details Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv _ events . adapter Ġ= ĠEvents Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġartist Events . getData () !!. to Mutable List (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Details Activity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv _ events . circular Re veal ( listOf ( Orientation . CENTER )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ no _ events . g one () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ no _ events . visible () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! artist Events . isLoading ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ no _ events . visible () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Artist Event Clicked ( artist Event : ĠEvent With Artist ) Ġ{ ĊĠĠĠĠĠĠĠ Ġartist Event . artist Event ?. url ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent Util . open Web Page From Url ( this , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Line up Artist Clicked ( artist Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdetails Intent Ġ= ĠIntent ( this , ĠDetails Activity :: class . java ) ĊĠĠĠĠĠĠĠ Ġdetails Intent . putExtra ( Bundle Key . AR TI ST _ NAME . name , Ġartist Name ) ĊĠĠĠĠĠĠĠ ĠstartActivity ( details Intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtoggle Favorite Status For Event ( event With Artist : ĠEvent With Artist , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġevent With Artist . artist Event ?. id ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event With Artist . artist Event ?. favorite Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . un favorite Event ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . favorite Event ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshare Event ( artist Event : ĠEvent With Artist ) Ġ{ ĊĠĠĠĠĠĠĠ Ġartist Event . artist Event ?. url ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent Util . share String ( this , Ġit , ĠR . string . share ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Artist Image Clicked ( artist Event : ĠEvent With Artist , ĠimageView : ĠImageView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// no Ġop ĊĠĠĠ Ġ} Ċ }