package Ġcom . sure t . movies app . ui . movie details Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . animation . Animation Ċ import Ġandroid . view . animation . Animation Utils Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . navigation . fragment . nav Args Ċ import Ġandroidx . recyclerview . widget . RecyclerView . Adapter . State Rest or ation Policy . PRE VENT _ WHEN _ EMPTY Ċ import Ġandroidx . transition . Transition Manager Ċ import Ġcom . google . android . material . app bar . AppBar Layout Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . pi er fr ances co so ff rit ti . android youtube player . core . player . YouTube Player Ċ import Ġcom . pi er fr ances co so ff rit ti . android youtube player . core . player . listeners . Abstract YouTube Player Listener Ċ import Ġcom . sure t . movies app . R Ċ import Ġcom . sure t . movies app . data . model . Cast Ċ import Ġcom . sure t . movies app . data . model . Favorite Movie Model Ċ import Ġcom . sure t . movies app . data . model . Movie Details Model Ċ import Ġcom . sure t . movies app . data . model . Trend ing Movies Model Ċ import Ġcom . sure t . movies app . data . other . Constants . INITIAL _ IS _ COLL AP SED Ċ import Ġcom . sure t . movies app . data . other . Constants . MAX _ LINES _ COLL AP SED Ċ import Ġcom . sure t . movies app . data . other . Constants . SIMPLE _ CAST _ TYPE Ċ import Ġcom . sure t . movies app . databinding . Fragment Movie Details Binding Ċ import Ġcom . sure t . movies app . ui . movie details . adapters . Full Cast Adapter Ċ import Ġcom . sure t . movies app . ui . movie details . adapters . Genre Adapter Ċ import Ġcom . sure t . movies app . ui . movie details . adapters . Production s Adapter Ċ import Ġcom . sure t . movies app . ui . movie details . adapters . Review Adapter Ċ import Ġcom . sure t . movies app . ui . movie details . view model . Movie Details Fragment VM Ċ import Ġcom . sure t . movies app . util . Pop U ps . Companion . show Sn ackBar Ċ import Ġcom . sure t . movies app . util . Util . convert Hour And Minutes Ċ import Ġcom . sure t . movies app . util . Util . round For Double Ċ import Ġcom . sure t . movies app . util . Util . show System UI Ċ import Ġcom . sure t . movies app . util . Util . split Number Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlin . math . abs ĊĊ Ċ @ Android EntryPoint Ċ class ĠMovie Details Fragment Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġbinding Ġby Ġlazy Ġ{ ĠFragment Movie Details Binding . inflate ( layout Inflater ) Ġ} ĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠMovie Details Fragment VM Ġby Ġview Models () ĊĠĠĠ Ġprivate Ġvar Ġmovie Model : ĠT rend ing Movies Model ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġfavorite Movie Model : ĠF avorite Movie Model ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcast List : ĠList < Cast >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġreview Adapter : ĠReview Adapter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġproduction s Adapter : ĠProduction s Adapter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcast ListAdapter : ĠFull Cast Adapter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġgenre Adapter : ĠGen re Adapter ĊĠĠĠ Ġprivate Ġvar Ġyoutube Key Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġval Ġargs : ĠMovie Details Fragment Args Ġby Ġnav Args () ĊĠĠĠ Ġprivate Ġvar Ġis Clicked Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġmovie Id : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġis Favorite Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġbo unce : ĠAnimation Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠAnimation Utils . load Animation ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . anim . bounce ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġbo unce _ g one : ĠAnimation Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠAnimation Utils . load Animation ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . anim . bounce _ g one ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Adapters () ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġmovie Model Ġ= Ġargs . movie Model ĊĠĠĠĠĠĠĠ Ġfavorite Movie Model Ġ= Ġargs . fav Model ĊĊĠĠĠĠĠĠĠ Ġreview OnClick () ĊĠĠĠĠĠĠĠ Ġfavorite Movie Model ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetData ( cast To Trend ing Movies Model ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Id Ġ= Ġit . id !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmovie Model ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetData ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Id Ġ= Ġit . id !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcheck Favorite () ĊĠĠĠĠĠĠĠ Ġgo To Person Detail Fragment () ĊĠĠĠĠĠĠĠ Ġset Visibility () ĊĠĠĠĠĠĠĠ Ġset ToolBar () ĊĠĠĠĠĠĠĠ Ġgo To Similar Fragment () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreview OnClick () Ġ{ ĊĠĠĠĠĠĠĠ Ġreview Adapter . on Item Click Ġ= Ġ{ Ġreview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Details Fragment Directions . action Movie Details Fragment To Review Bottom Sheet ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreview ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Favorite () Ġ{ ĊĠĠĠĠĠĠĠ Ġview Lifecycle Owner . lifecycle Scope . launch When Created Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfav Model Ġ= ĠviewModel . get Favorite Movie ByID ( movie Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Favorite Ġ= Ġif Ġ( fav Model Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset FAB ( is Favorite ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Adapters () Ġ{ ĊĠĠĠĠĠĠĠ Ġproduction s Adapter Ġ= ĠProduction s Adapter () ĊĠĠĠĠĠĠĠ Ġcast ListAdapter Ġ= ĠFull Cast Adapter () ĊĠĠĠĠĠĠĠ Ġcast ListAdapter . send Type Cast ( SIMPLE _ CAST _ TYPE ) ĊĠĠĠĠĠĠĠ Ġreview Adapter Ġ= ĠReview Adapter () ĊĠĠĠĠĠĠĠ Ġgenre Adapter Ġ= ĠGen re Adapter () ĊĠĠĠĠĠĠĠ Ġbinding . rv Cast . adapter Ġ= Ġcast ListAdapter ĊĠĠĠĠĠĠĠ Ġbinding . rv Production s . adapter Ġ= Ġproduction s Adapter ĊĠĠĠĠĠĠĠ Ġbinding . rv Review . adapter Ġ= Ġreview Adapter ĊĠĠĠĠĠĠĠ Ġbinding . rv Genre . adapter Ġ= Ġgenre Adapter ĊĠĠĠĠĠĠĠ Ġreview Adapter . state Rest or ation Policy Ġ= ĠPRE VENT _ WHEN _ EMPTY ĊĠĠĠĠĠĠĠ Ġcast ListAdapter . state Rest or ation Policy Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPRE VENT _ WHEN _ EMPTY ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgo To Similar Fragment () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfab Search . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Visibility () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfab Similar . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Details Fragment Directions . action Movie Details Fragment To Similar Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Movie ID ( movie Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Clicked Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Visibility () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Clicked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfab Search . extend () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfab Similar . start Animation ( bounce ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Similar . start Animation ( bounce ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfab Similar . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Similar . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Clicked Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfab Search . shrink () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Similar . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Similar . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfab Similar . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Similar . start Animation ( bounce _ g one ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfab Similar . start Animation ( bounce _ g one ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Clicked Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetData ( model : ĠT rend ing Movies Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie SetData ( model ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner . lifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . id ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . get Movie Details ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . details Flow . collect Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMovie Details Fragment VM . Event . Failure Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMovie Details Fragment VM . Event . Details Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . details ?. let Ġ{ Ġmodel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Movie Details ( model ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner . lifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 3 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . id ?. let Ġ{ Ġid Ġ-> ĠviewModel . get Movie Tr ailer ( id ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . tr ailer Flow . collect Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMovie Details Fragment VM . Event . Loading Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMovie Details Fragment VM . Event . Failure Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire View (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . error Text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMovie Details Fragment VM . Event . Tr ailer Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . tr ailer List ?. let Ġ{ Ġtr ailer List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! tr ailer List . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyoutube Key Ġ= Ġtr ailer List [ 0 ]. key . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Tr ailer ( youtube Key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner . lifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 5 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . id ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . getC red its ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . cast Flow . collect Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMovie Details Fragment VM . Event . Cast Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcast List Ġ= Ġevent . cast ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcast ListAdapter . submit List ( event . cast ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMovie Details Fragment VM . Event . Failure Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMovie Details Fragment VM . Event . Loading Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner . lifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . id ?. let Ġ{ Ġid Ġ-> ĠviewModel . get Reviews ( id ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . review Flow . collect Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMovie Details Fragment VM . Event . Loading Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMovie Details Fragment VM . Event . Failure Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMovie Details Fragment VM . Event . Reviews Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . reviews . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreview Adapter . submit List ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgo To Full Cast Fragment () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠFragment Movie Details Binding . set Movie Details ( model : ĠMovie Details Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( model . budget Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Budget . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsplit Number ( model . budget ) Ġ+ ĠgetString ( R . string . d ollar ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( model . re venue Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Revenue . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsplit Number ( model . re venue ) Ġ+ ĠgetString ( R . string . d ollar ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( model . runtime Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Runtime . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconvert Hour And Minutes ( model . runtime ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġgenre Adapter . submit List ( model . genres ) ĊĠĠĠĠĠĠĠ Ġproduction s Adapter . submit List ( model . production _ companies ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠFragment Movie Details Binding . goTo Full Cast Fragment () Ġ{ ĊĠĠĠĠĠĠĠ Ġtv See All . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcast List ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarray Ġ= Ġarray ListOf < Cast >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarray . addAll ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Details Fragment Directions . action Movie Details Fragment To Full Cast Fragment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarray ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgo To Person Detail Fragment () Ġ{ ĊĠĠĠĠĠĠĠ Ġcast ListAdapter . on Item Click Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Details Fragment Directions . action Movie Details Fragment To Person Details Fragment ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset ToolBar () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar Details . set Navigation OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. on Back Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcast To Trend ing Movies Model ( movie : ĠF avorite Movie Model ): ĠT rend ing Movies Model Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠT rend ing Movies Model ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . backdrop _ path , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . first _ air _ date , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . genre _ ids , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . original _ language , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . original _ name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . original _ title , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . overview , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . pop ularity , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . poster _ path , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . release _ date , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . title , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . vote _ average , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . vote _ count , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . is Favorite ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmovie SetData ( movies Model : ĠT rend ing Movies Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Movie Title ( movies Model ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Rating Data ( movies Model ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Story line ( movies Model ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Release Date ( movies Model ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset FAB ( is Favorite ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Favorite Fab Listener ( movies Model ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp Bar Listener () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠFragment Movie Details Binding . set Release Date ( movies Model : ĠT rend ing Movies Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! movies Model . release _ date . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Release Date . text Ġ= Ġmovies Model . release _ date ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Favorite Fab Listener ( movies Model : ĠT rend ing Movies Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfab Fav . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner . lifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovies Model . let Ġ{ Ġmodel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . update Movie Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Favorite Status ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Favorite ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Favorite ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . insert Favorite Movie ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Favorite Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Favorite Status ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Favorite ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Favorite Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie SetData ( new Trend Model ( model , Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Sn ackBar ( it , Ġrequire Activity (), ĠR . string . add _ to _ fav ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . remove Favorite Movie ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Favorite Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Favorite Status ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Favorite ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Favorite Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie SetData ( new Trend Model ( model , Ġfalse )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Sn ackBar ( it , Ġrequire Activity (), ĠR . string . remove _ favorites ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset FAB ( is Favorite : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Favorite ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfab Fav . setImage Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . get Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ favorite _ movie ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfab Fav . setImage Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . get Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . favorite ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Favorite Model ( movie : ĠT rend ing Movies Model ): ĠF avorite Movie Model Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠF avorite Movie Model ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . backdrop _ path , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . first _ air _ date , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . genre _ ids , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . original _ language , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . original _ name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . original _ title , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . overview , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . pop ularity , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . poster _ path , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . release _ date , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . title , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . vote _ average , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . vote _ count , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie . is Favorite ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Favorite Status ( ĊĠĠĠĠĠĠĠ Ġmovie : ĠT rend ing Movies Model , ĊĠĠĠĠĠĠĠ Ġis Favorite : ĠBoolean ĊĠĠĠ Ġ): ĠT rend ing Movies Model Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Favorite ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Trend Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Trend Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnew Trend Model ( ĊĠĠĠĠĠĠĠ Ġmodel : ĠT rend ing Movies Model , ĊĠĠĠĠĠĠĠ Ġis Favorite : ĠBoolean ĊĠĠĠ Ġ): ĠT rend ing Movies Model Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠT rend ing Movies Model ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . backdrop _ path , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . first _ air _ date , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . genre _ ids , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . original _ language , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . original _ name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . original _ title , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . overview , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . pop ularity , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . poster _ path , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . release _ date , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . title , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . vote _ average , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . vote _ count , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Favorite ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠFragment Movie Details Binding . set Story line ( movies Model : ĠT rend ing Movies Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġis Collapsed Ġ= ĠINITIAL _ IS _ COLL AP SED ĊĠĠĠĠĠĠĠ Ġstory Line TV . text Ġ= Ġmovies Model . overview ĊĠĠĠĠĠĠĠ Ġstory Line TV . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Collapsed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstory Line TV . max Lines Ġ= ĠInt . MAX _ VALUE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstory Line TV . max Lines Ġ= ĠMAX _ LINES _ COLL AP SED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Collapsed Ġ= Ġ! is Collapsed ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransition Manager . begin Delayed Transition ( parent Layout ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠFragment Movie Details Binding . set Tr ailer ( youtube Key : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle . add Observer ( youtube Player View ) ĊĠĠĠĠĠĠĠ Ġyoutube Player View . add YouTube Player Listener ( object Ġ: ĠAbstract YouTube Player Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Ready ( you Tube Player : ĠYouTube Player ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( youtube Key Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyou Tube Player . cue Video ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyoutube Key , Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠFragment Movie Details Binding . set Rating Data ( ĊĠĠĠĠĠĠĠ Ġmovies Model : ĠT rend ing Movies Model ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrating TV . text Ġ= Ġmovies Model . vote _ average ?. let Ġ{ Ġround For Double ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠFragment Movie Details Binding . app Bar Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġapp bar Layout . add On Offset Changed Listener ( AppBar Layout . On Offset Changed Listener Ġ{ Ġapp Bar Layout , Ġvertical Offset Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( app Bar Layout Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( abs ( vertical Offset ) Ġ- Ġapp Bar Layout . total Scroll Range Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Title . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol lap sing Toolbar . title Ġ= Ġmovie Title . text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol lap sing Toolbar . set Collapsed Title TextAppearance ( R . style . Col lap sing Title Style ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Title . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol lap sing Toolbar . title Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠFragment Movie Details Binding . set Movie Title ( movies Model : ĠT rend ing Movies Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( movies Model . title Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Title . text Ġ= Ġmovies Model . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( movies Model . name Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Title . text Ġ= Ġmovies Model . original _ title ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Title . text Ġ= Ġmovies Model . title ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmovie Title . setColor ( R . color . white , ĠR . color . silver ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġshow System UI ( require Activity ()) ĊĠĠĠ Ġ} Ċ }