package Ġorg . the mov ied b . ui . favorite . view Ċ Ċ import Ġandroid . content . DialogInterface Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġorg . the mov ied b . R Ċ import Ġorg . the mov ied b . adapters . Favorite Tv Show Adapter Ċ import Ġorg . the mov ied b . data . local . models . Tv Show Ċ import Ġorg . the mov ied b . data . local . provider . F avorites Provider Ċ import Ġorg . the mov ied b . databinding . Fragment Favorite List Binding Ċ import Ġorg . the mov ied b . ui . base . Base Fragment Ċ import Ġorg . the mov ied b . ui . favorite . view model . Favorite Tv Show ViewModel Ċ import Ġorg . the mov ied b . utils . Custom Dialog Ċ import Ġorg . the mov ied b . utils . ext . observe Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠF avorite Tv Show Fragment Ġ: ĠBase Fragment < Fragment Favorite List Binding >( R . layout . fragment _ favorite _ list ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance (): ĠF avorite Tv Show Fragment Ġ= ĠF avorite Tv Show Fragment () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar ĠviewModel Factory : ĠViewModel Provider . Factory ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġcustom Dialog : ĠCustom Dialog ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠF avorite Tv Show ViewModel Ġby Ġview Models Ġ{ ĠviewModel Factory Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġparent Ġby Ġlazy Ġ{ Ġrequire Parent Fragment () Ġas ĠF avorite Fragment Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġadapter Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠF avorite Tv Show Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclick Listener Ġ= Ġ{ Ġparent . navigate To Detail ( it . convertTo Movie (), Ġfalse ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove Favorite Listener Ġ= Ġ{ Ġhandle Remove Tv Show ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġinit Binding () ĊĠĠĠĠĠĠĠ Ġsubscribe UI () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Binding () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( require Activity ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġthis @ Favorite Tv Show Fragment . adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Add Favorite . setOnClickListener Ġ{ Ġparent . navigate Tab ( R . id . tv _ show _ fragment ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsubscribe UI () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . load Tv Show Repo () ĊĠĠĠĠĠĠĠ Ġobserve ( viewModel . get Tv Shows ()) Ġ{ Ġtv Shows Ġ-> Ġadapter . load Items ( tv Shows ) Ġ} ĊĠĠĠĠĠĠĠ Ġobserve ( viewModel . is Tv Show Empty ) Ġ{ ĠisEmpty Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . visibility Ġ= Ġif Ġ( isEmpty ) ĠView . GONE Ġelse ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Layout . visibility Ġ= Ġif Ġ( isEmpty ) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Remove Tv Show ( tv Show : ĠT v Show ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . remove Tv Show From Repo ( tv Show . id ) ĊĠĠĠĠĠĠĠ Ġobserve ( viewModel . success Remove Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdismiss Listener Ġ= ĠDialog Interface . On Dismiss Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . remove From Favorite ( tv Show ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Dialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (). content Resolver . notify Change ( F avorites Provider . TV _ SHOW _ URI , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Dialog . show Remove From Favorite Dialog ( require Context (), Ġdismiss Listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }