package Ġcom . ra hu log raf y . ax me comm . ui . main . home . fragment Ċ Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . Menu Inflater Ċ import Ġandroid . view . MenuItem Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġcom . google . android . material . tabs . Tab Layout Mediator Ċ import Ġcom . ra hu log raf y . ax me comm . BR Ċ import Ġcom . ra hu log raf y . ax me comm . R Ċ import Ġcom . ra hu log raf y . ax me comm . databinding . Fragment Home Binding Ċ import Ġcom . ra hu log raf y . ax me comm . ui . base . view . Base Fragment Ċ import Ġcom . ra hu log raf y . ax me comm . ui . main . home . fragment . adapter . Product Fragment Adapter Ċ import Ġcom . ra hu log raf y . ax me comm . ui . main . home . product filter . Product Filter Fragment Ċ import Ġcom . ra hu log raf y . ax me comm . util . ext . toast Ċ import Ġkotlinx . android . synt hetic . main . fragment _ home .* Ċ Ċ class ĠHome Fragment Ġ: ĠBase Fragment < Fragment Home Binding , ĠHome Fragment ViewModel >() Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġproduct Filter Fragment : ĠProduct Filter Fragment ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġval Ġlayout Res Ġget () Ġ= ĠR . layout . fragment _ home ĊĊĠĠĠ Ġoverride Ġval Ġtoolbar Id : ĠInt Ġget () Ġ= ĠR . id . toolbar Home ĊĊĠĠĠ Ġoverride Ġvar ĠviewModel Class Ġ= ĠHome Fragment ViewModel :: class . java ĊĊĠĠĠ Ġoverride Ġval Ġbinding Variable Ġ= ĠBR . viewModel ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . menu _ home , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġsuper . onCreate Options Menu ( menu , Ġinflater ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel . is Data Processing . get ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( getString ( R . string . msg _ fetch ing _ data _ please _ wait )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ action _ search , ĠR . id . menu _ action _ filter Ġ-> Ġopen Product Filter Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ action _ cart Ġ-> Ġtoast (" WIP ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit Ui () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Network Available ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . get Products () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit Shared ViewModel Observer s () Ġ{ ĊĊĠĠĠĠĠĠĠ ĠviewModel . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Category Wise Product ItemList Final ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Owner Ġ= Ġthis @ Home Fragment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserver Ġ= ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit ViewPager ( categories Ġ= Ġit ?. keys ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . is Data Processing . set ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Filter Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. product Filter Category ItemList Final ChangeEvent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Owner Ġ= Ġthis @ Home Fragment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserver Ġ= ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull Ġ&& Ġit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Manager . update Product ItemList Final Based On Filter () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit ViewPager ( categories : ĠCollection < String > ?) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! categories . isNull OrEmpty ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproduct Fragment Adapter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProduct Fragment Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategories Ġ= Ġcategories . toList (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild FragmentManager Ġ= Ġchild FragmentManager , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Ġ= Ġlifecycle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Pager 2 Home ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġproduct Fragment Adapter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoff screen Page Limit Ġ= Ġcategories . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠTab Layout Mediator ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtab Layout Home , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Pager 2 Home ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġtab , Ġposition Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtab . text Ġ= Ġcategories . toList ()[ position ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. attach () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoast (" API Ġerror Ġoccurred Ġwhile Ġfetching Ġproducts .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Product Filter Fragment () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( product Filter Fragment Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Filter Fragment Ġ= ĠProduct Filter Fragment () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( product Filter Fragment ?. isVisible Ġ!= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Filter Fragment ?. show ( child FragmentManager , Ġproduct Filter Fragment ?. tag ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }