package Ġga . h arr ys ul li van . lang sy Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġga . h arr ys ul li van . lang sy . adapters . Course ListAdapter Ċ import Ġga . h arr ys ul li van . lang sy . constants . Dashboard Label Ċ import Ġga . h arr ys ul li van . lang sy . constants . Sp aced Re petition Ċ import Ġga . h arr ys ul li van . lang sy . controllers . Engine Ċ import Ġga . h arr ys ul li van . lang sy . data . Current Course Ċ import Ġga . h arr ys ul li van . lang sy . models . Content Ċ import Ġga . h arr ys ul li van . lang sy . models . Course Ċ import Ġga . h arr ys ul li van . lang sy . utils . Injector Utils Ċ import Ġga . h arr ys ul li van . lang sy . utils . observe Once Ċ import Ġga . h arr ys ul li van . lang sy . view _ models . Content ViewModel Ċ import Ġga . h arr ys ul li van . lang sy . view _ models . Course ViewModel Ċ import Ġga . h arr ys ul li van . lang sy . view _ models . Current Course ViewModel Ċ import Ġga . h arr ys ul li van . lang sy . view _ models . Trainer ViewModel Ċ import Ġkotlinx . android . synt hetic . main . activity _ dashboard .* Ċ Ċ class ĠDashboard Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Course ViewModel : ĠCourse ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Content ViewModel : ĠContent ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Trainer ViewModel : ĠTr ainer ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠmCurrent Course ViewModel : ĠCurrent Course ViewModel ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ dashboard ) ĊĊĠĠĠĠĠĠĠ Ġdas board _ add _ course _ button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this @ Dashboard Activity , ĠCourse Selection Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtrainer Factory Ġ= ĠInject or Utils . provide Trainer ViewModel Factory () ĊĠĠĠĠĠĠĠ Ġm Trainer ViewModel Ġ= ĠViewModel Providers . of ( this , Ġtrainer Factory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get ( Trainer ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcurrent Course Factory Ġ= ĠInject or Utils . provide Current Course ViewModel Factory () ĊĠĠĠĠĠĠĠ ĠmCurrent Course ViewModel Ġ= ĠViewModel Providers . of ( this , Ġcurrent Course Factory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get ( Current Course ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġm Course ViewModel Ġ= ĠViewModel Provider . Android ViewModel Factory ( application ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create ( Course ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġm Content ViewModel Ġ= ĠViewModel Provider . Android ViewModel Factory ( application ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create ( Content ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġm Course ViewModel . all Courses . observe Once ( this , ĠObserver Ġ{ Ġcourses Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCourse ListAdapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . layout Inflater , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdashboard _ course list , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcourses , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ:: course Select Callback ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Cash ( courses ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Cash ( courses : ĠList < Course >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcash Ġ= Ġcourses . take If Ġ{ Ġit . isNotEmpty () Ġ} ?. fold ( 0 . 0 ) Ġ{ Ġacc , Ġcourse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġacc Ġ+ Ġcourse . cash ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġfixed Cash Ġ= Ġcash . toInt () ĊĠĠĠĠĠĠĠ Ġdashboard _ cash _ label . text Ġ= Ġ"$ $ fixed Cash " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcourse Select Callback ( course : ĠCourse , Ġaction : ĠDashboard Label ) Ġ{ ĊĠĠĠĠĠĠĠ ĠmCurrent Course ViewModel . setCurrent Course ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCurrent Course ( course ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( action Ġ== ĠDashboard Label . CO URSE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Content ViewModel . fetch By Language And Stage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcourse . language , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSp aced Re petition . THRESHOLD _ OF _ MA ST ERY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). observe Once ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshould Get New Ġ= ĠEngine . should Do New ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Get New ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Content ( it , Ġcourse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpractice ( it ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( action Ġ== ĠDashboard Label . LE ARN ED _ WORDS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this @ Dashboard Activity , ĠCourse Details Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnew Content ( ĊĠĠĠĠĠĠĠ Ġselected Content : ĠList < Content >, ĊĠĠĠĠĠĠĠ Ġcourse : ĠCourse ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( content , Ġtrainer ) Ġ= ĠEngine . new Content ( selected Content , Ġthis . application , Ġcourse ) ĊĠĠĠĠĠĠĠ Ġm Content ViewModel . insert ( content ) ĊĠĠĠĠĠĠĠ Ġm Trainer ViewModel . edit Trainer ( trainer ) ĊĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this @ Dashboard Activity , ĠVisual Learning Activity :: class . java ) ĊĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpractice ( selected Content : ĠList < Content >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtrainer Ġ= ĠEngine . practice ( selected Content , Ġthis . application ) ĊĠĠĠĠĠĠĠ Ġm Trainer ViewModel . edit Trainer ( trainer ) ĊĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this @ Dashboard Activity , ĠAssessment Activity :: class . java ) ĊĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ