package Ġcom . me ks con way . are you expert . domain . use case Ċ Ċ import Ġcom . me ks con way . are you expert . common . Quiz Category Resources Ċ import Ġcom . me ks con way . are you expert . data . service . local . entity . Category Progress Entity Ċ import Ġcom . me ks con way . are you expert . data . service . remote . model . Questions Response Results Ċ import Ġcom . me ks con way . are you expert . domain . repository . Quiz Repository Ċ import Ġcom . me ks con way . are you expert . util . Res Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . Scheduler Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Singleton Ċ Ċ @ Singleton Ċ class ĠQu iz UseCase Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġrepository : ĠQu iz Repository Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġ_ category Model : ĠCategory Model ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġget Questions ( category : ĠCategory Model ): ĠObservable < Res < List < Questions Response Results >>> Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ category Model Ġ= Ġcategory ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . create < Res < List < Questions Response Results >>> Ġ{ Ġemitter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onNext ( Res . loading ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . get Category Questions ( category . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . map Indexed Ġ{ Ġindex , Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . total Question Ġ= Ġit . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . question Id Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanswers Arr Ġ= Ġarray ListOf < Answer >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanswers Arr . add ( Answer ( result . correct Answer , Ġcategory . resources )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . incorrect Answers . map Ġ{ Ġia Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanswers Arr . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnswer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġia , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory . resources ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanswers Arr . shuffle () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . answers Ġ= Ġarray ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . answers . addAll ( answers Arr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onNext ( Res . success ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onNext ( Res . error ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Category Progress And Quiz Category Progress ( ĊĠĠĠĠĠĠĠ Ġprogress : ĠInt , ĊĠĠĠĠĠĠĠ Ġmodel : ĠCategory Model ĊĠĠĠ Ġ): ĠObservable < Res < Boolean >> Ġ{ ĊĊĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . create < Res < Boolean >> Ġ{ Ġemitter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onNext ( Res . loading ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . insert Category Progress Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory Progress Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory Name Ġ= Ġmodel . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Ġ= Ġprogress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). concat With Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . update Quiz Category Progress ( model . id ). subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onNext ( Res . success ( true )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onNext ( Res . error ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ } ĊĊ Ċ data Ġclass ĠAnswer ( ĊĠĠĠ Ġval Ġanswer Text : ĠString , ĊĠĠĠ Ġval Ġresources : ĠQu iz Category Resources , ĊĠĠĠ Ġvar Ġis Selected : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġvar Ġdisabled : ĠBoolean Ġ= Ġfalse Ċ ) Ċ