package Ġco . c andy house . app . tabs . devices Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . fragment . app . activity ViewModels Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġco . c andy house . app . R Ċ import Ġco . c andy house . app . base . Base FG Ċ import Ġco . c andy house . app . tabs . MainActivity Ċ import Ġco . c andy house . app . tabs . devices . ssm 2 . setting . angle . SS M Cell View Ċ import Ġco . c andy house . app . tabs . devices . model . CH Device ViewModel Ċ import Ġco . c andy house . app . tabs . devices . ssm 2 . setting . angle . SS MB ike Cell View Ċ import Ġco . c andy house . app . tabs . devices . ssm 2 . setting . angle . SS MB ot Cell View Ċ import Ġco . c andy house . ses ame . open . device . CH Wifi Module 2 Ċ import Ġco . c andy house . ses ame . open . device .* Ċ import Ġco . utils . L Ċ import Ġco . utils . recycle . Generic Adapter Ċ import Ġkotlinx . android . synt hetic . main . fg _ dev ic elist .* Ċ Ċ class ĠDevice List FG Ġ: ĠBase FG ( R . layout . fg _ dev ic elist ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġm Device ViewModel : ĠCH Device ViewModel Ġby Ġactivity ViewModels () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġm Device ViewModel . update Devices () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġleader board _ list . set Empty View ( empty _ view ) ĊĠĠĠĠĠĠĠ Ġleader board _ list . adapter Ġ= Ġobject Ġ: ĠGeneric Adapter < Any >( m Device ViewModel . my Ch Devices . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Layout Id ( position : ĠInt , Ġobj : ĠAny ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( obj ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCH Wifi Module 2 Ġ-> Ġreturn ĠR . layout . wm 2 _ layout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCH S es ame Bot Ġ-> Ġreturn ĠR . layout . ss mb ot _ layout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCH S es ame Bi ke Ġ-> Ġreturn ĠR . layout . ss mb ike _ layout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn ĠR . layout . ses ame _ layout Ġ Ġ// CH S es ame 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget ViewHolder ( view : ĠView , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( view Type ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . wm 2 _ layout Ġ-> Ġreturn Ġobject Ġ: ĠRecyclerView . ViewHolder ( view ), ĠB inder < CH Wifi Module 2 > Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcustom Name : ĠTextView Ġ= Ġview . findViewById ( R . id . title ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġiot Status : ĠTextView Ġ= Ġview . findViewById ( R . id . sub _ title _ 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwifi _ img : ĠImageView Ġ= Ġview . findViewById ( R . id . wifi _ img ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbind ( wm 2 : ĠCH Wifi Module 2 , Ġpos : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Device ViewModel . wm 2 Deleg ates . put ( wm 2 , Ġobject Ġ: ĠCH Wifi Module 2 Delegate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Net Work Status Changed ( device : ĠCH Wifi Module 2 , Ġsettings : ĠCH Wifi Module 2 Net Work Status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Wm 2 ( wm 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon B le Device Status Changed ( device : ĠCH Wifi Module 2 , Ġstatus : ĠCH S es ame 2 Status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Wm 2 ( wm 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Wm 2 ( wm 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Device ViewModel . wm 2 LiveData . value Ġ= Ġwm 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Device ViewModel . target Model Ġ= ĠCH Product Model . WM 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( R . id . to _ WM 2 Setting FG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġsetup Wm 2 ( wm 2 : ĠCH Wifi Module 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Name . text Ġ= Ġwm 2 . deviceId . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiot Status . text Ġ= Ġ" I OT :" Ġ+ Ġwm 2 . network Status ?. is I OT Work . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiot Status . setTextColor ( Context Compat . getColor ( view . context , Ġif Ġ( wm 2 . network Status ?. is I OT Work Ġ== Ġtrue ) ĠR . color . unlock _ blue Ġelse ĠR . color . lock _ red )) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwm 2 Status . text Ġ= Ġwm 2 . device Status . toString () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwm 2 Status . visibility Ġ= Ġif Ġ( wm 2 . device Status . value Ġ== ĠCH Device Login Status . Login Ġ|| Ġwm 2 . device Status Ġ== ĠCH S es ame 2 Status . No B le Signal ) ĠView . GONE Ġelse ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwifi _ img . setImage Resource ( if Ġ( wm 2 . network Status ?. is I OT Work Ġ== Ġtrue ) ĠR . drawable . wifi _ green Ġelse ĠR . drawable . wifi _ grey ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbl _ img . setImage Resource ( if Ġ( wm 2 . device Status . value Ġ== ĠCH Device Login Status . Login ) ĠR . drawable . bl _ green Ġelse ĠR . drawable . bl _ grey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . ss mb ike _ layout Ġ-> Ġreturn Ġobject Ġ: ĠRecyclerView . ViewHolder ( view ), ĠB inder < CH S es ame Bi ke > Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġs sm View : ĠSS MB ike Cell View Ġ= Ġview . findViewById ( R . id . ssm View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcustom Name : ĠTextView Ġ= Ġview . findViewById ( R . id . title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġse same 2 Status : ĠTextView Ġ= Ġview . findViewById ( R . id . sub _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġshadow Status Txt : ĠTextView Ġ= Ġview . findViewById ( R . id . sub _ title _ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbattery _ percent : ĠTextView Ġ= Ġview . findViewById ( R . id . battery _ percent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbattery Img : ĠImageView Ġ= Ġview . findViewById ( R . id . battery ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbl _ img : ĠImageView Ġ= Ġview . findViewById ( R . id . bl _ img ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwifi _ img : ĠImageView Ġ= Ġview . findViewById ( R . id . wifi _ img ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbind ( ssm Bi ke : ĠCH S es ame Bi ke , Ġpos : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs sm View . setOnClickListener Ġ{ Ġs sm Bi ke . unlock Ġ{ Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Device ViewModel . ssm Lock LiveData . value Ġ= Ġs sm Bi ke ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Device ViewModel . target Model Ġ= ĠCH Product Model . Bi Ke Lock ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( R . id . action _ device List PG _ to _ ses ame Bi ke Setting FG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Device ViewModel . ss mos Lock Deleg ates . put ( ssm Bi ke , Ġobject Ġ: ĠCH S es ame 2 Delegate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon B le Device Status Changed ( device : ĠCH S es ame Locker , Ġstatus : ĠCH S es ame 2 Status , Ġshadow Status : ĠCH S es ame 2 Shadow Status ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetUp Bi ke ( ssm Bi ke ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetUp Bi ke ( ssm Bi ke ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun ĠsetUp Bi ke ( ssm Bi ke : ĠCH S es ame Bi ke ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Name . text Ġ= Ġs sm Bi ke . deviceId . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġse same 2 Status . text Ġ= Ġs sm Bi ke . device Status . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbl _ img . setImage Resource ( if Ġ( ssm Bi ke . device Status . value Ġ== ĠCH Device Login Status . Login ) ĠR . drawable . bl _ green Ġelse ĠR . drawable . bl _ grey ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs sm View . set Lock Image ( ssm Bi ke ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbattery _ percent . text Ġ= Ġs sm Bi ke . me ch Status ?. get Battery Pre centage (). toString () Ġ+ Ġ"% " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbattery Img . setImage Resource ( if Ġ( ssm Bi ke . me ch Status ?. get Battery Pre centage () Ġ?: Ġ 0 Ġ< Ġ 5 0 ) ĠR . drawable . bt 0 Ġelse Ġif Ġ( ssm Bi ke . me ch Status ?. get Battery Pre centage () Ġ?: Ġ 0 Ġ< Ġ 7 0 ) ĠR . drawable . bt 5 0 Ġelse ĠR . drawable . bt 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġse same 2 Status . text Ġ= Ġs sm Bi ke . device Status . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġse same 2 Status . visibility Ġ= Ġif Ġ( ssm Bi ke . device Status . value Ġ== ĠCH Device Login Status . Login Ġ|| Ġs sm Bi ke . device Status Ġ== ĠCH S es ame 2 Status . No B le Signal ) ĠView . GONE Ġelse ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshadow Status Txt . text Ġ= Ġs sm Bi ke . device Shadow Status . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbl _ img . setImage Resource ( if Ġ( ssm Bi ke . device Status . value Ġ== ĠCH Device Login Status . Login ) ĠR . drawable . bl _ green Ġelse ĠR . drawable . bl _ grey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwifi _ img . setImage Resource ( if Ġ( ssm Bi ke . device Shadow Status ?. value Ġ== ĠCH Device Login Status . Login ) ĠR . drawable . wifi _ green Ġelse ĠR . drawable . wifi _ grey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . ss mb ot _ layout Ġ-> Ġreturn Ġobject Ġ: ĠRecyclerView . ViewHolder ( view ), ĠB inder < CH S es ame Bot > Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġs sm Bot View : ĠSS MB ot Cell View Ġ= Ġview . findViewById ( R . id . ssm Bot View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcustom Name : ĠTextView Ġ= Ġview . findViewById ( R . id . title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġse same 2 Status : ĠTextView Ġ= Ġview . findViewById ( R . id . sub _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġshadow Status Txt : ĠTextView Ġ= Ġview . findViewById ( R . id . sub _ title _ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbattery _ percent : ĠTextView Ġ= Ġview . findViewById ( R . id . battery _ percent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbattery Img : ĠImageView Ġ= Ġview . findViewById ( R . id . battery ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbl _ img : ĠImageView Ġ= Ġview . findViewById ( R . id . bl _ img ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwifi _ img : ĠImageView Ġ= Ġview . findViewById ( R . id . wifi _ img ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbind ( ssm Bot : ĠCH S es ame Bot , Ġpos : ĠInt ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠL . d (" hc ia ", Ġ" ssm Bot :" Ġ+ Ġs sm Bot . deviceId . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs sm Bot View . setOnClickListener Ġ{ Ġs sm Bot . click Ġ{ Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Device ViewModel . ssm Lock LiveData . value Ġ= Ġs sm Bot ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Device ViewModel . target Model Ġ= ĠCH Product Model . S es ame Bot 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( R . id . action _ device List PG _ to _ S es ame Bot 2 Setting FG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Device ViewModel . ss mos Lock Deleg ates . put ( ssm Bot , Ġobject Ġ: ĠCH S es ame Bot Delegate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon B le Device Status Changed ( device : ĠCH S es ame Locker , Ġstatus : ĠCH S es ame 2 Status , Ġshadow Status : ĠCH S es ame 2 Shadow Status ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Bot ( ssm Bot ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Me ch Status Changed ( device : ĠCH S es ame Bot , Ġstatus : ĠCH S es ame Bot Me ch Status , Ġintention : ĠCH S es ame 2 Int ention ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs sm Bot View . set Lock ( ssm Bot ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Bot ( ssm Bot ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġsetup Bot ( ssm Bot : ĠCH S es ame Bot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Name . text Ġ= Ġs sm Bot . deviceId . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs sm Bot View . set Lock Image ( ssm Bot ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbattery _ percent . text Ġ= Ġs sm Bot . me ch Status ?. get Battery Pre centage (). toString () Ġ+ Ġ"% " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbattery Img . setImage Resource ( if Ġ( ssm Bot . me ch Status ?. get Battery Pre centage () Ġ?: Ġ 0 Ġ< Ġ 5 0 ) ĠR . drawable . bt 0 Ġelse Ġif Ġ( ssm Bot . me ch Status ?. get Battery Pre centage () Ġ?: Ġ 0 Ġ< Ġ 7 0 ) ĠR . drawable . bt 5 0 Ġelse ĠR . drawable . bt 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġse same 2 Status . text Ġ= Ġs sm Bot . device Status . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġse same 2 Status . visibility Ġ= Ġif Ġ( ssm Bot . device Status . value Ġ== ĠCH Device Login Status . Login Ġ|| Ġs sm Bot . device Status Ġ== ĠCH S es ame 2 Status . No B le Signal ) ĠView . GONE Ġelse ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshadow Status Txt . text Ġ= Ġs sm Bot . device Shadow Status . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbl _ img . setImage Resource ( if Ġ( ssm Bot . device Status . value Ġ== ĠCH Device Login Status . Login ) ĠR . drawable . bl _ green Ġelse ĠR . drawable . bl _ grey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwifi _ img . setImage Resource ( if Ġ( ssm Bot . device Shadow Status ?. value Ġ== ĠCH Device Login Status . Login ) ĠR . drawable . wifi _ green Ġelse ĠR . drawable . wifi _ grey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġobject Ġ: ĠRecyclerView . ViewHolder ( view ), ĠB inder < CH S es ame 2 > Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġs sm View : ĠS SM Cell View Ġ= Ġview . findViewById ( R . id . ssm View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcustom Name : ĠTextView Ġ= Ġview . findViewById ( R . id . title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġse same 2 Status : ĠTextView Ġ= Ġview . findViewById ( R . id . sub _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġshadow Status Txt : ĠTextView Ġ= Ġview . findViewById ( R . id . sub _ title _ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbattery _ percent : ĠTextView Ġ= Ġview . findViewById ( R . id . battery _ percent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbattery : ĠImageView Ġ= Ġview . findViewById ( R . id . battery ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbl _ img : ĠImageView Ġ= Ġview . findViewById ( R . id . bl _ img ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwifi _ img : ĠImageView Ġ= Ġview . findViewById ( R . id . wifi _ img ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbind ( ses ame : ĠCH S es ame 2 , Ġpos : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Device ViewModel . ss mos Lock Deleg ates . put ( ses ame , Ġobject Ġ: ĠCH S es ame 2 Delegate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Me ch Status Changed ( device : ĠCH S es ame 2 , Ġstatus : ĠCH S es ame 2 Me ch Status , Ġintention : ĠCH S es ame 2 Int ention ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs sm View . set Lock ( ses ame ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon B le Device Status Changed ( device : ĠCH S es ame Locker , Ġstatus : ĠCH S es ame 2 Status , Ġshadow Status : ĠCH S es ame 2 Shadow Status ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup SS M Cell ( ses ame ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup SS M Cell ( ses ame ) Ċ // ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs sm View . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġse same . toggle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Success Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠL . d (" hc ia ", Ġ"[ UI ] Ġtoggle ĠS ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Failure Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠL . d (" hc ia ", Ġ"[ UI ] Ġtoggle ĠF Ġ:" Ġ+ Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Device ViewModel . ssm Lock LiveData . value Ġ= Ġse same ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Device ViewModel . target Model Ġ= ĠCH Product Model . SS 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( R . id . action _ device List PG _ to _ main Room FG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġsetup SS M Cell ( ses ame : ĠCH S es ame 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Name . text Ġ= Ġse same . deviceId . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs sm View . set Lock ( ses ame ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs sm View . set Lock Image ( ses ame ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbl _ img . setImage Resource ( if Ġ( ses ame . device Status . value Ġ== ĠCH Device Login Status . Login ) ĠR . drawable . bl _ green Ġelse ĠR . drawable . bl _ grey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwifi _ img . setImage Resource ( if Ġ( ses ame . device Shadow Status ?. value Ġ== ĠCH Device Login Status . Login ) ĠR . drawable . wifi _ green Ġelse ĠR . drawable . wifi _ grey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbattery _ percent . visibility Ġ= Ġif Ġ( ses ame . me ch Status Ġ== Ġnull ) ĠView . GONE Ġelse ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbattery _ percent . text Ġ= Ġse same . me ch Status ?. get Battery Pre centage (). toString () Ġ+ Ġ"% " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbattery . visibility Ġ= Ġif Ġ( ses ame . me ch Status Ġ== Ġnull ) ĠView . GONE Ġelse ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbattery . setImage Resource ( if Ġ( ses ame . me ch Status ?. get Battery Pre centage () Ġ?: Ġ 0 Ġ< Ġ 5 0 ) ĠR . drawable . bt 0 Ġelse Ġif Ġ( ses ame . me ch Status ?. get Battery Pre centage () Ġ?: Ġ 0 Ġ< Ġ 7 0 ) ĠR . drawable . bt 5 0 Ġelse ĠR . drawable . bt 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġse same 2 Status . text Ġ= Ġse same . device Status . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġse same 2 Status . visibility Ġ= Ġif Ġ( ses ame . device Status . value Ġ== ĠCH Device Login Status . Login Ġ|| Ġse same . device Status Ġ== ĠCH S es ame 2 Status . No B le Signal ) ĠView . GONE Ġelse ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshadow Status Txt . text Ġ= Ġse same . device Shadow Status . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshadow Status Txt . setTextColor ( Context Compat . getColor ( view . context , Ġif Ġ( ses ame . device Shadow Status ?. value Ġ== ĠCH Device Login Status . Login ) ĠR . color . unlock _ blue Ġelse ĠR . color . lock _ red )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsw iper ef resh . setOn Refresh Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Device ViewModel . update Devices () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsw iper ef resh ?. is Refresh ing Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Device ViewModel . nee Ref le sh . observe ( view Lifecycle Owner , Ġ{ Ġis R Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠL . d (" hc ia ", Ġ" Device List FG Ġis R :" Ġ+ Ġis R ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsw iper ef resh ?. is Refresh ing Ġ= Ġis R ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is R ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleader board _ list ?. adapter ?. notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠ Ġ} Ċ } ĊĊĊ