package Ġcom . av test app . android . android base . av _ test . core . questions Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . av test app . android . android base . Pref Keys Ċ import Ġcom . av test app . android . android base . R Ċ import Ġcom . av test app . android . android base . av _ test . models . Question Type Ċ import Ġcom . av test app . android . android base . av _ test . models . Question Type With Hash Ċ import Ġcom . av test app . android . android base . av _ test . models . requests . Post Users Score Request Ċ import Ġcom . av test app . android . android base . av _ test . models . response . Login SignUp Response Ċ import Ġcom . av test app . android . android base . av _ test . models . response . Option Ċ import Ġcom . av test app . android . android base . av _ test . models . response . Question Ċ import Ġcom . av test app . android . android base . av _ test . repository . Auth Repository Ċ import Ġcom . av test app . android . android base . av _ test . repository . Question Repository Ċ import Ġcom . av test app . android . android base . base . Base ViewModel Ċ import Ġcom . av test app . android . android base . extensions . Event Ċ import Ġcom . av test app . android . android base . network utils . Loading Status Ċ import Ġcom . av test app . android . android base . network utils . Result Ċ import Ġcom . av test app . android . android base . utils . FormField Ċ import Ġcom . av test app . android . android base . utils . FormField Validators . validate NotEmpty Ċ import Ġcom . av test app . android . android base . utils . Prefs Utils Ċ import Ġcom . av test app . android . android base . utils . Resource Provider Ċ import Ġkotlinx . coroutines . launch Ċ import Ġtim ber . log . Tim ber Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Singleton Ċ Ċ @ Singleton Ċ class ĠQuestion ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġval Ġprefs Utils : ĠP refs Utils , ĊĠĠĠ Ġval Ġresource Provider : ĠResource Provider , ĊĠĠĠ Ġprivate Ġval Ġquestion Repository : ĠQuestion Repository , ĊĠĠĠ Ġprivate Ġval Ġauth Repository : ĠAuth Repository Ċ ) Ġ: ĠBase ViewModel () Ġ{ ĊĊĠĠĠ Ġvar ĠsetCurrent Question Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġprivate Ġval Ġ_ question Type Pick ed With Hash Ġ= ĠMutable LiveData < Event < Question Type With Hash >>() ĊĠĠĠ Ġprivate Ġval Ġ_ question Type Ġ= ĠMutable LiveData < Event < Question Type >>() ĊĠĠĠ Ġprivate Ġval Ġ_ current Question Ġ= ĠMutable LiveData < Event < Question >>() ĊĠĠĠ Ġprivate Ġval Ġ_ current Question Number Ġ= ĠMutable LiveData < Int >() ĊĠĠĠ Ġprivate Ġval Ġ_ total Question Number Ġ= ĠMutable LiveData < Event < Int >>() ĊĠĠĠ Ġprivate Ġval Ġquestion List Ġ= ĠArrayList < Question >() ĊĠĠĠ Ġprivate Ġval Ġun Changed Question List Ġ= ĠArrayList < Question >() ĊĠĠĠ Ġprivate Ġval Ġ_ question List LiveData Ġ= ĠMutable LiveData < Event < List < Question >> >() ĊĠĠĠ Ġprivate Ġval Ġ_ topic List LiveData Ġ= ĠMutable LiveData < Event < List < String >> >() ĊĠĠĠ Ġprivate Ġval Ġ_ practice Question Session Answers Ġ= ĊĠĠĠĠĠĠĠ ĠMutable LiveData < HashMap < String , ĠOption >>( HashMap ()) ĊĠĠĠ Ġprivate Ġval Ġ_ study Question Session Answers Ġ= ĊĠĠĠĠĠĠĠ ĠMutable LiveData < HashMap < String , ĠOption >>( HashMap ()) ĊĠĠĠ Ġprivate Ġval Ġ_ practice Question Session Number Ġ= ĠMutable LiveData < Int >() ĊĠĠĠ Ġprivate Ġval Ġ_ study Question Session Number Ġ= ĠMutable LiveData < Int >() ĊĠĠĠ Ġval Ġsearch Question List Ġ= ĠMutable LiveData < List < Question >>() ĊĠĠĠ Ġprivate Ġval Ġ_ search Question List Ġ= ĠMutable LiveData < Event < List < Question >> >() ĊĠĠĠ Ġprivate Ġval Ġ_ score Submitted Ġ= ĠMutable LiveData < Event < Boolean >>() ĊĊĠĠĠ Ġval Ġpractice Question Session Answers : ĠLive Data < HashMap < String , ĠOption >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ practice Question Session Answers ĊĊĠĠĠ Ġval Ġstudy Question Session Answers : ĠLive Data < HashMap < String , ĠOption >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ study Question Session Answers ĊĊĠĠĠ Ġval Ġpractice Question Session Number : ĠLive Data < Int > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ practice Question Session Number ĊĊĠĠĠ Ġval Ġscores Submitted Ġ: ĠLive Data < Event < Boolean >> ĊĠĠĠ Ġget () Ġ= Ġ_ score Submitted ĊĊĠĠĠ Ġval Ġcurrent Question : ĠLive Data < Event < Question >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ current Question ĊĊĠĠĠ Ġval Ġquestion List LiveData : ĠLive Data < Event < List < Question >>> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ question List LiveData ĊĊĠĠĠ Ġval Ġtopic List LiveData : ĠLive Data < Event < List < String >>> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ topic List LiveData ĊĊĠĠĠ Ġval Ġcurrent Question Number : ĠLive Data < Int > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ current Question Number ĊĊĠĠĠ Ġval Ġtotal Question Number : ĠLive Data < Event < Int >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ total Question Number ĊĊĠĠĠ Ġval Ġsearch Question List Event : ĠLive Data < Event < List < Question >>> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ search Question List ĊĊĊĠĠĠ Ġval Ġquestion Type Pick ed With Hash : ĠLive Data < Event < Question Type With Hash >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ question Type Pick ed With Hash ĊĊĠĠĠ Ġval Ġquestion Type : ĠLive Data < Event < Question Type >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ question Type ĊĊĠĠĠ Ġval Ġsearch Term Ġ= ĠForm Field < String >( required Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Validator Ġ{ Ġvalidate NotEmpty () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon User Pick ed Question Options ( id : ĠString , Ġoption : ĠOption ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(_ practice Question Session Answers . value ?. contains ( id ) Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ practice Question Session Answers . value ?. put ( id , Ġoption ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ practice Question Session Answers . value ?. put ( id , Ġoption ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ_ practice Question Session Number . value Ġ= Ġ_ practice Question Session Answers . value ?. size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon User Pick ed Study Question Options ( id : ĠString , Ġoption : ĠOption ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(_ study Question Session Answers . value ?. contains ( id ) Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ study Question Session Answers . value ?. put ( id , Ġoption ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ study Question Session Answers . value ?. put ( id , Ġoption ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ_ study Question Session Number . value Ġ= Ġ_ practice Question Session Answers . value ?. size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear Answers () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ practice Question Session Answers . value Ġ= ĠHashMap () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear Study Question Answer () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ study Question Session Answers . value Ġ= ĠHashMap () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Question Type ( question Type With Hash : ĠQuestion Type With Hash ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ question Type Pick ed With Hash . value Ġ= ĠEvent ( question Type With Hash ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Question Type ( question Type With Hash : ĠQuestion Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ question Type . value Ġ= ĠEvent ( question Type With Hash ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġupdate Current Question ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ current Question . value Ġ= ĠEvent ( question List [ index Ġ- Ġ 1 ]) ĊĠĠĠĠĠĠĠ Ġ_ current Question Number . value Ġ= Ġindex ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Questions If Available From Prefs ( ĊĠĠĠĠĠĠĠ Ġprof ession Key : ĠString , ĊĠĠĠĠĠĠĠ Ġis Pract ice Question : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( shared Prefs . get Question Type () Ġ!= Ġ_ question Type Pick ed With Hash . value ?. peek Content ()?. question Type ?. name ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Questions And Sessions () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Pract ice Question ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( shared Prefs . getCurrent Session Details () Ġ!= Ġnull Ġ&& Ġshared Prefs . getCurrent Session () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ question List LiveData . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent ( update Questions With Book Marked ( shared Prefs . getCurrent Session () !!. question List )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ practice Question Session Answers . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Prefs . getCurrent Session Details () !!. current Answers ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquestion List . addAll ( update Questions With Book Marked ( shared Prefs . getCurrent Session () !!. question List )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetCurrent Question Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Questions ( prof ession Key , Ġis Pract ice Question ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( shared Prefs . getCurrent Study Session Details () Ġ!= Ġnull Ġ&& Ġshared Prefs . getCurrent Study Session () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ question List LiveData . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent ( update Questions With Book Marked ( shared Prefs . getCurrent Study Session () !!. question List )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Pract ice Question ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ practice Question Session Answers . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Prefs . getCurrent Study Session Details () !!. current Answers ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ study Question Session Answers . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquestion List . addAll ( update Questions With Book Marked ( shared Prefs . getCurrent Study Session () !!. question List )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun Changed Question List . addAll ( update Questions With Book Marked ( shared Prefs . getCurrent Study Session () !!. question List )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetCurrent Question Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetCurrent Question Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Questions ( prof ession Key , Ġis Pract ice Question ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Questions ( prof ession Key : ĠString , Ġis Pract ice Question : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĊĠĠĠĠĠĠĠ ĠTim ber . e (" get Questions ") ĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel Scope Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" viewModel Scope ĠNot Ġnull ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" viewModel Scope Ġnull ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠsetCurrent Question Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loading Status . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoading Status . Loading ( resource Provider . getString ( R . string . please _ wait )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġprefs Utils . get Pref As Object ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPref Keys . USER _ PROFILE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogin SignUp Response :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). token Data . token ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbe arer Ġ= Ġ" Bearer Ġ". plus ( token ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" viewModel Scope ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġr Ġ= Ġquestion Repository . get Questions ( bearer , Ġprof ession Key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Prefs . save Question Type (_ question Type Pick ed With Hash . value ?. peek Content ()?. question Type ?. name Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Pract ice Question ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! shared Prefs . get If User W ants Pract ice Questions Sh uffled ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( r . result . questions . size Ġ>= Ġ 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquestion List . addAll ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Questions With Book Marked ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr . result . questions . sub List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 9 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ question List LiveData . value Ġ= ĠEvent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Questions With Book Marked ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr . result . questions . sub List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 9 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquestion List . addAll ( update Questions With Book Marked ( r . result . questions )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ question List LiveData . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent ( update Questions With Book Marked ( r . result . questions )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquestion List . addAll ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshuffle Questions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Questions With Book Marked ( r . result . questions ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ question List LiveData . value Ġ= ĠEvent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshuffle Questions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Questions With Book Marked ( r . result . questions ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun Changed Question List . addAll ( update Questions With Book Marked ( r . result . questions )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! shared Prefs . get If User W ants Study Questions Sh uffled ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquestion List . addAll ( update Questions With Book Marked ( r . result . questions )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ question List LiveData . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent ( update Questions With Book Marked ( r . result . questions )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquestion List . addAll ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshuffle Questions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Questions With Book Marked ( r . result . questions ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ question List LiveData . value Ġ= ĠEvent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshuffle Questions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Questions With Book Marked ( r . result . questions ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ topic List LiveData . value Ġ= ĠEvent ( getAll Unique Topics ( question List )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loading Status . value Ġ= ĠLoading Status . Success ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Prefs . save Question Type (_ question Type Pick ed With Hash . value ?. peek Content ()?. question Type ?. name Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loading Status . value Ġ= ĠLoading Status . Error ( r . errorCode , Ġr . errorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsearch Questions () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! search Term . verify ()) Ġreturn ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loading Status . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoading Status . Loading ( resource Provider . getString ( R . string . please _ wait )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġprefs Utils . get Pref As Object ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPref Keys . USER _ PROFILE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogin SignUp Response :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). token Data . token ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbe arer Ġ= Ġ" Bearer Ġ". plus ( token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġresult Ġ= Ġquestion Repository . search Questions ( bearer , Ġsearch Term . value !! )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdated Questions Ġ= Ġupdate Questions With Book Marked ( result . result . questions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loading Status . value Ġ= ĠLoading Status . Success ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Question List . value Ġ= Ġupdated Questions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ search Question List . value Ġ= ĠEvent ( updated Questions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loading Status . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoading Status . Error ( result . errorCode , Ġresult . errorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsubmit Scores ( total Number : ĠInt , Ġscore : ĠInt ){ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loading Status . value Ġ= ĠLoading Status . Loading ( resource Provider . getString ( R . string . please _ wait )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġprefs Utils . get Pref As Object ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPref Keys . USER _ PROFILE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogin SignUp Response :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). token Data . token ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbe arer Ġ= Ġ" Bearer Ġ". plus ( token ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġresult Ġ= Ġauth Repository . submit Score ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe arer And Token Ġ= Ġbe arer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Users Score Request Ġ= ĠPost Users Score Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Score Ġ= Ġtotal Number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcorrect Score Ġ= Ġscore ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ score Submitted . value Ġ= ĠEvent ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loading Status . value Ġ= ĠLoading Status . Success ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ score Submitted . value Ġ= ĠEvent ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loading Status . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoading Status . Error ( result . errorCode , Ġresult . errorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshuffle Questions ( ĊĠĠĠĠĠĠĠ Ġquestions : ĠList < Question >, ĊĠĠĠĠĠĠĠ Ġis Pract ice Question : ĠBoolean ĊĠĠĠ Ġ): ĠList < Question > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquestion List Ġ= ĠArrayList < Question >() ĊĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġend : ĠInt Ġ= Ġif Ġ( is Pract ice Question ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( questions . size Ġ>= Ġ 1 0 ) Ġ 9 Ġelse Ġquestions . last Index ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquestions . last Index ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġstart .. end ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġran Int Ġ= Ġ( start .. end ). random () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" random ĠInt Ġ=== =$ start Ġ===== Ġ$ ran Int Ġ===== Ġend Ġ$ end Ġ======= Ġsize Ġ${ questions . size }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquestion List . add ( questions [ ran Int ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquestion List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd All LiveData To Observable s List () Ġ{ ĊĠĠĠĠĠĠĠ Ġobservable s List . addAll ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Question Number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquestion List LiveData , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Question , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Question Number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquestion Type Pick ed With Hash ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Total Questions Number ( total Number : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ total Question Number . value Ġ= ĠEvent ( total Number ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . e (" view Ġmodel Ġhas Ġbeen Ġcleared ") ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Questions With Book Marked ( question List : ĠList < Question >): ĠList < Question > Ġ{ ĊĠĠĠĠĠĠ Ġ// Ġshared Prefs . delete Pref ( Pref Keys . BOOK MARK ED _ QUEST IONS ) ĊĠĠĠĠĠĠĠ Ġval Ġquestions Ġ= ĠArrayList < Question >() ĊĠĠĠĠĠĠĠ Ġval Ġhash Map : ĠHashMap < String , ĠQuestion > Ġ= Ġjava . util . HashMap () ĊĠĠĠĠĠĠĠ Ġval Ġbook Marked Questions Ġ= Ġshared Prefs . get Saved Book Marked () ĊĠĠĠĠĠĠĠ Ġfor Ġ( question Ġin Ġbook Marked Questions . question List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhash Map . put ( question . id , Ġquestion ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( question Ġin Ġquestion List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hash Map . containsKey ( question . id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquestion . is Book marked Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquestions . add ( question ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġquestions ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetAll Unique Topics ( questions : ĠList < Question >): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtopic List : ĠMutable List < String > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġtopic List . add ( 0 , Ġ" All ") ĊĠĠĠĠĠĠĠ Ġvar Ġtopic Set : ĠMutable Set < String > Ġ= ĠHashSet () ĊĠĠĠĠĠĠĠ Ġfor Ġ( question Ġin Ġquestions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtopic Set . add ( question . topic . name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtopic List . addAll ( topic Set . toList ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġtopic List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Correct Answers Got ten (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtotal Number Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( keys Ġin Ġ_ practice Question Session Answers . value !!. keys ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(_ practice Question Session Answers . value ! ![ keys ]?. is Correct Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Number ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠTim ber . e (" ===== total Ġcorrect Ġgotten Ġ======= Ġ$ total Number ") ĊĠĠĠĠĠĠĠ Ġreturn Ġtotal Number ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġchoose AN ew Topic ( topic String : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Questions Ġ= Ġfilter Question With Topic ( un Changed Question List , Ġtopic String ) ĊĠĠĠĠĠĠĠ Ġ_ question List LiveData . value Ġ= ĠEvent ( new Questions ) ĊĠĠĠĠĠĠĠ Ġquestion List . clear () ĊĠĠĠĠĠĠĠ Ġquestion List . addAll ( new Questions ) ĊĠĠĠĠĠĠĠ Ġ// update Current Question ( 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfilter Question With Topic ( ĊĠĠĠĠĠĠĠ Ġquestions : ĠList < Question >, ĊĠĠĠĠĠĠĠ Ġtopic String : ĠString ĊĠĠĠ Ġ): ĠList < Question > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( topic String Ġ== Ġ" All ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġquestions ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġquestions . filter Ġ{ Ġit . topic . name Ġ== Ġtopic String Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear Questions And Sessions (){ ĊĠĠĠĠĠĠĠ Ġshared Prefs . delete Pref ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPref Keys . CURRENT _ QUEST IONS _ SESSION S _ DETAILS , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPref Keys . CURRENT _ ST UD Y _ QUEST IONS _ SESSION S _ DETAILS , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPref Keys . CURRENT _ RE VIEW _ QUEST IONS _ SESSION S , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPref Keys . CURRENT _ QUEST IONS _ SESSION S , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPref Keys . CURRENT _ ST UD Y _ QUEST IONS _ SESSION S ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġun Changed Question List . clear () ĊĠĠĠĠĠĠĠ Ġ_ question List LiveData . value Ġ= ĠEvent ( ArrayList ()) ĊĠĠĠĠĠĠĠ Ġquestion List . clear () ĊĠĠĠ Ġ} Ċ }