Refresh widgets in widget view model after widgets have been changed
This commit is contained in:
MM20 2022-02-07 18:35:08 +01:00
parent fb407afe21
commit e8a5c1f24b
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
3 changed files with 11 additions and 8 deletions

View File

@ -3,11 +3,12 @@ package de.mm20.launcher2.database
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.room.* import androidx.room.*
import de.mm20.launcher2.database.entities.WidgetEntity import de.mm20.launcher2.database.entities.WidgetEntity
import kotlinx.coroutines.flow.Flow
@Dao @Dao
interface WidgetDao { interface WidgetDao {
@Query("SELECT * FROM Widget ORDER BY position ASC") @Query("SELECT * FROM Widget ORDER BY position ASC")
fun getWidgets(): List<WidgetEntity> fun getWidgets(): Flow<List<WidgetEntity>>
@Transaction @Transaction
fun updateWidgets(widgets: List<WidgetEntity>) { fun updateWidgets(widgets: List<WidgetEntity>) {

View File

@ -2,6 +2,7 @@ package de.mm20.launcher2.ui.launcher.widgets
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.asLiveData
import androidx.lifecycle.liveData import androidx.lifecycle.liveData
import de.mm20.launcher2.widgets.Widget import de.mm20.launcher2.widgets.Widget
import de.mm20.launcher2.widgets.WidgetRepository import de.mm20.launcher2.widgets.WidgetRepository
@ -13,9 +14,7 @@ class WidgetsVM : ViewModel(), KoinComponent {
val isEditMode = MutableLiveData(false) val isEditMode = MutableLiveData(false)
val widgets = liveData<List<Widget>?> { val widgets = widgetRepository.getWidgets().asLiveData()
emit(widgetRepository.getWidgets())
}
fun setEditMode(editMode: Boolean) { fun setEditMode(editMode: Boolean) {
isEditMode.value = editMode isEditMode.value = editMode

View File

@ -4,6 +4,9 @@ import android.content.Context
import de.mm20.launcher2.widgets.R import de.mm20.launcher2.widgets.R
import de.mm20.launcher2.database.AppDatabase import de.mm20.launcher2.database.AppDatabase
import kotlinx.coroutines.* import kotlinx.coroutines.*
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.map
import java.util.concurrent.Executors import java.util.concurrent.Executors
class WidgetRepository( class WidgetRepository(
@ -12,10 +15,10 @@ class WidgetRepository(
private val scope = CoroutineScope(Job() + Dispatchers.Default) private val scope = CoroutineScope(Job() + Dispatchers.Default)
suspend fun getWidgets(): List<Widget> { fun getWidgets(): Flow<List<Widget>> {
return withContext(Dispatchers.IO) { return AppDatabase.getInstance(context).widgetDao()
AppDatabase.getInstance(context).widgetDao().getWidgets().map { Widget(it) } .getWidgets()
} .map { it.map { Widget(it) } }
} }
fun getInternalWidgets(): List<Widget> { fun getInternalWidgets(): List<Widget> {