package Ġcom . m ith un . simple bible . ui . book Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . os . bundle Of Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . set Fragment Result Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . lifecycle . repeat On Lifecycle Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . m ith un . simple bible . data . database . model . Book Ċ import Ġcom . m ith un . simple bible . data . repository . Resource Ċ import Ġcom . m ith un . simple bible . databinding . Fragment Books Binding Ċ import Ġcom . m ith un . simple bible . ui . adapter . Book Adapter Ċ import Ġcom . m ith un . simple bible . view models . Selection ViewModel Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . launch Ċ Ċ @ Android EntryPoint Ċ class ĠBooks Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġkey Ġset Ġto Ġtrack Ġthe Ġstatus Ġof Ġbook Ġselection Ġin Ġview Ġpager ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġk Book Select State Ġ= Ġ" book Select State " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġselection ViewModel : ĠSelection ViewModel Ġby Ġview Models ({ Ġrequire Parent Fragment () Ġ}) ĊĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠFragment Books Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! ĊĊĠĠĠ Ġprivate Ġval Ġbook Adapter Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠBook Adapter Ġ{ Ġbook Name , Ġbook Id , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselection ViewModel . setSelected Book Id ( book Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselection ViewModel . setSelected Book Name ( book Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Book Selection Result () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠFragment Books Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġbinding . rv Books . adapter Ġ= Ġbook Adapter ĊĠĠĠĠĠĠĠ Ġsubscribe Ui () ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsubscribe Ui () Ġ{ ĊĠĠĠĠĠĠĠ Ġview Lifecycle Owner . lifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner . repeat On Lifecycle ( Lifecycle . State . STARTED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection ViewModel . books . collect Ġ{ Ġresource Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( resource ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Success Ġ-> Ġresource . data ?. let Ġ{ Ġload Books ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Error Ġ-> Ġresource . message ?. let Ġ{ Ġshow Error ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Loading Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLoading ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . pb Home . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Books ( listOf Books : ĠList < Book >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsuccess Ġor Ġerror Ġdata ĊĠĠĠĠĠĠĠ Ġbook Adapter . submit List ( listOf Books ) ĊĠĠĠĠĠĠĠ Ġbook Adapter . setSelected Book ( selection ViewModel . selected Book Id . value , Ġbinding . rv Books ) ĊĠĠĠĠĠĠĠ Ġbinding . pb Home . visibility Ġ= ĠView . GONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Error ( errorMessage : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġerror ĊĠĠĠĠĠĠĠ ĠSn ackbar . make ( binding . root , ĠerrorMessage , ĠSn ackbar . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġbinding . pb Home . visibility Ġ= ĠView . GONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġset Ġbook Ġselection Ġin Ġfragment Ġbundle ĊĠĠĠ Ġprivate Ġfun Ġset Book Selection Result () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Fragment Result ( Selection Fragment . k Request Key Book Select , Ġbundle Of ( k Book Select State Ġto Ġtrue )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= Ġnull ĊĠĠĠ Ġ} Ċ } Ċ