package Ġcom . be yond 7 th sky . d riv ings ch ool . lesson Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Count Down Timer Ċ import Ġandroid . view .* Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . navigation . fragment . nav Args Ċ import Ġandroidx . recyclerview . widget . Divider Item Decoration Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . be yond 7 th sky . d riv ings ch ool . My Application Ċ import Ġcom . be yond 7 th sky . d riv ings ch ool . R Ċ import Ġcom . be yond 7 th sky . d riv ings ch ool . adapter . Lesson Sheet Adapter Ċ import Ġcom . be yond 7 th sky . d riv ings ch ool . dashboard . Lesson Sheet ViewModel Ċ import Ġcom . be yond 7 th sky . d riv ings ch ool . dashboard . Lesson Sheet ViewModel Factory Ċ import Ġcom . be yond 7 th sky . d riv ings ch ool . databinding . Fragment Lesson Sheet Binding Ċ import Ġcom . be yond 7 th sky . d riv ings ch ool . model . entity . Performance Metric Ċ import Ġcom . be yond 7 th sky . d riv ings ch ool . util . TIME _ FORMAT Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ class ĠLess on Sheet Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġargs : ĠLess on Sheet Fragment Args Ġby Ġnav Args () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment Lesson Sheet Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcount Down Timer : ĠCount Down Timer ĊĠĠĠ Ġprivate Ġvar Ġremaining Milli Seconds : ĠLong Ġ= Ġ 0 L ĊĊĠĠĠ Ġprivate Ġval Ġlesson Sheet ViewModel : ĠLess on Sheet ViewModel Ġby Ġview Models Ġ{ ĊĠĠĠĠĠĠĠ ĠLess on Sheet ViewModel Factory ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity ?. application Ġas ĠMy Application ). repository , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . student Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġlayout Ġfor Ġthis Ġfragment ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠFragment Lesson Sheet Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Observer s () ĊĠĠĠĠĠĠĠ Ġset OnClick Listeners () ĊĊĠĠĠĠĠĠĠ Ġbinding . tv Lesson Number . text Ġ= Ġargs . lesson Number ĊĠĠĠĠĠĠĠ Ġbinding . tv StartTime . text Ġ= ĠgetString ( R . string . start _ time _ with _ value , Ġargs . startTime ) ĊĠĠĠĠĠĠĠ Ġbinding . tv EndTime . text Ġ= ĠgetString ( R . string . end _ time _ with _ value , Ġargs . endTime ) ĊĠĠĠĠĠĠĠ Ġfind AndSet Duration Of Lesson () ĊĊĠĠĠĠĠĠĠ Ġval Ġlesson Sheet Adapter Ġ= ĠLess on Sheet Adapter ( get ArrayOf Questions ()) ĊĠĠĠĠĠĠĠ Ġbinding . rv Performance Metrics . adapter Ġ= Ġlesson Sheet Adapter ĊĊĠĠĠĠĠĠĠ Ġval Ġitem Decoration : ĠRecyclerView . Item Decoration Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDiv ider Item Decoration ( context , ĠDiv ider Item Decoration . VERTICAL ) ĊĠĠĠĠĠĠĠ Ġbinding . rv Performance Metrics . addItem Decoration ( item Decoration ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . menu _ lesson _ sheet , Ġmenu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ finish Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish Button Clicked () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġset Observer s () Ġ{ ĊĠĠĠĠĠĠĠ Ġlesson Sheet ViewModel . student Entity . observe ( view Lifecycle Owner , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tv Student Name . text Ġ= ĠgetString ( R . string . student _ full _ name , Ġit . firstName , Ġit . lastName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind AndSet Duration Of Lesson () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠdateFormat Ġ= ĠSimpleDateFormat ( TIME _ FORMAT , ĠLocale . getDefault ()) ĊĠĠĠĠĠĠĠ Ġval ĠstartTime : ĠDate Ġ= ĠdateFormat . parse ( args . startTime ) ĊĠĠĠĠĠĠĠ Ġval ĠendTime : ĠDate Ġ= ĠdateFormat . parse ( args . endTime ) ĊĠĠĠĠĠĠĠ Ġremaining Milli Seconds Ġ= ĠendTime . time Ġ- ĠstartTime . time ĊĊĠĠĠĠĠĠĠ Ġval Ġduration String Ġ= ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 0 2 d :% 0 2 d ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . MILLISECONDS . to Minutes ( remaining Milli Seconds ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . MILLISECONDS . to Seconds ( remaining Milli Seconds ) Ġ- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . MIN UTES . to Seconds ( TimeUnit . MILLISECONDS . to Minutes ( remaining Milli Seconds )) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġbinding . tv Count down . text Ġ= Ġduration String ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset OnClick Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . btn Pause Resume . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( binding . btn Pause Resume . text Ġ== ĠgetString ( R . string . start ) Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . btn Pause Resume . text Ġ== ĠgetString ( R . string . resume )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Count Down Timer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . btn Pause Resume . text Ġ= ĠgetString ( R . string . pause ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif ( binding . btn Pause Resume . text Ġ== ĠgetString ( R . string . pause )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Count Down Timer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . btn Pause Resume . text Ġ= ĠgetString ( R . string . resume ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Count Down Timer () Ġ{ ĊĠĠĠĠĠĠĠ Ġcount Down Timer Ġ= Ġobject Ġ: ĠCount Down Timer ( remaining Milli Seconds , Ġ 1 0 0 0 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tick ( millis Until Finished : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining Milli Seconds Ġ= Ġmillis Until Finished ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġduration String Ġ= ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 0 2 d :% 0 2 d ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . MILLISECONDS . to Minutes ( remaining Milli Seconds ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . MILLISECONDS . to Seconds ( remaining Milli Seconds ) Ġ- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . MIN UTES . to Seconds ( TimeUnit . MILLISECONDS . to Minutes ( remaining Milli Seconds )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tv Count down . text Ġ= Ġduration String ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Finish () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstop Count Down Timer () Ġ{ ĊĠĠĠĠĠĠĠ Ġcount Down Timer ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . cancel () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġstop Count Down Timer () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget ArrayOf Questions (): ĠArray < Performance Metric > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPerformance Metric (" Instrument s Ġdevices "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPerformance Metric (" Use Ġof Ġcontrols , Ġbr ake , Ġacceleration "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPerformance Metric (" Ste ering Ġhand Ġover Ġhand "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPerformance Metric (" Right Ġturns "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPerformance Metric (" Left Ġturns "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPerformance Metric (" Two - point Ġturns Ġsimple "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPerformance Metric (" Three Ġpoint Ġturns "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPerformance Metric (" Angle Ġpar king "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPerformance Metric (" Per pend icular Ġpar king "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPerformance Metric (" Parallel Ġpar king "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPerformance Metric (" Par king Ġon Ġa Ġh ill "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPerformance Metric (" Traffic Ġlights "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPerformance Metric (" Lane Ġchanges "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPerformance Metric (" High way ĠD riving "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPerformance Metric (" Road Ġtest Ġevaluation ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfinish Button Clicked () Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . e (" Finish ĠButton ĠClick ed ") ĊĠĠĠ Ġ} Ċ Ċ }