package Ġcom . app . ly ng ua . controllers Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġcom . app . ly ng ua . models . Result Logs . Result Logs Ċ import Ġcom . app . ly ng ua . models . Result Logs . Result Logs Database Ċ import Ġcom . app . ly ng ua . models . Result Logs . Result Logs Repository Ċ import Ġcom . app . ly ng ua . models . categories .* Ċ import Ġcom . app . ly ng ua . models . goals . Goal Ċ import Ġcom . app . ly ng ua . models . words . Results Ċ import Ġcom . app . ly ng ua . models . words . Word Ċ import Ġjava . util .* Ċ import Ġkotlin . concurrent . thread Ċ Ċ class ĠCategory Controller ( context : ĠContext ){ ĊĊĠĠĠ Ġval Ġread All Data : ĠLive Data < List < Category >> ĊĠĠĠ Ġprivate Ġval Ġrepository : ĠCategory Repository ĊĠĠĠ Ġprivate Ġval Ġresults Repository : ĠResult Logs Repository ĊĊĠĠĠ Ġinit { ĊĠĠĠĠĠĠĠ Ġval Ġcategory Dao Ġ= ĠCategory Database . get Database ( context ). category Dao () ĊĠĠĠĠĠĠĠ Ġrepository Ġ= ĠCategory Repository ( category Dao ) ĊĠĠĠĠĠĠĠ Ġread All Data Ġ= Ġrepository . read All Data ĊĊĠĠĠĠĠĠĠ Ġval Ġresults Dao Ġ= ĠResult Logs Database . get Database ( context ). result Logs Dao () ĊĠĠĠĠĠĠĠ Ġresults Repository Ġ= ĠResult Logs Repository ( results Dao ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġadd Category ( cat Name : ĠString ): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcategory API Ġ= ĠCategory API ĊĠĠĠĠĠĠĠ Ġval Ġgoal : ĠGoal Ġ= ĠGoal ( Calendar . getInstance (), Ġ 0 , 0 , Ġ 0 , 0 , 0 , 0 . 0 , 0 . 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcategory Ġ= ĠCategory ( 0 , Ġcat Name , ĠĠ 6 , Ġempty List (), Ġ 1 , Ġgoal ) ĊĠĠĠĠĠĠĠ Ġthread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid _ added Ġ= Ġrepository . add Category ( category ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Words ", Ġ" The Ġid Ġis Ġ${ id _ added }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategory API . get Words For Category ( id _ added , Ġcat Name , Ġrepository ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Category ( cat Id : ĠInt , Ġcat Name : ĠString , Ġcat Words : ĠInt , Ġcat Words List : ĠList < Word >, Ġcat Session Number : ĠInt , Ġcat Goal : ĠGoal ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcategory Ġ= ĠCategory ( cat Id , Ġcat Name , Ġ Ġcat Words , Ġcat Words List , Ġcat Session Number , Ġcat Goal ) ĊĊĠĠĠĠĠĠĠ Ġthread { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . update Category ( category ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Category Goal ( cat Id : ĠInt , Ġcat Goal : ĠGoal ): ĠBoolean { ĊĠĠĠĠĠĠĠ Ġthread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . update Category Goal ( cat Id , Ġcat Goal ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Category ( category : ĠCategory ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġthread { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . delete Category ( category ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Recent Category (): ĠCategory ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcategory : ĠCategory ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġthread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategory Ġ= Ġrepository . get Recent Category () ĊĠĠĠĠĠĠĠ Ġ}. join () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcategory ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetAll Categories (){ ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġlog Results ( result : ĠResults ){ ĊĠĠĠĠĠĠĠ Ġval Ġresult Logs : ĠResult Logs Ġ= ĠResult Logs ( 0 , Ġresult . cat Id , Ġresult . cat Name , Ġresult . epoch Timestamp , Ġresult . num Correct , Ġresult . num Questions ) ĊĠĠĠĠĠĠĠ Ġthread { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresults Repository . add Result ( result Logs ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Results ( time Frame : ĠLong ): ĠList < Result Logs >? { ĊĠĠĠĠĠĠĠ Ġvar Ġresults : ĠList < Result Logs >? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġthread { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresults Ġ= Ġresults Repository . read Logs ( time Frame ) ĊĠĠĠĠĠĠĠ Ġ}. join () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresults ĊĠĠĠ Ġ} Ċ Ċ }