package Ġio . flater lab . mes hex am . result . ui . list Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Sp ann able Ċ import Ġandroid . text . style . ForegroundColor Span Ċ import Ġandroid . view . View Ċ import Ġandroidx . core . text . to Sp ann able Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġio . flater lab . mes hex am . android base .* Ċ import Ġio . flater lab . mes hex am . android base . common . adapter . Client ListAdapter Ċ import Ġio . flater lab . mes hex am . result . Client Result Launcher Ċ import Ġio . flater lab . mes hex am . result . R Ċ import Ġio . flater lab . mes hex am . result . databinding . Fragment Result List Binding Ċ import Ġio . flater lab . mes hex am . result . d vo . Result Item D vo Ċ import Ġio . flater lab . mes hex am . u ikit . ext . getColor Attr Ċ import Ġjavax . inject . Inject Ċ Ċ @ Android EntryPoint Ċ internal Ġclass ĠResult List Fragment Ġ: ĠView Binding Fragment < Fragment Result List Binding >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠResult List ViewModel Ġby Ġvm () ĊĠĠĠ Ġprivate Ġval Ġwatcher Manager Ġ= ĠText Watcher Manager ( this ) ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġresult ListAdapter : ĠClient ListAdapter ĊĊĠĠĠ Ġoverride Ġval Ġview Binder : ĠView Binding Provider < Fragment Result List Binding > ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠFragment Result List Binding :: inflate ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġinit RecyclerView () ĊĊĠĠĠĠĠĠĠ ĠviewModel . exam Info . observe ( view Lifecycle Owner ) Ġ{ Ġmeta Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( binding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar Host Result . setTitle ( meta . exam Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar Host Result . set Subtitle ( meta . info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Duration ( meta . duration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Submission Amount ( meta . submission Count Ġto Ġmeta . expected Submission Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel . result List State . observe ( view Lifecycle Owner , Ġbinding . re cyclerView Results :: setState ) ĊĠĠĠĠĠĠĠ ĠviewModel . result List . observe ( view Lifecycle Owner , Ġresult ListAdapter :: submit List ) ĊĠĠĠĠĠĠĠ ĠviewModel . command Open Result . observe ( view Lifecycle Owner ) Ġ{ Ġattempt Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ result List Fragment _ to _ individual Result Fragment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClient Result Launcher ( attempt Id , Ġshow Correct ness Ġ= Ġtrue ). to Bundle Args () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . et Host Result Search . bind Text Watcher ( watcher Manager ) Ġ{ Ġeditable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on Search TextChanged ( editable ?. toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit RecyclerView () Ġ= Ġwith ( binding . re cyclerView Results ) Ġ{ ĊĠĠĠĠĠĠĠ Ġre cyclerView . layout Manager Ġ= ĠLinearLayoutManager ( require Context ()) ĊĠĠĠĠĠĠĠ Ġadapter Ġ= Ġresult ListAdapter ĊĠĠĠĠĠĠĠ Ġresult ListAdapter . on Client ClickListener Ġ= Ġ{ Ġd vo Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on Result Clicked ( d vo Ġas ĠResult Item D vo ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Duration ( time : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= ĠgetString ( R . string . result _ list _ time , Ġtime ) ĊĠĠĠĠĠĠĠ Ġval ĠstartIndex Ġ= Ġtext . indexOf (': ') Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġsp anned Ġ= Ġtext . to Sp ann able (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Span ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFore ground Color Span ( require Context (). getColor Attr ( R . attr . color On Background )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartIndex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSp ann able . SPAN _ INCL USIVE _ EXCL USIVE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . tv Host Result Time . text Ġ= Ġsp anned ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Submission Amount ( amount : ĠPair < Int , ĠInt >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= ĠgetString ( R . string . result _ list _ submitted , Ġamount . first , Ġamount . second ) ĊĠĠĠĠĠĠĠ Ġval ĠstartIndex Ġ= Ġtitle . lastIndexOf (": ") Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġsp anned Ġ= Ġtitle . to Sp ann able (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Span ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFore ground Color Span ( require Context (). getColor Attr ( R . attr . color On Background )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartIndex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSp ann able . SPAN _ INCL USIVE _ EXCL USIVE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . tv Host Result Submitted . text Ġ= Ġsp anned ĊĠĠĠ Ġ} Ċ }