package Ġcom . tx w studio . app . timetable . data Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . room . Database Ċ import Ġandroidx . room . Room Ċ import Ġandroidx . room . Room Database Ċ import Ġandroidx . room . migration . Migration Ċ import Ġandroidx . sqlite . db . Support SQLite Database Ċ import Ġcom . tx w studio . app . timetable . utilities . DATABASE _ NAME Ċ Ċ @ Database ( entities Ġ= Ġ[ Course 3 :: class ], Ġversion Ġ= Ġ 2 , Ġexport Schema Ġ= Ġfalse ) Ċ //@ Type Converters ( Converters :: class ) Ċ abstract Ġclass ĠApp Database Ġ: ĠRoom Database () Ġ{ ĊĊĠĠĠ Ġabstract Ġfun Ġcourse Dao (): ĠCourse Dao ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠFor ĠSingleton Ġinstantiation ĊĠĠĠĠĠĠĠ Ġ@ Volatile Ġprivate Ġvar Ġinstance : ĠApp Database ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠHandle Ġmigration Ġfrom Ġversion Ġ 1 Ġto Ġ 2 . ĊĠĠĠĠĠĠĠĠ Ġ* ĠMain Ġchange : ĠAdd Ġa Ġnew Ġcolumn Ġfor Ġprof Ġname . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠM IG RATION _ 1 _ 2 Ġ= Ġobject Ġ: ĠMigration ( 1 , Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmigrate ( database : ĠSupport SQLite Database ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . exec SQL (" ALTER ĠTABLE Ġtime Table ĠADD ĠCOLUMN Ġprof Name ĠTEXT ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance ( context : ĠContext ): ĠApp Database Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinstance Ġ?: Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Ġ?: Ġbuild Database ( context ). also Ġ{ Ġinstance Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġand Ġpre - populate Ġthe Ġdatabase . ĠSee Ġthis Ġarticle Ġfor Ġmore Ġdetails : ĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// medium . com / google - developers / 7 - pro - tips - for - room - fb ade a 4 bf bd 1 # 4 7 8 5 ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġbuild Database ( context : ĠContext ): ĠApp Database Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRoom . database Builder ( context , ĠApp Database :: class . java , ĠDATABASE _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Migrations ( M IG RATION _ 1 _ 2 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Callback ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠRoom Database . Callback () Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ( db : ĠSupport SQLite Database ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . onCreate ( db ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠOne Time Work RequestBuilder < Seed Database Worker >() Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set InputData ( work Data Of ( KEY _ FILENAME Ġto ĠPL ANT _ DATA _ FILENAME )) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWork Manager . getInstance ( context ). enqueue ( request ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ