package Ġcom . example . ph uc loc . car control Ċ Ċ import Ġandroid . content . Context . SENSOR _ SERVICE Ċ import Ġandroid . graphics . drawable . Gradient Drawable Ċ import Ġandroid . hardware . Sensor Ċ import Ġandroid . hardware . Sensor Event Ċ import Ġandroid . hardware . Sensor EventListener Ċ import Ġandroid . hardware . Sensor Manager Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 4 . app . Fragment Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġkotlinx . android . synt hetic . main . fragment _ gyro .* Ċ import Ġkotlinx . android . synt hetic . main . fragment _ gyro . view .* Ċ Ċ class ĠG yro Fragment Ġ: ĠFragment (), ĠSensor EventListener , ĠView . OnClickListener Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġroot View : ĠView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrotation Sensor : ĠSensor ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsensor Manager : ĠSensor Manager ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġlayout Ġfor Ġthis Ġfragment ĊĠĠĠĠĠĠĠ Ġroot View Ġ= Ġinflater . inflate ( R . layout . fragment _ gyro , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġroot View . ic _ light . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġinit Sensor () ĊĠĠĠĠĠĠĠ Ġreturn Ġroot View ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġsensor Manager . register Listener ( this , Ġrotation Sensor , ĠSensor Manager . SENSOR _ DELAY _ NORMAL ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġsensor Manager . unregister Listener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Sensor () Ġ{ ĊĠĠĠĠĠĠĠ Ġsensor Manager Ġ= Ġthis . activity . getSystem Service ( SENSOR _ SERVICE ) Ġas ĠSensor Manager ĊĠĠĠĠĠĠĠ Ġrotation Sensor Ġ= Ġsensor Manager . getDefault Sensor ( Sensor . TYPE _ ROT ATION _ VECTOR ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Accuracy Changed ( sensor : ĠSensor ?, Ġaccuracy : ĠInt ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Sensor Changed ( event : ĠSensor Event ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( event Ġ!= Ġnull Ġ&& ĠMainActivity . isConnected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrotation Matrix Ġ= ĠFloat Array ( 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSensor Manager . get Rotation Matrix From Vector ( rotation Matrix , Ġevent . values ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrem apped Rotation Matrix Ġ= ĠFloat Array ( 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSensor Manager . remap Coordinate System ( rotation Matrix , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor Manager . AXIS _ X , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor Manager . AXIS _ Z , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrem apped Rotation Matrix ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorient ations Ġ= ĠFloat Array ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSensor Manager . get Orientation ( rem apped Rotation Matrix , Ġorient ations ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorient ations [ i ] Ġ= ĠMath . to Degrees ( orient ations [ i ]. toDouble ()). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Orientation ( orient ations ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprocess Orientation ( orient ations : ĠFloat Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġorient ations [ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġz Ġ= Ġorient ations [ 2 ] ĊĊĠĠĠĠĠĠĠ Ġif Ġ( z Ġ< Ġ- 3 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtxt _ status . setText (" Forward ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMainActivity . data Thread . write ( Constant . COMMAND _ FORWARD . toByteArray ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( z Ġ> Ġ 3 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtxt _ status . setText (" Backward ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMainActivity . data Thread . write ( Constant . COMMAND _ BACK WARD . toByteArray ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( y Ġ< Ġ- 3 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtxt _ status . setText (" Left ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMainActivity . data Thread . write ( Constant . COMMAND _ LEFT . toByteArray ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( y Ġ> Ġ 3 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtxt _ status . setText (" Right ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMainActivity . data Thread . write ( Constant . COMMAND _ RIGHT . toByteArray ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtxt _ status . setText (" Stop ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMainActivity . data Thread . write ( Constant . COMMAND _ STOP . toByteArray ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ( v : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( v Ġ== Ġroot View . ic _ light Ġ&& ĠMainActivity . isConnected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( root View . ic _ light . alpha Ġ== Ġ 0 . 5 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot View . ic _ light . alpha Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMainActivity . data Thread . write (" 7 ". toByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot View . ic _ light . alpha Ġ= Ġ 0 . 5 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMainActivity . data Thread . write (" 8 ". toByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ