From ecd2d0fb765a1643273431ffabb961e58173a2d7 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 19 Apr 2021 16:01:33 +0200 Subject: [PATCH] Use session scope --- .../main/java/org/matrix/android/sdk/api/session/Session.kt | 5 ++++- .../matrix/android/sdk/internal/session/DefaultSession.kt | 6 ++++-- .../app/features/home/room/detail/RoomDetailViewModel.kt | 3 +-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/Session.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/Session.kt index 1250c0d36b..b2e426efda 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/Session.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/Session.kt @@ -56,6 +56,8 @@ import org.matrix.android.sdk.api.session.thirdparty.ThirdPartyService import org.matrix.android.sdk.api.session.typing.TypingUsersTracker import org.matrix.android.sdk.api.session.user.UserService import org.matrix.android.sdk.api.session.widgets.WidgetService +import kotlin.coroutines.CoroutineContext +import kotlin.coroutines.EmptyCoroutineContext /** * This interface defines interactions with a session. @@ -276,5 +278,6 @@ interface Session : /** * Launch a coroutine using the session scope */ - fun launch(block: suspend () -> Unit ) + fun launch(context: CoroutineContext = EmptyCoroutineContext, + block: suspend () -> Unit ) } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultSession.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultSession.kt index 078cac278d..58be33460b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultSession.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultSession.kt @@ -79,6 +79,7 @@ import org.matrix.android.sdk.internal.util.createUIHandler import timber.log.Timber import javax.inject.Inject import javax.inject.Provider +import kotlin.coroutines.CoroutineContext @SessionScope internal class DefaultSession @Inject constructor( @@ -312,8 +313,9 @@ internal class DefaultSession @Inject constructor( RealmDebugTools(realmConfiguration).logInfo("Session") } - override fun launch(block: suspend () -> Unit) { - sessionScope?.launch { + override fun launch(context: CoroutineContext, + block: suspend () -> Unit) { + sessionScope?.launch(context) { block() } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt index 5bc59c7afc..a5a140cadc 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt @@ -59,7 +59,6 @@ import io.reactivex.Observable import io.reactivex.rxkotlin.subscribeBy import io.reactivex.schedulers.Schedulers import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.commonmark.parser.Parser @@ -571,7 +570,7 @@ class RoomDetailViewModel @AssistedInject constructor( * Convert a send mode to a draft and save the draft */ private fun handleSaveDraft(action: RoomDetailAction.SaveDraft) = withState { - viewModelScope.launch(NonCancellable) { + session.launch { when { it.sendMode is SendMode.REGULAR && !it.sendMode.fromSharing -> { setState { copy(sendMode = it.sendMode.copy(action.draft)) }