/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠAr pan ĠS ark ar Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġdev . arp an . e commerce . ui . home Ċ Ċ import Ġandroid . graphics . drawable . Layer Drawable Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . FragmentManager Ċ import Ġandroidx . fragment . app . Fragment Pager Adapter Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . navigation . find Nav Controller Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġdev . arp an . e commerce . R Ċ import Ġdev . arp an . e commerce . data . model . Product Category Ċ import Ġdev . arp an . e commerce . databinding . Fragment Home Binding Ċ import Ġdev . arp an . e commerce . ui . Navigation Destination Fragment Ċ import Ġdev . arp an . e commerce . ui . drawable . Count Drawable Ċ import Ġdev . arp an . e commerce . ui . home . Home Fragment Directions . Companion . to Cart Ċ import Ġdev . arp an . e commerce . ui . home . Home Fragment Directions . Companion . to Product Filter Ċ import Ġdev . arp an . e commerce . ui . home . Home Fragment Directions . Companion . to Product Search Ċ import Ġdev . arp an . e commerce . ui . product . list . Product List Fragment Ċ import Ġdev . arp an . e commerce . utils . on Tab Selected Ċ import Ġtim ber . log . Tim ber Ċ Ċ @ Android EntryPoint Ċ class ĠHome Fragment Ġ: ĠNavigation Destination Fragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠHome ViewModel Ġby Ġview Models () ĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠFragment Home Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġbinding : ĠFragment Home Binding ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġrequire NotNull (_ binding ) ĊĠĠĠ Ġprivate Ġvar Ġselected Category : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠFragment Home Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġview Lifecycle Owner ĊĠĠĠĠĠĠĠ Ġbinding . viewModel Ġ= ĠviewModel ĊĊĠĠĠĠĠĠĠ Ġinit ViewPager () ĊĊĠĠĠĠĠĠĠ Ġbinding . btn Sort . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Category ?. let Ġ{ Ġcategory Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsort Dialog Ġ= ĠSort Bottom Sheet Dialog Fragment . newInstance ( category ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsort Dialog . on SortOrder Selected Ġ= Ġ{ ĠsortBy Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . set Sort By Order ( category , ĠsortBy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsort Dialog . show ( child FragmentManager , ĠSort Bottom Sheet Dialog Fragment . TAG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . btn Filter . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Category ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( to Product Filter ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . applied Filter Count . observe ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d ("$ selected Category Ġ-> Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding . toolbar . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinf late Menu ( R . menu . menu _ home ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On MenuItem ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ cart Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( to Cart ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ product _ search Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( to Product Search ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . cart ItemCount . observe ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Cart ItemCount ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Cart ItemCount ( count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmenu Item : ĠMenuItem Ġ= Ġbinding . toolbar . menu . find Item ( R . id . action _ cart ) ĊĠĠĠĠĠĠĠ Ġwith ( menuItem . icon Ġas ĠLayer Drawable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= Ġfind Drawable By Layer Id ( R . id . ic _ cart _ item _ count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbadge Ġ= Ġ( drawable Ġas ? ĠCount Drawable ) Ġ?: ĠCount Drawable ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbadge . count Ġ= Ġcount ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Drawable By Layer Id ( R . id . ic _ cart _ item _ count , Ġbadge ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit ViewPager () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhome Adapter Ġ= ĠHome Adapter ( child FragmentManager ) ĊĠĠĠĠĠĠĠ Ġwith ( binding . view pager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage Margin Ġ= Ġresources . get Dimension Pixel Size ( R . dim en . view pager _ page _ margin ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Page Margin Drawable ( R . drawable . page _ margin ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġhome Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tabs . setup With ViewPager ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . product Categories . observe ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġcategories Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhome Adapter . categories Ġ= Ġcategories ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . currentPage Index Ġin Ġcategories . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . view pager . currentItem Ġ= ĠviewModel . currentPage Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġbinding . tabs . on Tab Selected Ġ{ Ġtab Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhome Adapter . categories [ tab . position ]. value . let Ġ{ Ġcategory Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Category Ġ= Ġcategory ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . selected Category ( category ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ ĠviewModel . currentPage Index Ġ= Ġbinding . view pager . currentItem ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠHome Adapter ( fm : ĠFragment Manager ) Ġ: ĊĠĠĠĠĠĠĠ ĠFragment Pager Adapter ( fm , ĠBE HAV IOR _ RE SU ME _ ONLY _ CURRENT _ FRAGMENT ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġcategories : ĠList < Product Category > Ġ= Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Count (): ĠInt Ġ= Ġcategories . size ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem ( position : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProduct List Fragment . newInstance ( categories [ position ]. value ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Page Title ( position : ĠInt ) Ġ= Ġcategories [ position ]. name ĊĠĠĠ Ġ} Ċ } Ċ