Conversation
fb61129 to
eed482b
Compare
|
APK file: https://github.com/nextcloud/talk-android/actions/runs/34246126796/artifacts/10064452703 |
eed482b to
08cffb6
Compare
|
APK file: https://github.com/nextcloud/talk-android/actions/runs/34466901916/artifacts/10150441248 |
08cffb6 to
7ffb02c
Compare
|
APK file: https://github.com/nextcloud/talk-android/actions/runs/34849556867/artifacts/10350730917 |
7ffb02c to
c94d688
Compare
|
APK file: https://github.com/nextcloud/talk-android/actions/runs/35243431480/artifacts/10506924023 |
30d6126 to
4bb299b
Compare
…outines Convert the user data layer (UsersDao, UsersRepository/Impl) from RxJava2 to suspend fun/Flow, mirroring the ConversationsDao pattern already used elsewhere. UserManager gains suspend counterparts for every method alongside its existing RxJava-typed API, which is now deprecated and bridges to the suspend implementation via kotlinx-coroutines-rx2, so the ~50 existing call sites keep compiling unchanged. Follow-up PRs will migrate those callers in batches and then remove the deprecated methods. Assisted-by: Claude Code:claude-sonnet-5 Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
Switches call sites across the app to the suspend functions added on UserManager/UsersRepository, using lifecycleScope/viewModelScope in Activities and ViewModels, rememberCoroutineScope in Compose, and runBlocking where the call site must stay synchronous (onCreate/onResume, OkHttp interceptor, BroadcastReceivers, plain Worker classes). Also fixes a few spots where a returned Single/Maybe was never subscribed to, so the underlying update silently never ran (ConversationsListActivity's handleEcoSystemIntent, SettingsActivity's client-cert and profile-refresh updates, PushRegistrationWorker's webPushUnregistrationWork). Java call sites (plain Worker classes and KeyManager) are left on the deprecated Rx wrappers, since Java cannot call Kotlin suspend functions without manual Continuation handling. Assisted-by: Claude Code:claude-sonnet-5 Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
scheduleDuplicateAccountsForDeletionSuspend() was the only method with tests; currentUser, deleteUserSuspend, scheduleUserForDeletionWithIdSuspend, setUserAsActiveSuspend, storeProfileSuspend and other suspend methods introduced by the coroutines migration had none. Assisted-by: Claude Code:claude-sonnet-5 Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
4bb299b to
36275f5
Compare
Migrates user account handling (UserManager, UsersRepository, UsersDao) from RxJava to Kotlin coroutines, then updates every call site in the app to use the new suspend API.
Commit 1 — data layer (feat(users): migrate UsersDao, UsersRepository and UserManager to coroutines)
existing callers keep compiling.
Commit 2 — call sites (feat(users): migrate UserManager call sites off RxJava wrappers)
lifecycleScope/viewModelScope/rememberCoroutineScope() where a coroutine scope is available, and runBlocking where the call site must stay synchronous (onCreate/onResume, Worker.doWork()/init,
BroadcastReceiver.onReceive) — a like-for-like swap, since .blockingGet() already blocked the same thread.
SettingsActivity's client-cert and profile-refresh updates, PushRegistrationWorker.webPushUnregistrationWork.
sites in DiagnosisElement, LocalLoginDataSource, and CurrentUserProviderOldImpl on Rx, since its "pick any user and mark it active" fallback isn't exposed as a suspend function and the documented
replacement (CurrentUserProvider.getCurrentUser()) has different semantics.
Recommended follow-ups
AddParticipantsToConversationWorker, KeyManager) — either convert them to Kotlin or accept they'll stay on the deprecated Rx wrappers indefinitely.
decided on and ported over first.
🏁 Checklist
/backport to stable-xx.x🤖 AI (if applicable)