package Ġbil ba o . iv an lis . da ftar Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . text . Sp ann able Ċ import Ġandroid . text . Sp ann able String Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . text . style . ForegroundColor Span Ċ import Ġandroid . view . View Ċ import Ġandroidx . lifecycle .* Ċ import Ġbil ba o . iv an lis . da ftar . constants . POS _ NOUN Ċ import Ġbil ba o . iv an lis . da ftar . constants . POS _ P ARTIC LE Ċ import Ġbil ba o . iv an lis . da ftar . constants . POS _ VERB Ċ import Ġbil ba o . iv an lis . da ftar . database .* Ċ import Ġkotlinx . coroutines .* Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . lang . IllegalArgumentException Ċ Ċ data Ġclass ĠEvalu ated Word Form Input ( val Ġlesson Id : ĠLong Ġ= Ġ 0 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpos Ch osen : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpast Form : ĠSp ann able , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpast Score : ĠDouble Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnon past Form : ĠSp ann able , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnon past Score : ĠDouble Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġverb no un Form : ĠSp ann able , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġverb no un Score : ĠDouble Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsingular Form : ĠSp ann able , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsingular Score : ĠDouble Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplural Form : ĠSp ann able , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplural Score : ĠDouble Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparticle Form : ĠSp ann able , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparticle Score : ĠDouble Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtranslation : ĠSp ann able , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġoverall Score : ĠDouble Ġ= Ġ 0 . 0 ) Ċ Ċ class ĠEvaluation ViewModel ( application : ĠApplication , Ġval Ġtrue Values : ĠWord Form Input , Ġval Ġuser Values : ĠWord Form Input ): ĊĠĠĠ ĠAndroid ViewModel ( application ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġtraining Process Ġ= ĠTraining Process . getInstance ( application ) ĊĊĠĠĠ Ġprivate Ġval Ġ_ navigate To Next Exercise Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġnavigate To Next Exercise : ĠLive Data < Boolean > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ navigate To Next Exercise ĊĊĠĠĠ Ġprivate Ġval Ġ_ verb Visible Ġ= ĠMutable LiveData < Int >() ĊĠĠĠ Ġval Ġverb Visible : ĠLive Data < Int > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ verb Visible ĊĊĠĠĠ Ġprivate Ġval Ġ_ no un Visible Ġ= ĠMutable LiveData < Int >() ĊĠĠĠ Ġval Ġno un Visible : ĠLive Data < Int > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ no un Visible ĊĊĠĠĠ Ġprivate Ġval Ġ_ particle Visible Ġ= ĠMutable LiveData < Int >() ĊĠĠĠ Ġval Ġparticle Visible : ĠLive Data < Int > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ particle Visible ĊĊĠĠĠ Ġvar Ġnext Exercise Data : ĠWord Part Of Speech ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġ_ evalu ated Ġ= ĠMutable LiveData < Evalu ated Word Form Input >() ĊĠĠĠ Ġval Ġevaluated : ĠLive Data < Evalu ated Word Form Input > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ evalu ated ĊĊĠĠĠ Ġval Ġevaluated Past Ġ= ĠTransform ations . map ( evalu ated ) Ġ{ ĊĠĠĠĠĠĠĠ Ġit ?. let Ġ{ Ġevaluated Forms Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevaluated Forms . past Form ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġevaluated Non past Ġ= ĠTransform ations . map ( evalu ated ) Ġ{ ĊĠĠĠĠĠĠĠ Ġit ?. let Ġ{ Ġevaluated Forms Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevaluated Forms . non past Form ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġevaluated Verb no un Ġ= ĠTransform ations . map ( evalu ated ) Ġ{ ĊĠĠĠĠĠĠĠ Ġit ?. let Ġ{ Ġevaluated Forms Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevaluated Forms . verb no un Form ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġevaluated Sing ular Ġ= ĠTransform ations . map ( evalu ated ) Ġ{ ĊĠĠĠĠĠĠĠ Ġit ?. let Ġ{ Ġevaluated Forms Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevaluated Forms . singular Form ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġevaluated Pl ural Ġ= ĠTransform ations . map ( evalu ated ) Ġ{ ĊĠĠĠĠĠĠĠ Ġit ?. let Ġ{ Ġevaluated Forms Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevaluated Forms . plural Form ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġevaluated Particle Ġ= ĠTransform ations . map ( evalu ated ) Ġ{ ĊĠĠĠĠĠĠĠ Ġit ?. let Ġ{ Ġevaluated Forms Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevaluated Forms . particle Form ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġevaluated Translation Ġ= ĠTransform ations . map ( evalu ated ) Ġ{ ĊĠĠĠĠĠĠĠ Ġit ?. let Ġ{ Ġevaluated Forms Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevaluated Forms . translation ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġrepository : ĠNotebook Repository Ġ= ĠNotebook Repository ( Notebook Db . getInstance ( application ). notebook Dao ()) ĊĠĠĠ Ġprivate Ġvar ĠviewModel Job Ġ= ĠJob () ĊĠĠĠ Ġprivate Ġval Ġui Scope Ġ= ĠCor outine Scope ( Dispatch ers . Main Ġ+ ĠviewModel Job ) ĊĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ navigate To Next Exercise . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ_ verb Visible . value Ġ= Ġpos To Verb Visibility ( true Values . pos Ch osen ) ĊĠĠĠĠĠĠĠ Ġ_ no un Visible . value Ġ= Ġpos To No un Visibility ( true Values . pos Ch osen ) ĊĠĠĠĠĠĠĠ Ġ_ particle Visible . value Ġ= Ġpos To Particle Visibility ( true Values . pos Ch osen ) ĊĠĠĠĠĠĠĠ Ġ_ evalu ated . value Ġ= Ġevaluate ( true Values , Ġuser Values ) ĊĊĠĠĠĠĠĠĠ ĠTim ber . d (" Evalu ated . ĠOverall Ġscore Ġ${ _ evalu ated . value ?. overall Score }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Navigate To Next Exercise () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtraining Process . advance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Exercise Word Id Ġ= Ġtraining Process . get Word Id Corre sponding To Exercise ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtraining Process . next Exercise Index . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" About Ġto Ġgo Ġto Ġex . Ġ[ ${ training Process . next Exercise Index }] Ġ-> Ġ$ next Exercise Word Id ") ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġui Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Exercise Data Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . extract Word Part Of Speech ( next Exercise Word Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ navigate To Next Exercise . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch Ġ( e : ĠTraining Process Finished Exception ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Exercise Data Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ navigate To Next Exercise . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Navigate To Next Exercise Complete () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ navigate To Next Exercise . value Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpos To Verb Visibility ( pos : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġwhen ( pos ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPOS _ VERB Ġ-> ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġpos To No un Visibility ( pos : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġwhen ( pos ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPOS _ NOUN Ġ-> ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġpos To Particle Visibility ( pos : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġwhen ( pos ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPOS _ P ARTIC LE Ġ-> ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġevaluate ( true Values : ĠWord Form Input , Ġuser Values : ĠWord Form Input ): ĠEvalu ated Word Form Input Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn ĠEvalu ated Word Form Input ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġlesson Id Ġ= Ġtrue Values . lesson Id , Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġpos Ch osen Ġ= Ġtrue Values . pos Ch osen Ċ // ĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġform Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġscore Sum Ġ= Ġ 0 . 0 ĊĊĠĠĠĠĠĠĠ Ġ// TODO : Ġrefactor Ġrepet itive Ġcode ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġwhen ( true Values . pos Ch osen ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠPOS _ VERB Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpast Res Ġ= Ġevaluate String ( true Values . past Form , Ġuser Values . past Form ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( true Values . past Form . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ++ form Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscore Sum Ġ+= Ġpast Res . first ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnon past Res Ġ= Ġevaluate String ( true Values . non past Form , Ġuser Values . non past Form ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( true Values . non past Form . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ++ form Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscore Sum Ġ+= Ġnon past Res . first ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġverb no un Res Ġ= Ġevaluate String ( true Values . verb no un Form , Ġuser Values . verb no un Form ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( true Values . verb no un Form . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ++ form Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscore Sum Ġ+= Ġverb no un Res . first ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvalu ated Word Form Input ( lesson Id Ġ= Ġtrue Values . lesson Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpos Ch osen Ġ= Ġtrue Values . pos Ch osen , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpast Form Ġ= Ġpast Res . second , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpast Score Ġ= Ġpast Res . first , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnon past Form Ġ= Ġnon past Res . second , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnon past Score Ġ= Ġnon past Res . first , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverb no un Form Ġ= Ġverb no un Res . second , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverb no un Score Ġ= Ġverb no un Res . first , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsingular Form Ġ= ĠSp ann able String ("") Ġas ĠSp ann able , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplural Form Ġ= ĠSp ann able String ("") Ġas ĠSp ann able , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparticle Form Ġ= ĠSp ann able String ("") Ġas ĠSp ann able , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslation Ġ= ĠSp ann able String ( true Values . translation ) Ġas ĠSp ann able , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverall Score Ġ= Ġscore Sum Ġ/ Ġform Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPOS _ NOUN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsingular Res Ġ= Ġevaluate String ( true Values . singular Form , Ġuser Values . singular Form ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( true Values . singular Form . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ++ form Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscore Sum Ġ+= Ġsingular Res . first ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplural Res Ġ= Ġevaluate String ( true Values . plural Form , Ġuser Values . plural Form ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( true Values . plural Form . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ++ form Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscore Sum Ġ+= Ġplural Res . first ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvalu ated Word Form Input ( lesson Id Ġ= Ġtrue Values . lesson Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpos Ch osen Ġ= Ġtrue Values . pos Ch osen , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpast Form Ġ= ĠSp ann able String ("") Ġas ĠSp ann able , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnon past Form Ġ= ĠSp ann able String ("") Ġas ĠSp ann able , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverb no un Form Ġ= ĠSp ann able String ("") Ġas ĠSp ann able , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsingular Form Ġ= Ġsingular Res . second , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsingular Score Ġ= Ġsingular Res . first , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplural Form Ġ= Ġplural Res . second , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplural Score Ġ= Ġplural Res . first , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparticle Form Ġ= ĠSp ann able String ("") Ġas ĠSp ann able , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslation Ġ= ĠSp ann able String ( true Values . translation ) Ġas ĠSp ann able , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverall Score Ġ= Ġscore Sum Ġ/ Ġform Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparticle Res Ġ= Ġevaluate String ( true Values . particle Form , Ġuser Values . particle Form ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( true Values . particle Form . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ++ form Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscore Sum Ġ+= Ġparticle Res . first ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvalu ated Word Form Input ( lesson Id Ġ= Ġtrue Values . lesson Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpos Ch osen Ġ= Ġtrue Values . pos Ch osen , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpast Form Ġ= ĠSp ann able String ("") Ġas ĠSp ann able , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnon past Form Ġ= ĠSp ann able String ("") Ġas ĠSp ann able , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverb no un Form Ġ= ĠSp ann able String ("") Ġas ĠSp ann able , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsingular Form Ġ= ĠSp ann able String ("") Ġas ĠSp ann able , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplural Form Ġ= ĠSp ann able String ("") Ġas ĠSp ann able , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparticle Form Ġ= Ġparticle Res . second , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparticle Score Ġ= Ġparticle Res . first , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslation Ġ= ĠSp ann able String ( true Values . translation ) Ġas ĠSp ann able , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverall Score Ġ= Ġscore Sum Ġ/ Ġform Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġsave Ġoverall Ġscore Ġto ĠDB ĊĠĠĠĠĠĠĠ Ġui Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscore Id Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . insert Score ( Score ( 0 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġword Id Ġ= Ġtrue Values . word Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdateTime Ġ= ĠSystem . currentTimeMillis (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscore Value Ġ= Ġresult . overall Score )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Inserted Ġscore Ġwith Ġid Ġ= Ġ$ score Id ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġevaluate String ( true Value : ĠString , Ġuser Value : ĠString ): ĠPair < Double , ĠSp ann able > Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġtrue Value Span Ġ= ĠSp ann able String ( true Value ) Ċ // ĠĠĠĠĠĠĠ Ġtrue Value Span . set Span ( ForegroundColor Span ( Color . GREEN ), Ġ 0 , Ġtrue Value Span . length , Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠSp ann able . SPAN _ EXCL USIVE _ EXCL USIVE ) Ċ // ĠĠĠĠĠĠĠ Ġval Ġuser Value Span Ġ= ĠSp ann able String ( user Value ) Ċ // ĠĠĠĠĠĠĠ Ġuser Value Span . set Span ( ForegroundColor Span ( Color . RED ), Ġ 0 , Ġtrue Value Span . length , Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠSp ann able . SPAN _ EXCL USIVE _ EXCL USIVE ) Ċ // Ċ // ĠĠĠĠĠĠĠ Ġreturn ĠText Utils . concat ( user Value Span , Ġ" Ġ", Ġtrue Value Span ) Ġas ĠSp ann able ĊĊĠĠĠĠĠĠĠ Ġ// val Ġresult Ġ= ĠSp ann able String ("$ user Value Ġ$ true Value ") ĊĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= ĠPair < Double , ĠSp ann able >( 0 . 0 , ĠSp ann able String ("")) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( true Value . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĊĠĠĠĠĠĠĠ Ġwhen ( user Value Ġ== Ġtrue Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠPair < Double , ĠSp ann able >( 1 . 0 , ĠSp ann able String ( user Value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . second . set Span ( ForegroundColor Span ( Color . GREEN ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , Ġuser Value . length , ĠSp ann able . SPAN _ EXCL USIVE _ EXCL USIVE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinstead Of User Value Ġ= Ġwhen ( user Value . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġuser Value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġ" Ġ- Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠPair < Double , ĠSp ann able >( 0 . 0 , ĠSp ann able String ("$ instead Of User Value Ġ$ true Value ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// result Ġ= ĠSp ann able String ("$ instead Of User Value Ġ$ true Value ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . second . set Span ( ForegroundColor Span ( Color . RED ), Ġ 0 , Ġinstead Of User Value . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSp ann able . SPAN _ EXCL USIVE _ EXCL USIVE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . second . set Span ( ForegroundColor Span ( Color . GREEN ), Ġinstead Of User Value . length Ġ+ Ġ 1 , Ġresult . second . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSp ann able . SPAN _ EXCL USIVE _ EXCL USIVE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠEvaluation ViewModel Factory ( private Ġval Ġapplication : ĠApplication , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġtrue Values : ĠWord Form Input , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġuser Values : ĠWord Form Input ): ĊĠĠĠ ĠViewModel Provider . Factory Ġ{ ĊĊĠĠĠ Ġ@ Suppress (" unchecked _ cast ") ĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠViewModel ?> Ġcreate ( model Class : ĠClass < T >): ĠT Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( model Class . isAssignableFrom ( Evaluation ViewModel :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEvaluation ViewModel ( application , Ġtrue Values , Ġuser Values ) Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Unknown ĠViewModel Ġclass ") ĊĠĠĠ Ġ} Ċ } ĊĊ