package Ġorg . r 0 0 t man . id 1 4 control app Ċ Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Filter Ċ import Ġandroid . hardware . usb . Usb Device Ċ import Ġandroid . hardware . usb . Usb Device Connection Ċ import Ġandroid . hardware . usb . Usb Manager Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġval ĠACTION _ USB _ PERMISSION Ġ= Ġ" org . r 0 0 t man . id 1 4 control app . USB _ PERMISSION " ĊĊĠĠĠ Ġlateinit Ġvar Ġusb Manager : ĠU sb Manager ĊĊĠĠĠ Ġfun Ġget Volume ( vol : ĠDouble ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġ( 3 2 7 6 8 + 3 2 7 6 7 * vol ). to UInt () ĊĠĠĠĠĠĠĠ Ġval Ġlo Ġ= Ġres Ġand Ġ 0 xff u ĊĠĠĠĠĠĠĠ Ġval Ġhi Ġ= Ġres Ġshr Ġ 8 ĊĠĠĠĠĠĠĠ Ġreturn Ġbyte ArrayOf ( lo . to Byte (), Ġhi . to Byte ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmonitor CT ( dev : ĠU sb Device Connection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvol Double Ġ= Ġmonitor Volume . progress . toDouble ()/ monitor Volume . max . toDouble () ĊĠĠĠĠĠĠĠ Ġval Ġone Ġ= Ġget Volume ( vol Double ) ĊĠĠĠĠĠĠĠ Ġval Ġzero Ġ= Ġget Volume (. 0 ) ĊĠĠĠĠĠĠĠ Ġdev . control Transfer ( 0 x 2 1 , 0 x 1 , 0 x 0 1 0 0 , 0 x 3 c 0 0 , Ġone , Ġone . size , 0 ) ĊĠĠĠĠĠĠĠ Ġdev . control Transfer ( 0 x 2 1 , 0 x 1 , 0 x 0 1 0 1 , 0 x 3 c 0 0 , Ġzero , Ġzero . size , 0 ) ĊĠĠĠĠĠĠĠ Ġdev . control Transfer ( 0 x 2 1 , 0 x 1 , 0 x 0 1 0 4 , 0 x 3 c 0 0 , Ġzero , Ġzero . size , 0 ) ĊĠĠĠĠĠĠĠ Ġdev . control Transfer ( 0 x 2 1 , 0 x 1 , 0 x 0 1 0 5 , 0 x 3 c 0 0 , Ġone , Ġone . size , 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġspeaker CT ( dev : ĠU sb Device Connection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvol Double Ġ= Ġspeaker Volume . progress . toDouble ()/ speaker Volume . max . toDouble () ĊĠĠĠĠĠĠĠ Ġval Ġvol Ġ= Ġget Volume ( vol Double ) ĊĠĠĠĠĠĠĠ Ġdev . control Transfer ( 0 x 2 1 , 0 x 1 , 0 x 1 2 0 0 , 0 x 3 6 0 0 , Ġvol , Ġvol . size , 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhead phone CT ( dev : ĠU sb Device Connection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvol Double Ġ= Ġhead phone Volume . progress . toDouble ()/ head phone Volume . max . toDouble () ĊĠĠĠĠĠĠĠ Ġval Ġvol Ġ= Ġget Volume ( vol Double ) ĊĠĠĠĠĠĠĠ Ġdev . control Transfer ( 0 x 2 1 , 0 x 1 , 0 x 0 2 0 3 , 0 x 0 a 0 0 , Ġvol , Ġvol . size , 0 ) ĊĠĠĠĠĠĠĠ Ġdev . control Transfer ( 0 x 2 1 , 0 x 1 , 0 x 0 2 0 4 , 0 x 0 a 0 0 , Ġvol , Ġvol . size , 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Volume ( ct : Ġ( Usb Device Connection ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġusb Receiver Ġ= Ġobject Ġ: ĠBroadcast Receiver () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext , Ġintent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ACTION _ USB _ PERMISSION Ġ== Ġintent . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdevice : ĠU sb Device ? Ġ= Ġintent . get Parcelable Extra ( Usb Manager . EXTRA _ DEVICE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( intent . getBoolean Extra ( Usb Manager . EXTRA _ PERMISSION _ GRAN TED , Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice ?. get Interface ( 0 )?. also Ġ{ Ġint f Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusb Manager . open Device ( device )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclaim Interface ( intf , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġct ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelease Interface ( intf ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" lol ", Ġ" changed ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" lol ", Ġ" permission Ġdenied Ġfor Ġdevice Ġ$ device ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġpermission Intent Ġ= ĠPending Intent . get Broadcast ( this , Ġ 0 , ĠIntent ( ACTION _ USB _ PERMISSION ), Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġfilter Ġ= ĠIntent Filter ( ACTION _ USB _ PERMISSION ) ĊĠĠĠĠĠĠĠ Ġregister Receiver ( usb Receiver , Ġfilter ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdevice List : ĠHashMap < String , ĠU sb Device > Ġ= Ġusb Manager . device List ĊĠĠĠĠĠĠĠ Ġdevice List . values . forEach Ġ{ Ġdevice Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( device . vendor Id Ġ== Ġ 0 x 2 7 0 8 Ġ&& Ġdevice . productId Ġ== Ġ 0 x 0 0 0 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" lol ", Ġdevice . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusb Manager . request Permission ( device , Ġpermission Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon M Click ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Volume Ġ{ Ġdev Ġ-> Ġthis . monitor CT ( dev ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon SP Click ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Volume Ġ{ Ġdev Ġ-> Ġthis . speaker CT ( dev ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon HP Click ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Volume Ġ{ Ġdev Ġ-> Ġthis . head phone CT ( dev ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġusb Manager Ġ= Ġget System Service ( Context . USB _ SERVICE ) Ġas ĠU sb Manager ĊĠĠĠ Ġ} Ċ } Ċ