package Ġio . un iflow . test . impl Ċ Ċ import Ġio . un iflow . core . flow . Data Publisher Ċ import Ġio . un iflow . core . flow . data . UI Data Ċ import Ġio . un iflow . core . flow . data . UI Event Ċ import Ġio . un iflow . core . flow . data . UIState Ċ import Ġio . un iflow . core . logger . Uni Flow Logger Ċ import Ġio . un iflow . core . threading . on Main Ċ Ċ class ĠSimple Data Publisher ( val Ġdefault State : ĠUI State , Ġval Ġtag Ġ: ĠString ) Ġ: ĠData Publisher Ġ{ ĊĊĠĠĠ Ġval Ġstates Ġ= Ġarray ListOf < UIState >() ĊĠĠĠ Ġval Ġdata Ġ= Ġarray ListOf < UI Data >() ĊĠĠĠ Ġval Ġevents Ġ= Ġarray ListOf < UI Event >() ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun ĠgetState (): ĠUI State Ġ= Ġstates . last OrNull () Ġ?: Ġdefault State ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġpublish State ( state : ĠUI State , Ġpush State Update : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Main ( immediate Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUni Flow Logger . log ("$ tag Ġ- Ġnew Ġstate : Ġ$ state ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstates . add ( state ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( push State Update ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUni Flow Logger . log ("$ tag Ġ- Ġstate Ġ<-- Ġ$ state ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . add ( state ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġpublish Event ( event : ĠUI Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Main ( immediate Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUni Flow Logger . log ("$ tag Ġ- Ġevent Ġ<-- Ġ$ event ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . add ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevents . add ( event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }