package Ġcom . mo ony . calc . database čĊč Ċ import Ġandroid . annotation . Suppress Lint č Ċ import Ġandroid . content . Context č Ċ import Ġandroidx . room . Database č Ċ import Ġandroidx . room . Room č Ċ import Ġandroidx . room . Room Database č Ċ import Ġandroidx . room . Type Converters č Ċ import Ġandroidx . sqlite . db . Support SQLite Database č Ċ import Ġcom . mo ony . calc . R č Ċ import Ġcom . mo ony . calc . model . Category č Ċ import Ġcom . mo ony . calc . model . Saving č Ċ import Ġcom . mo ony . calc . model . Saving History č Ċ import Ġcom . mo ony . calc . model . Transaction č Ċ import Ġcom . mo ony . calc . utils . Timestamp Converter č Ċ import Ġkotlinx . coroutines . Dispatch ers č Ċ import Ġkotlinx . coroutines . Global Scope č Ċ import Ġkotlinx . coroutines . launch čĊč Ċ @ Database ( čĊĠĠĠ Ġentities Ġ= Ġ[ Transaction :: class , ĠS aving :: class , ĠCategory :: class , ĠS aving History :: class ], čĊĠĠĠ Ġversion Ġ= Ġ 1 č Ċ ) č Ċ @ Type Converters ( Timestamp Converter :: class ) č Ċ abstract Ġclass ĠMo ony Database Ġ: ĠRoom Database () Ġ{ čĊĠĠĠ Ġabstract Ġfun Ġget Transaction Dao (): ĠTransaction Dao čĊĠĠĠ Ġabstract Ġfun Ġget Category Dao (): ĠCategory Dao čĊĠĠĠ Ġabstract Ġfun Ġget Saving Dao (): ĠS aving Dao čĊĠĠĠ Ġabstract Ġfun Ġget Saving History Dao (): ĠS aving History Dao čĊĠĠĠ Ġlateinit Ġvar Ġcontext : ĠContext čĊčĊĠĠĠ Ġcompanion Ġobject Ġ{ čĊĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Static Field Leak ") čĊĠĠĠĠĠĠĠ Ġ@ Volatile čĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġinstance : ĠMo ony Database ? Ġ= Ġnull čĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance ( context : ĠContext ): ĠMo ony Database Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( instance Ġ== Ġnull ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Ġ= ĠRoom . database Builder ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . application Context , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMo ony Database :: class . java , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Mo ony Database . db " čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). add Callback ( callback ). build () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance !!. context Ġ= Ġcontext čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinstance !! čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcallback Ġ= Ġobject Ġ: ĠRoom Database . Callback () Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ( db : ĠSupport SQLite Database ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . onCreate ( db ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Default Category ( instance !!. get Category Dao (), Ġinstance !!. context ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġadd Default Category ( category Dao : ĠCategory Dao , context : ĠContext ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . IO ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefault Categories Ġ= ĠlistOf ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . atm ), Ġ" categories / life / atm . png "), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . books ), Ġ" categories / education / book . png "), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . phones ), Ġ" categories / electron ics / phone . png "), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . games ), Ġ" categories / ent ert ain ment / gamepad . png "), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . cin ema ), Ġ" categories / ent ert ain ment / cin ema . png "), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . b aby ), Ġ" categories / family / b aby . png "), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . pet ), Ġ" categories / family / cat . png "), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . fitness ), Ġ" categories / fitness / work out . png "), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . food s ), Ġ" categories / food / bur ger . png "), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . dr inks ), Ġ" categories / food / ju ice . png "), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . sn acks ), Ġ" categories / food / f rench _ f ries . png "), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . repair ), Ġ" categories / f urniture / w rench . png "), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . travel ), Ġ" categories / life / travel . png "), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . lover ), Ġ" categories / life / heart . png "), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . ins ur r ance ), Ġ" categories / life / ba o hi em . png "), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . bill ), Ġ" categories / life / bill . png "), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . rent ), Ġ" categories / life / rent . png "), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . wed ding ), Ġ" categories / life / wed ding . png "), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . char ity ), Ġ" categories / life / char ity . png "), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . party ), Ġ" categories / life / party . png "), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . med icine ), Ġ" categories / medical / med icine . png "), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . health _ check ), Ġ" categories / medical / vac ine . png "), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . shopping ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" categories / shopping / shopping online . png " čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . clo thes ), Ġ" categories / shopping / clo thes . png "), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . foot we ar ), Ġ" categories / shopping / foot we ar . png "), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . bus _ ticket ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" categories / transport ation / station . png ", čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . train _ ticket ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" categories / transport ation / train . png ", čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . plane _ ticket ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" categories / transport ation / plane . png ", čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . tax i ), Ġ" categories / transport ation / tax i . png "), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . park ing ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" categories / transport ation / park ing _ lot . png ", čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . ref uel ), Ġ" categories / transport ation / fuel . png "), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . saving ), Ġ" categories / income / salary . png ", Ġres Id Ġ= ĠR . string . saving ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . other ), Ġ" categories / money / money . png "), čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . sell ), Ġ" categories / income / sell . png ", Ġtrue ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . bank _ interest ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" categories / income / interest . png ", čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . bonus ), Ġ" categories / income / bonus . png ", Ġtrue ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . monthly _ salary ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" categories / income / salary 1 . png ", čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . saving ), Ġ" categories / income / salary . png ", Ġtrue , Ġres Id Ġ= ĠR . string . saving ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCategory ( context . getString ( R . string . other ), Ġ" categories / money / money . png ", Ġtrue ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Categories . forEach Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory Dao . insert Category ( it ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠ Ġ} čĊč Ċ }