package Ġdemo . kotlin . vm . data Ċ Ċ import Ġandroid . arch . lifecycle .* Ċ import Ġdemo . kotlin . vm . domain . Hello Ċ import Ġtim ber . log . Tim ber Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠHello ViewModel Ġ@ Inject Ġconstructor ( private Ġval ĠdataSource : ĠHello ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġ// Ġobserved Ġby ĠViewModel Ġas Ġa Ġtrigger Ġto Ġretrieve Ġdata Ġfrom Ġthe Ġsource ĊĠĠĠ Ġprivate Ġvar Ġlive Trigger : ĠMutable LiveData < String > Ġ= ĠMutable LiveData () ĊĊĠĠĠ Ġ// Ġobserved Ġby ĠActivity / Fragment Ġor Ġsome Ġother Ġclass Ġas Ġa Ġtrigger Ġto Ġdo Ġsomething Ġwith Ġthe Ġdata ĊĠĠĠ Ġprivate Ġvar Ġlive Data : ĠLive Data < String > ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġdefault Ġobservable Ġtrigger ĊĠĠĠĠĠĠĠ Ġlive Trigger . value Ġ= ĠdataSource . text ĊĊĠĠĠĠĠĠĠ Ġ// Ġobserve Ġlive Trigger Ġand Ġreload Ġobservable Ġlive Data Ġwhen Ġtrigger Ġchanges ĊĠĠĠĠĠĠĠ Ġlive Data Ġ= ĠTransform ations . switch Map ( live Trigger ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠdataSource . fetch Data ( live Trigger . value !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġchanging Ġlive Trigger 's Ġvalue Ġcauses ĠTransform ations . switch Map Ġto Ġsend Ġa Ġvalue Ġto Ġthe ĠHello ĊĠĠĠ Ġ// Ġmodel Ġwhere Ġit 's Ġlive Ġvalue Ġis Ġupdated . ĠHello Ġmodel Ġreturns Ġit 's Ġlive Ġdata Ġwhich Ġreplaces Ġthe ĊĠĠĠ Ġ// ĠViewModel 's Ġlive Ġdata . ĠMainActivity 's Ġobserver Ġsees Ġthe Ġchange Ġand Ġupdates Ġit 's ĠUI ĊĠĠĠ Ġ// Ġwith Ġthe Ġnew Ġvalue . ĊĠĠĠ Ġfun ĠsetData ( value : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d ("-- -> ĠUpdating Ġthe ĠViewModel Ġwith Ġ$ value ") ĊĠĠĠĠĠĠĠ Ġlive Trigger . value Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġretrieve Ġthe Ġobservable Ġdata ĊĠĠĠ Ġfun ĠgetData (): ĠLive Data < String > Ġ= Ġlive Data Ċ }