package Ġcom . mo vis ens . r xb le mo vis en ss ample . feature . connect Ċ Ċ import Ġandroid . app . Service Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Service Connection Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Build . VERSION . SDK _ INT Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . IB inder Ċ import Ġandroid . preference . Preference Manager Ċ import Ġandroid . view . View . IN VISIBLE Ċ import Ġandroid . view . View . VISIBLE Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . content . edit Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . mo vis ens . r xb le mo vis en ss ample . R . layout Ċ import Ġcom . mo vis ens . r xb le mo vis en ss ample . bluetooth . Bluetooth Service Ċ import Ġcom . mo vis ens . r xb le mo vis en ss ample . bluetooth . Bluetooth Service . Companion . COMMAND Ċ import Ġcom . mo vis ens . r xb le mo vis en ss ample . bluetooth . Bluetooth Service . Companion . COMMAND _ START Ċ import Ġcom . mo vis ens . r xb le mo vis en ss ample . bluetooth . Bluetooth Service . Companion . COMMAND _ STOP Ċ import Ġcom . mo vis ens . r xb le mo vis en ss ample . bluetooth . Bluetooth Service . Companion . SENSOR _ MAC Ċ import Ġcom . mo vis ens . r xb le mo vis en ss ample . bluetooth . binder . IB l ue tooth Binder Ċ import Ġcom . mo vis ens . r xb le mo vis en ss ample . ui . Generic Dialog Fragment Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġkotlinx . android . synt hetic . main . activity _ connect .* Ċ import Ġorg . k oin . android . view model . ext . android . viewModel Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠRobert ĠZ et z sche Ġon Ġ 2 2 . 0 5 . 2 0 1 9 . Ċ Ġ*/ Ċ class ĠConnect Activity Ġ: ĠAppCompatActivity (), ĠService Connection Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbluetooth Binder : ĠI Bluetooth Binder ĊĠĠĠ Ġprivate Ġval Ġconnect ViewModel : ĠConnect ViewModel Ġby ĠviewModel () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġerror Disposable : ĠDis posable ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcheck State Disposable : ĠDis posable ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmovement Acceleration Disposable : ĠDis posable ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdelete Disposable : ĠDis posable ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġstop And Delete Disposable : ĠDis posable ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġstop Disposable : ĠDis posable ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmac : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġname : ĠString ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġshared Preferences : ĠSharedPreferences ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( layout . activity _ connect ) ĊĊĠĠĠĠĠĠĠ Ġshared Preferences Ġ= ĠPreference Manager . getDefault SharedPreferences ( this ) ĊĊĠĠĠĠĠĠĠ Ġmac Ġ= Ġintent ?. extras ?. getString ( SENSOR _ MAC ) Ġ?: Ġshared Preferences . getString ( SENSOR _ MAC , Ġ"") Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġintent ?. extras ?. getString (" SENSOR _ NAME ") Ġ?: Ġshared Preferences . getString (" SENSOR _ NAME ", Ġ"") Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġsensor _ name . text Ġ= Ġname ĊĠĠĠĠĠĠĠ Ġsensor _ mac . text Ġ= Ġmac ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġif Ġ( is Sampling Running ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind Service ( Intent ( this , ĠBluetooth Service :: class . java ), Ġthis , ĠService . BIND _ ADJ UST _ WITH _ ACTIVITY ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck _ sensor _ state . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Wait Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck State Disposable Ġ= Ġconnect ViewModel . get Mov is ens Sensor State ( mac ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck State Disposable . dispose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss Wait Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it . data Available Ġ&& Ġ! it . measurement Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivate _ mov _ acc . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Sampling Running ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Activate Movement Acceleration Button ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . measurement Enabled Ġ&& Ġit . data Available ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Stop Measurement And Delete Data Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( it . data Available ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Delete Data Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ:: show Error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġactivate _ mov _ acc . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsampling Running Ġ= Ġis Sampling Running () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Activate Movement Acceleration Button ( sampling Running ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! sampling Running ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Bluetooth Service With Command ( COMMAND _ START ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind Service ( intent , Ġthis , ĠService . BIND _ AB O VE _ CLIENT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Sampling Running ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue _ text . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Bluetooth Service With Command ( COMMAND _ STOP ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Disposable Ġ= Ġbluetooth Binder . sensor Is Stopped Observable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Disposable . dispose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġif Ġ( it ) Ġ" Sensor Ġwas Ġstopped Ġsuccessfully " Ġelse Ġ" Sensor Ġstopping Ġfailed " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( activity _ connect _ root , Ġmessage , ĠSn ackbar . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Write Ġsampling Ġrunning Ġto Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue _ text . visibility Ġ= ĠIN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivate _ mov _ acc . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . edit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Boolean (" SAMP LING _ RUNNING ", Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsampling Running Ġ= Ġis Sampling Running () ĊĠĠĠĠĠĠĠ Ġrefresh Activate Movement Acceleration Button ( sampling Running ) ĊĠĠĠĠĠĠĠ Ġcheck _ sensor _ state . isEnabled Ġ= Ġ! sampling Running ĊĠĠĠĠĠĠĠ Ġvalue _ text . visibility Ġ= Ġif Ġ( sampling Running ) ĠVIS IBLE Ġelse ĠIN VISIBLE ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġif Ġ( is Sampling Running ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġun bind Service ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Service Disconnected ( component Name : ĠComponent Name ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(:: movement Acceleration Disposable . isInitialized Ġ&& Ġ! movement Acceleration Disposable . is Disposed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovement Acceleration Disposable . dispose () ĊĠĠĠĠĠĠĠ Ġif Ġ(:: error Disposable . isInitialized Ġ&& Ġ! error Disposable . is Disposed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Disposable . dispose () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Service Connected ( component Name : ĠComponent Name , Ġbinder : ĠI Binder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . bluetooth Binder Ġ= Ġbinder Ġas ĠI Bluetooth Binder ĊĠĠĠĠĠĠĠ Ġmovement Acceleration Disposable Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth Binder . get Movement Observable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( this :: show Movement Values ) ĊĠĠĠĠĠĠĠ Ġerror Disposable Ġ= Ġbluetooth Binder . getError Observable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( this :: show Error ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Sampling Running (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġshared Preferences . getBoolean (" SAMP LING _ RUNNING ", Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Bluetooth Service With Command ( command : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠBluetooth Service :: class . java ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( COMMAND , Ġcommand ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( SENSOR _ MAC , Ġmac ) ĊĠĠĠĠĠĠĠ Ġif Ġ( SDK _ INT Ġ> ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Foreground Service ( intent ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Service ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrefresh Activate Movement Acceleration Button ( sampling Running : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactivate _ mov _ acc . text Ġ= Ġif Ġ( sampling Running ) Ġ" Stop ĠMeasurement " Ġelse Ġ" Activate ĠMovement ĠAccel eration " ĊĠĠĠĠĠĠĠ Ġactivate _ mov _ acc . isEnabled Ġ= Ġsampling Running ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Sampling Running ( isRunning : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshared Preferences . edit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Boolean (" SAMP LING _ RUNNING ", Ġis Running ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdismiss Wait Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġin defin ite Dialog Ġ= Ġsupport FragmentManager . find Fragment By Tag (" wait Dialog ") Ġas ? ĠGeneric Dialog Fragment ĊĠĠĠĠĠĠĠ Ġin defin ite Dialog ?. dismiss () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Wait Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġin defin ite Dialog Ġ= ĠGeneric Dialog Fragment () ĊĠĠĠĠĠĠĠ Ġin defin ite Dialog . generic Dialog Ġ= ĠAlertDialog . Builder ( this ). setMessage (" Please ĠWait "). create () ĊĠĠĠĠĠĠĠ Ġin defin ite Dialog . show ( support FragmentManager , Ġ" wait Dialog ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Delete Data Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Delete Ġdata ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" There Ġis Ġcurrently Ġa Ġmeasurement Ġon Ġthe Ġsensor ! ĠPlease Ġdelete Ġthe Ġdata !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button (" ok ") Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Wait Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Disposable Ġ= Ġconnect ViewModel . delete Data ( mac ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivate _ mov _ acc . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Disposable . dispose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss Wait Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ:: show Error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. set Negative Button (" cancel ") Ġ{ Ġdialog Interface , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Interface . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. create () ĊĊĠĠĠĠĠĠĠ Ġval Ġdelete Fragment Ġ= ĠGeneric Dialog Fragment () ĊĠĠĠĠĠĠĠ Ġdelete Fragment . generic Dialog Ġ= Ġdialog ĊĠĠĠĠĠĠĠ Ġdelete Fragment . show ( support FragmentManager , Ġ" stop Dialog ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Stop Measurement And Delete Data Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Stop Ġmeasurement Ġand Ġdelete Ġdata ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" There Ġis Ġcurrently Ġa Ġmeasurement Ġrunning ! ĠPlease Ġstop Ġthis Ġmeasurement Ġand Ġdelete Ġthe Ġdata !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button (" ok ") Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Wait Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop And Delete Disposable Ġ= Ġconnect ViewModel . stop Measurement And Delete Data ( mac ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivate _ mov _ acc . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop And Delete Disposable . dispose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss Wait Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ:: show Error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. set Negative Button (" cancel ") Ġ{ Ġdialog Interface , Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Interface . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. create () ĊĊĠĠĠĠĠĠĠ Ġval Ġstop And Delete Dialog Fragment Ġ= ĠGeneric Dialog Fragment () ĊĠĠĠĠĠĠĠ Ġstop And Delete Dialog Fragment . generic Dialog Ġ= Ġdialog ĊĠĠĠĠĠĠĠ Ġstop And Delete Dialog Fragment . show ( support FragmentManager , Ġ" stop And Delete Dialog ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Movement Values ( movement Acceleration : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue _ text . text Ġ= Ġ" Movement ĠAccel eration : Ġ$ movement Acceleration Ġg " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Error ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrowable . printStackTrace () ĊĠĠĠĠĠĠĠ Ġdismiss Wait Dialog () ĊĠĠĠĠĠĠĠ ĠSn ackbar . make ( activity _ connect _ root , Ġthrowable . localized Message , ĠSn ackbar . LENGTH _ LONG ). show () ĊĊĠĠĠĠĠĠĠ Ġif Ġ(:: check State Disposable . isInitialized Ġ&& Ġ! check State Disposable . is Disposed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck State Disposable . dispose () ĊĠĠĠĠĠĠĠ Ġif Ġ(:: delete Disposable . isInitialized Ġ&& Ġ! delete Disposable . is Disposed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Disposable . dispose () ĊĠĠĠĠĠĠĠ Ġif Ġ(:: stop And Delete Disposable . isInitialized Ġ&& Ġ! stop And Delete Disposable . is Disposed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop And Delete Disposable . dispose () ĊĠĠĠ Ġ} Ċ Ċ }