diff --git a/app/src/main/java/com/nextcloud/talk/newarch/data/repository/offline/UsersRepositoryImpl.kt b/app/src/main/java/com/nextcloud/talk/newarch/data/repository/offline/UsersRepositoryImpl.kt index f9b004159..873303d07 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/data/repository/offline/UsersRepositoryImpl.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/data/repository/offline/UsersRepositoryImpl.kt @@ -71,8 +71,8 @@ class UsersRepositoryImpl(private val usersDao: UsersDao) : UsersRepository { return usersDao.saveUser(user) } - override suspend fun setUserAsActiveWithId(id: Long) { - usersDao.setUserAsActiveWithId(id) + override suspend fun setUserAsActiveWithId(id: Long): Boolean { + return usersDao.setUserAsActiveWithId(id) } override suspend fun deleteUserWithId(id: Long) { diff --git a/app/src/main/java/com/nextcloud/talk/newarch/domain/repository/offline/UsersRepository.kt b/app/src/main/java/com/nextcloud/talk/newarch/domain/repository/offline/UsersRepository.kt index 717d46034..29280c2ac 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/domain/repository/offline/UsersRepository.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/domain/repository/offline/UsersRepository.kt @@ -35,7 +35,7 @@ interface UsersRepository { suspend fun getUserWithUsernameAndServer(username: String, server: String): UserNgEntity? suspend fun updateUser(user: UserNgEntity): Int suspend fun insertUser(user: UserNgEntity): Long - suspend fun setUserAsActiveWithId(id: Long) + suspend fun setUserAsActiveWithId(id: Long): Boolean suspend fun deleteUserWithId(id: Long) suspend fun setAnyUserAsActive(): Boolean suspend fun markUserForDeletion(id: Long): Boolean diff --git a/app/src/main/java/com/nextcloud/talk/newarch/features/settingsflow/settings/SettingsViewModel.kt b/app/src/main/java/com/nextcloud/talk/newarch/features/settingsflow/settings/SettingsViewModel.kt index 7caf75756..295cfc256 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/features/settingsflow/settings/SettingsViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/features/settingsflow/settings/SettingsViewModel.kt @@ -22,7 +22,6 @@ package com.nextcloud.talk.newarch.features.settingsflow.settings import android.app.Application -import androidx.lifecycle.viewModelScope import com.nextcloud.talk.newarch.data.source.remote.ApiErrorHandler import com.nextcloud.talk.newarch.domain.repository.offline.UsersRepository import com.nextcloud.talk.newarch.local.models.User @@ -31,7 +30,6 @@ import com.nextcloud.talk.newarch.mvvm.BaseViewModel import com.nextcloud.talk.newarch.services.GlobalService import com.nextcloud.talk.newarch.utils.NetworkComponents import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext @@ -45,21 +43,19 @@ class SettingsViewModel constructor( val users = usersRepository.getUsersLiveData() val activeUser = globalService.currentUserLiveData - fun setUserAsActive(user: User): Boolean { - if (user.status == UserStatus.DORMANT) { - val job = runBlocking { - viewModelScope.launch { - user.id?.let { - usersRepository.setUserAsActiveWithId(it) - } - } - } + private suspend fun setUserAsActiveWithId(id: Long): Boolean { + return usersRepository.setUserAsActiveWithId(id) + } - job.start() - return true + fun setUserAsActive(user: User): Boolean = runBlocking { + var operationFinished = false + if (user.status == UserStatus.DORMANT) { + operationFinished = withContext(Dispatchers.Default) { + runBlocking { setUserAsActive(user) } + } } - return false + operationFinished } private suspend fun removeUserWithId(id: Long): Boolean { diff --git a/app/src/main/java/com/nextcloud/talk/newarch/local/dao/UsersDao.kt b/app/src/main/java/com/nextcloud/talk/newarch/local/dao/UsersDao.kt index 6d0cc3300..92fd5653f 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/local/dao/UsersDao.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/local/dao/UsersDao.kt @@ -65,7 +65,7 @@ abstract class UsersDao { abstract suspend fun getUserWithUsernameAndServer(username: String, server: String): UserNgEntity? @Transaction - open suspend fun setUserAsActiveWithId(id: Long) { + open suspend fun setUserAsActiveWithId(id: Long) : Boolean { val users = getUsers() for (user in users) { if (user.id != id && UserStatus.ACTIVE == user.status) { @@ -76,6 +76,8 @@ abstract class UsersDao { updateUser(user) } } + + return true } @Transaction