package Ġeu . ra jni ak . chat Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . room . Room Ċ import Ġandroidx . room . Room Database Ċ import Ġandroidx . sqlite . db . Support SQLite Database Ċ import Ġeu . ra jni ak . chat . conversation . Fake Data Ċ import Ġeu . ra jni ak . chat . conversation . Message Store Ċ import Ġkotlinx . coroutines . Coroutine Dispatcher Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . Main Scope Ċ import Ġkotlinx . coroutines . launch Ċ Ċ object ĠChat Service Locator Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġdatabase : ĠChat Database ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġval Ġmessage Store Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠMessage Store ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessages Dao Ġ= Ġdatabase . messages Dao () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġio Dispatcher : ĠCor outine Dispatcher ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠDispatch ers . IO ĊĊĠĠĠ Ġfun Ġinitialize ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase Ġ= ĠRoom . database Builder ( context , ĠChat Database :: class . java , Ġ" data . db ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġfor Ġproduction Ġhandle Ġmigration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fallback To Dest ruct ive Migration () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Callback ( object Ġ: ĠRoom Database . Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ( db : ĠSupport SQLite Database ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPre - populate Ġdatabase Ġwith Ġpreview Ġmessages ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMain Scope (). launch ( io Dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . messages Dao (). save ( Fake Data . preview Messages ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ } Ċ