package Ġcom . rich mat . my tu ya . ui . Home . home View mo el Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . Saved State Handle Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . rich mat . my tu ya . data . posts . Imp . Fake Posts Repository Ċ import Ġcom . rich mat . my tu ya . ui . Home . home View mo el . view model . Post Ċ import Ġcom . rich mat . my tu ya . util . data . TAG Ċ import Ġcom . tu ya . smart . home . sdk . bean . Home Bean Ċ import Ġcom . tu ya . smart . sdk . bean . Device Bean Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Internal Cor outines Api Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . flow . State Flow Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . flow . update Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġjava . time . LocalDateTime Ċ import Ġjavax . inject . Inject Ċ Ċ data Ġclass ĠDelete ( ĊĠĠĠ Ġval Ġpost : ĠPost ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġis Favorite : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġval Ġloading : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġval Ġhome Beans : ĠList < Home Bean > Ġ= Ġmutable ListOf (), ĊĠĠĠ Ġval Ġhome Id : ĠLong Ġ= Ġ 1 0 0 0 L , ĊĠĠĠ Ġval Ġbean : ĠHome Bean Ġ= ĠHome Bean (), ĊĠĠĠ Ġval Ġis Show Hint : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġval Ġremove : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġval Ġevent List : ĠList < String > Ġ= ĠlistOf (" äºº ä½ĵ æĦŁ åºĶ åĻ¨ ", Ġ" çº¢ å¤ĸ æĬ¥ èŃ¦ ", Ġ" Rich ", ĠLocalDateTime . now (). toString ()), ĊĠĠĠ Ġval Ġremove Set : ĠSet < String > Ġ= Ġset Of (), ĊĠĠĠ Ġval Ġhome Number : ĠInt Ġ= Ġ 0 , ĊĠĠĠ Ġval Ġdevice List : ĠList < Device Bean > Ġ= Ġempty List (), ĊĠĠĠ Ġval Ġcountries : ĠList < String > Ġ= Ġempty List (), Ċ ) Ġ{ ĊĠĠĠ Ġval Ġfailed Loading : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ! loading Ġ&& Ġpost Ġ== Ġnull Ċ } Ċ Ċ @ H ilt ViewModel Ċ @ Internal Cor outines Api Ċ class ĠHome ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġposts Repository : ĠFake Posts Repository , ĊĠĠĠ Ġsaved State Handle : ĠSaved State Handle , Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġ// TODO Ġæł¹æį® nav host Ġid Ġèİ·åıĸ ä¿¡æģ¯ ï¼Į Ġ éĤ£ è¿ĺ è¦ģ factory å¹² åĺ Ľ åĳ¢ ï¼Ł ï¼Ł Ġ 9 . 2 2 æ³¨ ï¼ļ ä¸į ä¼ł åĢ¼ ä¸į è¡Į Ċ // ĠĠĠ Ġprivate Ġval Ġpost Id : ĠString Ġ= Ġsaved State Handle . get < String >( DELETE ) !! ĊĊĠĠĠ Ġprivate Ġval Ġ_ ui State Ġ= ĠMutable State Flow ( Delete ( loading Ġ= Ġtrue )) ĊĠĠĠ Ġval Ġui State : ĠState Flow < Delete > Ġ= Ġ_ ui State ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" home åĪĿå§ĭåĮĸ : Ġ") ĊĠĠĠĠĠĠĠ Ġrefresh Home () ĊĠĠĠĠĠĠĠ Ġ// Ġ ç¬¬äºĮ æ¬¡ æ³¨æĦı ï¼Į ä¸Ģä¸ª viewModel Scope åıªèĥ½ è§Ĥ å¯Ł ä¸Ģä¸ª ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposts Repository . observe Remove Set (). collect Ġ{ Ġremove Set Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ ui State . update Ġ{ Ġit . copy ( remove Set Ġ= Ġremove Set ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposts Repository . observe Home Beans (). collect Ġ{ Ġhome s Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ ui State . update Ġ{ Ġit . copy ( home Beans Ġ= Ġhome s ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposts Repository . observe Device List (). collect Ġ{ Ġdevices Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" observe Device List : Ġ${ devices . size }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ ui State . update Ġ{ Ġit . copy ( device List Ġ= Ġdevices ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġget Home Bean (_ ui State . value . home Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// TODO Ġä¸ĭ æĭī åĪ·æĸ° ĊĠĠĠ Ġfun Ġrefresh Home () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" refresh Home : Ġä¸ĭ æĭī åĪ·æĸ° ") ĊĠĠĠĠĠĠĠ Ġ_ ui State . update Ġ{ Ġit . copy ( loading Ġ= Ġtrue ) Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhome Beans Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ Ġposts Repository . get Home Beans () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhome Bean Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ Ġposts Repository . get Home Bean ( home Id Ġ= Ġhome Beans [ ui State . value . home Number ]. home Id ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ç»Ļ æīĢæľī è®¾å¤ĩ æ·»åĬł çĽĳåĲ¬ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposts Repository . and All Device Listener ( home Bean . device List ) Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhome Beans Ġ= Ġposts Repository . get Home Beans () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ ui State . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// é»ĺè®¤ æĺ¯ æĭ¿ çļĦ ç¬¬ä¸Ģä¸ª å®¶ åº Ń ï¼Į è¯¾ æĶ¹ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhome Beans Ġ= Ġhome Beans , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhome Id Ġ= Ġhome Beans [ 0 ]. home Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbean Ġ= Ġhome Bean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading Ġ= Ġfalse Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice List Ġ= Ġhome Bean . device List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ ui State . update Ġ{ Ġit . copy ( loading Ġ= Ġfalse ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposts Repository . observe Is ShowDialog (). collect Ġ{ Ġb ln Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ ui State . update Ġ{ Ġit . copy ( is Show Hint Ġ= Ġb ln ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnew Refresh Home () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposts Repository . get Home Beans () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Home Bean ( home Id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhome Bean Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ Ġposts Repository . get Home Bean ( home Id Ġ= Ġhome Id ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ ui State . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( bean Ġ= Ġhome Bean ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" get Home Bean : Ġ$ home Id , Ġ Ġ${ _ ui State . value . home Id }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclose Dialog ( device : ĠDevice Bean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġposts Repository . reset Device Memory ( device ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Device ( deviceId : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġremove Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposts Repository . remove Device ( deviceId Ġ= ĠdeviceId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ ui State . update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( remove Ġ= Ġremove ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Or Remove ( deviceId : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposts Repository . select Remove Device ( deviceId Ġ= ĠdeviceId ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Device Set () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposts Repository . remove Device Set () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ route ãĢĤ æŃ¤ å¤Ħ åı¯èĥ½ æľī æľº ä¼ļ ä¼ĺåĮĸ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Route ( deviceId : ĠString ): ĠString ? Ġ= Ġposts Repository . get Route ById ( deviceId ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDELETE Ġ= Ġ" delete " ĊĊĠĠĠĠĠĠĠ Ġ// æĹ¶ ä»£ çļĦ çľ¼ æ³ ª Ċ // ĠĠĠĠĠĠĠ Ġfun Ġprovide Factory ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġposts Repository : ĠFake Posts Repository , Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġowner : ĠSaved State Registry Owner , Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġde ault Args : ĠBundle ?, Ċ // ĠĠĠĠĠĠĠ Ġ): ĠAbstract Saved State ViewModel Factory Ġ= Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠAbstract Saved State ViewModel Factory ( owner , Ġde ault Args ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠViewModel ?> Ġcreate ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey : ĠString , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Class : ĠClass < T >, Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle : ĠSaved State Handle Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠT Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠHome ViewModel ( posts Repository , Ġhandle ) Ġas ĠT Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ