diff --git a/database/src/main/java/de/mm20/launcher2/database/WidgetDao.kt b/database/src/main/java/de/mm20/launcher2/database/WidgetDao.kt index ef317713..d1584204 100644 --- a/database/src/main/java/de/mm20/launcher2/database/WidgetDao.kt +++ b/database/src/main/java/de/mm20/launcher2/database/WidgetDao.kt @@ -3,11 +3,12 @@ package de.mm20.launcher2.database import androidx.lifecycle.LiveData import androidx.room.* import de.mm20.launcher2.database.entities.WidgetEntity +import kotlinx.coroutines.flow.Flow @Dao interface WidgetDao { @Query("SELECT * FROM Widget ORDER BY position ASC") - fun getWidgets(): List + fun getWidgets(): Flow> @Transaction fun updateWidgets(widgets: List) { diff --git a/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/WidgetsVM.kt b/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/WidgetsVM.kt index 39693231..1f9db8df 100644 --- a/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/WidgetsVM.kt +++ b/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/WidgetsVM.kt @@ -2,6 +2,7 @@ package de.mm20.launcher2.ui.launcher.widgets import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel +import androidx.lifecycle.asLiveData import androidx.lifecycle.liveData import de.mm20.launcher2.widgets.Widget import de.mm20.launcher2.widgets.WidgetRepository @@ -13,9 +14,7 @@ class WidgetsVM : ViewModel(), KoinComponent { val isEditMode = MutableLiveData(false) - val widgets = liveData?> { - emit(widgetRepository.getWidgets()) - } + val widgets = widgetRepository.getWidgets().asLiveData() fun setEditMode(editMode: Boolean) { isEditMode.value = editMode diff --git a/widgets/src/main/java/de/mm20/launcher2/widgets/WidgetRepository.kt b/widgets/src/main/java/de/mm20/launcher2/widgets/WidgetRepository.kt index 9d08cb96..3d003361 100644 --- a/widgets/src/main/java/de/mm20/launcher2/widgets/WidgetRepository.kt +++ b/widgets/src/main/java/de/mm20/launcher2/widgets/WidgetRepository.kt @@ -4,6 +4,9 @@ import android.content.Context import de.mm20.launcher2.widgets.R import de.mm20.launcher2.database.AppDatabase import kotlinx.coroutines.* +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.map import java.util.concurrent.Executors class WidgetRepository( @@ -12,10 +15,10 @@ class WidgetRepository( private val scope = CoroutineScope(Job() + Dispatchers.Default) - suspend fun getWidgets(): List { - return withContext(Dispatchers.IO) { - AppDatabase.getInstance(context).widgetDao().getWidgets().map { Widget(it) } - } + fun getWidgets(): Flow> { + return AppDatabase.getInstance(context).widgetDao() + .getWidgets() + .map { it.map { Widget(it) } } } fun getInternalWidgets(): List {