package Ġcom . sil icon labs . ble demo . Browser . Fragment Ċ Ċ import Ġandroid . bluetooth . Bluetooth GattCharacteristic Ċ import Ġandroid . bluetooth . Bluetooth Gatt Descriptor Ċ import Ġandroid . bluetooth . Bluetooth Gatt Service Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Type face Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . animation . Animation Utils Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . annotation . Drawable Res Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . fragment . app . Dialog Fragment Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġcom . sil icon labs . ble demo . Bluetooth . Parsing . Common Ċ import Ġcom . sil icon labs . ble demo . Bluetooth . Parsing . Descriptor Parser Ċ import Ġcom . sil icon labs . ble demo . Bluetooth . Parsing . Engine Ċ import Ġcom . sil icon labs . ble demo . Browser . Activities . Device Services Activity Ċ import Ġcom . sil icon labs . ble demo . Browser . Dialog s . Mappings Edit Dialog Ċ import Ġcom . sil icon labs . ble demo . Browser . Mapping Callback Ċ import Ġcom . sil icon labs . ble demo . Browser . Models . Mapping Ċ import Ġcom . sil icon labs . ble demo . Browser . Models . Mapping Type Ċ import Ġcom . sil icon labs . ble demo . R Ċ import Ġcom . sil icon labs . ble demo . Views . Characteristic Item Container Ċ import Ġcom . sil icon labs . ble demo . Views . Service Item Container Ċ import Ġcom . sil icon labs . ble demo . iop _ test . models . Common UUID Ċ import Ġcom . sil icon labs . ble demo . utils .* Ċ import Ġjava . util .* Ċ Ċ abstract Ġclass ĠServices Fragment ( private Ġval Ġis Remote : ĠBoolean ) Ġ: ĠFragment ( R . layout . fragment _ services ) Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġshared Pref Utils : ĠShared Pref Utils ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcharacteristic Names Map : ĠHashMap < String , ĠMapping > ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġservice Names Map : ĠHashMap < String , ĠMapping > ĊĊĠĠĠ Ġprotected Ġval Ġbluetooth Gatt Ġget () Ġ= Ġ( activity Ġas ĠDevice Services Activity ). bluetooth Gatt ĊĊĠĠĠ Ġprotected Ġvar Ġservice Item Containers Ġ= Ġmutable Map Of < String , ĠService Item Container >() ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġservices Container View : ĠViewGroup ĊĠĠĠ Ġprotected Ġval Ġcharacteristic Fragments Ġ= Ġmutable Map Of < Int , ĠFragment Characteristic Detail ?> () ĊĠĠĠ Ġprotected Ġvar Ġcurrent Write Read Fragment : ĠFragment Characteristic Detail ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġdescriptors Map Ġ= Ġmutable Map Of < Bluetooth Gatt Descriptor , ĠView >() ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġservices Container View Ġ= Ġview . findViewById ( R . id . services _ container ) ĊĊĠĠĠĠĠĠĠ Ġshared Pref Utils Ġ= ĠShared Pref Utils ( require Context ()) ĊĠĠĠĠĠĠĠ Ġcharacteristic Names Map Ġ= Ġshared Pref Utils . character istic Names Map ĊĠĠĠĠĠĠĠ Ġservice Names Map Ġ= Ġshared Pref Utils . service Names Map ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠĠĠ Ġinit Services Views () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġservices Container View . removeAll Views () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Descriptor View ( descriptor : ĠBluetooth Gatt Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdescriptors Map [ descriptor ]?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < LinearLayout >( R . id . ll _ value ). visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < TextView >( R . id . tv _ value ). text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDescriptor Parser ( descriptor ). get Formatted Value () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Characteristic View ( character istic : ĠBluetooth GattCharacteristic ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcharacteristic Fragments . values ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Ġ{ Ġit Ġ!= Ġnull Ġ&& Ġit . m Bluetooth Char act ?. uuid Ġ== Ġcharacteristic . uuid Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . on Action Data Available ( character istic . uuid . toString (), Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Current Characteristic View ( uuid : ĠUUID ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Write Read Fragment ?. on Action Data Available ( uuid . toString (), Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Current Characteristic View ( uuid : ĠUUID , Ġstatus : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Write Read Fragment ?. on Action Data Write ( uuid . toString (), Ġstatus ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġabstract Ġval Ġservices : ĠList < Bluetooth Gatt Service > ĊĊĠĠĠ Ġprivate Ġfun Ġinit Services Views () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġiterate Ġthrough Ġall Ġof Ġthe Ġservices Ġfor Ġthe Ġdevice , Ġinf late Ġand Ġadd Ġviews Ġto Ġthe Ġscroll view ĊĠĠĠĠĠĠĠ Ġservices . forEach Indexed ĠforEach @{ Ġposition , Ġservice Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġservice Item Container Ġ= ĠService Item Container ( require Context ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġengine Service Ġ= Ġget Engine Service ( service . uuid , Ġservice ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsystem Mandatory Service Ġ= Ġis Mandatory System Services ( service . uuid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠserviceName Text Ġ= ĠCommon . getService Name ( engine Service . uuid , Ġrequire Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( system Mandatory Service ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠserviceName Text Ġ+= Ġ" Ġ( System )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġservice Uuid Text Ġ= ĠU uid Utils . get Uuid Text ( engine Service . uuid ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopulate Service Container With Values ( service Item Container , Ġposition , ĠserviceName Text , Ġservice Uuid Text ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcharacteristics Ġ= Ġengine Service . character istics . or Empty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( character istics . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice Item Container . cv Service Info . set BackgroundColor ( Color . LT GRAY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġiterate Ġthrough Ġthe Ġcharacteristics Ġof Ġthis Ġservice Ġto Ġinitialize Ġviews ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( bluetooth GattCharacteristic Ġin Ġcharacteristics ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġretrieve Ġrelevant Ġbluetooth Ġdata Ġfor Ġcharacteristic Ġof Ġservice ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġengine Ġparses Ġthrough Ġthe Ġdata Ġof Ġthe Ġb tg att char ac Ġand Ġreturns Ġa Ġwrapper Ġcharacteristic ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġwrapper Ġcharacteristic Ġis Ġmatched Ġwith Ġaccepted Ġbt Ġg att Ġprofiles , Ġprovides Ġfield Ġtypes / values / units ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġengine Characteristic Ġ= Ġget Engine Characteristic ( bluetooth GattCharacteristic . uuid , Ġengine Service , Ġbluetooth GattCharacteristic ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcharacteristic Name Text Ġ= ĠCommon . get Characteristic Name ( engine Characteristic . uuid , Ġrequire Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcharacteristic Uuid Text Ġ= ĠU uid Utils . get Uuid Text ( engine Characteristic . uuid ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcharacteristic Container Ġ= ĠCharacter istic Item Container ( require Context ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Characteristic Descriptors ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth GattCharacteristic , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Container . descriptors Label , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Container . descriptor Container ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopulate Characteristic Container With Values ( character istic Container , Ġcharacteristic Name Text , Ġcharacteristic Uuid Text ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhide Ġdivider Ġbetween Ġcharacteristics Ġif Ġlast Ġcharacteristic Ġof Ġservice ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( service Item Container . ll Group Of Character istics For Service . child Count Ġ== Ġcharacteristics . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Container . character istic Separator . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice Item Container . ll Last Item Divider . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice Item Container . ll Group Of Character istics For Service . addView ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Container ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġadd Ġproperties Ġto Ġcharacteristic Ġlist Ġitem Ġin Ġexpansion ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Properties To Characteristic ( bluetooth GattCharacteristic , Ġcharacteristic Container . props Container ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! system Mandatory Service ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Property Click Listeners ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Container . props Container , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth GattCharacteristic , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġengine Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠserviceName Text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Container . character istic Expansion ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice Item Container . set Characteristic Notification State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Uuid Text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotifications . DISABLED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Container . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( character istic Container . character istic Expansion . visibility Ġ== ĠView . VISIBLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Container . character istic Expansion . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Container . character istic Expansion . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( character istic Fragments . containsKey ( id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Write Read Fragment Ġ= Ġcharacteristic Fragments [ id ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Write Read Fragment Ġ= Ġinit Fragment Characteristic Detail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth GattCharacteristic , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Container . character istic Expansion , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Fragments [ id ] Ġ= Ġcurrent Write Read Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice Item Container . set Margins ( position , Ġservices . last Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservices Container View . addView ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice Item Container , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayout . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayout . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice Item Containers [ serviceName Text ] Ġ= Ġservice Item Container ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġabstract Ġfun Ġget Engine Service ( ĊĠĠĠĠĠĠĠ Ġuuid : ĠUUID ?, ĊĠĠĠĠĠĠĠ Ġservice : ĠBluetooth Gatt Service ĊĠĠĠ Ġ): ĠBluetooth Gatt Service ĊĊĠĠĠ Ġprotected Ġabstract Ġfun Ġget Engine Characteristic ( ĊĠĠĠĠĠĠĠ Ġuuid : ĠUUID ?, ĊĠĠĠĠĠĠĠ Ġservice : ĠBluetooth Gatt Service , ĊĠĠĠĠĠĠĠ Ġcharacteristic : ĠBluetooth GattCharacteristic ĊĠĠĠ Ġ): ĠBluetooth GattCharacteristic ĊĊĠĠĠ Ġprivate Ġfun ĠService Item Container . set Margins ( position : ĠInt , Ġlast Index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġouter Margin Ġ= ĠTyped Value . apply Dimension ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTyped Value . COMPLEX _ UNIT _ DIP , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 6 f , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresources . display Metrics ĊĠĠĠĠĠĠĠ Ġ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġinner Margin Ġ= ĠTyped Value . apply Dimension ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTyped Value . COMPLEX _ UNIT _ DIP , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 8 f , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresources . display Metrics ĊĠĠĠĠĠĠĠ Ġ). toInt () ĊĊĠĠĠĠĠĠĠ Ġcv Service Info . layout Params Ġ= ĠLinearLayout . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayout . LayoutParams . MATCH _ PARENT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayout . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġset Margins ( outer Margin , Ġouter Margin , Ġouter Margin , Ġinner Margin ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Index Ġ-> Ġset Margins ( outer Margin , Ġinner Margin , Ġouter Margin , Ġouter Margin ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġset Margins ( outer Margin , Ġinner Margin , Ġouter Margin , Ġinner Margin ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġinit Fragment Characteristic Detail ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth GattCharacteristic : ĠBluetooth GattCharacteristic , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpansion Id : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice : ĠBluetooth Gatt Service , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Expansion : ĠLinearLayout , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Write Dialog : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Type : ĠFragment Characteristic Detail . Write Type Ġ= ĠFragment Characteristic Detail . Write Type . REMOTE _ WRITE ĊĠĠĠ Ġ): ĠFragment Characteristic Detail Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcharacteristic Detail Ġ= ĠFragment Characteristic Detail (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Remote Ġ= Ġthis @ Services Fragment . is Remote ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset m Service ( service ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset m Bluetooth Char act ( bluetooth GattCharacteristic ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . display Write Dialog Ġ= Ġdisplay Write Dialog ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Expansion . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . write Type Ġ= Ġwrite Type ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġshow Ġcharacteristic 's Ġexpansion Ġand Ġadd Ġthe Ġfragment Ġto Ġview / edit Ġcharacteristic Ġdetail ĊĠĠĠĠĠĠĠ Ġparent FragmentManager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( expansion Id , Ġcharacteristic Detail , ĠCHARACTER ISTIC _ ADD _ FRAGMENT _ TRANSACTION _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit Now () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcharacteristic Detail ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Properties To Characteristic ( ĊĠĠĠĠĠĠĠ Ġbluetooth GattCharacteristic : ĠBluetooth GattCharacteristic , ĊĠĠĠĠĠĠĠ Ġprops Container : ĠLinearLayout ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġprops Explo ded : ĠArray < String ?> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCommon . getProperties ( require Context (), Ġbluetooth GattCharacteristic . properties ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. split (",") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Typed Array () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprops Explo ded . any Ġ{ Ġit ?. contains (" write Ġno Ġresponse ", Ġignore Case Ġ= Ġtrue ) Ġ== Ġtrue Ġ} ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Ġ= ĠArrayList < String ?> () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwrite Added Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( s : ĠString ? Ġin Ġprops Explo ded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs ?. contains (" write Ġno Ġresponse ", Ġignore Case Ġ= Ġtrue ) !! Ġ&& Ġ! write Added ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add (" Write ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Added Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! s . toLowerCase ( Locale . getDefault ()). contains (" write ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ( s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprops Explo ded Ġ= ĠarrayOf Null s ( temp . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġtemp . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprops Explo ded [ i ] Ġ= Ġtemp [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( property Value : ĠString ? Ġin Ġprops Explo ded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproperty View Ġ= ĠTextView ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġproperty Value Trim med : ĠString ? Ġ= Ġproperty Value ?. trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty Value Trim med Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( property Value ?. length !! Ġ> Ġ 1 3 ) Ġproperty Value . substring ( 0 , Ġ 1 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġproperty Value Trim med ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty View . text Ġ= Ġproperty Value Trim med ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty View . set BackgroundColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . getColor ( require Context (), ĠR . color . sil abs _ white ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty View . setText Size ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTyped Value . COMPLEX _ UNIT _ PX , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . get Dimension ( R . dim en . character istic _ property _ text _ size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty View . setTextColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . getColor ( require Context (), ĠR . color . sil abs _ inactive ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty View . type face Ġ= ĠType face . DEFAULT _ BOLD ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty View . gravity Ġ= ĠGr avity . CENTER _ VERTICAL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproperty Container Ġ= ĠLinearLayout ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty Container . orientation Ġ= ĠLinearLayout . HORIZONTAL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproperty Icon Ġ= ĠImageView ( require Context ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Drawable Res Ġval Ġicon Res : ĠInt Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( property Value . trim (' Ġ'). toUpperCase ( Locale . getDefault ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon . PROPERTY _ VALUE _ BRO ADCAST Ġ-> ĠR . drawable . ic _ debug _ prop _ broadcast ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon . PROPERTY _ VALUE _ READ Ġ-> ĠR . drawable . ic _ read _ off ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon . PROPERTY _ VALUE _ WRITE Ġ-> ĠR . drawable . ic _ edit _ off ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon . PROPERTY _ VALUE _ NOTIFY Ġ-> ĠR . drawable . ic _ notify _ off ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon . PROPERTY _ VALUE _ IND ICATE Ġ-> ĠR . drawable . ic _ ind icate _ off ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon . PROPERTY _ VALUE _ SIGNED _ WRITE Ġ-> ĠR . drawable . ic _ debug _ prop _ signed _ write ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon . PROPERTY _ VALUE _ EXT ENDED _ PRO PS Ġ-> ĠR . drawable . ic _ debug _ prop _ ext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠR . drawable . ic _ debug _ prop _ ext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty Icon . setBackground Resource ( icon Res ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty Icon . tag Ġ= ĠPROPERTY _ ICON _ TAG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty View . tag Ġ= ĠPROPERTY _ NAME _ TAG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Text Ġ= ĠLinearLayout . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayout . LayoutParams . WRAP _ CONTENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayout . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams Text . gravity Ġ= ĠGr avity . CENTER _ VERTICAL ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Icon Ġ= ĠLinearLayout . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . WRAP _ CONTENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd Ġ= Ġresources . display Metrics . density ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams Icon . margin End Ġ= Ġ( 8 Ġ* Ġd ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams Icon . gravity Ġ= ĠGr avity . CENTER _ VERTICAL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty Container . addView ( property Icon , Ġparams Icon ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty Container . addView ( property View , Ġparams Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty Container . tag Ġ= Ġproperty Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Text And Icon Container Ġ= ĠLinearLayout . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayout . LayoutParams . WRAP _ CONTENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayout . LayoutParams . MATCH _ PARENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams Text And Icon Container . set Margins ( 0 , Ġ( 4 Ġ* Ġd ). toInt (), Ġ( 1 0 Ġ* Ġd ). toInt (), Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproperty Container . set Padding ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 2 Ġ* Ġd ). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 8 Ġ* Ġd ). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 6 Ġ* Ġd ). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 6 Ġ* Ġd ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprops Container . addView ( property Container , Ġparams Text And Icon Container ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Property Click Listeners ( ĊĠĠĠĠĠĠĠ Ġprops Container : ĠLinearLayout , ĊĠĠĠĠĠĠĠ Ġbluetooth GattCharacteristic : ĠBluetooth GattCharacteristic , ĊĠĠĠĠĠĠĠ Ġservice : ĠBluetooth Gatt Service , ĊĠĠĠĠĠĠĠ ĠserviceName : ĠString , ĊĠĠĠĠĠĠĠ Ġcharacteristic Expansion : ĠLinearLayout ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnotification Icon Ġ= Ġget Icon WithValue ( props Container , ĠCommon . PROPERTY _ VALUE _ NOTIFY ) ĊĠĠĠĠĠĠĠ Ġval Ġnotification Text Ġ= Ġget TextView WithValue ( props Container , ĠCommon . PROPERTY _ VALUE _ NOTIFY ) ĊĠĠĠĠĠĠĠ Ġval Ġindication Icon Ġ= Ġget Icon WithValue ( props Container , ĠCommon . PROPERTY _ VALUE _ IND ICATE ) ĊĠĠĠĠĠĠĠ Ġval Ġindication Text Ġ= Ġget TextView WithValue ( props Container , ĠCommon . PROPERTY _ VALUE _ IND ICATE ) ĊĠĠĠĠĠĠĠ Ġval Ġread Icon Ġ= Ġget Icon WithValue ( props Container , ĠCommon . PROPERTY _ VALUE _ READ ) ĊĠĠĠĠĠĠĠ Ġval Ġwrite Icon Ġ= Ġget Icon WithValue ( props Container , ĠCommon . PROPERTY _ VALUE _ WRITE ) ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġcharacteristic Expansion . id ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġprops Container . child Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( props Container . getChild At ( i ). tag Ġ== Ġnull ) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproperty Container Ġ= Ġprops Container . getChild At ( i ) Ġas ĠLinearLayout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġ( property Container . tag Ġas ĠString ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toUpperCase ( Locale . getDefault ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( tag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon . PROPERTY _ VALUE _ READ Ġ-> Ġproperty Container . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Icon ?. start Animation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation Utils . load Animation ( require Context (), ĠR . anim . property _ image _ click ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( character istic Fragments . containsKey ( id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Write Read Fragment Ġ= Ġcharacteristic Fragments [ id ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Write Read Fragment Ġ= Ġinit Fragment Characteristic Detail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth GattCharacteristic , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Expansion ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Fragments [ id ] Ġ= Ġcurrent Write Read Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Expansion . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Characteristic ( bluetooth GattCharacteristic ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon . PROPERTY _ VALUE _ WRITE Ġ-> Ġproperty Container . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwrite Type Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġis ĠRemote Services Fragment ) ĠFragment Characteristic Detail . Write Type . REMOTE _ WRITE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠFragment Characteristic Detail . Write Type . LOCAL _ WRITE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Write Dialog ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Icon , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth GattCharacteristic , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Expansion , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon . PROPERTY _ VALUE _ NOTIFY Ġ-> Ġproperty Container . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġis ĠRemote Services Fragment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Notifications ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Icon , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Expansion , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth GattCharacteristic , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠserviceName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindication Icon , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindication Text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Write Dialog ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Icon , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth GattCharacteristic , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Expansion , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFragment Characteristic Detail . Write Type . LOCAL _ NOTIFY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon . PROPERTY _ VALUE _ IND ICATE Ġ-> Ġproperty Container . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġis ĠRemote Services Fragment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Indic ations ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindication Icon , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Expansion , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindication Text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth GattCharacteristic , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠserviceName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Icon ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Write Dialog ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindication Icon , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth GattCharacteristic , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Expansion , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFragment Characteristic Detail . Write Type . LOCAL _ IND ICATE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Write Dialog ( ĊĠĠĠĠĠĠĠ Ġicon : ĠImageView ?, ĊĠĠĠĠĠĠĠ Ġid : ĠInt , ĊĠĠĠĠĠĠĠ Ġcharacteristic : ĠBluetooth GattCharacteristic , ĊĠĠĠĠĠĠĠ Ġservice : ĠBluetooth Gatt Service , ĊĠĠĠĠĠĠĠ Ġcharacteristic Expansion : ĠLinearLayout , ĊĠĠĠĠĠĠĠ Ġwrite Type : ĠFragment Characteristic Detail . Write Type ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġicon ?. start Animation ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation Utils . load Animation ( require Context (), ĠR . anim . property _ image _ click ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( character istic Fragments . containsKey ( id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Write Read Fragment Ġ= Ġcharacteristic Fragments [ id ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Fragments [ id ]?. create Write Dialog ( write Type ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Write Read Fragment Ġ= Ġinit Fragment Characteristic Detail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Expansion , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Write Dialog Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Type Ġ= Ġwrite Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Fragments [ id ] Ġ= Ġcurrent Write Read Fragment ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcharacteristic Expansion . visibility Ġ= ĠView . VISIBLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġabstract Ġfun Ġread Characteristic ( bluetooth GattCharacteristic : ĠBluetooth GattCharacteristic ) ĊĊĠĠĠ Ġprotected Ġfun Ġget Uuid From Bluetooth GattCharacteristic ( bluetooth GattCharacteristic : ĠBluetooth GattCharacteristic ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcharacteristic Ġ= ĠEngine . get Characteristic ( bluetooth GattCharacteristic . uuid ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ( character istic ?. uuid Ġ?: Ġbluetooth GattCharacteristic . uuid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠU uid Utils . get Uuid Text ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġprivate Ġfun Ġget TextView WithValue ( props Container : ĠLinearLayout , Ġvalue : ĠString ): ĠTextView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġprops Container . child Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( props Container . getChild At ( i ). tag Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproperty Container Ġ= Ġprops Container . getChild At ( i ) Ġas ĠLinearLayout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġproperty Container . child Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġproperty Container . getChild At ( j ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view . tag Ġ!= Ġnull Ġ&& Ġ( view . tag Ġ== ĠPROPERTY _ NAME _ TAG )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproperty Value Ġ= Ġ( property Container . tag Ġas ĠString ). trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toUpperCase ( Locale . getDefault ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( property Value Ġ== Ġvalue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġview Ġas ĠTextView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Icon WithValue ( props Container : ĠLinearLayout , Ġvalue : ĠString ): ĠImageView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġprops Container . child Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( props Container . getChild At ( i ). tag Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproperty Container Ġ= Ġprops Container . getChild At ( i ) Ġas ĠLinearLayout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġproperty Container . child Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġproperty Container . getChild At ( j ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view . tag Ġ!= Ġnull Ġ&& Ġ( view . tag Ġ== ĠPROPERTY _ ICON _ TAG )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproperty Value Ġ= Ġ( property Container . tag Ġas ĠString ). trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toUpperCase ( Locale . getDefault ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( property Value Ġ== Ġvalue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġview Ġas ĠImageView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Characteristic Descriptors ( ĊĠĠĠĠĠĠĠ Ġbluetooth GattCharacteristic : ĠBluetooth GattCharacteristic , ĊĠĠĠĠĠĠĠ Ġdescriptors Label TextView : ĠTextView , ĊĠĠĠĠĠĠĠ Ġdescriptor LinearLayout : ĠLinearLayout ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bluetooth GattCharacteristic . descriptors . size Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptors Label TextView . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( bg d : ĠBluetooth Gatt Descriptor Ġin Ġbluetooth GattCharacteristic . descriptors ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescriptor Ġ= ĠEngine . get Descriptor By UUID ( bg d . uuid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠView . inflate ( require Context (), ĠR . layout . descriptor _ view , Ġnull ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname TV Ġ= Ġview . findViewById < TextView >( R . id . tv _ name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname TV . text Ġ= Ġdescriptor ?. name Ġ?: Ġ" Unknown " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuuid TV Ġ= Ġview . findViewById < TextView >( R . id . tv _ uuid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuuid TV . text Ġ= Ġdescriptor ?. uuid ?. let Ġ{ ĠU uid Utils . get Uuid Text ( it ) Ġ} Ġ?: Ġ" Unknown " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġread IV Ġ= Ġview . findViewById < ImageView >( R . id . iv _ read ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread IV . start Animation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation Utils . load Animation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . anim . property _ image _ click ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Descriptor ( bg d ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptor LinearLayout . addView ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptors Map [ bg d ] Ġ= Ġview ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġread Descriptor ( descriptor : ĠBluetooth Gatt Descriptor ) ĊĊĠĠĠ Ġprivate Ġfun Ġpopulate Service Container With Values ( ĊĠĠĠĠĠĠĠ Ġservice Item Container : ĠService Item Container , ĊĠĠĠĠĠĠĠ Ġposition : ĠInt , ĊĠĠĠĠĠĠĠ ĠserviceName : ĠString , ĊĠĠĠĠĠĠĠ Ġservice Uuid : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( position Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ĠDevice Services Activity ). UIC re ated Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . ota _ button ?. isVisible Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth Gatt ?. services ?. contains ( bluetooth Gatt ?. getService ( Uuid Consts . OTA _ SERVICE )) !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġservice Item Container . ll Group Of Character istics For Service . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġservice Item Container . ll Group Of Character istics For Service . removeAll Views () ĊĠĠĠĠĠĠĠ Ġservice Item Container . tv Service Title . text Ġ= ĠserviceName ĊĠĠĠĠĠĠĠ Ġservice Item Container . tv Service Uuid . text Ġ= Ġservice Uuid ĊĠĠĠĠĠĠĠ Ġif Ġ( serviceName Ġ== ĠgetString ( R . string . unknown _ service )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice Item Container . iv Edit ServiceName . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġservice Item Container . ll Service Edit Name . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog : ĠDialog Fragment Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM appings Edit Dialog ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice Item Container . tv Service Title . text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice Item Container . tv Service Uuid . text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠMapping Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Name Changed ( mapping : ĠMapping ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice Item Container . tv Service Title . text Ġ= Ġmapping . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice Names Map [ mapping . uuid ] Ġ= Ġmapping ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĠMapping Type . SERVICE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . show ( parent FragmentManager , Ġ" dialog _ mappings _ edit ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( service Names Map . containsKey ( service Uuid )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice Item Container . tv Service Title . text Ġ= Ġservice Names Map [ service Uuid ]?. name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpopulate Characteristic Container With Values ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Container : ĠCharacter istic Item Container , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Name Text : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Uuid Text : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġcharacteristic Container . character istic Name . text Ġ= Ġcharacteristic Name Text ĊĠĠĠĠĠĠĠ Ġif Ġ( character istic Name Text Ġ== ĠgetString ( R . string . unknown _ character istic _ label )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Container . character istic Edit Name Icon . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Container . character istic Edit Name Layout . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM appings Edit Dialog ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Container . character istic Name . text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Uuid Text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠMapping Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Name Changed ( mapping : ĠMapping ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Container . character istic Name . text Ġ= Ġmapping . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Names Map [ mapping . uuid ] Ġ= Ġmapping ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĠMapping Type . CHARACTER ISTIC ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show ( parent FragmentManager , Ġ" dialog _ mappings _ edit ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( character istic Names Map . containsKey ( character istic Uuid Text )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Container . character istic Name . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacteristic Names Map [ character istic Uuid Text ]?. name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcharacteristic Container . character istic Uuid . text Ġ= Ġcharacteristic Uuid Text ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Mandatory System Services ( uuid : ĠUUID ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( this Ġis ĠLocal Services Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ( uuid Ġ== ĠUUID . fromString ( Common UUID . Service . UUID _ GENERIC _ ACCESS . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġuuid Ġ== ĠUUID . fromString ( Common UUID . Service . UUID _ GENERIC _ ATTRIBUTE . toString ()))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġshared Pref Utils . save Characteristic Names Map ( character istic Names Map ) ĊĠĠĠĠĠĠĠ Ġshared Pref Utils . save Service Names Map ( service Names Map ) ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCHARACTER ISTIC _ ADD _ FRAGMENT _ TRANSACTION _ ID Ġ= Ġ" character istic detail " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPROPERTY _ ICON _ TAG Ġ= Ġ" character istic property icon " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPROPERTY _ NAME _ TAG Ġ= Ġ" character ist is property name " ĊĠĠĠ Ġ} Ċ } Ċ