package Ġio . github . br y 1 3 3 7 . not ed . activities . main Ċ Ċ import Ġandroid . arch . lifecycle . LiveData Ċ import Ġandroid . arch . lifecycle . Mutable LiveData Ċ import Ġandroid . arch . lifecycle . ViewModel Ċ import Ġkotlinx . coroutines .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠEd ward ĠB ry an ĠA berg as Ġon Ġ 0 8 / 1 1 / 2 0 1 8 . Ċ Ġ* Ċ Ġ* Ġ@ author Ġed ward br yan . ab erg as @ gmail . com Ċ Ġ*/ Ċ Ċ /** Ċ Ġ* ĠMain ViewModel Ġdesigned Ġto Ġstore Ġand Ġmanage ĠUI - related Ġdata Ġin Ġa Ġlifecycle Ġcon sc ious Ġway . Ċ Ġ* ĠThis Ġallows Ġdata Ġto Ġsurv ive Ġconfiguration Ġchanges Ġsuch Ġas Ġscreen Ġrotation . Ċ Ġ* ĠIn Ġaddition , Ġbackground Ġwork Ġsuch Ġas Ġfetching Ġnetwork Ġresults Ġcan Ġcontinue Ġthrough Ċ Ġ* Ġconfiguration Ġchanges Ġand Ġdeliver Ġresults Ġafter Ġthe Ġnew ĠFragment Ġor ĠActivity Ġis Ġavailable . Ċ Ġ*/ Ċ class ĠMain ViewModel Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRequest Ġa Ġsn ackbar Ġto Ġdisplay Ġa Ġstring ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġvariable Ġis Ġprivate Ġbecause Ġwe Ġdon 't Ġwant Ġto Ġexpose Ġthe ĠMutable LiveData . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠMutable LiveData Ġallows Ġanyone Ġto Ġset Ġa Ġvalue , Ġand ĠMain ViewModel Ġis Ġthe Ġonly Ġclass ĊĠĠĠĠ Ġ* Ġthat Ġshould Ġbe Ġsetting Ġvalues . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġ_ sn ackBar Ġ= ĠMutable LiveData < String >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRequest Ġa Ġsn ackbar Ġto Ġdisplay Ġa Ġstring ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠUse ĠTransform ations . map Ġto Ġwrap Ġeach Ġstring Ġsent Ġto Ġ_ sn ackbar Ġin Ġa Ġnon - null Ġvalue . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġsn ackbar : ĠLive Data < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ sn ackBar ĊĊĠĠĠ Ġ// ĠTODO : ĠAdd ĠviewModel Job Ġand Ġui Scope Ġhere ĊĠĠĠ Ġprivate Ġval ĠviewModel Job Ġ= ĠJob () ĊĠĠĠ Ġprivate Ġval Ġui Scope Ġ= ĠCor outine Scope ( Dispatch ers . Main Ġ+ ĠviewModel Job ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠĠĠĠĠ ĠviewModel Job . cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWait Ġone Ġsecond Ġto Ġdisplay Ġsn ackbar . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Main View Clicked ( show After : ĠLong Ġ= Ġ 1 _ 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġreplace Ġwith Ġcoroutine Ġimplementation ĊĠĠĠĠĠĠĠ Ġui Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( show After ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġuse Ġpost Value Ġsince Ġwe 're Ġin Ġa Ġbackground Ġthread ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ sn ackBar . post Value (" Hello , Ġfrom Ġthreads ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġimmediately Ġafter Ġthe ĠUI Ġshows Ġthe Ġsn ackbar . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Snackbar Shown () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ sn ackBar . value Ġ= Ġnull ĊĠĠĠ Ġ} Ċ Ċ }