package Ġcom . h ong ri . blue light . activity čĊč Ċ import Ġandroid . content . Intent č Ċ import Ġandroid . graphics . Bitmap č Ċ import Ġandroid . graphics . Canvas č Ċ import Ġandroid . graphics . Color č Ċ import Ġandroid . os . Bundle č Ċ import Ġandroid . os . Handler č Ċ import Ġandroid . os . Persist able Bundle č Ċ import Ġandroid . view . View č Ċ import Ġandroid . widget . LinearLayout č Ċ import Ġandroid . widget . TextView č Ċ import Ġandroidx . appcompat . app . AppCompatActivity č Ċ import Ġandroidx . drawer layout . widget . Drawer Layout č Ċ import Ġandroidx . fragment . app . Fragment č Ċ import Ġandroidx . recyclerview . widget . Divider Item Decoration č Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager č Ċ import Ġandroidx . recyclerview . widget . RecyclerView č Ċ import Ġcom . alibaba . fastjson . JSONObject č Ċ import Ġcom . blank j . util code . util .* č Ċ import Ġcom . ch ad . library . adapter . base . Base Quick Adapter č Ċ import Ġcom . ch ad . library . adapter . base . Base ViewHolder č Ċ import Ġcom . cl j . fast ble . data . B le Device č Ċ import Ġcom . gy f . imm ersion bar . Imm ersion Bar č Ċ import Ġcom . h ong ri . blue light . Local Application č Ċ import Ġcom . h ong ri . blue light . R č Ċ import Ġcom . h ong ri . blue light . ble .* č Ċ import Ġcom . h ong ri . blue light . ui . Fragment C CT č Ċ import Ġcom . h ong ri . blue light . ui . Fragment Effect č Ċ import Ġcom . h ong ri . blue light . ui . Fragment H SL č Ċ import Ġcom . h ong ri . blue light . ui . bean . C CT Bean č Ċ import Ġcom . h ong ri . blue light . ui . bean . H SL Bean č Ċ import Ġcom . h ong ri . blue light . ui . bean . Program Bean č Ċ import Ġcom . h ong ri . blue light . ui . bean . Scene Bean č Ċ import Ġcom . h ong ri . blue light . upgrade . Tag _ Upgrade File Header č Ċ import Ġcom . h ong ri . blue light . util . My Util . parse Short Addr By Mac č Ċ import Ġcom . h ong ri . test draw layout . MenuItem č Ċ import Ġcom . she hu an . n iced ialog . Base N ice Dialog č Ċ import Ġcom . she hu an . n iced ialog . N ice Dialog č Ċ import Ġcom . she hu an . n iced ialog . View Convert Listener č Ċ import Ġcom . she hu an . n iced ialog . ViewHolder č Ċ import Ġjp . was ab eef . blur ry . Blur ry č Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* č Ċ import Ġkotlinx . android . synt hetic . main . content _ main .* č Ċ import Ġkotlinx . coroutines .* č Ċ import Ġorg . green robot . event bus . EventBus č Ċ import Ġorg . green robot . event bus . Subscribe č Ċ import Ġorg . green robot . event bus . Thread Mode č Ċ import Ġjava . io . File č Ċ import Ġjava . util .* č Ċ import Ġkotlin . collections . ArrayList čĊčĊč Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ čĊčĊĠĠĠ Ġ// Ġprivate Ġvar Ġled On : ĠBoolean = false čĊĠĠĠ Ġprivate Ġvar Ġcur Index Ġ= Ġ 0 čĊĠĠĠ Ġinternal Ġvar Ġfragments Ġ= ĠArrayList < Fragment >() čĊĠĠĠ Ġvar Ġbitmap Bg 1 : ĠBitmap ? Ġ= Ġnull čĊĠĠĠ Ġvar Ġbitmap Bg 2 : ĠBitmap ? Ġ= Ġnull čĊĠĠĠ Ġvar Ġbitmap Bg 3 : ĠBitmap ? Ġ= Ġnull čĊĠĠĠ Ġvar Ġconnect Device : ĠB le Device ? Ġ= Ġnull čĊčĊĠĠĠ Ġprivate Ġvar Ġis Normal Model = true čĊčĊĠĠĠ Ġvar Ġm Handler : ĠHandler Ġ= ĠHandler ( Handler . Callback Ġ{ čĊčĊĠĠĠĠĠĠĠ Ġtrue čĊĠĠĠ Ġ}) čĊčĊčĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdrawer Layout : ĠDraw er Layout čĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Adapter : ĠBase Quick Adapter < MenuItem , ĠBase ViewHolder > čĊčĊĠĠĠ Ġvar Ġselect Menus Ġ= ĠArrayList < MenuItem >() čĊĠĠĠ Ġprivate Ġvar Ġmenu List Ġ= ĠArrayList < MenuItem >() čĊčĊĠĠĠ Ġlateinit Ġvar Ġrv _ menu : ĠRecyclerView čĊčĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) čĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) čĊĠĠĠĠĠĠĠ Ġ// éĢı æĺİ çĬ¶æĢģ æłı åĴĮ å¯¼èĪª æłı čĊĠĠĠĠĠĠĠ ĠImm ersion Bar . with ( this ). transparent Bar (). init () čĊčĊčĊĠĠĠĠĠĠĠ Ġif Ġ( savedInstanceState Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcur Index Ġ= ĠsavedInstanceState . getInt (" cur Index ") čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġinit View () čĊčĊčĊĠĠĠĠĠĠĠ ĠBLE Service . getInstance (). set Scan B le EventListener Ġ{ Ġscan State , Ġble Device Ġ-> čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġhand Scan Event ( scan State , Ġble Device ) čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ ĠBLE Service . getInstance (). set Connect EventListener Ġ{ Ġflag , Ġdevice Ġ-> čĊčĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e (" ===== MainActivity , ĠonCreate () === connect Ġdevice , Ġflag =$ flag , Ġdevice =$ device ") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnect Device Ġ= Ġdevice čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġhand Connect Event ( flag ) čĊĠĠĠĠĠĠĠ Ġ} čĊčĊčĊĠĠĠĠĠĠĠ ĠBLE Service . getInstance (). start Scan () čĊčĊĠĠĠĠĠĠĠ ĠEvent Bus . getDefault (). register ( this ) čĊčĊĠĠĠĠĠĠĠ Ġ// åĬłè½½ blur å¯¹ è¯Ŀ æ¡Ĩ çļĦ ä½į åĽ¾ čĊĠĠĠĠĠĠĠ Ġ// bitmap = Bitmap Factory . decode Resource ( resources , R . drawable . bg _ blur _ h sl ) čĊčĊĠĠĠĠĠĠĠ Ġinit Drawable Layout () čĊčĊčĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġprivate Ġfun Ġinit Drawable Layout () Ġ{ čĊĠĠĠĠĠĠĠ Ġdrawer Layout Ġ= ĠfindViewById ( R . id . drawer _ layout ) čĊĠĠĠĠĠĠĠ Ġrv _ menu Ġ= Ġdrawer Layout . findViewById ( R . id . rv _ menu ) čĊĠĠĠĠĠĠĠ Ġrv _ menu . layout Manager Ġ= ĠLinearLayoutManager ( this , ĠLinearLayoutManager . VERTICAL , Ġfalse ) čĊĠĠĠĠĠĠĠ Ġrv _ menu . addItem Decoration ( Divider Item Decoration ( this , ĠLinearLayout . VERTICAL )) čĊčĊĠĠĠĠĠĠĠ Ġm Adapter Ġ= čĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠBase Quick Adapter < MenuItem , ĠBase ViewHolder >( R . layout . item _ menu , Ġmenu List ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconvert ( helper : ĠBase ViewHolder , Ġitem : ĠMenuItem ) Ġ{ čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( connect Device Ġ!= Ġnull Ġ&& Ġconnect Device !!. mac . endsWith ( item . mac )) Ġ{ Ġ// ble è¿ŀæİ¥ çļĦ è®¾å¤ĩ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhelper . setTextColor ( R . id . text _ label 1 , Ġresources . getColor ( R . color . text _ red )) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhelper . setTextColor ( R . id . text _ label 2 , Ġresources . getColor ( R . color . text _ red )) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! select Menus . contains ( item )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect Menus . add ( item ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// æĽ´æĸ° éĢī ä¸Ń è®¾å¤ĩ è®°å½ķ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMenuItem . select Menus . clear () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMenuItem . select Menus . addAll ( select Menus ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhelper . setTextColor ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . text _ label 1 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getColor ( R . color . text _ black ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhelper . setTextColor ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . text _ label 2 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getColor ( R . color . text _ black ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhelper . setText ( R . id . text _ label 1 , Ġitem . name ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhelper . setText ( R . id . text _ label 2 , Ġitem . mac ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhelper . setChecked ( R . id . cb _ menu , Ġselect Menus . contains ( item )) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġm Adapter . setOn ItemClickListener Ġ{ Ġadapter , Ġview , Ġposition Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e (" TAG ", Ġ" ===== setOn Item Child ClickListener (), Ġposition =${ position }") čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmenu Ġ= Ġmenu List [ position ] čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( select Menus . contains ( menu )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect Menus . remove ( menu ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect Menus . add ( menu ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e (" ===== MainActivity , Ġinit Drawable Layout () === select Menus . size =${ select Menus . size }") čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// æĽ´æĸ° éĢī ä¸Ń è®¾å¤ĩ çļĦ éĽĨåĲĪ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠMenuItem . select Menus . clear () čĊĠĠĠĠĠĠĠĠĠĠĠ ĠMenuItem . select Menus . addAll ( select Menus ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e (" ===== MainActivity , Ġinit Drawable Layout () === MenuItem . select Menus . size =${ MenuItem . select Menus . size }") čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify Item Changed ( position ) čĊčĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġrv _ menu . adapter Ġ= Ġm Adapter čĊĠĠĠ Ġ} čĊčĊ čĊčĊĠĠĠ Ġprivate Ġfun Ġhand Connect Event ( connect State : ĠBoolean ) Ġ{ čĊĠĠĠĠĠĠĠ Ġ// éļĲèĹı è¿ŀæİ¥ å¯¹ è¯Ŀ æ¡Ĩ čĊĠĠĠĠĠĠĠ Ġdismiss Operation Dialog () čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( connect State ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss Dis Connect Dialog () čĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast Utils . show Short ( R . string . connect _ success ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// è¿ŀæİ¥ ä¸Ĭ è®¾å¤ĩ çļĦæĹ¶åĢĻ éľĢè¦ģ åĪ¤æĸŃ æĺ¯ å·¥ä½ľ åľ¨ normal æ¨¡å¼ı è¿ĺæĺ¯ upgrade æ¨¡å¼ı čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// å»¶ è¿ Ł èİ·åıĸ è®¾å¤ĩ åĪĹè¡¨ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . Main ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Normal Model ) Ġ{ Ġ// æŃ£å¸¸ éĢ»è¾ĳ čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 5 0 0 ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// èİ·åıĸ led ĠçļĦ å¼Ģ åħ³ çĬ¶æĢģ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Get Led State () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// èİ·åıĸ mesh åľ¨ ç½ĳ çļĦ è®¾å¤ĩ å¹¿ æĴŃ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend GetDevice List Data () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 0 ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// èİ·åıĸ è®¾å¤ĩ çļĦ çīĪæľ¬ åı· čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend GetDevice Firmware Version () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 0 ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// åıĳéĢģ æ£Ģæµĭ æĺ¯åĲ¦ åľ¨ Upgrade Ġæ¨¡ å¼ı čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e (" ===== MainActivity , Ġhand Connect Event () === è¿ŀæİ¥ æĹ¶ åıĳéĢģ TX ĠHello ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsend Upgrade Hello CMD () čĊčĊ čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { Ġ// éĢı ä¼ł čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfile Ġ= ĠFile ( get External Files Dir (" firmware "), Ġ" upgrade _ AA 1 9 1 1 1 5 . bin ") čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= ĠFile IO Utils . writeFile From IS ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassets . open (" upgrade _ AA 1 9 1 1 1 5 . bin ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e (" ===== MainActivity , Ġreceive Event Msg () === æĸĩä»¶ åĨĻ åĪ° å¤ĸéĥ¨ ç§ģ æľī çĽ®å½ķ : Ġ$ result , Ġ${ file . absolute File }") čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupgrade Data Ġ= ĠFile IO Utils . readFile 2 Bytes By Channel ( file ) čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// æ¨¡ ä» ¿ çĽ´æİ¥ è¿Ľåħ¥ åįĩçº§ æ¨¡å¼ı čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġreply = Reply Msg Bean () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreply . cmd = B le Event . RESULT _ GO _ BOOT _ MODE čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreply . result = 1 čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceive Event Msg ( reply ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO ... æ¨¡ æĭŁ æĶ¶ åĪ° Go Boot Mode ĠçļĦ æ¶Īæģ¯ čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠGlobal Scope . launch Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 2 0 0 0 ) čĊč ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġreply Msg Bean = Reply Msg Bean ( cmd Ġ= ĠB le Event . RESULT _ GO _ BOOT _ MODE , Ġresult Ġ= Ġ 1 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceive Event Msg ( reply Msg Bean ) čĊč ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}*/ čĊčĊčĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Disconnect Dialog () čĊčĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġsend GetDevice Firmware Version () Ġ{ čĊĠĠĠĠĠĠĠ Ġvar Ġshort Add Ġ= Ġparse Short Addr By Mac ( connect Device !!. mac ) čĊĠĠĠĠĠĠĠ Ġvar Ġdata Ġ= ĠB le Event . create GetDevice Firmware Data ( short Add , Ġpayload Ġ= Ġbyte ArrayOf ()) čĊĠĠĠĠĠĠĠ ĠBLE Service . getInstance (). send Msg ( Data Wrap ( data ), Ġfalse ) čĊčĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* Ġèİ·åıĸ led Ġ çĬ¶æĢģ čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġprivate Ġfun Ġsend Get Led State () Ġ{ čĊčĊĠĠĠĠĠĠĠ Ġvar Ġshort Add Ġ= Ġparse Short Addr By Mac ( connect Device !!. mac ) čĊĠĠĠĠĠĠĠ Ġvar Ġdata Ġ= ĠB le Event . create Get Led State Data ( short Add ) čĊĠĠĠĠĠĠĠ ĠBLE Service . getInstance (). send Msg ( Data Wrap ( data ), Ġfalse ) čĊčĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* Ġ åıĳéĢģ èİ·åıĸ mesh Ġåľ¨ ç½ĳ çļĦ è®¾å¤ĩ å¹¿ æĴŃ , Ġ è®¾å¤ĩ æĶ¶ åĪ° åĲİ ä¼ļ åĽŀå¤į è®¾å¤ĩ åĲį åĴĮ çŁŃ åľ°åĿĢ čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġprivate Ġfun Ġsend GetDevice List Data () Ġ{ čĊčĊčĊĠĠĠĠĠĠĠ Ġpb _ device _ name . visibility Ġ= ĠView . VISIBLE čĊĠĠĠĠĠĠĠ Ġtv _ device _ title . visibility Ġ= ĠView . GONE čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( connect Device Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast Utils . show Long ( R . string . tip _ ble _ disconnect ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġmenu List . clear () čĊĠĠĠĠĠĠĠ Ġvar Ġshort Addr Ġ= Ġ" FFFF " čĊĠĠĠĠĠĠĠ Ġvar Ġdata : ĠByteArray Ġ= ĠB le Event . create Get Devices Data ( short Addr , Ġ 0 ) čĊĠĠĠĠĠĠĠ ĠBLE Service . getInstance (). send Msg ( Data Wrap ( data ), Ġfalse ) čĊčĊĠĠĠĠĠĠĠ Ġm Handler . post Delayed ({ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Adapter . set New Data ( menu List ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġpb _ device _ name . visibility Ġ= ĠView . GONE čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ device _ title . visibility Ġ= ĠView . VISIBLE čĊčĊĠĠĠĠĠĠĠ Ġ}, Ġ 1 5 0 0 ) čĊčĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġprivate Ġfun Ġdismiss Dis Connect Dialog () Ġ{ čĊĠĠĠĠĠĠĠ Ġshow Blur ( false ) čĊĠĠĠĠĠĠĠ Ġconnect Dialog ?. dismiss Allow ing State Loss () čĊĠĠĠĠĠĠĠ Ġconnect Dialog Ġ= Ġnull čĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġvar Ġconnect Dialog : ĠBase N ice Dialog ? Ġ= Ġnull čĊĠĠĠ Ġprivate Ġfun Ġshow Disconnect Dialog () Ġ{ čĊĠĠĠĠĠĠĠ Ġshow Blur ( true ) čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( connect Dialog ?. isVisible Ġ== Ġtrue ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnect Dialog ?. dismiss Allow ing State Loss () čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġconnect Dialog Ġ= ĠNice Dialog čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. init () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setLayout Id ( R . layout . dialog _ common _ two _ button ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Convert Listener ( object Ġ: ĠView Convert Listener () Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠconvertView ( holder : ĠViewHolder , Ġdialog : ĠBase N ice Dialog ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . setText ( R . id . tv _ tips , ĠR . string . tip _ ble _ disconnect ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . setOnClickListener ( R . id . btn _ left ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss Allow ing State Loss () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Blur ( false ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . setOnClickListener ( R . id . btn _ right ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss Allow ing State Loss () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Blur ( false ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Scan Device Dialog () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart B le Scan () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setWidth (- 1 ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Dim Amount ( 0 . 3 f ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( support FragmentManager ) čĊčĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġstart B le Scan () Ġ{ čĊĠĠĠĠĠĠĠ ĠBLE Service . getInstance (). start Scan () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ// å¤ĦçĲĨ B le Ġ æī«æıı çļĦ ç»ĵæŀľ čĊĠĠĠ Ġprivate Ġfun Ġhand Scan Event ( scan State : ĠInt , Ġble Device : ĠB le Device ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġwhen Ġ( scan State ) Ġ{ čĊčĊĠĠĠĠĠĠĠĠĠĠĠ ĠBLE Service . BLE _ SCAN _ STATE _ START Ġ-> Ġ{ Ġ// å¼Ģå§ĭ æī«æıı čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler . post Ġ{ čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Scan Device Dialog () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ ĠBLE Service . BLE _ SCAN _ STATE _ SCAN NING Ġ-> Ġ{// Ġ æĶ¶ åĪ° æī«æıı çļĦ ç»ĵæŀľ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġif Ġ( ble Device . name . isNull OrEmpty ()){ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}*/ čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ble Device Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġexit Ġ= Ġscan Device List . any Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . mac Ġ== Ġble Device . mac čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! exit ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e (" MainActivity Ġ===== x gh ===== , hand Scan Event (): ç»ĵæŀľ éĽĨåĲĪ ä¸Ń ä¸į åĮħåĲ« ble Device , Ġ${ ble Device }"); čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscan Device List . add ( ble Device !! ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Scan Device Dialog () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ ĠBLE Service . BLE _ SCAN _ STATE _ FIN ISH Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scan Device List . size Ġ== Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scan Result Dialog Ġ!= Ġnull Ġ&& Ġscan Result Dialog !!. isVisible ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscan Result Dialog !!. dismiss Allow ing State Loss () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast Utils . show Long ( R . string . no _ ble _ scan ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e (" ===== MainActivity , Ġhand Scan Event () === scan Ġfinish ... Ġscan Device List . size =${ scan Device List . size }") čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġvar Ġscan Device List : ĠArrayList < B le Device > Ġ= ĠArrayList () čĊčĊĠĠĠ Ġprivate Ġvar Ġscan Result Dialog : ĠBase N ice Dialog ? Ġ= Ġnull čĊĠĠĠ Ġprivate Ġfun Ġshow Scan Device Dialog () Ġ{ čĊčĊĠĠĠĠĠĠĠ Ġshow Blur ( true ) čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( scan Result Dialog Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġscan Result Dialog Ġ= ĠNice Dialog čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. init () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setLayout Id ( R . layout . dialog _ scan _ result ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Convert Listener ( object Ġ: ĠView Convert Listener () Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠconvertView ( holder : ĠViewHolder , Ġdialog : ĠBase N ice Dialog ) Ġ{ čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// å¼¹ åĩºçļĦ Rv čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġadapter : ĠBase Quick Adapter < B le Device , ĠBase ViewHolder > Ġ= Ġobject Ġ: čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase Quick Adapter < B le Device , ĠBase ViewHolder >( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . item _ scan _ device , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscan Device List čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconvert ( helper : ĠBase ViewHolder , Ġitem : ĠB le Device ?) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhelper . setText ( R . id . tv _ device _ name , Ġ"${ item ?. name }, ${ item ?. mac }") čĊč ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// RV ĠçļĦ å¢ŀåĬł item Ġ çĤ¹åĩ» äºĭä»¶ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhelper . add OnClickListener ( R . id . tv _ device _ name ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Rv Ġitem ĠçļĦ çĤ¹åĩ» čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . setOn Item Child ClickListener Ġ{ Ġadapter , Ġview , Ġposition Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// show Blur ( false ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss Allow ing State Loss () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Operation Dialog () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBLE Service . getInstance (). stop Scan () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdevice Ġ= Ġscan Device List [ position ] čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBLE Service . getInstance (). connect Device ( device ) čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e (" MainActivity Ġ===== x gh ===== , convert View (): çĤ¹åĩ» äºĨ item Ġ, Ġ${ scan Device List [ position ]. name }"); čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscan Result Dialog Ġ= Ġnull čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrv Device Ġ= Ġholder . getView < RecyclerView >( R . id . rv _ scan _ device ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv Device . layout Manager Ġ= ĠLinearLayoutManager ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayoutManager . VERTICAL , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv Device . adapter Ġ= Ġadapter čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// çĤ¹åĩ» cancel čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . setOnClickListener ( R . id . btn _ cancel ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBLE Service . getInstance (). stop Scan () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv Device . post Delayed ({ čĊč ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss Allow ing State Loss () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Blur ( false ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ 1 0 0 ) čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setWidth (- 1 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Out Cancel ( false ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Dim Amount ( 0 . 3 f ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( support FragmentManager ) čĊĠĠĠĠĠĠĠ Ġ} čĊčĊčĊčĊ čĊčĊĠĠĠĠĠĠĠ ĠLog Utils . e (" MainActivity Ġ===== x gh ===== , show Scan Device Dialog (): scan Device List . size =${ scan Device List . size }"); čĊčĊčĊĠĠĠĠĠĠĠ Ġif Ġ( scan Result Dialog ?. isVisible Ġ== Ġtrue ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrv Device Ġ= Ġscan Result Dialog ?. view ?. findViewById < RecyclerView >( R . id . rv _ scan _ device ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rv Device Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv Device . adapter ?. notify DataSet Changed () čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġinit View () Ġ{ čĊĠĠĠĠĠĠĠ Ġtab C ct . isSelected Ġ= Ġtrue čĊčĊčĊĠĠĠĠĠĠĠ Ġfragments . add ( Fragment C CT ()) čĊĠĠĠĠĠĠĠ Ġfragments . add ( Fragment H SL ()) čĊĠĠĠĠĠĠĠ Ġfragments . add ( Fragment Effect ()) čĊčĊčĊĠĠĠĠĠĠĠ ĠFragment Utils . add ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragments , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcom . h ong ri . blue light . R . id . root _ fragment , čĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf (" Fragment C CT ", Ġ" Fragment H SL ", Ġ" Fragment Effect "), čĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 čĊĠĠĠĠĠĠĠ Ġ) čĊčĊ čĊčĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle , Ġout Persistent State : ĠPers ist able Bundle ) Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State , Ġout Persistent State ) čĊĠĠĠĠĠĠĠ Ġout State . put Int (" cur Index ", Ġcur Index ) čĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġfun ĠonClick ( view : ĠView ) Ġ{ čĊĠĠĠĠĠĠĠ Ġtab C ct . isSelected Ġ= Ġfalse čĊĠĠĠĠĠĠĠ Ġtab H si . isSelected Ġ= Ġfalse čĊĠĠĠĠĠĠĠ Ġtab Effect . isSelected Ġ= Ġfalse čĊčĊĠĠĠĠĠĠĠ Ġwhen Ġ( view . id ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . tab C ct Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtab C ct . isSelected Ġ= Ġtrue čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFragment Utils . show Hide ( 0 , Ġfragments ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( fragments [ 0 ] Ġas ĠFragment C CT ). send Data () čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . tab H si Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtab H si . isSelected Ġ= Ġtrue čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFragment Utils . show Hide ( 1 , Ġfragments ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( fragments [ 1 ] Ġas ĠFragment H SL ). send Data () čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . tab Effect Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtab Effect . isSelected Ġ= Ġtrue čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFragment Utils . show Hide ( 2 , Ġfragments ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// çº¿ç¨ĭ ä¸Ń æī§è¡Į , Ġ éģ¿åħį éĺ» å¡ŀ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( fragments [ 2 ] Ġas ĠFragment Effect ). send Data ( 0 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( fragments [ 2 ] Ġas ĠFragment Effect ). send Data ( 1 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( fragments [ 2 ] Ġas ĠFragment Effect ). send Data ( 2 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( fragments [ 2 ] Ġas ĠFragment Effect ). send Data ( 3 ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Thread Utils . get Cached Pool (). execute Ġ{ čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( fragments [ 2 ] Ġas ĠFragment Effect ). send Data ( 0 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( fragments [ 2 ] Ġas ĠFragment Effect ). send Data ( 1 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( fragments [ 2 ] Ġas ĠFragment Effect ). send Data ( 2 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( fragments [ 2 ] Ġas ĠFragment Effect ). send Data ( 3 ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}*/ čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . tv _ device _ title Ġ-> Ġ{ čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend GetDevice List Data () čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . tv _ settings Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġintent Ġ= ĠIntent ( this , ĠSetting Activity :: class . java ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" data ", ĠJSONObject . toJSON String ( menu List )) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊčĊĠĠĠĠĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . on Stop () čĊĠĠĠĠĠĠĠ Ġdrawer Layout . close Draw ers () čĊčĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () čĊĠĠĠĠĠĠĠ ĠEvent Bus . getDefault (). unregister ( this ) čĊĠĠĠĠĠĠĠ ĠBLE Service . getInstance (). de Init () čĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* Ġ æİ¥æĶ¶ ä»İ BLE Service Ġ åıĳéĢģ åĩº æĿ¥çļĦ æ¶Īæģ¯ čĊĠĠĠĠ Ġ* Ġ@ param Ġmsg čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġ@ Subscribe ( thread Mode Ġ= ĠThread Mode . MAIN ) čĊĠĠĠ Ġfun Ġreceive Event Msg ( msg : ĠParent Event Msg ) Ġ{ čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( msg Ġis ĠReply Msg Bean ) Ġ{ Ġ// è®¾å¤ĩ ä»İ Mesh åĽŀå¤į çļĦ æ¶Īæģ¯ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Log Utils . e (" ===== MainActivity , Ġreceive Event Msg () === msg =${ msg }") čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( msg . cmd ) Ġ{ čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB le Event . RESULT _ GET _ NAME Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e (" ===== MainActivity , Ġreceive Msg ()== RESULT _ GET _ NAME = msg =${ msg }") čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( msg . is End ) Ġ{// å®Įæķ´ çļĦ è®¾å¤ĩ åĲį čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdevice Name Ġ= ĠString ( msg . data ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmenu Item Ġ= ĠMenuItem ( device Name , Ġmsg . short Add ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( menu List . contains ( menuItem )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu List . remove ( menuItem ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu List . add ( menuItem ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e (" ===== MainActivity , Ġreceive Event Msg ()== short Add =${ msg . short Add }= device Name =${ device Name }") čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ// ä¸į å®Įæķ´ çļĦ è®¾å¤ĩ åĲį , Ġ åĨį æ¬¡ èİ·åıĸ čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdata : ĠByteArray Ġ= ĠB le Event . create Get Devices Data ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg . short Add . replace (" :", Ġ""), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg . data . size . to Byte () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBLE Service . getInstance (). send Msg ( Data Wrap ( data ), Ġfalse ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB le Event . RESULT _ GET _ LED _ STATE Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Fragment On Off State ( msg . result ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB le Event . RESULT _ GET _ COLOR _ OFFSET _ STATE Ġ-> Ġ{ čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB le Event . RESULT _ GET _ DEVICE _ FIRM WARE Ġ-> Ġ{ Ġ// èİ·åıĸ è®¾å¤ĩ çļĦ åĽº ä»¶ çīĪæľ¬ åı· čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhand Upgrade Tip ( msg ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB le Event . RESULT _ GO _ BOOT _ MODE Ġ-> Ġ{ Ġ// æł¹æį® åįĩçº§ æµģç¨ĭ , Ġ å¼Ģå§ĭ åıĳéĢģ åįĩçº§ æķ°æį® , Ġ æĺ¾ç¤º å¯¹ è¯Ŀ æ¡Ĩ čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast Utils . show Short ( R . string . start _ upgrade ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Operation Dialog () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Upgrade Hello ( msg ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊčĊĠĠĠĠĠĠĠ Ġ} else Ġif ( msg Ġis ĠTx Reply Bean ){ Ġ// è®¾å¤ĩ ä»İ TX åĽŀå¤į çļĦ æ¶Īæģ¯ čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( msg . cmd . to Byte ()){ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB le Event . RESULT _ COMMAND _ HEL LO ->{ čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Send Upgrade Data () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB le Event . RESULT _ COMMAND _ RE BOOT ->{ // åįĩçº§ æķ°æį® åıĳéĢģ å®ĮæĪĲ , Ġ éļĲèĹı å¯¹ è¯Ŀ æ¡Ĩ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss Operation Dialog () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast Utils . show Short ( R . string . upgrade _ success ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġ} else Ġif ( msg Ġis ĠUpgrade Data Package Event ){ // æĽ´æĸ° ä¸Ĭä¼ł æĸĩä»¶ è¿Ľ åº¦ çļĦ æ¶Īæģ¯ čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( upgrade Total Package Ġ== 0 ){ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpercent =( upgrade Total Package - msg . send Count )* 1 0 0 / upgrade Total Package čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( operation Dialog != null Ġ&& Ġoperation Dialog !!. isVisible ){ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoperation Dialog ?. view ?. findViewById < TextView >( R . id . tv _ dialog _ msg )?. let Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . text = String . format ( getString ( R . string . upgrade _ percent ), percent ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊč ĊĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e (" ===== MainActivity , Ġreceive Event Msg () === percent =$ percent ") čĊĠĠĠĠĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* Ġ å¼Ģå§ĭ åıĳéĢģ åįĩçº§ çļĦæķ°æį® čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġprivate Ġfun Ġstart Send Upgrade Data () Ġ{ čĊčĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . Main ) Ġ{ čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ä»£çłģ åĿĹ æī§è¡Į åľ¨ Default Dispatcher - worker çº¿ç¨ĭ čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfile Ġ= ĠFile ( get External Files Dir (" firmware "), Ġ" upgrade _ AA 1 9 1 1 1 5 . bin ") čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= ĠFile IO Utils . writeFile From IS ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassets . open (" upgrade _ AA 1 9 1 1 1 5 . bin ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e (" ===== MainActivity , Ġreceive Event Msg () === æĸĩä»¶ åĨĻ åĪ° å¤ĸéĥ¨ ç§ģ æľī çĽ®å½ķ : Ġ$ result , Ġ${ file . absolute File }") čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupgrade Data Ġ= ĠFile IO Utils . readFile 2 Bytes By Channel ( file ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġupgrade Head Ġ= čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTag _ Upgrade File Header ( upgrade Data . slice Array ( 0 .. 9 9 )) čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e (" ===== MainActivity , Ġreceive Event Msg () === upgrade Head =$ upgrade Head ") čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 4 . Ġ åıĳéĢģ å¼Ģå§ĭ åįĩçº§ åĳ½ä»¤ ï¼Į éĩĮéĿ¢ åĮħåĲ« ĠUpgrade El ment Header Ġä¸ŃçļĦ Ġsize ;, payload Ġä¸º 4 åŃĹèĬĤ çļĦ size , ĠL SB ( ä½İ ä½į åľ¨ åīį ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdata Ġ Ġ= ĠB le Event . create TX Channel Data ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand Ġ= ĠB le Event . COMMAND _ START _ UP GR ADE , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpayload Ġ= Ġupgrade Data . slice Array ( 2 4 .. 2 7 ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠBLE Service . getInstance () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. send Msg ( Data Wrap ( data , Ġsend Type Ġ= ĠData Wrap . SEND _ TYPE _ TX ), Ġfalse , false ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĽŀå¤į : ĠA 5 5 A Ġ 8 2 Ġ 0 1 Ġ 0 0 8 2 čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreturn @ launch čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 5 . Ġ åıĳéĢģ ĠKEY Ġ è§£ å¯Ĩ å¯Ĩ éĴ¥ åĳ½ä»¤ ï¼Į éĩĮéĿ¢ åĮħåĲ« ĠUpgrade El ment Header Ġä¸ŃçļĦ Ġkey ; čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠB le Event . create TX Channel Data ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand Ġ= ĠB le Event . COMMAND _ SEND _ KEY , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpayload Ġ= Ġupgrade Data . slice Array ( 3 2 .. 4 7 ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠBLE Service . getInstance () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. send Msg ( Data Wrap ( data , Ġsend Type Ġ= ĠData Wrap . SEND _ TYPE _ TX ), Ġfalse , false ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĽŀå¤į : ĠA 5 5 A Ġ 8 6 Ġ 0 1 Ġ 0 1 8 7 čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreturn @ launch čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 6 . Ġ åıĳéĢģ åįĩçº§ æķ°æį® čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcmd List = Ġmutable ListOf < ByteArray >() čĊĠĠĠĠĠĠĠĠĠĠĠ ĠB le Event . generate Upgrade Cmd List ( 0 , Ġupgrade Data . slice Array ( 4 8 Ġuntil Ġupgrade Data . size ), cmd List ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e (" ===== MainActivity , Ġhand Start Upgrade () === cmd list . size =${ cmd List . size }, Ġlast =${ Convert Utils . bytes 2 HexString ( cmd List [ cmd List . size - 1 ]) }") čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġupgrade Total Package = cmd List . size čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcount = 0 čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcmd List . forEach Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBLE Service . getInstance () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. send Msg ( Data Wrap ( it , Ġsend Type Ġ= ĠData Wrap . SEND _ TYPE _ TX ), Ġfalse , false ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e (" ===== MainActivity , Ġhand Start Upgrade () === count =$ count , size =${ cmd List . size }") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĽŀå¤į : A 5 5 A Ġ 8 3 Ġ 0 1 Ġ 0 1 8 4 čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// return @ launch čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 7 . Ġ åıĳéĢģ ç»ĵæĿŁ åįĩçº§ åĳ½ä»¤ ; čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠB le Event . create TX Channel Data ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand Ġ= ĠB le Event . COMMAND _ END _ UP GR ADE , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpayload Ġ= Ġbyte ArrayOf ( B le Event . generate Checksum From ByteArray ( upgrade Data . slice Array ( 4 8 Ġuntil Ġupgrade Data . size ))) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠBLE Service . getInstance () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. send Msg ( Data Wrap ( data , Ġsend Type Ġ= ĠData Wrap . SEND _ TYPE _ TX ), Ġfalse , false ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// return @ launch čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// 8 . Ġ åıĳéĢģ éĩį åĲ¯ åĳ½ä»¤ ; čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠB le Event . create TX Channel Data ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand Ġ= ĠB le Event . COMMAND _ RE BOOT , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpayload Ġ= Ġbyte ArrayOf () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠBLE Service . getInstance () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. send Msg ( Data Wrap ( data , Ġsend Type Ġ= ĠData Wrap . SEND _ TYPE _ TX ), Ġfalse , false ) čĊčĊĠĠĠĠĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* Ġ è®°å½ķ åįĩçº§ çļĦ æĢ» åĮħ ä¸ªæķ° čĊĠĠĠĠ Ġ*/ čĊĠĠĠĠ Ġvar Ġupgrade Total Package : Int = 0 čĊčĊčĊĠĠĠ Ġprivate Ġfun Ġsend Upgrade Hello ( msg : ĠReply Msg Bean ) Ġ{ čĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġmsg . result čĊĠĠĠĠĠĠĠ ĠLog Utils . e (" ===== MainActivity , Ġreceive Event Msg () === åıĳéĢģ åįĩçº§ çļĦ æĮĩä»¤ Ġresult =$ result ") čĊĠĠĠĠĠĠĠ Ġif Ġ( result . toInt () Ġ== Ġ 1 ) Ġ{// æĪĲåĬŁ åĪĩæį¢ åĪ° Boot æ¨¡å¼ı čĊčĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 2 0 0 0 ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĪĩæį¢ åĪ° TX æ¨¡å¼ı åıĳéĢģ æķ°æį® čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// åıĳéĢģ hello , Ġ ç¡®è®¤ åľ¨ çº¿ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 3 . Ġ å¾ªçİ¯ åıĳéĢģ èİ·åıĸ å·¥ä½ľ æ¨¡å¼ı çļĦ åĳ½ä»¤ ï¼Į çĽ´ åĪ° è®¾å¤ĩ æľī åĽŀå¤į åĪĻ å·¥ä½ľ åľ¨ Ġboot load Ġæ¨¡ å¼ı ï¼Į åĪĻ è¿Ľåħ¥ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġä¸ĭ ä¸ĢæŃ¥ ãĢĤ å¦Ĥæŀľ å¾ªçİ¯ å¤ļ æ¬¡ æ²¡æľī åĽŀå¤į ï¼Į åĪĻ åįĩçº§ å¤±è´¥ ; čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Upgrade Hello CMD () čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĽŀå¤į : ĠA 5 5 A Ġ 8 0 Ġ 0 1 0 1 8 1 čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊčĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġsend Upgrade Hello CMD () Ġ{ čĊĠĠĠĠĠĠĠ Ġvar Ġdata Ġ= ĠB le Event . create TX Channel Data ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand Ġ= ĠB le Event . COMMAND _ HEL LO , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayload Ġ= Ġbyte ArrayOf () čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ ĠBLE Service . getInstance () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. send Msg ( Data Wrap ( data , Ġsend Type Ġ= ĠData Wrap . SEND _ TYPE _ TX ), Ġfalse , Ġfalse ) čĊčĊĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 ) čĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* Ġ åįĩçº§ æĸĩä»¶ çļĦæķ°æį® čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġlateinit Ġvar Ġupgrade Data : ĠByteArray čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* Ġ å¤ĦçĲĨ çīĪæľ¬ åı· çļĦ å¯¹ æ¯Ķ åĴĮ æıĲç¤º čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġprivate Ġfun Ġhand Upgrade Tip ( msg : ĠReply Msg Bean ) Ġ{ čĊĠĠĠĠĠĠĠ Ġ// çīĪæľ¬ åı· LSB Ġ ä½İ ä½į åľ¨ åīį , åıį è½¬ åĲİ åĨį åĴĮ ä»£çłģ ä¸ŃçļĦ çīĪæľ¬ åı· å¯¹ æ¯Ķ čĊĠĠĠĠĠĠĠ Ġvar Ġdevice Version Ġ= ĠConvert Utils . bytes 2 HexString ( msg . data . reversed Array ()). toInt ( 1 6 ) čĊĠĠĠĠĠĠĠ Ġvar ĠdeviceId Ġ= Ġ" AA 1 9 1 1 1 5 " čĊčĊĠĠĠĠĠĠĠ Ġvar Ġtarget Version Ġ= ĠLocal Application . device Version Map [ deviceId ] čĊčĊĠĠĠĠĠĠĠ ĠLog Utils . e (" ===== MainActivity , Ġreceive Event Msg () === device Version =$ device Version , target Version =$ target Version ï¼Į msg . data =${ Arrays . toString ( msg . data )} ") čĊčĊĠĠĠĠĠĠĠ Ġ// å¦Ĥæŀľ è®¾å¤ĩ çļĦ çīĪæľ¬ åı· å°ı äºİ app æīĵ åĮħ çļĦ åįĩçº§ æĸĩä»¶çļĦ çīĪæľ¬ åı· , Ġ å°± åįĩçº§ čĊĠĠĠĠĠĠĠ Ġ// 1 . å°Ĩ åįĩçº§ æĸĩä»¶ æĭ · è´Ŀ åĪ° ç§ģ æľī å¤ĸéĥ¨ çĽ®å½ķ čĊĠĠĠĠĠĠĠ Ġif Ġ( target Version Ġ!= Ġnull Ġ&& Ġdevice Version Ġ< Ġtarget Version ) Ġ{ čĊčĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ===== MainActivity , Ġreceive Event Msg () === éľĢè¦ģ åįĩçº§ Ġ${ Convert Utils . bytes 2 HexString ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg . data čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) }" čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Upgrade Dialog Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it ) Ġreturn @ show Upgrade Dialog čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// çĤ¹åĩ» äºĨ dialog ĠçļĦ ç¡®è®¤ čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// éĢļçŁ¥ è®¾å¤ĩ è¿Ľåħ¥ boot æ¨¡å¼ı , Ġ å¤ĦçĲĨ æĪĲåĬŁ ä¼ļ æĶ¶ åĪ° Ġ ĠB le Event . RESULT _ GO _ BOOT _ MODE ĠçļĦ åĽŀå¤į Ġ// 4 1 5 4 2 B 4 D 4 5 5 3 4 8 0 0 1 5 6 5 EA 0 1 0 2 0 D 0 A čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġshort Add Ġ= Ġparse Short Addr By Mac ( connect Device !!. mac ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdata Ġ= ĠB le Event . create Go Boot Mode Data ( short Add ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBLE Service . getInstance (). send Msg ( Data Wrap ( data ), Ġfalse ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊčĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġshow Upgrade Dialog ( callback : Ġ( Boolean ) Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ čĊĠĠĠĠĠĠĠ ĠNice Dialog . init (). setLayout Id ( R . layout . dialog _ common _ two _ button ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Convert Listener ( object Ġ: ĠView Convert Listener () Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠconvertView ( holder : ĠViewHolder , Ġdialog : ĠBase N ice Dialog ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . setText ( R . id . tv _ tips , ĠR . string . new _ version ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . setOnClickListener ( R . id . btn _ left ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss Allow ing State Loss () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . invoke ( false ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . setOnClickListener ( R . id . btn _ right ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss Allow ing State Loss () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast Utils . show Long ( R . string . ready _ upgrade ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . invoke ( true ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// å¼Ģå§ĭ åįĩçº§ čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Out Cancel ( false ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setWidth (- 1 ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Dim Amount ( 0 . 3 f ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( support FragmentManager ) čĊčĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġprivate Ġfun Ġupdate Fragment On Off State ( state : ĠByte ) Ġ{ čĊčĊĠĠĠĠĠĠĠ ĠLog Utils . e (" ===== MainActivity , Ġupdate Fragment On Off State () === state =$ state ") čĊĠĠĠĠĠĠĠ Ġ// æĽ´æĸ° On Off čĊĠĠĠĠĠĠĠ Ġ( fragments [ 0 ] Ġas ĠFragment C CT ). ob On Off . post Value ( state Ġ== Ġ 1 . to Byte ()) čĊĠĠĠĠĠĠĠ Ġ( fragments [ 1 ] Ġas ĠFragment H SL ). ob On Off . post Value ( state Ġ== Ġ 1 . to Byte ()) čĊĠĠĠĠĠĠĠ Ġ( fragments [ 2 ] Ġas ĠFragment Effect ). ob On Off . post Value ( state Ġ== Ġ 1 . to Byte ()) čĊčĊčĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠæĽ´æĸ° Fragment H SL çķĮéĿ¢ čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġfun Ġupdate H SL ViewModel ( vm : ĠH SL Bean ) Ġ{ čĊĠĠĠĠĠĠĠ Ġ( fragments [ 1 ] Ġas ĠFragment H SL ). observable Data . post Value ( vm ) čĊčĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠæĽ´æĸ° Fragment C CT çķĮéĿ¢ čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġfun Ġupdate C CT ViewModel ( vm : ĠC CT Bean ) Ġ{ čĊĠĠĠĠĠĠĠ Ġ( fragments [ 0 ] Ġas ĠFragment C CT ). observable Data . post Value ( vm ) čĊčĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠæĽ´æĸ° Fragment Effect _ Program çķĮéĿ¢ čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġfun Ġupdate Effect ViewModel ( vm : ĠProgram Bean ) Ġ{ čĊĠĠĠĠĠĠĠ Ġ( fragments [ 2 ] Ġas ĠFragment Effect ). update Effect Bean ( vm ) čĊčĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠæĽ´æĸ° Fragment Effect _ Scene çķĮéĿ¢ čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġfun Ġupdate Effect Scene ViewModel ( vm : ĠScene Bean ) Ġ{ čĊĠĠĠĠĠĠĠ Ġ( fragments [ 2 ] Ġas ĠFragment Effect ). update Scene Bean ( vm ) čĊčĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġfun Ġshow Blur ( flag : ĠBoolean , Ġindex : ĠInt Ġ= Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( flag ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog _ blur . visibility Ġ= ĠView . VISIBLE čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbmp Ġ= ĠBitmap . create Bitmap ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot _ main . getWidth (), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot _ main . getHeight (), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap . Config . ARGB _ 8 8 8 8 čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= ĠCanvas ( bmp ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġc . draw Color ( Color . WHITE ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot _ main . draw ( c ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap Bg 1 Ġ= Ġbmp čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// root _ main . build Drawing Cache () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// val Ġbitmap Ġ= Ġroot _ main . get Drawing Cache () čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ ĠBl ur ry . with ( this ). radius ( 1 0 ). sampling ( 1 0 ). from ( bmp ). into ( dialog _ blur ) čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBl ur ry . with ( this ). radius ( 1 0 ). sampling ( 1 0 ). from ( bitmap ). into ( dialog _ blur ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Blur ry . with ( this ). radius ( 1 0 ). sampling ( 7 ). capture ( root _ main ). into ( dialog _ blur ) čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBl ur ry . with ( this ) .. capture ( root _ main ). into ( dialog _ blur ) čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog _ blur . visibility Ġ= ĠView . GONE čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġvar Ġoperation Dialog : ĠBase N ice Dialog ? Ġ= Ġnull čĊĠĠĠ Ġprivate Ġfun Ġshow Operation Dialog () Ġ{ čĊĠĠĠĠĠĠĠ Ġdismiss Operation Dialog () čĊčĊĠĠĠĠĠĠĠ Ġshow Blur ( true ) čĊĠĠĠĠĠĠĠ Ġoperation Dialog Ġ= ĠNice Dialog čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. init () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setLayout Id ( R . layout . dialog _ operation ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setWidth (- 1 ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Dim Amount ( 0 . 3 f ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// . set Out Cancel ( false ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( support FragmentManager ) čĊčĊĠĠĠĠĠĠĠ Ġoperation Dialog ?. is Cancel able = true čĊčĊčĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġdismiss Operation Dialog () Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( operation Dialog Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperation Dialog !!. dismiss Allow ing State Loss () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperation Dialog Ġ= Ġnull čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġshow Blur ( false ) čĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ čĊĠĠĠĠĠĠĠ ĠApp Utils . exit App () čĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġfun Ġsend Set Led State Data ( state : ĠBoolean ) Ġ{ čĊĠĠĠĠĠĠĠ Ġ// led On = state čĊčĊĠĠĠĠĠĠĠ Ġvar Ġdata Ġ= ĠB le Event . create Set Led State Data ( state ) čĊĠĠĠĠĠĠĠ ĠBLE Service . getInstance (). send Msg ( Data Wrap ( data ), Ġtrue ) čĊčĊĠĠĠ Ġ} čĊčĊč Ċ } čĊčĊčĊ