package Ġcom . me ks con way . are you expert . ui . fragment . quiz Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ 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 . use case . Answer Ċ import Ġcom . me ks con way . are you expert . domain . use case . Category Model Ċ import Ġcom . me ks con way . are you expert . domain . use case . Quiz UseCase Ċ import Ġcom . me ks con way . are you expert . util . Res Ċ import Ġcom . me ks con way . are you expert . view model . Base ViewModel Ċ import Ġcom . me ks con way . are you expert . view model . Input Ċ import Ġcom . me ks con way . are you expert . view model . Output Ċ import Ġcom . me ks con way . are you expert . view model . Single Live Event Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . rx kotlin . addTo Ċ import Ġjavax . inject . Inject Ċ Ċ interface ĠQu iz Input Ġ: ĠInput Ġ{ ĊĠĠĠ Ġfun Ġget Questions ( category : ĠCategory Model ) ĊĠĠĠ Ġfun Ġset Category ( category : ĠCategory Model ) ĊĠĠĠ Ġfun ĠgetNext Question ( answer : ĠAnswer ) ĊĠĠĠ Ġfun Ġget First Question ( list : ĠList < Questions Response Results >) ĊĠĠĠ Ġfun Ġset Time is Up () ĊĠĠĠ Ġfun Ġupdate Db ( state : ĠQu iz Finish State ) Ċ } Ċ Ċ interface ĠQu iz Output Ġ: ĠOutput Ġ{ ĊĠĠĠ Ġval Ġquestions Data Output : ĠLive Data < Res < List < Questions Response Results >>> ĊĠĠĠ Ġval Ġnext Question Output : ĠLive Data < Questions Response Results > ĊĠĠĠ Ġval Ġfinish State : ĠLive Data < Quiz Finish State > ĊĠĠĠ Ġval Ġback To Menu Output : ĠLive Data < Res < Boolean >> ĊĠĠĠ Ġval Ġtry Again Output : ĠLive Data < Res < Boolean >> Ċ } Ċ Ċ class ĠQu iz ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġuse Case : ĠQu iz UseCase Ċ ) Ġ: ĠBase ViewModel < Quiz Input , ĠQu iz Output >(), ĠQu iz Input , ĠQu iz Output Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġinput : ĠQu iz Input ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis ĊĠĠĠ Ġoverride Ġval Ġoutput : ĠQu iz Output ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġthis ĊĊĠĠĠ Ġprivate Ġvar Ġ_ page : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġ_ question List Ġ= Ġarray ListOf < Questions Response Results >() ĊĠĠĠ Ġprivate Ġvar Ġ_ category Model : ĠCategory Model ? Ġ= Ġnull ĊĊĊĠĠĠ Ġoverride Ġfun Ġget Questions ( category : ĠCategory Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġuse Case . get Questions ( category ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ questions Output . value Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo ( composite Disposable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Category ( category : ĠCategory Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget Questions ( category ) ĊĠĠĠĠĠĠĠ Ġ_ category Model Ġ= Ġcategory ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget First Question ( list : ĠList < Questions Response Results >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ question List . addAll ( list ) ĊĠĠĠĠĠĠĠ Ġ_ next Question Output . value Ġ= Ġ_ question List [_ page ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Time is Up () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ finish State . value Ġ= ĠQu iz Finish State . TIME _ IS _ UP ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Db ( state : ĠQu iz Finish State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ category Model ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse Case . update Category Progress And Quiz Category Progress (_ page , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQu iz Finish State . BUTTON _ BACK _ TO _ MENU Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ back To Menu Output . value Ġ= Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQu iz Finish State . BUTTON _ TRY _ AG AIN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ try Again Output . value Ġ= Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo ( composite Disposable ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetNext Question ( answer : ĠAnswer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( answer . answer Text Ġ== Ġ_ question List [_ page ]. correct Answer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(_ page Ġ+ Ġ 1 Ġ> Ġ_ question List . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ finish State . value Ġ= ĠQu iz Finish State . SUCCESS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ page Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ next Question Output . value Ġ= Ġ_ question List [_ page ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ finish State . value Ġ= ĠQu iz Finish State . WRONG _ AN SW ER ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear Quiz () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ page Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ_ question List Ġ= Ġarray ListOf () ĊĠĠĠĠĠĠĠ Ġ_ category Model Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ_ questions Output . value Ġ= ĠRes . loading () ĊĠĠĠĠĠĠĠ Ġ_ next Question Output . value Ġ= Ġnull ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ questions Output Ġ= ĠMutable LiveData < Res < List < Questions Response Results >> >() ĊĠĠĠ Ġoverride Ġval Ġquestions Data Output : ĠLive Data < Res < List < Questions Response Results >>> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ questions Output ĊĊĠĠĠ Ġprivate Ġval Ġ_ next Question Output Ġ= ĠMutable LiveData < Questions Response Results >() ĊĠĠĠ Ġoverride Ġval Ġnext Question Output : ĠLive Data < Questions Response Results > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ next Question Output ĊĊĠĠĠ Ġprivate Ġval Ġ_ finish State Ġ= ĠSingle Live Event < Quiz Finish State >() ĊĠĠĠ Ġoverride Ġval Ġfinish State : ĠLive Data < Quiz Finish State > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ finish State ĊĊĠĠĠ Ġprivate Ġval Ġ_ back To Menu Output Ġ= ĠMutable LiveData < Res < Boolean >>() ĊĠĠĠ Ġoverride Ġval Ġback To Menu Output : ĠLive Data < Res < Boolean >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ back To Menu Output ĊĊĠĠĠ Ġprivate Ġval Ġ_ try Again Output Ġ= ĠMutable LiveData < Res < Boolean >>() ĊĠĠĠ Ġoverride Ġval Ġtry Again Output : ĠLive Data < Res < Boolean >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ try Again Output Ċ Ċ } Ċ Ċ enum Ġclass ĠQu iz Finish State Ġ{ ĊĠĠĠ ĠSUCCESS , ĊĠĠĠ ĠTIME _ IS _ UP , ĊĠĠĠ ĠWR ONG _ AN SW ER , ĊĠĠĠ ĠBUTTON _ BACK _ TO _ MENU , ĊĠĠĠ ĠBUTTON _ TRY _ AG AIN Ċ } Ċ