package Ġdev . me lo id ae . yk chn Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . app . Activity Ċ import Ġandroid . bluetooth . Bluetooth Device Ċ import Ġandroid . bluetooth . Bluetooth Manager Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Filter Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Gesture Detector Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . local broadcast manager . content . Local Broadcast Manager Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠMainActivity :: class . java . simple Name ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG _ DEVICE _ LIST _ FRAGMENT Ġ= Ġ" dev . me lo id ae . yk chn . TAG _ DEVICE _ LIST _ FRAGMENT " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG _ DEVICE _ CONTROL _ FRAGMENT Ġ= Ġ" dev . me lo id ae . yk chn . TAG _ DEVICE _ TAG _ FRAGMENT " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġdevice Map Ġ= ĠIndexed HashMap < String , ĠB le Device Holder >() ĊĠĠĠ Ġprivate Ġval Ġdevice List Fragment Ġ= ĠDevice List Fragment ( device Map ) ĊĠĠĠ Ġprivate Ġval Ġdevice Control Fragment : ĠDevice Control Fragment Ġby Ġlazy Ġ{ Ġinitialize Device Control Fragment () Ġ} ĊĠĠĠ Ġprivate Ġvar Ġperipheral : ĠComposite Per ipheral ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġdevice Update Count Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġval Ġhid Device Connection Listener Ġ= Ġobject Ġ: ĠH id Per ipheral . H id Device Connection Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Device Connected ( device : ĠBluetooth Device ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on Device Connected () Ġdevice : Ġ${ device . address }") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" uuid : Ġ${ device . uuid s }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactive Fragment Ġ= Ġsupport FragmentManager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Fragment By Tag ( TAG _ DEVICE _ LIST _ FRAGMENT ) Ġas ĠDevice List Fragment ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( device Map . containsKey ( device . address )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDevice Ġalready Ġexists , Ġso Ġjust Ġchange Ġis Connected Ġto Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Map [ device . address ]?. isConnected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Fragment Ġ== Ġnull Ġ-> Ġ// ĠDevice List Fragment Ġis Ġinactive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Update Count Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Update Count Ġ== Ġ 0 Ġ-> Ġ// Ġnotify Ġitem Ġchange Ġto ĠDevice List Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Fragment . change Item ( device Map . get IndexOf Key ( device . address )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ Ġ// Ġnotify Ġmultiple Ġchanges Ġto ĠDevice List Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Fragment . change DataSet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Update Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNew ly Ġadd Ġdevice Ġto Ġdevice Map ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Map [ device . address ] Ġ= ĠB le Device Holder ( device , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Fragment Ġ== Ġnull Ġ-> Ġ// ĠDevice List Fragment Ġis Ġinactive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Update Count Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Update Count Ġ== Ġ 0 Ġ-> Ġ// Ġnotify Ġitem Ġinserted Ġto ĠDevice List Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Fragment . insert Item ( device Map . get IndexOf Key ( device . address )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ Ġ// Ġnotify Ġmultiple Ġchanges Ġto ĠDevice List Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Fragment . change DataSet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Update Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Device Disconnected ( device : ĠBluetooth Device ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on Device Disconnected () Ġdevice : Ġ${ device . address }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactive Fragment Ġ= Ġsupport FragmentManager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Fragment By Tag ( TAG _ DEVICE _ LIST _ FRAGMENT ) Ġas ĠDevice List Fragment ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( device Map . containsKey ( device . address )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDevice Ġalready Ġexists , Ġso Ġjust Ġchange Ġis Connected Ġto Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Map [ device . address ]?. isConnected Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Fragment Ġ== Ġnull Ġ-> Ġ// ĠDevice List Fragment Ġis Ġinactive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Update Count Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Update Count Ġ== Ġ 0 Ġ-> Ġ// Ġnotify Ġitem Ġchange Ġto ĠDevice List Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Fragment . change Item ( device Map . get IndexOf Key ( device . address )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ Ġ// Ġnotify Ġmultiple Ġchanges Ġto ĠDevice List Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Fragment . change DataSet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Update Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNew ly Ġadd Ġdevice Ġto Ġdevice Map Ġ( with Ġis Connected Ġof Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Map [ device . address ] Ġ= ĠB le Device Holder ( device , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Fragment Ġ== Ġnull Ġ-> Ġ// ĠDevice List Fragment Ġis Ġinactive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Update Count Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Update Count Ġ== Ġ 0 Ġ-> Ġ// Ġnotify Ġitem Ġinserted Ġto ĠDevice List Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Fragment . insert Item ( device Map . get IndexOf Key ( device . address )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ Ġ// Ġnotify Ġmultiple Ġchanges Ġto ĠDevice List Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Fragment . change DataSet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Update Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġhid Per ipheral Ready Receiver Ġ= Ġobject Ġ: ĠBroadcast Receiver () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext , Ġintent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= Ġintent . action ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" hid Per ipheral Ready Receiver . on Receive () Ġaction : Ġ$ action ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Ġ== ĠIntent Constants . ACTION _ HID _ PER IP HER AL _ READY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbc Manager Ġ= ĠLocal Broadcast Manager . getInstance ( this @ MainActivity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbc Manager . unregister Receiver ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġ Ġup Ġ Ġdevice Map ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetUp Device Map () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperipheral ?. set H id Device Connection Listener ( hid Device Connection Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperipheral ?. start Ad vertising () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice List Fragment . set Device List ClickListener ( device List ClickListener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġdevice List ClickListener Ġ= Ġobject Ġ: ĠDevice ListAdapter . Device List ClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick ( view : ĠView , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( view . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . device _ item _ layout Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" device List ClickListener ĠListItem Ġclicked ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdevice Ġ= Ġdevice Map . getBy Index ( position )?. device ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( device Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperipheral ?. setTarget Device ( device ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswitch Fragment ( device Control Fragment , ĠTAG _ DEVICE _ CONTROL _ FRAGMENT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . device _ connect _ button Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" device List ClickListener ĠConnect Button Ġclicked ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdevice Ġ= Ġdevice Map . getBy Index ( position )?. device ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( device Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġperipheral ?. setTarget Device ( device ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġperipheral ?. connect ( device ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġperipheral ?. disconnect ( device ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperipheral ?. disconnect ( device ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġperipheral ?. stop Ad vertising () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġperipheral ?. mouse Move Pointer ( 5 0 , Ġ 5 0 , Ġ 0 , Ġfalse , Ġfalse , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Given Ġremote Ġdevice Ġis Ġnull ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġdevice Control Touch Listener : ĠMouse Gesture Listener Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠMouse Gesture Listener ( this @ MainActivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick ( pointer Count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" onClick () Ġpointer Count : Ġ$ pointer Count ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( pointer Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperipheral ?. mouse Move Pointer ( 0 , Ġ 0 , Ġ 0 , Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Button Ġ= Ġtrue , Ġright Button Ġ= Ġfalse , Ġmiddle Button Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperipheral ?. mouse Move Pointer ( 0 , Ġ 0 , Ġ 0 , Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Button Ġ= Ġfalse , Ġright Button Ġ= Ġtrue , Ġmiddle Button Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperipheral ?. mouse Move Pointer ( 0 , Ġ 0 , Ġ 0 , Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Button Ġ= Ġfalse , Ġright Button Ġ= Ġfalse , Ġmiddle Button Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperipheral ?. mouse Move Pointer ( 0 , Ġ 0 , Ġ 0 , Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Button Ġ= Ġfalse , Ġright Button Ġ= Ġfalse , Ġmiddle Button Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Cursor Move ( dx : ĠInt , Ġdy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperipheral ?. mouse Move Pointer ( dx , Ġdy , Ġ 0 , Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Button Ġ= Ġfalse , Ġright Button Ġ= Ġfalse , Ġmiddle Button Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon DoubleClick ( pointer Count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on DoubleClick () Ġpointer Count : Ġ$ pointer Count ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick ( pointer Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick ( pointer Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Drag Start () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on Drag Start () ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperipheral ?. mouse Move Pointer ( 0 , Ġ 0 , Ġ 0 , Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Button Ġ= Ġtrue , Ġright Button Ġ= Ġfalse , Ġmiddle Button Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Drag End () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on Drag End () ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperipheral ?. mouse Move Pointer ( 0 , Ġ 0 , Ġ 0 , Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Button Ġ= Ġfalse , Ġright Button Ġ= Ġfalse , Ġmiddle Button Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Drag Move ( dx : ĠInt , Ġdy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperipheral ?. mouse Move Pointer ( dx , Ġdy , Ġ 0 , Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Button Ġ= Ġtrue , Ġright Button Ġ= Ġfalse , Ġmiddle Button Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Scroll ( dx : ĠInt , Ġdy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperipheral ?. mouse Move Pointer ( 0 , Ġ 0 , Ġdy , Ġdx , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Button Ġ= Ġfalse , Ġright Button Ġ= Ġfalse , Ġmiddle Button Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbc Manager Ġ= ĠLocal Broadcast Manager . getInstance ( this ) ĊĠĠĠĠĠĠĠ Ġval Ġfilter Ġ= ĠIntent Filter ( Intent Constants . ACTION _ HID _ PER IP HER AL _ READY ) ĊĠĠĠĠĠĠĠ Ġbc Manager . register Receiver ( hid Per ipheral Ready Receiver , Ġfilter ) ĊĠĠĠĠĠĠĠ ĠsetUp Bluetooth () ĊĠĠĠĠĠĠĠ Ġswitch Fragment ( device List Fragment , ĠTAG _ DEVICE _ LIST _ FRAGMENT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġval Ġbc Manager Ġ= ĠLocal Broadcast Manager . getInstance ( this ) ĊĠĠĠĠĠĠĠ Ġbc Manager . unregister Receiver ( hid Per ipheral Ready Receiver ) ĊĠĠĠĠĠĠĠ Ġperipheral ?. stop Ad vertising () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġrequest Ġcode ĊĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent Constants . REQUEST _ BL U ETO OTH _ ENABLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMake Ġsure Ġthe Ġrequest Ġwas Ġsuccessful ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ!= ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Failed Ġto Ġenable ĠBluetooth ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! B le Utils . is B le Supported ( this ) Ġ|| Ġ! B le Utils . is B le Per ipheral Supported ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Device Ġdoesn 't Ġsupport ĠBLE ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitialize B le Per ipheral () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent Constants . REQUEST _ ACCESS _ F INE _ LOCATION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" ACCESS _ F INE _ LOCATION Ġhas Ġbeen Ġenabled ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Failed Ġto Ġenable ĠACCESS _ F INE _ LOCATION ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġswitch Fragment ( fragment : ĠFragment , Ġtag : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġsupport FragmentManager . beginTransaction () ĊĠĠĠĠĠĠĠ Ġtransaction . replace ( R . id . container , Ġfragment , Ġtag ). addTo Back Stack ( null ) ĊĠĠĠĠĠĠĠ Ġtransaction . commit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinitialize B le Per ipheral () Ġ{ ĊĠĠĠĠĠĠĠ Ġperipheral Ġ= ĠComposite Per ipheral ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠComposite Per ipheral . MOUSE Ġor ĠComposite Per ipheral . KEY BOARD , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġperipheral ?. mouse Reverse Vertical Wheel Direction Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġperipheral ?. mouse Vertical Wheel Scaling Ġ= Ġ 0 . 5 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetUp Device Map () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbt Manager Ġ= Ġget System Service ( Context . BL U ETO OTH _ SERVICE ) Ġas ĠBluetooth Manager ĊĠĠĠĠĠĠĠ Ġval Ġdevices Ġ= Ġbt Manager . adapter . bon ded Devices ĊĠĠĠĠĠĠĠ Ġfor Ġ( device Ġin Ġdevices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Map [ device . address ] Ġ= ĠB le Device Holder ( device , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdevice List Fragment . change DataSet () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetUp Bluetooth () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġup Ġruntime Ġpermission ĊĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( this , ĠManifest . permission . ACCESS _ F INE _ LOCATION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Request ing Ġpermission Ġfor ĠACCESS _ F INE _ LOCATION ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Manifest . permission . ACCESS _ F INE _ LOCATION ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent Constants . REQUEST _ ACCESS _ F INE _ LOCATION ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! B le Utils . is Bluetooth Enabled ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠB le Utils . enable Bluetooth ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! B le Utils . is B le Supported ( this ) Ġ|| Ġ! B le Utils . is B le Per ipheral Supported ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Device Ġdoesn 't Ġsupport ĠBLE ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitialize B le Per ipheral () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinitialize Device Control Fragment (): ĠDevice Control Fragment Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġval Ġdetector Ġ= ĠGest ure Detector ( this @ MainActivity , Ġdevice Control Double Tap Listener ) ĊĠĠĠĠĠĠĠ Ġ// Ġdetector . setOn Double Tap Listener ( device Control Double Tap Listener ) ĊĠĠĠĠĠĠĠ Ġ// Ġval Ġlistener Ġ= ĠView . On Touch Listener Ġ{ Ġv , Ġevent Ġ-> Ġdetector . on Touch Event ( event ) Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġreturn ĠDevice Control Fragment ( listener ) ĊĠĠĠĠĠĠĠ Ġ// Ġreturn ĠDevice Control Fragment ( device Control Test Listener ) ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Default Ġtap Timeout : Ġ${ device Control Touch Listener . tap Timeout }") ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Default Ġtap Interval Timeout : Ġ${ device Control Touch Listener . tap Interval Timeout }") ĊĠĠĠĠĠĠĠ Ġdevice Control Touch Listener . tap Interval Timeout Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġreturn ĠDevice Control Fragment ( device Control Touch Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠ Ġ} Ċ } Ċ