package Ġcom . p unto gr is . bl int . feature _ store . presentation . product . manage Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroidx . activity . result . Activity Result Launcher Ċ import Ġandroidx . activity . result . contract . Activity Result Contracts Ċ import Ġandroidx . fragment . app . set Fragment Result Listener Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . p unto gr is . bl int . R Ċ import Ġcom . p unto gr is . bl int . common . presentation . base . Base Fragment Ċ import Ġcom . p unto gr is . bl int . common . utils .* Ċ import Ġcom . p unto gr is . bl int . databinding . Fragment Manage Products Binding Ċ import Ġcom . p unto gr is . bl int . feature _ store . domain . model . product . Product With Details Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġkotlinx . coroutines . flow . collect Ċ Ċ @ Android EntryPoint Ċ class ĠManage Products Fragment Ġ: ĊĠĠĠ ĠBase Fragment < Fragment Manage Products Binding >( R . layout . fragment _ manage _ products ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠManage Products ViewModel Ġby Ġview Models () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġscanner Launcher : ĠActivity Result Launcher < String > ĊĊĠĠĠ Ġoverride Ġfun Ġinitialize Views () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . fragment Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġbinding . viewModel Ġ= ĠviewModel ĊĠĠĠĠĠĠĠ Ġbinding . manage Product Search . clear Focus () ĊĊĠĠĠĠĠĠĠ Ġsetup Toolbar () ĊĠĠĠĠĠĠĠ Ġsetup Products Adapter () ĊĠĠĠĠĠĠĠ Ġsetup Scanner Launcher () ĊĠĠĠĠĠĠĠ Ġsetup Result Listener () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Scanner Launcher () Ġ{ ĊĠĠĠĠĠĠĠ Ġscanner Launcher Ġ= Ġregister For Activity Result ( Activity Result Contracts . Request Permission ()) ĊĠĠĠĠĠĠĠ Ġ{ Ġis Granted : ĠBoolean Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Granted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManage Products Fragment Directions . action Global Scanner Fragment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Result Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( action ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĠUi Interface . show Sn ackBar ( getString ( R . string . sn ack _ require _ camera _ permission )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Products Adapter () Ġ{ ĊĠĠĠĠĠĠĠ ĠManage Products Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshort ClickListener Ġ= Ġ{ Ġon Product Short ClickListener ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlong ClickListener Ġ= Ġ{ Ġon Product Long ClickListener ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . manage Products RecyclerView . adapter Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubscribe Ui ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsubscribe Ui ( adapter : ĠManage Products Adapter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlaunch And Repeat With View Lifecycle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . products Flow . collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . submit Data ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlaunch And Repeat With View Lifecycle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Empty Ui On Empty Adapter ( adapter , Ġbinding . manage Products Empty Ui ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Product Short ClickListener ( product : ĠProduct With Details ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhide Keyboard () ĊĠĠĠĠĠĠĠ Ġval Ġaction Ġ= ĠManage Products Fragment Directions . action Global Product Fragment ( product ) ĊĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( action ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Toolbar () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . manage Products Toolbar . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister Toolbar Back Button ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On MenuItem ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ add _ manage _ products Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( R . id . edit Product Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ scanner _ manage _ products Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscanner Launcher . launch ( Manifest . permission . CAMERA ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Result Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Fragment Result Listener ( Keys . SCAN NER _ RESULT _ KEY ) Ġ{ Ġ_, Ġbundle Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . getString ( Keys . PRODUCT _ BAR CODE _ KEY )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . set Query ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Product Long ClickListener ( product : ĠProduct With Details ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Order Picker And Navigate ( product . product ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( binding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanage Products Toolbar . set Navigation OnClickListener ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanage Product Search . clear Focus () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanage Products RecyclerView . adapter Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠ Ġ} Ċ }