package Ġcom . connect yc ube . messenger . data Ċ Ċ 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 Ġandroidx . work . One Time Work RequestBuilder Ċ import Ġandroidx . work . Work Manager Ċ import Ġcom . connect yc ube . messenger . utilities . DATABASE _ NAME Ċ import Ġcom . connect yc ube . messenger . workers . Chat Database Worker Ċ import Ġtim ber . log . Tim ber Ċ Ċ /** Ċ Ġ* ĠThe ĠRoom Ġdatabase Ġfor Ġthis Ġapp Ċ Ġ*/ Ċ @ Database ( entities Ġ= Ġ[ User :: class , ĠChat :: class , ĠMessage :: class , ĠAttachment :: class ], Ġversion Ġ= Ġ 2 , Ġexport Schema Ġ= Ġfalse ) Ċ @ Type Converters ( User Converters :: class , ĠChat Converters :: class , ĠMessage Converters :: class ) Ċ abstract Ġclass ĠApp Database Ġ: ĠRoom Database () Ġ{ ĊĠĠĠ Ġabstract Ġfun Ġuser Dao (): ĠUser Dao ĊĠĠĠ Ġabstract Ġfun Ġchat Dao (): ĠChat Dao ĊĠĠĠ Ġabstract Ġfun Ġmessage Dao (): ĠMessage Dao ĊĠĠĠ Ġabstract Ġfun Ġattachment Dao (): ĠAttachment Dao ĊĠĠĠ Ġabstract Ġfun Ġmessage With Attachment Dao (): ĠMessage With Attachments Dao ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠFor ĠSingleton Ġinstantiation ĊĠĠĠĠĠĠĠ Ġ@ Volatile ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġinstance : ĠApp Database ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance ( context : ĠContext ): ĠApp Database Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinstance Ġ?: Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Ġ?: Ġbuild Database ( context ). also Ġ{ Ġinstance Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġbuild Database ( context : ĠContext ): ĠApp Database Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" build Database Ġstart ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRoom . database Builder ( context , ĠApp Database :: class . java , ĠDATABASE _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Callback ( object Ġ: ĠRoom Database . Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ( db : ĠSupport SQLite Database ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . onCreate ( db ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" build Database Ġcreated ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠOne Time Work RequestBuilder < Chat Database Worker >(). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWork Manager . getInstance ( context ). enqueue ( request ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear Tables For Logout () Ġ{ ĊĠĠĠĠĠĠĠ Ġchat Dao (). nu ke Table () ĊĠĠĠĠĠĠĠ Ġmessage Dao (). nu ke Table () ĊĠĠĠĠĠĠĠ Ġattachment Dao (). nu ke Table () ĊĠĠĠ Ġ} Ċ }