DataRoomDatabase.kt 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package com.sduduzog.slimlauncher.data
  2. import android.content.Context
  3. import androidx.room.Database
  4. import androidx.room.Room
  5. import androidx.room.RoomDatabase
  6. import androidx.room.migration.Migration
  7. import androidx.sqlite.db.SupportSQLiteDatabase
  8. @Database(entities = [App::class, HomeApp::class, Note::class], version = 3, exportSchema = false)
  9. abstract class DataRoomDatabase : RoomDatabase() {
  10. abstract fun appDao(): AppDao
  11. abstract fun noteDao(): NoteDao
  12. companion object {
  13. @Volatile
  14. @JvmStatic
  15. private var INSTANCE: DataRoomDatabase? = null
  16. fun getDatabase(context: Context): DataRoomDatabase? {
  17. synchronized(DataRoomDatabase::class.java) {
  18. if (INSTANCE == null) {
  19. INSTANCE = Room.databaseBuilder(context.applicationContext,
  20. DataRoomDatabase::class.java, "app_database")
  21. .addCallback(object : Callback(){
  22. override fun onCreate(db: SupportSQLiteDatabase) {
  23. super.onCreate(db)
  24. val _db = DataRoomDatabase.getDatabase(context)!!
  25. val dao = _db.noteDao()
  26. PopulateDatabaseTask(dao).execute()
  27. }
  28. })
  29. .addMigrations(MIGRATION_1_2, MIGRATION_2_3)
  30. .build()
  31. }
  32. return INSTANCE
  33. }
  34. }
  35. private val MIGRATION_1_2 = object : Migration(1, 2) {
  36. override fun migrate(database: SupportSQLiteDatabase) {
  37. database.execSQL("ALTER TABLE home_apps ADD COLUMN sorting_index INTEGER NOT NULL DEFAULT 0")
  38. val cursor = database.query("SELECT package_name FROM home_apps")
  39. cursor.moveToFirst()
  40. var index = 0
  41. while (!cursor.isAfterLast) {
  42. val column = cursor.getString(cursor.getColumnIndex("package_name"))
  43. database.execSQL("UPDATE home_apps SET sorting_index=$index WHERE package_name='$column'")
  44. cursor.moveToNext()
  45. index++
  46. }
  47. }
  48. }
  49. private val MIGRATION_2_3 = object : Migration(2, 3) {
  50. override fun migrate(database: SupportSQLiteDatabase) {
  51. database.execSQL("CREATE TABLE IF NOT EXISTS `notes` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `title` TEXT, `body` TEXT NOT NULL, `edited` INTEGER NOT NULL)")
  52. }
  53. }
  54. }
  55. }