package Ġcom . ry an rv ld o . mov iec atalog ue . ui . detail č č import Ġandroid . content . Intent č import Ġandroid . net . Uri č import Ġandroid . os . Bundle č import Ġandroid . view . Menu č import Ġandroid . view . MenuItem č import Ġandroid . view . View č import Ġandroid . widget . ImageView č import Ġandroid . widget . TextView č import Ġandroid . widget . Toast č import Ġandroidx . activity . view Models č import Ġandroidx . core . content . Context Compat č import Ġcom . bump tech . glide . G lide č import Ġcom . bump tech . glide . load . resource . drawable . Drawable Transition Options č import Ġcom . bump tech . glide . request . RequestOptions č import Ġcom . google . android . material . app bar . AppBar Layout č import Ġcom . google . android . material . app bar . AppBar Layout . On Offset Changed Listener č import Ġcom . google . android . material . sn ackbar . Snackbar č import Ġcom . ry an rv ld o . mov iec atalog ue . Build Config č import Ġcom . ry an rv ld o . mov iec atalog ue . R č import Ġcom . ry an rv ld o . mov iec atalog ue . adapter . Back drop Slide Adapter č import Ġcom . ry an rv ld o . mov iec atalog ue . adapter . Cast Adapter č import Ġcom . ry an rv ld o . mov iec atalog ue . adapter . Similar Adapter č import Ġcom . ry an rv ld o . mov iec atalog ue . data . model . Cast č import Ġcom . ry an rv ld o . mov iec atalog ue . data . model . Image č import Ġcom . ry an rv ld o . mov iec atalog ue . data . model . Movie č import Ġcom . ry an rv ld o . mov iec atalog ue . data . model . Similar č import Ġcom . ry an rv ld o . mov iec atalog ue . data . remote . response . Videos Response č import Ġcom . ry an rv ld o . mov iec atalog ue . data . vo . Status č import Ġcom . ry an rv ld o . mov iec atalog ue . databinding . Activity Movie Detail Binding č import Ġcom . ry an rv ld o . mov iec atalog ue . di . Movie Qualifier č import Ġcom . ry an rv ld o . mov iec atalog ue . ui . view model . Movie Details ViewModel č import Ġcom . ry an rv ld o . mov iec atalog ue . utils . Base AppCompatActivity č import Ġcom . ry an rv ld o . mov iec atalog ue . utils . LayoutManager Util . get Horizontal LayoutManager č import Ġcom . ry an rv ld o . mov iec atalog ue . utils . StringUtils . get Gen res č import Ġcom . ry an rv ld o . mov iec atalog ue . utils . StringUtils . get Release Date č import Ġcom . ry an rv ld o . mov iec atalog ue . utils . StringUtils . get Runtime č import Ġcom . ry an rv ld o . mov iec atalog ue . widget . Favorite Movie Widget . Companion . update Widget č import Ġcom . smart e ist . auto image slider . Slider Animations č import Ġdagger . h ilt . android . Android EntryPoint č import Ġjava . util .* č import Ġjavax . inject . Inject č č @ Android EntryPoint č class ĠMovie Details Activity Ġ: ĠBase AppCompatActivity () Ġ{ čč ĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Movie Detail Binding čč ĠĠĠ Ġprivate Ġval ĠviewModel : ĠMovie Details ViewModel Ġby Ġview Models () čč ĠĠĠ Ġ@ Inject č ĠĠĠ Ġlateinit Ġvar Ġcast Adapter : ĠCast Adapter čč ĠĠĠ Ġ@ Movie Qualifier č ĠĠĠ Ġ@ Inject č ĠĠĠ Ġlateinit Ġvar Ġsimilar Adapter : ĠSimilar Adapter čč ĠĠĠ Ġprivate Ġlateinit Ġvar Ġmovie : ĠMovie č ĠĠĠ Ġprivate Ġvar Ġfavorite Ġ= Ġfalse čč ĠĠĠ Ġprivate Ġlateinit Ġvar Ġmsg : ĠString čč ĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ č ĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) č ĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Movie Detail Binding . inflate ( layout Inflater ) č ĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) čč ĠĠĠĠĠĠĠ Ġsetup Toolbar () č ĠĠĠĠĠĠĠ Ġsetup Recycler Views () č ĠĠĠĠĠĠĠ Ġobserve Data () č ĠĠĠ Ġ} čč ĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ č ĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . details _ menu , Ġmenu ) č ĠĠĠĠĠĠĠ Ġsuper . onCreate Options Menu ( menu ) č ĠĠĠĠĠĠĠ Ġreturn Ġtrue č ĠĠĠ Ġ} čč ĠĠĠ Ġoverride Ġfun Ġon Prepare Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ č ĠĠĠĠĠĠĠ Ġif Ġ( favorite ) Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . favorite ). setIcon ( R . drawable . ic _ favorite ) č ĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . favorite ). setIcon ( R . drawable . ic _ favorite _ border ) č ĠĠĠĠĠĠĠ Ġ} č ĠĠĠĠĠĠĠ Ġsuper . on Prepare Options Menu ( menu ) č ĠĠĠĠĠĠĠ Ġreturn Ġtrue č ĠĠĠ Ġ} čč ĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ č ĠĠĠĠĠĠĠ Ġif Ġ( item . itemId Ġ== ĠR . id . favorite ) Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( favorite ) Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Favorite ( item ) č ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Favorite ( item ) č ĠĠĠĠĠĠĠĠĠĠĠ Ġ} č ĠĠĠĠĠĠĠ Ġ} č ĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) č ĠĠĠ Ġ} čč ĠĠĠ Ġoverride Ġfun Ġon Support Navigate Up (): ĠBoolean Ġ{ č ĠĠĠĠĠĠĠ Ġon Back Pressed () č ĠĠĠĠĠĠĠ Ġreturn Ġtrue č ĠĠĠ Ġ} čč ĠĠĠ Ġprivate Ġfun Ġsetup Toolbar () Ġ{ č ĠĠĠĠĠĠĠ Ġset Support ActionBar ( binding . toolbar Detail ) č ĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) č ĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Home As Up Indicator ( R . drawable . ic _ back _ dark ) čč ĠĠĠĠĠĠĠ Ġbinding . app Bar . add On Offset Changed Listener ( object Ġ: ĠOn Offset Changed Listener Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġis Show Ġ= Ġtrue č ĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġscroll Range Ġ= Ġ- 1 č ĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Offset Changed ( č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Bar Layout : ĠApp Bar Layout , č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvertical Offset : ĠInt č ĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scroll Range Ġ== Ġ- 1 ) Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Range Ġ= Ġapp Bar Layout . total Scroll Range č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scroll Range Ġ+ Ġvertical Offset Ġ== Ġ 0 ) Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . coll ap sing Toolbar . title Ġ= Ġmovie . title č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . card Banner . visibility Ġ= ĠView . GONE č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Show Ġ= Ġtrue č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( is Show ) Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . coll ap sing Toolbar . title Ġ= Ġ" Ġ" č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . card Banner . visibility Ġ= ĠView . VISIBLE č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Show Ġ= Ġfalse č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} č ĠĠĠĠĠĠĠĠĠĠĠ Ġ} č ĠĠĠĠĠĠĠ Ġ}) č ĠĠĠ Ġ} čč ĠĠĠ Ġprivate Ġfun Ġsetup Recycler Views () Ġ{ č ĠĠĠĠĠĠĠ Ġbinding . cast Rv . layout Manager Ġ= Ġget Horizontal LayoutManager ( this ) č ĠĠĠĠĠĠĠ Ġbinding . cast Rv . adapter Ġ= Ġcast Adapter čč ĠĠĠĠĠĠĠ Ġbinding . similar Rv . layout Manager Ġ= Ġget Horizontal LayoutManager ( this ) č ĠĠĠĠĠĠĠ Ġbinding . similar Rv . adapter Ġ= Ġsimilar Adapter č ĠĠĠ Ġ} čč ĠĠĠ Ġprivate Ġfun Ġobserve Data () Ġ{ č ĠĠĠĠĠĠĠ ĠviewModel . movie Details . observe ( this ) Ġ{ Ġresource Ġ-> č ĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( resource . status ) Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus . SUCCESS Ġ-> Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresource . data ?. let Ġ{ Ġmovie Ġ-> č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Movie Details ( movie ) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Back dro ps Slider ( movie . images ?. back dro ps ) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Movie Videos ( movie . videos ) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Cast List ( movie . credits ?. cast ) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Similar List ( movie . similar ?. similar ) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading ( false ) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus . ERROR Ġ-> Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġresource . message , ĠToast . LENGTH _ SHORT ). show () č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading ( false ) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus . LOADING Ġ-> Ġshow Loading ( true ) č ĠĠĠĠĠĠĠĠĠĠĠ Ġ} č ĠĠĠĠĠĠĠ Ġ} čč ĠĠĠĠĠĠĠ ĠviewModel . is F avorites . observe ( this ) Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfavorite Ġ= Ġtrue č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate Options Menu () č ĠĠĠĠĠĠĠĠĠĠĠ Ġ} č ĠĠĠĠĠĠĠ Ġ} č ĠĠĠ Ġ} čč ĠĠĠ Ġprivate Ġfun Ġset Movie Details ( movie : ĠMovie ) Ġ{ č ĠĠĠĠĠĠĠ Ġthis . movie Ġ= Ġmovie č ĠĠĠĠĠĠĠ Ġbinding . movie Details Title . text Ġ= Ġthis . movie . title č ĠĠĠĠĠĠĠ Ġbinding . movie Details Overview . text Ġ= Ġthis . movie . overview č ĠĠĠĠĠĠĠ Ġbinding . rating Text . text Ġ= Ġthis . movie . rating . toString () č ĠĠĠĠĠĠĠ Ġbinding . rating Count . text Ġ= ĠString . format ( č ĠĠĠĠĠĠĠĠĠĠĠ ĠLocale . US , č ĠĠĠĠĠĠĠĠĠĠĠ Ġ"% , d ", č ĠĠĠĠĠĠĠĠĠĠĠ Ġthis . movie . rating Votes č ĠĠĠĠĠĠĠ Ġ) č ĠĠĠĠĠĠĠ Ġbinding . movie Details Duration . text Ġ= Ġget Runtime ( this . movie . duration ) č ĠĠĠĠĠĠĠ Ġbinding . movie Details Gen res . text Ġ= Ġget Gen res ( this . movie . genres ) č ĠĠĠĠĠĠĠ Ġget Release Date ( this . movie . release Date )?. let Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . movie Details Release Date . text Ġ= Ġit č ĠĠĠĠĠĠĠ Ġ} č ĠĠĠĠĠĠĠ ĠG lide . with ( this ) č ĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( Build Config . TM DB _ IMAGE _ 3 4 2 Ġ+ Ġthis . movie . poster Path ) č ĠĠĠĠĠĠĠĠĠĠĠ Ġ. error ( R . drawable . ic _ und raw _ 4 0 4 ) č ĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( RequestOptions . placeholder Of ( R . drawable . ic _ und raw _ images ). center Crop ()) č ĠĠĠĠĠĠĠĠĠĠĠ Ġ. transition ( Drawable Transition Options . with Cross Fade ()) č ĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( binding . movie Details Post er ) č ĠĠĠ Ġ} čč ĠĠĠ Ġprivate Ġfun Ġset Back dro ps Slider ( image Items : ĠList < Image > ?) Ġ{ č ĠĠĠĠĠĠĠ Ġimage Items ?. let Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . image Slider . slider Adapter Ġ= ĠBack drop Slide Adapter ( image Items ) č ĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . image Slider . set Slider Transform Animation ( Slider Animations . FA DE TRANS FORMATION ) č ĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . image Slider . set Indicator Visibility ( false ) č ĠĠĠĠĠĠĠ Ġ} č ĠĠĠ Ġ} čč ĠĠĠ Ġprivate Ġfun Ġset Movie Videos ( videos Response : ĠV ideos Response ?) Ġ{ č ĠĠĠĠĠĠĠ Ġbinding . movie Trail ers . removeAll Views () č ĠĠĠĠĠĠĠ Ġif Ġ( videos Response Ġ!= Ġnull ) Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( videos Response . videos . isEmpty ()) Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . trail ers Label . visibility Ġ= ĠView . GONE č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . movie Trail ers . visibility Ġ= ĠView . GONE č ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( key , Ġname ) Ġin Ġvideos Response . videos ) Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġlayout Inflater . inflate ( č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . item _ tr ailer , č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . movie Trail ers , č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthumbnail Tr ailer Ġ= č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . findViewById < ImageView >( R . id . thumbnail _ tr ailer ) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovie Tr ailer Title Ġ= č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . findViewById < TextView >( R . id . tr ailer Title ) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Tr ailer Title . text Ġ= Ġname č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( this ) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( String . format ( Build Config . Y OUT UBE _ TH UMB NA IL _ URL , Ġkey )) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( RequestOptions . placeholder Of ( R . color . color Primary ). center Crop ()) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( thumbnail Tr ailer ) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthumbnail Tr ailer . request Layout () č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthumbnail Tr ailer . setOnClickListener Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . ACTION _ VIEW , č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUri . parse ( String . format ( Build Config . Y OUT UBE _ VIDEO _ URL , Ġkey )) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . movie Trail ers . addView ( parent ) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} č ĠĠĠĠĠĠĠĠĠĠĠ Ġ} č ĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error () č ĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . trail ers Label . visibility Ġ= ĠView . GONE č ĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . movie Trail ers . visibility Ġ= ĠView . GONE č ĠĠĠĠĠĠĠ Ġ} č ĠĠĠ Ġ} čč ĠĠĠ Ġprivate Ġfun Ġset Cast List ( cast List : ĠList < Cast > ?) Ġ{ č ĠĠĠĠĠĠĠ Ġif Ġ( cast List ?. isNotEmpty () !! ) Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠ Ġcast Adapter . differ . submit List ( cast List ) č ĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . cast Label . visibility Ġ= ĠView . GONE č ĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . cast Rv . visibility Ġ= ĠView . GONE č ĠĠĠĠĠĠĠ Ġ} č ĠĠĠ Ġ} čč ĠĠĠ Ġprivate Ġfun Ġset Similar List ( similar List : ĠList < Similar > ?) Ġ{ č ĠĠĠĠĠĠĠ Ġsimilar List ?. let Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( similar List . isNotEmpty ()) Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsimilar Adapter . set Similar List ( similar List ) č ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . similar Label . visibility Ġ= ĠView . GONE č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . similar Rv . visibility Ġ= ĠView . GONE č ĠĠĠĠĠĠĠĠĠĠĠ Ġ} č ĠĠĠĠĠĠĠ Ġ} č ĠĠĠ Ġ} čč ĠĠĠ Ġprivate Ġfun Ġshow Loading ( state : ĠBoolean ) Ġ{ č ĠĠĠĠĠĠĠ Ġif Ġ( state ) Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . background Loading . visibility Ġ= ĠView . VISIBLE č ĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Bar . visibility Ġ= ĠView . VISIBLE č ĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . app Bar . visibility Ġ= ĠView . GONE č ĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . constraint . visibility Ġ= ĠView . GONE č ĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . background Loading . visibility Ġ= ĠView . GONE č ĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Bar . visibility Ġ= ĠView . GONE č ĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . app Bar . visibility Ġ= ĠView . VISIBLE č ĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . constraint . visibility Ġ= ĠView . VISIBLE č ĠĠĠĠĠĠĠ Ġ} č ĠĠĠ Ġ} čč ĠĠĠ Ġprivate Ġfun Ġshow Error () Ġ{ č ĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Check Ġyour Ġinternet Ġconnection .", ĠToast . LENGTH _ SHORT ). show () č ĠĠĠ Ġ} čč ĠĠĠ Ġprivate Ġfun Ġadd Favorite ( item : ĠMenuItem ) Ġ{ č ĠĠĠĠĠĠĠ ĠviewModel . add Favorite Movie ( movie ) č ĠĠĠĠĠĠĠ Ġfavorite Ġ= Ġtrue č ĠĠĠĠĠĠĠ Ġitem . setIcon ( R . drawable . ic _ favorite ) č ĠĠĠĠĠĠĠ Ġmsg Ġ= Ġmovie . title Ġ+ Ġ" Ġ" Ġ+ ĠgetString ( R . string . add _ favorite _ movie ) č ĠĠĠĠĠĠĠ Ġval Ġsn ackbar Ġ= ĠSn ackbar č ĠĠĠĠĠĠĠĠĠĠĠ Ġ. make ( binding . root , Ġmsg , ĠSn ackbar . LENGTH _ LONG ) č ĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( R . string . undo ) Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Favorite ( item ) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= Ġmovie . title Ġ+ Ġ" Ġ" Ġ+ ĠgetString ( R . string . delete _ favorite _ movie ) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsn ackbar Undo Ġ= č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( binding . root , Ġmsg , ĠSn ackbar . LENGTH _ LONG ) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTextColor ( Context Compat . getColor ( this , ĠR . color . color Primary )) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setBackground Tint ( Context Compat . getColor ( this , ĠR . color . color White )) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction TextColor ( Context Compat . getColor ( this , ĠR . color . color Primary Light )) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar Undo . show () č ĠĠĠĠĠĠĠĠĠĠĠ Ġ} č ĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTextColor ( Context Compat . getColor ( this , ĠR . color . color Primary )) č ĠĠĠĠĠĠĠĠĠĠĠ Ġ. setBackground Tint ( Context Compat . getColor ( this , ĠR . color . color White )) č ĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction TextColor ( Context Compat . getColor ( this , ĠR . color . color Accent )) č ĠĠĠĠĠĠĠ Ġsn ackbar . show () č ĠĠĠĠĠĠĠ Ġupdate Widget ( this ) č ĠĠĠ Ġ} čč ĠĠĠ Ġprivate Ġfun Ġdelete Favorite ( item : ĠMenuItem ) Ġ{ č ĠĠĠĠĠĠĠ ĠviewModel . delete Fav Movie ( movie ) č ĠĠĠĠĠĠĠ Ġfavorite Ġ= Ġfalse č ĠĠĠĠĠĠĠ Ġitem . setIcon ( R . drawable . ic _ favorite _ border ) č ĠĠĠĠĠĠĠ Ġmsg Ġ= Ġmovie . title Ġ+ Ġ" Ġ" Ġ+ ĠgetString ( R . string . delete _ favorite _ movie ) č ĠĠĠĠĠĠĠ Ġval Ġsn ackbar Ġ= ĠSn ackbar . make ( binding . root , Ġmsg , ĠSn ackbar . LENGTH _ LONG ) č ĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( R . string . undo ) Ġ{ č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Favorite ( item ) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= Ġmovie . title Ġ+ Ġ" Ġ" Ġ+ ĠgetString ( R . string . add _ favorite _ movie ) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsn ackbar Undo Ġ= č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( binding . root , Ġmsg , ĠSn ackbar . LENGTH _ LONG ) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTextColor ( Context Compat . getColor ( this , ĠR . color . color Primary )) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setBackground Tint ( Context Compat . getColor ( this , ĠR . color . color White )) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction TextColor ( Context Compat . getColor ( this , ĠR . color . color Primary Light )) č ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar Undo . show () č ĠĠĠĠĠĠĠĠĠĠĠ Ġ} č ĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTextColor ( Context Compat . getColor ( this , ĠR . color . color Primary )) č ĠĠĠĠĠĠĠĠĠĠĠ Ġ. setBackground Tint ( Context Compat . getColor ( this , ĠR . color . color White )) č ĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction TextColor ( Context Compat . getColor ( this , ĠR . color . color Primary Light )) č ĠĠĠĠĠĠĠ Ġsn ackbar . show () č ĠĠĠĠĠĠĠ Ġupdate Widget ( this ) č ĠĠĠ Ġ} č }