DataRepository.kt 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. package com.sduduzog.slimlauncher.data
  2. import android.app.Application
  3. import android.content.Intent
  4. import android.content.pm.PackageManager
  5. import android.content.pm.ResolveInfo
  6. import android.os.AsyncTask
  7. import android.util.Log
  8. import androidx.lifecycle.LiveData
  9. import com.sduduzog.slimlauncher.BuildConfig
  10. import java.util.*
  11. class DataRepository(application: Application) {
  12. private val db: DataRoomDatabase = DataRoomDatabase.getDatabase(application)!!
  13. private val appDao: AppDao = db.appDao()
  14. private val noteDao: NoteDao = db.noteDao()
  15. private var _apps: LiveData<List<App>> = appDao.apps
  16. private var _homeApps: LiveData<List<HomeApp>> = appDao.homeApps
  17. private var _notes: LiveData<List<Note>> = noteDao.notes
  18. private var pm: PackageManager = application.packageManager
  19. val homeApps: LiveData<List<HomeApp>>
  20. get() = _homeApps
  21. val apps: LiveData<List<App>>
  22. get() = _apps
  23. val notes: LiveData<List<Note>>
  24. get() = _notes
  25. fun insertHomeApp(app: HomeApp) {
  26. InsertHomeAppAsyncTask(appDao).execute(app)
  27. }
  28. fun deleteHomeApp(app: HomeApp) {
  29. DeleteHomeAppAsyncTask(appDao).execute(app)
  30. }
  31. fun clearHomeApps() {
  32. ClearHomeAppsAsyncTask(appDao).execute()
  33. }
  34. fun updateApps(list: List<HomeApp>) {
  35. for (app in list) {
  36. UpdateAppsAsyncTask(appDao).execute(app)
  37. }
  38. }
  39. fun refreshApps() {
  40. RefreshAppsAsyncTask(appDao).execute(pm)
  41. }
  42. fun renameApp(app: HomeApp) {
  43. UpdateAppsAsyncTask(appDao).execute(app)
  44. }
  45. fun saveNote(note: Note) {
  46. SaveNoteAsyncTask(noteDao).execute(note)
  47. }
  48. fun updateNote(note: Note) {
  49. UpdateNoteAsyncTask(noteDao).execute(note)
  50. }
  51. fun deleteNote(note: Note) {
  52. DeleteNoteAsyncTask(noteDao).execute(note)
  53. }
  54. private class InsertHomeAppAsyncTask internal constructor(private val mAsyncTaskDao: AppDao) : AsyncTask<HomeApp, Void, Void>() {
  55. override fun doInBackground(vararg params: HomeApp): Void? {
  56. mAsyncTaskDao.addHomeApp(params[0])
  57. return null
  58. }
  59. }
  60. private class DeleteHomeAppAsyncTask internal constructor(private val mAsyncTaskDao: AppDao) : AsyncTask<HomeApp, Void, Void>() {
  61. override fun doInBackground(vararg params: HomeApp): Void? {
  62. mAsyncTaskDao.deleteHomeApp(params[0])
  63. return null
  64. }
  65. }
  66. private class ClearHomeAppsAsyncTask internal constructor(private val mAsyncTaskDao: AppDao) : AsyncTask<Void, Void, Void>() {
  67. override fun doInBackground(vararg params: Void): Void? {
  68. mAsyncTaskDao.clearHomeApps()
  69. return null
  70. }
  71. }
  72. private class UpdateAppsAsyncTask internal constructor(private val mAsyncTaskDao: AppDao) : AsyncTask<HomeApp, Void, Void>() {
  73. override fun doInBackground(vararg params: HomeApp): Void? {
  74. mAsyncTaskDao.updateHomeApp(params[0])
  75. return null
  76. }
  77. }
  78. private class RefreshAppsAsyncTask internal constructor(private val mAsyncTaskDao: AppDao) : AsyncTask<PackageManager, Void, Void>() {
  79. override fun doInBackground(vararg params: PackageManager): Void? {
  80. mAsyncTaskDao.deleteAll() // Need to find a less expensive way of doing this
  81. val pm = params[0]
  82. val main = Intent(Intent.ACTION_MAIN, null)
  83. main.addCategory(Intent.CATEGORY_LAUNCHER)
  84. val activitiesList = pm.queryIntentActivities(main, 0)
  85. Collections.sort(activitiesList, ResolveInfo.DisplayNameComparator(pm))
  86. for (i in activitiesList.indices) {
  87. val item = activitiesList[i]
  88. val activity = item.activityInfo
  89. val app = App(activitiesList[i].loadLabel(pm).toString(), activity.applicationInfo.packageName, activity.name)
  90. mAsyncTaskDao.insert(app)
  91. }
  92. return null
  93. }
  94. }
  95. private class SaveNoteAsyncTask internal constructor(private val mAsyncTaskDao: NoteDao) : AsyncTask<Note, Void, Void>() {
  96. override fun doInBackground(vararg params: Note): Void? {
  97. val note = params[0]
  98. mAsyncTaskDao.saveNote(note)
  99. return null
  100. }
  101. }
  102. private class UpdateNoteAsyncTask internal constructor(private val mAsyncTaskDao: NoteDao) : AsyncTask<Note, Void, Void>() {
  103. override fun doInBackground(vararg params: Note): Void? {
  104. val note = params[0]
  105. mAsyncTaskDao.updateNote(note)
  106. return null
  107. }
  108. }
  109. private class DeleteNoteAsyncTask internal constructor(private val mAsyncTaskDao: NoteDao) : AsyncTask<Note, Void, Void>() {
  110. override fun doInBackground(vararg params: Note): Void? {
  111. val note = params[0]
  112. mAsyncTaskDao.deleteNote(note)
  113. return null
  114. }
  115. }
  116. companion object {
  117. @Volatile
  118. @JvmStatic
  119. private var INSTANCE: DataRepository? = null
  120. fun getInstance(application: Application): DataRepository {
  121. synchronized(DataRepository::class.java) {
  122. if (INSTANCE == null) {
  123. INSTANCE = DataRepository(application)
  124. }
  125. return INSTANCE!!
  126. }
  127. }
  128. }
  129. }