package Ġmx . com . movies challenge . ui . favorite Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . St agger ed Grid LayoutManager Ċ import Ġkotlinx . android . synt hetic . main . favorites _ movies _ fragment .* Ċ import Ġmx . com . movies challenge . R Ċ import Ġmx . com . movies challenge . base . Base Fragment Ċ import Ġmx . com . movies challenge . domain . model . Movie Ċ import Ġmx . com . movies challenge . ui . adapter . Movies Adapter Ċ import Ġmx . com . movies challenge . ui . listener . Movie Communication Ċ import Ġmx . com . movies challenge . ui . model . Favorite Movies ViewState Ċ import Ġmx . com . movies challenge . utils . extensions . g one Ċ import Ġmx . com . movies challenge . utils . extensions . observe Ċ import Ġmx . com . movies challenge . utils . extensions . sn ack Ċ import Ġmx . com . movies challenge . utils . extensions . visible Ċ import Ġmx . com . movies challenge . utils . recyclerview . Spaces Item Decoration Ċ import Ġorg . k oin . android . view model . ext . android . viewModel Ċ Ċ class ĠF avorites Movies Fragment Ġ: ĠBase Fragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠF avorites Movies ViewModel Ġby ĠviewModel () ĊĊĠĠĠ Ġlateinit Ġvar Ġcommunication : ĠMovie Communication ĊĊĠĠĠ Ġoverride Ġfun Ġget Layout View (): ĠInt Ġ= ĠR . layout . favorites _ movies _ fragment ĊĊĠĠĠ Ġoverride Ġfun Ġinit View () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Adapter Manager () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠĠĠĠĠ Ġcommunication Ġ= Ġcontext Ġas ĠMovie Communication ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Configuration Changed ( new Config : ĠConfiguration ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Configuration Changed ( new Config ) ĊĠĠĠĠĠĠĠ Ġval Ġis Land scape Ġ= Ġnew Config . orientation Ġ== ĠConfiguration . OR IENTATION _ LAND SC APE ĊĠĠĠĠĠĠĠ Ġrv Favorite Movies ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovies LayoutManager ?. span Count Ġ= Ġget Columns By Orientation ( is Land scape ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter ?. notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġattach Observer s () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget F avorites Movies () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobserve ( favorite Movies ViewState , Ġ:: handle Favorite ViewState ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Favorite ViewState ( view State : ĠF avorite Movies ViewState ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( view State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠF avorite Movies ViewState . On Success Add Favorite Ġ-> Ġsn ack ( R . string . message _ success _ add _ favorites ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠF avorite Movies ViewState . On Success Remove Favorite Ġ-> Ġsn ack ( R . string . message _ success _ remove _ favorites ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠF avorite Movies ViewState . On Result F avorites Ġ-> Ġshow F avorites Movies ( view State . movies ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠF avorite Movies ViewState . On Empty F avorites Ġ-> Ġshow Empty F avorites () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Empty F avorites () Ġ{ ĊĠĠĠĠĠĠĠ Ġrv Favorite Movies . g one () ĊĠĠĠĠĠĠĠ Ġtv Empty F avorites Movies . visible () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow F avorites Movies ( movies : ĠList < Movie >) Ġ{ ĊĠĠĠĠĠĠĠ Ġmovies Adapter . update Movies ( movies ) ĊĠĠĠĠĠĠĠ Ġrv Favorite Movies . visible () ĊĠĠĠĠĠĠĠ Ġtv Empty F avorites Movies . g one () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Adapter Manager () Ġ{ ĊĠĠĠĠĠĠĠ Ġrv Favorite Movies ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= Ġmovies LayoutManager Ġ?: Grid LayoutManager ( require Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Columns By Orientation ( is Land S cape )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Item Decoration ( Spaces Item Decoration ( SPACE _ ITEM _ DE COR ATION )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġmovies Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle ItemClickListener () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle ItemClickListener () Ġ{ ĊĠĠĠĠĠĠĠ Ġmovies Adapter . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ItemClickListener Ġ{ Ġposter , Ġtitle , Ġranking , Ġmovie Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommunication . select Movie ( poster , Ġtitle , Ġranking , Ġmovie ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnewValue Ġ= Ġ! is Favorite ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Favorite Ġ= ĠnewValue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . update Favorite ( id , ĠnewValue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }