package Ġai . sn ips . sm arth ouse demo Ċ Ċ import Ġai . sn ips . platform . Sn ips Platform Client Ċ import Ġandroid . arch . lifecycle . Mutable LiveData Ċ import Ġandroid . arch . lifecycle . ViewModel Ċ import Ġandroid . os . Handler ĊĊ Ċ class ĠRoom s ViewModel Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġval Ġroom Data Ġ= ĠMutable LiveData < List < Room Model >> (). apply Ġ{ Ġpost Value ( Rooms . asList ()) Ġ} ĊĊĠĠĠ Ġval Ġplatform Ready Ġ= ĠMutable LiveData < Boolean >(). apply Ġ{ Ġpost Value ( false ) Ġ} ĊĊĠĠĠ Ġval Ġlistening Ġ= ĠMutable LiveData < Boolean >(). apply Ġ{ Ġpost Value ( false ) Ġ} ĊĊĠĠĠ Ġval Ġsession Listener Ġ= ĠMutable LiveData < Boolean >(). apply Ġ{ Ġpost Value ( false ) Ġ} ĊĊĠĠĠ Ġval Ġroom Update Listener Ġ= ĠMutable LiveData < Room Update Model >() ĊĊĠĠĠ Ġval Ġpending Handler Ġ= ĠHandler () ĊĊĠĠĠ Ġprivate Ġval Ġsn ips Platform Client Ġ= ĠSn ips Platform Client . Builder ( Smart House Application . assistant Dir ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. enable Logs ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. enable Streaming ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Intent Detected Listener Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" received Ġan Ġintent Ġ$ it ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdate D iffs Data Ġ= ĠRoom s . get Update Diff ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroom Data Ġ= ĠRoom s . apply Intent ( it ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom Update Listener . post Value ( update D iffs Data ) Ġ// ĠSend Ġthe Ġupdate Ġto Ġthe ĠUI Ġfirst Ġ... ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Handler . post Delayed ({ Ġ// Ġ... ĠAnd Ġupdate Ġthe Ġdata Ġlater ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Rooms ViewModel . room Data . post Value ( room Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ 5 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Session ( sessionId Ġ= Ġit . sessionId , Ġtext Ġ= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Platform Ready Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplatform Ready . post Value ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Listening StateChanged Listener Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistening . post Value ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Session Started Listener Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Handler . remove Callbacks And Messages ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession Listener . post Value ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Session Ended Listener Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Handler . post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession Listener . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ 2 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Streaming ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . connect ( Smart House Application . app Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġvar Ġfirst Start Ġ= Ġtrue ĊĊĠĠĠ Ġfun Ġresume () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( first Start ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Start Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Streaming ( sn ips Platform Client ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsn ips Platform Client . resume () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġaudio Thread : ĠAudio Thread ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġfun Ġstart Streaming ( client : ĠSn ips Platform Client ) Ġ{ ĊĠĠĠĠĠĠĠ Ġaudio Thread Ġ= ĠAudio Thread ( client ). apply Ġ{ Ġstart () Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġpause () Ġ{ ĊĠĠĠĠĠĠĠ Ġaudio Thread ?. stop Streaming () ĊĠĠĠĠĠĠĠ Ġaudio Thread Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġsn ips Platform Client . pause () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" disconnect ing Ġsn ips Ġplatform ") ĊĠĠĠĠĠĠĠ Ġsn ips Platform Client . disconnect () ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Session () Ġ{ ĊĠĠĠĠĠĠĠ Ġsn ips Platform Client . start Session ( null , ĠlistOf (), Ġfalse , Ġnull ) ĊĠĠĠ Ġ} Ċ } Ċ