/* Ċ Ġ* Ċ Ġ* Ġ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the ĠâĢľ License âĢĿ ); Ċ Ġ* Ġ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* Ġ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* Ġ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan ĠâĢľ AS ĠIS âĢĿ ĠBASIS , Ċ Ġ* Ġ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* Ġ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġ Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ġ/ Ċ Ġ*/ Ċ Ċ package Ġat . r tr . r mb t . android . ui . activity Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . WindowManager Ċ import Ġandroidx . core . content . res . Resources Compat Ċ import Ġat . r tr . r mb t . android . R Ċ import Ġat . r tr . r mb t . android . databinding . Activity Measurement Binding Ċ import Ġat . r tr . r mb t . android . di . viewModel Lazy Ċ import Ġat . r tr . r mb t . android . ui . dialog . Simple Dialog Ċ import Ġat . r tr . r mb t . android . ui . fragment . Basic Result Fragment Ċ import Ġat . r tr . r mb t . android . ui . fragment . Basic Result Fragment . Data Loaded Listener Ċ import Ġat . r tr . r mb t . android . ui . fragment . Simple Results List Fragment Ċ import Ġat . spec ure . test . Test Uuid Type Ċ import Ġat . r tr . r mb t . android . util . listen Ċ import Ġat . r tr . r mb t . android . view model . Measurement ViewModel Ċ import Ġat . spec ure . data . entity . Loop Mode Record Ċ import Ġat . spec ure . data . entity . Loop Mode State Ċ import Ġat . spec ure . info . Transport Type Ċ import Ġat . spec ure . location . Location State Ċ import Ġat . spec ure . measurement . Measurement State Ċ import Ġtim ber . log . Tim ber Ċ Ċ private Ġconst Ġval ĠCODE _ CANCEL Ġ= Ġ 0 Ċ private Ġconst Ġval ĠCODE _ ERROR Ġ= Ġ 1 Ċ Ċ class ĠMeasurement Activity Ġ: ĠBase Activity (), ĠSimple Dialog . Callback Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠMeasurement ViewModel Ġby ĠviewModel Lazy () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Measurement Binding ĊĠĠĠ Ġprivate Ġvar Ġresult Fragment : ĠBasic Result Fragment ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġloop Median Values Reload Needed Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Measurement Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġbinding . root ĊĠĠĠĠĠĠĠ ĠsetContentView ( view ) ĊĊĠĠĠĠĠĠĠ Ġbinding . state Ġ= ĠviewModel . state ĊĊĠĠĠĠĠĠĠ ĠviewModel . connectivity Info LiveData . listen ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Drawable Id Ġ= Ġwhen Ġ( it ?. transport Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTransport Type . WIFI Ġ-> ĠR . drawable . image _ home _ wifi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTransport Type . CELL ULAR Ġ-> ĠR . drawable . image _ home _ cell ular ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTransport Type . ETHER NET Ġ-> ĠR . drawable . image _ home _ e thernet ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠR . drawable . image _ home ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . image . setImage Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResources Compat . get Drawable ( resources , Ġimage Drawable Id , Ġapplication Context . theme ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwindow . add Flags ( WindowManager . LayoutParams . FLAG _ KEEP _ SCREEN _ ON ) ĊĊĠĠĠĠĠĠĠ Ġbinding . button Cancel . setOnClickListener Ġ{ Ġon Cross Icon Clicked () Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . measurement Finish LiveData . listen ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Measurement ViewModel Ġfinished Ġactivity Ġ= Ġlisten ed Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish Activity ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . measurement Cancelled LiveData . listen ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Measurement ViewModel Ġcancelled Ġactivity Ġ= Ġlisten ed Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcancel Measurement () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . measurement Error LiveData . listen ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSimple Dialog . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. message Text ( R . string . test _ dialog _ error _ text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. positive Text ( R . string . input _ setting _ dialog _ ok ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( support FragmentManager , ĠCODE _ ERROR ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . download Graph Source . listen ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . state . measurement State . get () Ġ== ĠMeasurement State . DOWNLOAD ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . speed Line . add Graph Items ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . upload Graph Source . listen ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . state . measurement State . get () Ġ== ĠMeasurement State . UPLOAD ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . speed Line . add Graph Items ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . active Network LiveData . listen ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . state . network Info . set ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . state . isConnected . set ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . state . network Info . set ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . state . isConnected . set ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . qos Progress LiveData . listen ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtodo Ġq os Ġprogress Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . measurement Bottom View ?. qos Progress Container ?. update ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . loop Uuid LiveData . listen ( this ) Ġ{ Ġloop UUID Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( loop UUID Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . loop Progress LiveData . observe ( this @ Measurement Activity ) Ġ{ Ġloop Record Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Loop Record Changed ( loop Record ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . time To Next Test Elapsed LiveData . listen ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . block Loop Waiting . text Next Time . text Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . location State LiveData . listen ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . state . gps Enabled . set ( it Ġ== ĠLocation State . ENABLED ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . result Waiting ToBe Sent LiveData . listen ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Basic Results Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠTim ber . d (" Measurement Ġstate Ġloop Ġcreate : Ġ${ viewModel . state . measurement State . get ()?. name }") ĊĊĠĠĠĠĠĠĠ ĠviewModel . state . loop Mode Record . get ()?. tests Performed ?. let Ġ{ ĠviewModel . state . set Loop Progress ( it , ĠviewModel . config . loop Mode NumberOf Tests ) Ġ} Ċ Ċ // ĠĠĠĠĠĠĠ ĠviewModel . qos Progress LiveData . value ?. let Ġ{ Ġbinding . measurement Bottom View ?. qos Progress Container ?. update ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfinish Activity ( measurement Finished : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( measurement Finished ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . state . is Loop Mode Active . get ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . state . loop Mode Record . get ()?. status Ġ== ĠLoop Mode State . FINISHED Ġ|| ĠviewModel . state . loop Mode Record . get ()?. status Ġ== ĠLoop Mode State . CANCEL LED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoop Finished Activity . start ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . test UUID ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . state . measurement State . get () Ġ== ĠMeasurement State . FIN ISH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResults Activity . start ( this , Ġit , ĠResults Activity . Return Point . HOME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcancel Measurement () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel . state . is Loop Mode Active . get () Ġ&& Ġ( viewModel . state . loop Mode Record . get ()?. status Ġ== ĠLoop Mode State . FINISHED Ġ|| ĠviewModel . state . loop Mode Record . get ()?. status Ġ== ĠLoop Mode State . CANCEL LED )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoop Finished Activity . start ( this ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish Affinity () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHome Activity . start With Fragment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHome Activity . Companion . Home Navigation Target . HOME _ FRAGMENT _ TO _ SHOW ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Loop Record Changed ( loop Record : ĠLoop Mode Record ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Test Performed : Ġ${ loop Record ?. tests Performed } Ġ\ n loop Ġmode Ġstatus : Ġ${ loop Record ?. status } Ġ\ n Loop Ġlocal Ġuuid : Ġ${ loop Record ?. local Uuid }\ n Loop Ġremote Ġuuid : Ġ${ loop Record ?. uuid }\ n viewModel : Ġ${ viewModel . state . measurement State . get () }" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠTim ber . d (" local Ġloop ĠUUID Ġto Ġread Ġloop Ġdata : Ġ${ viewModel . loop Uuid LiveData . value }") ĊĠĠĠĠĠĠĠ ĠviewModel . state . set Loop Record ( loop Record ) ĊĠĠĠĠĠĠĠ Ġloop Record ?. tests Performed ?. let Ġ{ Ġtests Performed Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . state . set Loop Progress ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtests Performed , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . config . loop Mode NumberOf Tests ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . block Loop Waiting . text Next Distance . text Ġ= ĠviewModel . state . loop Next Test Distance Met ers . get () ĊĠĠĠĠĠĠĠ Ġloop Record ?. status ?. let Ġ{ Ġstatus Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoop Mode State . IDLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Basic Results Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoop Mode State . RUNNING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Fragment ?. let Ġ{ Ġsupport FragmentManager . beginTransaction (). remove ( result Fragment !! ). commit Now () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Fragment Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ// Ġdo Ġnothing ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( loop Record ?. tests Performed Ġ!= Ġnull Ġ&& Ġloop Record . tests Performed Ġ>= Ġ 2 Ġ&& Ġloop Median Values Reload Needed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Loading Ġmedian Ġvalues Ġon ĠLoop Ġrecord Ġchanged ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloop Median Values Reload Needed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . initialize Loop Data ( loop Record . local Uuid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġloop UUID Ġ= ĠviewModel . state . loop Mode Record . get ()?. uuid ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Loop ĠUUID Ġto Ġload Ġmedian Ġvalues Ġ( already Ġloaded ): Ġ$ loop UUID ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloop UUID ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . load Median Values ( it , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! viewModel . median LiveData . has Observer s ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . median LiveData . observe ( this ) Ġ{ Ġmedi ans Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( medi ans Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . state . set Median Values ( medi ans ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" median Ġvalues : Ġ$ medi ans ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( loop Record ?. status Ġ== ĠLoop Mode State . FINISHED Ġ|| Ġloop Record ?. status Ġ== ĠLoop Mode State . CANCEL LED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish Activity ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Basic Results Fragment () Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" history Ġtest Ġresult ĠShow Ġfragment : Ġ${ viewModel . state . loop Mode Record . get ()?. status Ġ== ĠLoop Mode State . IDLE }, Ġ${ result Fragment Ġ== Ġnull }, Ġ Ġ${ viewModel . result Waiting ToBe Sent LiveData . value Ġ== Ġfalse }") ĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel . state . loop Mode Record . get ()?. status Ġ== ĠLoop Mode State . IDLE Ġ&& Ġresult Fragment Ġ== Ġnull Ġ&& ĠviewModel . result Waiting ToBe Sent LiveData . value Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . state . loop Mode Record . get ()?. uuid ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Fragment Ġ= ĠBasic Result Fragment . newInstance ( it , ĠTest Uuid Type . LOOP _ UUID , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( result Fragment Ġas ĠBasic Result Fragment ). on Data Loaded Listener Ġ= Ġobject Ġ: ĠData Loaded Listener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Data Loaded () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult List Fragment Ġ= ĠSimple Results List Fragment . newInstance ( it , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( binding . result List Container . id , Ġresult List Fragment Ġas ĠSimple Results List Fragment ). commit Now () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager . beginTransaction (). replace ( binding . result Container . id , Ġresult Fragment Ġas ĠBasic Result Fragment ). commit Now () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Dialog Positive Clicked ( code : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( code Ġ== ĠCODE _ CANCEL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . cancel Measurement () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġfinish Ġactivity Ġfor Ġin Ġboth Ġcases ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Dialog Negative Clicked ( code : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠDo Ġnothing ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Measurement ViewModel ĠSTART ") ĊĠĠĠĠĠĠĠ ĠviewModel . attach ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . median LiveData . remove Observer s ( this ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠUn initialized Property AccessException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . w ( e . localized Message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . detach ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġon Cross Icon Clicked () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġloop Median Values Reload Needed Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠviewModel . load Median Values ( viewModel . state . loop Mode Record . get ()?. uuid , Ġthis ) ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Loop Ġmedian Ġuuid : Ġ${ viewModel . state . loop Mode Record . get ()?. uuid }") ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Measurement ViewModel ĠRES UME ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Cross Icon Clicked () Ġ{ ĊĠĠĠĠĠĠĠ ĠSimple Dialog . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. message Text ( R . string . title _ cancel _ measurement ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. positive Text ( R . string . text _ cancel _ measurement ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. negative Text ( R . string . text _ continue _ measurement ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( support FragmentManager , ĠCODE _ CANCEL ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġstart ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠMeasurement Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ