package Ġcom . ba el . d ads . feature . home . screen . home Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View . GONE Ċ import Ġandroid . view . View . VISIBLE Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . h ilt . navigation . fragment . h ilt Nav Graph ViewModels Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġcom . ba el . d ads . feature . home . R Ċ import Ġcom . ba el . d ads . feature . home . databinding . Screen Home Binding Ċ import Ġcom . ba el . d ads . feature . home . databinding . Screen Home Binding . inflate Ċ import Ġcom . ba el . d ads . lib . presentation . ext . hide Soft Keyboard Ċ import Ġcom . ba el . d ads . lib . presentation . ext . show Soft Keyboard Ċ import Ġcom . ba el . d ads . lib . presentation . fragment . Base Fragment Ċ import Ġcom . ba el . d ads . lib . presentation . widget . listener . On TextChanged Listener Ċ import Ġcom . ba el . d ads . lib . presentation . widget . tab . adapter . Bottom Tab Adapter Ċ import Ġcom . ba el . d ads . lib . presentation . widget . tab . data . Bottom Tab Ċ import Ġcom . ba el . d ads . lib . presentation . widget . view pager . adapter . Screen Pager Adapter Ċ import Ġcom . google . android . material . tabs . Tab Layout Mediator Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġkotlinx . coroutines . channels . await Close Ċ import Ġkotlinx . coroutines . flow . callback Flow Ċ import Ġkotlinx . coroutines . flow . de bounce Ċ import Ġkotlinx . coroutines . flow . launch In Ċ import Ġkotlinx . coroutines . flow . on Each Ċ import Ġjavax . inject . Inject Ċ import Ġcom . ba el . d ads . feature . home . sheet . settings . UI Ġas ĠSettings Sheet Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠEr ick Sum argo Ġon Ġ 0 1 / 0 1 / 2 1 . Ċ Ġ*/ Ċ Ċ @ Android EntryPoint Ċ internal Ġclass ĠUI Ġ: ĊĠĠĠ ĠBase Fragment < Screen Home Binding , ĠRenderer , ĠEvent , ĠViewModel >(), ĊĠĠĠ ĠRenderer Ġ{ ĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġpager Scre ens : Ġ@ Jvm Suppress W ild cards ĠList < () Ġ-> ĠFragment > ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġtabs Data : Ġ@ Jvm Suppress W ild cards ĠList < Bottom Tab > ĊĊĠĠĠ Ġoverride Ġval ĠviewModel : ĠViewModel Ġby Ġh ilt Nav Graph ViewModels ( nav Graph Id Ġ= ĠR . id . nav Graph ) ĊĊĠĠĠ Ġoverride Ġfun Ġcreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ? ĊĠĠĠ Ġ): ĠScreen Home Binding Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinf late ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġon View Loaded ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġaction ( event : ĠEvent ) Ġ{} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup View () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbottom Tab Adapter Ġ= ĠBottom Tab Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab Layout Ġ= Ġview Binding . tab Layout , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Page Selected Listener Ġ= Ġ:: adjust NavBar ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġview Binding . view Pager . also Ġ{ Ġpager Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpager . adapter Ġ= ĠScreen Pager Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Manager Ġ= Ġchild FragmentManager , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Ġ= Ġview Lifecycle Owner . lifecycle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscreens Ġ= Ġpager Scre ens ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpager . register On Page Change Callback ( bottom Tab Adapter ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġview Binding . toolbar Layout . also Ġ{ Ġlayout Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . query Input . also Ġ{ Ġinput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback Flow Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġon TextChanged Listener Ġ= ĠOn TextChanged Listener (:: offer ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . add TextChanged Listener ( on TextChanged Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġawait Close Ġ{ Ġinput . remove TextChanged Listener ( on TextChanged Listener ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. de bounce ( timeout Millis Ġ= Ġ 5 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each ( viewModel :: submit Query ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch In ( scope Ġ= Ġview Lifecycle Owner . lifecycle Scope ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . clear Icon . also Ġ{ Ġicon Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon . visibility Ġ= ĠG ONE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . logo Icon . also Ġ{ Ġicon Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . query Input . also Ġ{ Ġinput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . text . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . visibility Ġ= ĠG ONE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . clear Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . hide Soft Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . search Icon . also Ġ{ Ġicon Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . search Icon . also Ġ{ Ġicon Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon . visibility Ġ= ĠG ONE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . logo Icon . also Ġ{ Ġicon Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon . visibility Ġ= ĠG ONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . query Input . also Ġ{ Ġinput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . visibility Ġ= ĠVIS IBLE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . request Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . show Soft Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . clear Icon . also Ġ{ Ġicon Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . settings Icon . also Ġ{ Ġicon Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Settings Sheet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠTab Layout Mediator ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . tab Layout , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . view Pager ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġtab , Ġposition Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Tab Adapter . configure Tab ( tab , Ġdata Ġ= Ġtabs Data [ position ]) ĊĠĠĠĠĠĠĠ Ġ}. attach () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadjust NavBar ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . toolbar Layout . also Ġ{ Ġlayout Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . logo Icon . also Ġ{ Ġicon Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . query Input . also Ġ{ Ġinput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . visibility Ġ= ĠG ONE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . clear Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . hide Soft Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . clear Icon . also Ġ{ Ġicon Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon . visibility Ġ= ĠG ONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . search Icon . also Ġ{ Ġicon Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon . visibility Ġ= ĠG ONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . toolbar Layout . also Ġ{ Ġlayout Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . logo Icon . also Ġ{ Ġicon Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . query Input . also Ġ{ Ġinput Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . visibility Ġ= ĠG ONE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . clear Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . hide Soft Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . clear Icon . also Ġ{ Ġicon Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon . visibility Ġ= ĠG ONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout . search Icon . also Ġ{ Ġicon Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Settings Sheet () Ġ{ ĊĠĠĠĠĠĠĠ ĠSettings Sheet (). also Ġ{ Ġsheet Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsheet . show ( fragment Manager Ġ= Ġactivity ?. support FragmentManager ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ