package Ġtk . k ik t . bluetooth manager . handler . ble Ċ Ċ import Ġandroid . bluetooth . Bluetooth Gatt Ċ import Ġandroid . bluetooth . Bluetooth GattCharacteristic Ċ import Ġandroid . bluetooth . Bluetooth Gatt Service Ċ import Ġandroid . os . Build Ċ import Ġandroid . support . annotation . Requires Api Ċ import Ġtk . k ik t . bluetooth manager . ext . ui Thread Ċ import Ġtk . k ik t . bluetooth manager . handler . Bluetooth Type Ċ import Ġtk . k ik t . bluetooth manager . handler . Power Type Ċ import Ġtk . k ik t . bluetooth manager . handler . type . Weight Platform DeviceType Ċ import Ġjava . nio . charset . Charset Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . locks . Lock Ċ import Ġjava . util . concurrent . locks . Re entrant Lock Ċ import Ġkotlin . concurrent . with Lock Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġc ai Ġon Ġ 2 0 1 7 / 1 2 / 1 5 . Ċ Ġ*/ Ċ @ Requires Api ( Build . VERSION _ CODES . KIT K AT ) Ċ object ĠWeight B le Handler Ġ: ĠAbstract B le Handler () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠSERVICE _ UUID Ġ= ĠUUID . fromString (" 0 0 0 0 ffe 0 - 0 0 0 0 - 1 0 0 0 - 8 0 0 0 - 0 0 8 0 5 f 9 b 3 4 fb ") ĊĠĠĠ Ġprivate Ġval ĠCHARACTER ISTIC _ UUID Ġ= ĠUUID . fromString (" 0 0 0 0 ffe 1 - 0 0 0 0 - 1 0 0 0 - 8 0 0 0 - 0 0 8 0 5 f 9 b 3 4 fb ") ĊĊĠĠĠ Ġoverride Ġfun Ġservice UUID (): ĠUUID Ġ= ĠSERVICE _ UUID ĊĊĠĠĠ Ġoverride Ġfun Ġcharacteristic UUID (): ĠUUID Ġ= ĠCHARACTER ISTIC _ UUID ĊĊĠĠĠ Ġoverride Ġfun Ġhandle Characteristic ( g att : ĠBluetooth Gatt ?, Ġservice : ĠBluetooth Gatt Service , Ġcharacteristic : ĠBluetooth GattCharacteristic ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġg att ?. set Characteristic Notification ( character istic , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Notify Change ( g att : ĠBluetooth Gatt ?, Ġcharacteristic : ĠBluetooth GattCharacteristic ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcharacteristic ?. value ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall Read ByteArray ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= ĠtoString ( Charset . forName (" gb k ")). trim () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweight Callback Ġ{ Ġcallback Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Value Notify ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠWeight B le Callback Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Value Notify ( value : ĠString ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġweight Callback ( action : Ġ( callback : ĠWeight B le Callback ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweight Lock . with Lock Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweight Listener Exec Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġcallback : ĠWeight B le Callback ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġreceiver Weight Listener List Ġ= Ġarray ListOf < Weight B le Callback >() ĊĊĠĠĠ Ġprivate Ġvar Ġweight Lock : ĠLock Ġ= ĠRe entrant Lock () ĊĊĠĠĠ Ġfun Ġadd Receive Weight Listener ( receive Weight Listener : ĠWeight B le Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġweight Lock . with Lock Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver Weight Listener List . add ( receive Weight Listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Receive Weight Listener ( receive Weight Listener : ĠWeight B le Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġweight Lock . with Lock Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver Weight Listener List . remove ( receive Weight Listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġweight Listener Exec ( action : Ġ( receive Weight Listener : ĠWeight B le Callback ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġweight Lock . with Lock Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver Weight Listener List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtype () Ġ= ĠWeight B le Type ĊĊĠĠĠ Ġobject ĠWeight B le Type Ġ: ĠBluetooth Type Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġdevice Type Ġ= ĠWeight Platform DeviceType ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġpower Type Ġ= ĠPower Type . BLE ĊĠĠĠ Ġ} Ċ }