package Ġcom . k Ts . movie observer . ui . favorite Movies Screen Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . recyclerview . widget . Item Touch Helper Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ Ċ import Ġcom . k Ts . movie observer . R Ċ import Ġcom . k Ts . movie observer . databinding . Favorite Movies Fragment Binding Ċ import Ġcom . k Ts . movie observer . domain . Movie Ċ import Ġcom . k Ts . movie observer . utils . dp To Px Ċ import Ġcom . k Ts . movie observer . utils . Grid Spacing Item Decoration Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ Ċ class ĠF avorite Movies Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠF avorite Movies ViewModel Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġrequire NotNull ( this . activity ) ĊĠĠĠĠĠĠĠ Ġval Ġv M Fac r ory Ġ= ĠF avorite Movies ViewModel . Factory ( activity . application ) ĊĠĠĠĠĠĠĠ ĠViewModel Provider ( this , Ġv M Fac r ory ). get ( Favorite Movies ViewModel :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbinding : ĠF avorite Movies Fragment Binding Ġ= ĠData Binding Util . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater , ĠR . layout . favorite _ movies _ fragment , Ġcontainer , Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġview Lifecycle Owner ĊĠĠĠĠĠĠĠ Ġbinding . view model Ġ= ĠviewModel ĊĊĠĠĠĠĠĠĠ Ġval Ġfavor ites Grid Adapter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF avorites Grid Adapter ( F avorites Grid Adapter . OnClickListener Ġ{ Ġview : ĠView , Ġmovie : ĠMovie Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . navigation To Details ( movie ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġbinding . favorites Recycler view . adapter Ġ= Ġfavor ites Grid Adapter ĊĠĠĠĠĠĠĠ Ġbinding . favorites Recycler view . addItem Decoration ( Grid Spacing Item Decoration ( 2 , 1 4 . dp To Px , true )) ĊĊĠĠĠĠĠĠĠ ĠviewModel . navigate To Details . observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġmovie Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF avorite Movies Fragment Directions . action Favorite Movies Fragment To Movie Detail Fragment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . navigation To Details Complete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . navigate To Presenter . observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġnavigation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( navigation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( Favorite Movies Fragment Directions . action Favorite Movies Fragment To Now Playing Movies Fragment ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . navigation To Presenter Complete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . undo Snackbar Event . observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġshow Snackbar Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Snackbar ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsn ackbar Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . root , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Movie Ġdeleted Ġfrom Ġfavor ites .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar . setAction (" Undo ") Ġ{ ĠviewModel . undo Delete Movie () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar . setAction TextColor ( Context Compat . getColor ( require Context (), ĠR . color . sn ackbar _ action _ text _ color )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . show Undo Snackbar Complete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . stored Movies . observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġmovie List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfavor ites Grid Adapter . submit List ( movie List ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠItem Touch Helper ( object Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠItem Touch Helper . Simple Callback ( 0 , ĠItem Touch Helper . LEFT Ġor ĠItem Touch Helper . RIGHT ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Move ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView : ĠRecyclerView , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder : ĠRecyclerView . ViewHolder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget : ĠRecyclerView . ViewHolder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTODO (" not Ġimplemented ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Sw ip ed ( view Holder : ĠRecyclerView . ViewHolder , Ġdirection : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsw ip ed Movie Id Ġ= Ġfavor ites Grid Adapter . get Movie At ( view Holder . layout Position ). id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . set Favorite ( sw ip ed Movie Id , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . set Recent Deleted Movie ( sw ip ed Movie Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . show Undo Snackbar () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}). attach To RecyclerView ( binding . favorites Recycler view ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} Ċ } Ċ