package Ġcom . sil icon labs . ble demo . motion . present ers Ċ Ċ import Ġandroid . bluetooth . Bluetooth GattCharacteristic Ċ import Ġandroid . os . Handler Ċ import Ġcom . sil icon labs . ble demo . Bluetooth . BLE . GattCharacteristic Ċ import Ġcom . sil icon labs . ble demo . Bluetooth . BLE . Gatt Service Ċ import Ġcom . sil icon labs . ble demo . motion . model . Motion Event Ċ import Ġcom . sil icon labs . ble demo . th under board . base . Base Presenter Ċ import Ġcom . sil icon labs . ble demo . th under board . injection . scope . Activity Scope Ċ import Ġcom . sil icon labs . ble demo . th under board . model . Notification Event Ċ import Ġcom . sil icon labs . ble demo . th under board . model . Th under Board Device Ċ import Ġcom . sil icon labs . ble demo . th under board . sensor . Sensor Motion Ċ import Ġcom . sil icon labs . ble demo . th under board . utils . B le Utils Ċ import Ġcom . sil icon labs . ble demo . utils . Uuid Consts Ċ import Ġrx . Subscriber Ċ import Ġrx . android . schedul ers . Android Schedulers Ċ import Ġrx . schedul ers . Schedulers Ċ import Ġrx . subjects . Behavior Subject Ċ import Ġrx . subjects . Publish Subject Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ @ Activity Scope Ċ class ĠMotion Presenter Ġ: ĠBase Presenter () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġmotion Detector : ĠPublish Subject < Motion Event >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġmotion Subscriber : ĠSubscriber < Motion Event >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġnotifications Monitor : ĠBehavior Subject < Notification Event >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġnotifications Subscriber : ĠSubscriber < Notification Event >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġconfigure Motion Subscriber : ĠSubscriber < Notification Event >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġis Cal ibr ating Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġsubscribe () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . subscribe () ĊĠĠĠĠĠĠĠ Ġmotion Subscriber Ġ= Ġon Motion () ĊĠĠĠĠĠĠĠ Ġmotion Detector Ġ= Ġbluetooth Service ?. motion Detector ĊĠĠĠĠĠĠĠ Ġmotion Detector !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( motion Subscriber ) ĊĠĠĠĠĠĠĠ Ġnotifications Subscriber Ġ= Ġon Notification () ĊĠĠĠĠĠĠĠ Ġnotifications Monitor Ġ= Ġbluetooth Service ?. notifications Monitor ĊĠĠĠĠĠĠĠ Ġnotifications Monitor !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( notifications Subscriber ) ĊĠĠĠĠĠĠĠ Ġconfigure Motion () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġunsubscribe () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . unsubscribe () ĊĠĠĠĠĠĠĠ Ġif Ġ( motion Subscriber Ġ!= Ġnull Ġ&& Ġ! motion Subscriber !!. is Un subscribed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmotion Subscriber !!. unsubscribe () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmotion Subscriber Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( notifications Subscriber Ġ!= Ġnull Ġ&& Ġ! notifications Subscriber !!. is Un subscribed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotifications Subscriber !!. unsubscribe () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnotifications Subscriber Ġ= Ġnull ĊĠĠĠĠĠĠĠ ĠTim ber . d (" cancel Ġstart Calibration ") ĊĠĠĠĠĠĠĠ Ġis Cal ibr ating Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset Device Subscriptions () Ġ{ ĊĠĠĠĠĠĠĠ Ġbluetooth Service ?. th under board Device ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Cal ibrate Notification Enabled Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Acceleration Notification Enabled Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Orientation Notification Enabled Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcal ibrate () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Cal ibr ating ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcalibration Submitted Ġ= Ġstart Calibration () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! calibration Submitted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHandler (). post Delayed ({ Ġcal ibrate () Ġ}, Ġ 5 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Cal ibr ating Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Device (): ĠSubscriber < Th under Board Device > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠSubscriber < Th under Board Device >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Completed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" completed ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Un subscribed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunsubscribe () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" error : Ġ% s ", Ġe . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Un subscribed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunsubscribe () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Next ( device : ĠTh under Board Device ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( board Type Ġ!= ĠTh under Board Device . Type . TH UNDER BOARD _ S ENSE Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboard Type Ġ!= ĠTh under Board Device . Type . TH UNDER BOARD _ BLUE Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboard Type Ġ!= ĠTh under Board Device . Type . TH UNDER BOARD _ DEV _ KIT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunsubscribe () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġon Motion (): ĠSubscriber < Motion Event > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠSubscriber < Motion Event >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Completed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" completed ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Un subscribed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunsubscribe () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" error : Ġ% s ", Ġe . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Un subscribed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunsubscribe () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Next ( event : ĠMotion Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" motion Ġfor Ġdevice : Ġ% s ", Ġevent . device !!. name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . action Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Cal ibr ating ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . action Ġ== ĠMotion Event . ACTION _ CAL IB RATE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreset Orientation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . action Ġ== ĠMotion Event . ACTION _ CLEAR _ OR IENTATION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish Calibration () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsensor Ġ= Ġevent . device . sensor Motion ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Motion Presenter . sensor Ġ= Ġsensor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sensor ?. is Sensor Data Changed Ġ== Ġtrue Ġ&& Ġview Listener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsensor Data Ġ= Ġsensor . sensor Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( view Listener Ġas ĠMotion Listener ). set Orientation ( sensor Data . ox , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Data . oy , Ġsensor Data . oz ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( view Listener Ġas ĠMotion Listener ). set Acceleration ( sensor Data . ax , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Data . ay , Ġsensor Data . az ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsensor . is Sensor Data Changed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfinish Calibration () Ġ{ ĊĠĠĠĠĠĠĠ Ġis Cal ibr ating Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( view Listener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( view Listener Ġas ĠMotion Listener ). on Cal ibrate Completed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġon Notification (): ĠSubscriber < Notification Event > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠSubscriber < Notification Event >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Completed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" completed ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Un subscribed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunsubscribe () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" error : Ġ% s ", Ġe . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Un subscribed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunsubscribe () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Next ( event : ĠNotification Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Notification Event . ACTION _ NOTIFICATION S _ SET Ġ!= Ġevent . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdevice Ġ= Ġevent . device ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" notification Ġfor Ġdevice : Ġ% s ", Ġdevice . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsensor Ġ= Ġevent . device . sensor Motion ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Motion Presenter . sensor Ġ= Ġsensor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sensor Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcharacteristics Status Ġ= Ġsensor . character istics Status ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( character istics Status Ġand Ġ 0 x 0 5 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 0 5 Ġ-> Ġenable Acceleration ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 1 5 Ġ-> Ġenable Orientation ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconfigure Motion Cal ibrate ( enabled : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsubmitted Ġ= ĠB le Utils . set Characteristic Indic ations ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth Service ?. connected Gatt !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG att Service . Motion . number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG att Characteristic . Calibration . uuid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠU uid Consts . CLIENT _ CHARACTER ISTIC _ CONFIG _ DESCRIPTOR , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenabled ) ĊĠĠĠĠĠĠĠ ĠTim ber . d ("% s Ġacceleration Ġindication Ġsubmitted : Ġ% s ", Ġenabled , Ġsubmitted ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġenable Configure Motion ( device : ĠTh under Board Device ): ĠSubscriber < Notification Event > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠSubscriber < Notification Event >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Completed () Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠThrowable ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Next ( notification Event : ĠNotification Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( device . is Cal ibrate Notification Enabled Ġ== Ġnull Ġ|| Ġ! device . is Cal ibrate Notification Enabled !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Motion Cal ibrate ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( device . is Acceleration Notification Enabled Ġ== Ġnull Ġ|| Ġ! device . is Acceleration Notification Enabled !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsubmitted Ġ= Ġenable Acceleration ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" enable Ġacceleration Ġindication Ġsubmitted : Ġ% s ", Ġsubmitted ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( device . is Orientation Notification Enabled Ġ== Ġnull Ġ|| Ġ! device . is Orientation Notification Enabled !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsubmitted Ġ= Ġenable Orientation ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" enable Ġorientation Ġindication Ġsubmitted : Ġ% s ", Ġsubmitted ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunsubscribe Configure Motion Subscriber () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconfigure Motion () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bluetooth Service ?. connected Gatt Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdevice Ġ= Ġbluetooth Service ?. th under board Device ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( device Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsensor Ġ= ĠSensor Motion () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsensor . is Notification Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice . sensor Motion Ġ= Ġsensor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunsubscribe Configure Motion Subscriber () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Motion Subscriber Ġ= Ġenable Configure Motion ( device ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotifications Monitor !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. delay ( 1 0 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( configure Motion Subscriber ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Motion Cal ibrate ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġunsubscribe Configure Motion Subscriber () Ġ{ ĊĠĠĠĠĠĠĠ Ġconfigure Motion Subscriber ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it . is Un subscribed ) Ġit . unsubscribe () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġconfigure Motion Subscriber Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear Cal ibrate Notification () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bluetooth Service ?. connected Gatt Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsubmitted Cal ibrate Ġ= ĠB le Utils . unset Characteristic Notification ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth Service ?. connected Gatt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG att Service . Motion . number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG att Characteristic . Calibration . uuid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠU uid Consts . CLIENT _ CHARACTER ISTIC _ CONFIG _ DESCRIPTOR , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" disable Ġcalibration Ġindication Ġsubmitted : Ġ% s ", Ġsubmitted Cal ibrate ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear Acceleration Notification () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bluetooth Service ?. connected Gatt Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsubmitted Acceleration Ġ= ĠB le Utils . unset Characteristic Notification ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth Service ?. connected Gatt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG att Service . Motion . number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG att Characteristic . Acceleration . uuid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠU uid Consts . CLIENT _ CHARACTER ISTIC _ CONFIG _ DESCRIPTOR , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" disable Ġacceleration Ġindication Ġsubmitted : Ġ% s ", Ġsubmitted Acceleration ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear Orientation Notification () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bluetooth Service ?. connected Gatt Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsubmitted Orientation Ġ= ĠB le Utils . unset Characteristic Notification ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth Service ?. connected Gatt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG att Service . Motion . number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG att Characteristic . Orientation . uuid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠU uid Consts . CLIENT _ CHARACTER ISTIC _ CONFIG _ DESCRIPTOR , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" disable Ġorientation Ġindication Ġsubmitted : Ġ% s ", Ġsubmitted Orientation ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġresets Ġsubscription Ġto ĠBLE Ġchars , Ġmight Ġbe Ġneeded ĊĠĠĠ Ġfun Ġclear Motion Notifications () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bluetooth Service ?. connected Gatt Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Cal ibrate Notification () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Acceleration Notification () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Orientation Notification () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġenable Orientation ( enabled : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠB le Utils . set Characteristic Notification ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth Service ?. connected Gatt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG att Service . Motion . number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG att Characteristic . Orientation . uuid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠU uid Consts . CLIENT _ CHARACTER ISTIC _ CONFIG _ DESCRIPTOR , Ġenabled ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġenable Acceleration ( enabled : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠB le Utils . set Characteristic Notification ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth Service ?. connected Gatt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG att Service . Motion . number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG att Characteristic . Acceleration . uuid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠU uid Consts . CLIENT _ CHARACTER ISTIC _ CONFIG _ DESCRIPTOR , Ġenabled ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Calibration (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsubmitted Ġ= ĠB le Utils . write Character istics ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth Service ?. connected Gatt !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG att Service . Motion . number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG att Characteristic . Calibration . uuid , Ġ 0 x 0 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBluetooth GattCharacteristic . FORMAT _ UINT 8 , Ġ 0 ) ĊĠĠĠĠĠĠĠ ĠTim ber . d (" submitted : Ġ% s ", Ġsubmitted ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsubmitted ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset Orientation (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsubmitted Ġ= ĠB le Utils . write Character istics ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth Service ?. connected Gatt !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG att Service . Motion . number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG att Characteristic . Calibration . uuid , Ġ 0 x 0 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBluetooth GattCharacteristic . FORMAT _ UINT 8 , Ġ 0 ) ĊĠĠĠĠĠĠĠ ĠTim ber . d (" submitted : Ġ% s ", Ġsubmitted ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsubmitted ĊĠĠĠ Ġ} Ċ }