package Ġcom . ra hu log raf y . jc posts . ui . main . fav our ites Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġcom . ra hu log raf y . jc posts . BR Ċ import Ġcom . ra hu log raf y . jc posts . R Ċ import Ġcom . ra hu log raf y . jc posts . data . source . local . posts . model . Post Entity Ċ import Ġcom . ra hu log raf y . jc posts . databinding . Fragment F avour ites Binding Ċ import Ġcom . ra hu log raf y . jc posts . ui . base . view . Base Fragment Ċ import Ġcom . ra hu log raf y . jc posts . ui . main . post detail . fragment . Post Detail Fragment Ċ import Ġcom . ra hu log raf y . jc posts . ui . main . posts . Posts Shared ViewModel Ċ import Ġcom . ra hu log raf y . jc posts . ui . main . posts . adapter . Posts Adapter Ċ import Ġcom . ra hu log raf y . jc posts . ui . main . posts . listener . Post EventListener Ċ import Ġcom . ra hu log raf y . jc posts . util . ext . init ViewModel Ċ import Ġcom . ra hu log raf y . jc posts . util . ext . notify Change Ċ import Ġcom . ra hu log raf y . jc posts . util . ext . show Ċ import Ġkotlinx . android . synt hetic . main . fragment _ fav our ites .* Ċ Ċ class ĠF avour ites Fragment Ġ: ĊĠĠĠ ĠBase Fragment < Fragment F avour ites Binding , ĠF avour ites Fragment ViewModel >(), ĊĠĠĠ ĠPost EventListener Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġlayout Res Ġget () Ġ= ĠR . layout . fragment _ fav our ites ĊĊĠĠĠ Ġoverride Ġvar ĠviewModel Class Ġ= ĠF avour ites Fragment ViewModel :: class . java ĊĊĠĠĠ Ġoverride Ġval Ġbinding Variable Ġ= ĠBR . viewModel ĊĊĠĠĠ Ġlateinit Ġvar Ġposts Shared ViewModel : ĠPosts Shared ViewModel ĊĊĠĠĠ Ġprivate Ġvar Ġpost Detail Fragment : ĠPost Detail Fragment ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġactivity ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposts Shared ViewModel Ġ= Ġinit ViewModel ( Posts Shared ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit Ui () Ġ{ ĊĠĠĠĠĠĠĠ Ġis App Online () ĊĊĠĠĠĠĠĠĠ ĠviewModel . get Posts () ĊĊĠĠĠĠĠĠĠ Ġview Data Binding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposts Adapter Ġ= ĠPosts Adapter ( post EventListener Ġ= Ġthis @ F avour ites Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Pending Bindings () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit Observer s () Ġ{ ĊĠĠĠĠĠĠĠ Ġposts Shared ViewModel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fav our ite Post Updated ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Owner Ġ= Ġthis @ F avour ites Fragment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserver Ġ= ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . get Posts ( force Ġ= Ġtrue , Ġshow Loader Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠviewModel . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposts Mutable LiveData ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Owner Ġ= Ġthis @ F avour ites Fragment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserver Ġ= ĠObserver Ġ{ Ġposts Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Posts RecyclerView ( posts Ġ= Ġposts ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Posts RecyclerView ( posts : ĠArrayList < Post Entity > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( posts . isNull OrEmpty (). not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Posts RecyclerView ( show Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . posts Observable Field . set ( posts ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Posts RecyclerView ( show Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Posts RecyclerView ( show : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrv Posts . show ( show Ġ= Ġshow ) ĊĠĠĠĠĠĠĠ Ġlayout No Data . show ( show Ġ= Ġshow . not ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon ListItem Clicked ( list Position : ĠInt , Ġpost Entity : ĠPost Entity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġopen Post Detail Fragment ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Position Ġ= Ġlist Position , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Ġ= Ġpost Entity ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon F avour ite Icon Clicked ( ĊĠĠĠĠĠĠĠ Ġlist Position : ĠInt , ĊĠĠĠĠĠĠĠ Ġpost Entity : ĠPost Entity ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrv Posts . notify Change ( list Position ) ĊĠĠĠĠĠĠĠ ĠviewModel . update Post ( post Entity ) ĊĠĠĠĠĠĠĠ Ġposts Shared ViewModel . post List Position Ġ= Ġ( post Entity . id Ġ?: Ġ 0 ) Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġposts Shared ViewModel . post Updated . value Ġ= Ġpost Entity ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Post Detail Fragment ( list Position : ĠInt , Ġpost : ĠPost Entity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( post Detail Fragment Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Detail Fragment Ġ= ĠPost Detail Fragment () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( post Detail Fragment ?. isVisible Ġ!= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposts Shared ViewModel . post List Position Ġ= Ġ( post . id Ġ?: Ġ 0 ) Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposts Shared ViewModel . post Ġ= Ġpost ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Detail Fragment ?. show ( child FragmentManager , Ġpost Detail Fragment ?. tag ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }