package Ġcom . hd . serial port . help Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ 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 Manager Ċ import Ġandroid . os . AsyncTask Ċ import Ġcom . hd . serial port . utils . L Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġhd Ġon Ġ 2 0 1 7 / 8 / 2 2 . Ċ Ġ* Ġrequest Ġthe Ġusb Ġpermissions Ġat Ġthe Ġterminal Ġdevice . Ċ Ġ*/ Ċ class ĠRequest Usb Permission Ġ{ ĊĠĠĠ Ġprivate Ġval Ġusb _ permission Ġ= Ġ" com . hd . usb Host . device . USB _ PERMISSION " ĊĠĠĠ Ġprivate Ġvar Ġusb Device List : ĠMutable List < Usb Device >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġposition Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġusb Manager : ĠU sb Manager ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcallback : ĠRequest Permission Callback ? Ġ= Ġnull ĊĊĠĠĠ Ġinterface ĠRequest Permission Callback Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġall Ġusb Ġpermission Ġrequest Ġcomplete ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġcomplete () ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġmay Ġnot Ġhave Ġdevice ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġfailed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrequest Usb Permission ( context : ĠContext , Ġusb Manager : ĠU sb Manager ?, Ġdevice : ĠU sb Device ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . usb Manager Ġ= Ġusb Manager ĊĠĠĠĠĠĠĠ Ġif Ġ( device Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( this . usb Manager Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . usb Manager Ġ= Ġget Usb Manager ( context ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! this . usb Manager !!. has Permission ( device )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . usb Manager !!. request Permission ( device , Ġget Pending Intent ( context , Ġdevice )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . usb Manager !!. has Permission ( device ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrequest All Usb Device Permission ( context : ĠContext , Ġcallback : ĠRequest Permission Callback ?= null ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . callback Ġ= Ġcallback ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest All Usb Device Permission ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest All Usb Device Permission ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġasync Request All Usb Device Permission ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Static Field Leak ") ĊĠĠĠ Ġprivate Ġfun Ġasync Request All Usb Device Permission ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠAsync Task < Void , ĠVoid , ĠVoid >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdo In Background ( var arg Ġvoid s : ĠVoid ): ĠVoid ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoot Cmd . exec Root Cmd Order () // execute Ġroot Ġorder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġusb Manager Ġ= Ġget Usb Manager ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusb Device List Ġ= ĠLinkedList < Usb Device >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusb Device List !!. addAll ( usb Manager . device List . values ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( usb Device List !!. size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest ( context , Ġusb Manager , Ġusb Device List ! ![ position ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ?. failed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. execute () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Usb Manager ( context : ĠContext ): ĠU sb Manager Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcontext . getSystem Service ( Context . USB _ SERVICE ) Ġas ĠU sb Manager ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Pending Intent ( context : ĠContext , Ġdevice : ĠU sb Device ?): ĠPending Intent Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPending Intent . get Broadcast ( context . application Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice ?. hashCode () Ġ?: Ġ 0 , ĠIntent ( usb _ permission ), ĠPending Intent . FLAG _ UPDATE _ CURRENT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest ( context : ĠContext , Ġusb Manager : ĠU sb Manager , Ġusb Device : ĠU sb Device ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! usb Manager . has Permission ( usb Device )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent Ġ= Ġcontext . register Receiver ( usb Broad Cast Receiver , ĠIntent Filter ( usb _ permission )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusb Manager . request Permission ( usb Device , Ġget Pending Intent ( context , Ġusb Device )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠL . d (" current Ġusb Ġdevice Ġhas Ġpermission ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Continue ( context , Ġusb Manager ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġintent : ĠIntent ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġfun Ġrequest Continue ( context : ĠContext , Ġusb Manager : ĠU sb Manager ) Ġ{ ĊĠĠĠĠĠĠĠ Ġposition ++ ĊĠĠĠĠĠĠĠ Ġif Ġ( position Ġ< Ġusb Device List !!. size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest ( context , Ġusb Manager , Ġusb Device List ! ![ position ]) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( intent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusb Broad Cast Receiver . abort Broadcast () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . unregister Receiver ( usb Broad Cast Receiver ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ?. complete () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġusb Broad Cast Receiver Ġ= Ġobject Ġ: ĠBroadcast Receiver () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext , Ġintent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( intent . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusb _ permission Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdevice Ġ= Ġintent . get Parcelable Extra < Usb Device >( Usb Manager . EXTRA _ DEVICE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuccess Ġ= Ġintent . getBoolean Extra ( Usb Manager . EXTRA _ PERMISSION _ GRAN TED , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠL . d (" permission Ġresponse Ġ ï¼ļ" Ġ+ Ġdevice . hashCode () Ġ+ Ġ" == =" Ġ+ Ġsuccess Ġ+ Ġ" == =" Ġ+ Ġdevice ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Continue ( context , Ġget Usb Manager ( context )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance (): ĠRequest Usb Permission Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRequest Usb Permission () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ