Skip to content

Commit 20d92b2

Browse files
chore: Move ChooseAccountShareTo implementation to own package
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
1 parent 4579d34 commit 20d92b2

7 files changed

Lines changed: 117 additions & 96 deletions

File tree

app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ import com.nextcloud.talk.settings.SettingsActivity
110110
import com.nextcloud.talk.threadsoverview.ThreadsOverviewActivity
111111
import com.nextcloud.talk.ui.BackgroundVoiceMessageCard
112112
import com.nextcloud.talk.ui.dialog.ChooseAccountDialogCompose
113-
import com.nextcloud.talk.ui.dialog.ChooseAccountShareToDialogFragment
113+
import com.nextcloud.talk.ui.chooseaccount.ChooseAccountShareToDialogFragment
114114
import com.nextcloud.talk.ui.dialog.ConversationsListBottomDialog
115115
import com.nextcloud.talk.ui.dialog.FilterConversationFragment
116116
import com.nextcloud.talk.ui.dialog.FilterConversationFragment.Companion.ARCHIVE

app/src/main/java/com/nextcloud/talk/dagger/modules/ViewModelModule.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import com.nextcloud.talk.diagnosis.DiagnosisViewModel
2424
import com.nextcloud.talk.invitation.viewmodels.InvitationsViewModel
2525
import com.nextcloud.talk.messagesearch.MessageSearchViewModel
2626
import com.nextcloud.talk.openconversations.viewmodels.OpenConversationsViewModel
27-
import com.nextcloud.talk.ui.dialog.viewmodels.ChooseAccountShareToViewModel
27+
import com.nextcloud.talk.ui.chooseaccount.ChooseAccountShareToViewModel
2828
import com.nextcloud.talk.polls.viewmodels.PollCreateViewModel
2929
import com.nextcloud.talk.polls.viewmodels.PollMainViewModel
3030
import com.nextcloud.talk.polls.viewmodels.PollResultsViewModel

app/src/main/java/com/nextcloud/talk/ui/dialog/ChooseAccountShareToDialogCompose.kt renamed to app/src/main/java/com/nextcloud/talk/ui/chooseaccount/ChooseAccountShareToDialogCompose.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
/*
22
* Nextcloud Talk - Android Client
33
*
4-
* SPDX-FileCopyrightText: 2021-2026 Andy Scherzinger <info@andy-scherzinger.de>
5-
* SPDX-FileCopyrightText: 2022 Marcel Hibbe <dev@mhibbe.de>
6-
* SPDX-FileCopyrightText: 2017 Mario Danic <mario@lovelyhq.com>
4+
* SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors
75
* SPDX-License-Identifier: GPL-3.0-or-later
86
*/
9-
package com.nextcloud.talk.ui.dialog
7+
8+
package com.nextcloud.talk.ui.chooseaccount
109

1110
import android.content.res.Configuration
1211
import androidx.compose.foundation.clickable

app/src/main/java/com/nextcloud/talk/ui/dialog/ChooseAccountShareToDialogFragment.kt renamed to app/src/main/java/com/nextcloud/talk/ui/chooseaccount/ChooseAccountShareToDialogFragment.kt

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
/*
22
* Nextcloud Talk - Android Client
33
*
4-
* SPDX-FileCopyrightText: 2021-2026 Andy Scherzinger <info@andy-scherzinger.de>
5-
* SPDX-FileCopyrightText: 2022 Marcel Hibbe <dev@mhibbe.de>
6-
* SPDX-FileCopyrightText: 2017 Mario Danic <mario@lovelyhq.com>
4+
* SPDX-FileCopyrightText: 2017-2026 Nextcloud GmbH and Nextcloud contributors
75
* SPDX-License-Identifier: GPL-3.0-or-later
86
*/
9-
package com.nextcloud.talk.ui.dialog
7+
8+
package com.nextcloud.talk.ui.chooseaccount
109

1110
import android.annotation.SuppressLint
1211
import android.app.Dialog
@@ -25,12 +24,13 @@ import androidx.lifecycle.lifecycleScope
2524
import androidx.lifecycle.repeatOnLifecycle
2625
import autodagger.AutoInjector
2726
import com.google.android.material.dialog.MaterialAlertDialogBuilder
28-
import kotlinx.coroutines.launch
2927
import com.nextcloud.talk.application.NextcloudTalkApplication
30-
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
3128
import com.nextcloud.talk.data.user.model.User
32-
import com.nextcloud.talk.ui.dialog.viewmodels.ChooseAccountShareToViewModel
29+
import com.nextcloud.talk.ui.chooseaccount.model.LoadUsersSuccessStateChooseAccountShareTo
30+
import com.nextcloud.talk.ui.chooseaccount.model.SwitchUserSuccessStateChooseAccountShareTo
3331
import com.nextcloud.talk.ui.theme.ViewThemeUtils
32+
import kotlinx.coroutines.flow.collectLatest
33+
import kotlinx.coroutines.launch
3434
import java.net.CookieManager
3535
import javax.inject.Inject
3636

@@ -60,20 +60,20 @@ class ChooseAccountShareToDialogFragment : DialogFragment() {
6060

6161
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
6262
super.onViewCreated(view, savedInstanceState)
63-
sharedApplication!!.componentApplication.inject(this)
63+
NextcloudTalkApplication.Companion.sharedApplication!!.componentApplication.inject(this)
6464

6565
viewModel = ViewModelProvider(this, viewModelFactory)[ChooseAccountShareToViewModel::class.java]
6666

6767
val otherUsers = mutableStateOf<List<User>>(emptyList())
6868

6969
lifecycleScope.launch {
7070
repeatOnLifecycle(Lifecycle.State.STARTED) {
71-
viewModel.viewState.collect { state ->
71+
viewModel.chooseAccountShareToViewState.collectLatest { state ->
7272
when (state) {
73-
is ChooseAccountShareToViewModel.LoadUsersSuccessState -> {
73+
is LoadUsersSuccessStateChooseAccountShareTo -> {
7474
otherUsers.value = state.users
7575
}
76-
is ChooseAccountShareToViewModel.SwitchUserSuccessState -> {
76+
is SwitchUserSuccessStateChooseAccountShareTo -> {
7777
cookieManager.cookieStore.removeAll()
7878
activity?.recreate()
7979
dismiss()
@@ -109,7 +109,7 @@ class ChooseAccountShareToDialogFragment : DialogFragment() {
109109
}
110110

111111
companion object {
112-
val TAG = ChooseAccountShareToDialogFragment::class.java.simpleName
112+
const val TAG = "ChooseAccountShareToDialogFragment"
113113
fun newInstance(): ChooseAccountShareToDialogFragment = ChooseAccountShareToDialogFragment()
114114
}
115115
}
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
/*
2+
* Nextcloud Talk - Android Client
3+
*
4+
* SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors
5+
* SPDX-License-Identifier: GPL-3.0-or-later
6+
*/
7+
8+
package com.nextcloud.talk.ui.chooseaccount
9+
10+
import android.util.Log
11+
import androidx.lifecycle.ViewModel
12+
import com.nextcloud.talk.data.user.model.User
13+
import com.nextcloud.talk.ui.chooseaccount.model.ChooseAccountShareToViewState
14+
import com.nextcloud.talk.ui.chooseaccount.model.LoadUsersStartStateChooseAccountShareTo
15+
import com.nextcloud.talk.ui.chooseaccount.model.LoadUsersSuccessStateChooseAccountShareTo
16+
import com.nextcloud.talk.ui.chooseaccount.model.SwitchUserErrorStateChooseAccountShareTo
17+
import com.nextcloud.talk.ui.chooseaccount.model.SwitchUserSuccessStateChooseAccountShareTo
18+
import com.nextcloud.talk.users.UserManager
19+
import io.reactivex.android.schedulers.AndroidSchedulers
20+
import io.reactivex.disposables.CompositeDisposable
21+
import io.reactivex.schedulers.Schedulers
22+
import kotlinx.coroutines.flow.MutableStateFlow
23+
import kotlinx.coroutines.flow.StateFlow
24+
import kotlinx.coroutines.flow.asStateFlow
25+
import javax.inject.Inject
26+
27+
class ChooseAccountShareToViewModel @Inject constructor(private val userManager: UserManager) : ViewModel() {
28+
29+
val currentUser: User? = userManager.currentUser.blockingGet()
30+
31+
private val _chooseAccountShareToViewState: MutableStateFlow<ChooseAccountShareToViewState> =
32+
MutableStateFlow(LoadUsersStartStateChooseAccountShareTo)
33+
val chooseAccountShareToViewState: StateFlow<ChooseAccountShareToViewState> =
34+
_chooseAccountShareToViewState.asStateFlow()
35+
36+
private val disposables = CompositeDisposable()
37+
38+
fun loadUsers() {
39+
_chooseAccountShareToViewState.value = LoadUsersStartStateChooseAccountShareTo
40+
disposables.add(
41+
userManager.users
42+
.subscribeOn(Schedulers.io())
43+
.observeOn(AndroidSchedulers.mainThread())
44+
.subscribe(
45+
{ users ->
46+
_chooseAccountShareToViewState.value =
47+
LoadUsersSuccessStateChooseAccountShareTo(users.filter { !it.current })
48+
},
49+
{ e ->
50+
Log.e(TAG, "Error loading users", e)
51+
_chooseAccountShareToViewState.value = LoadUsersSuccessStateChooseAccountShareTo(emptyList())
52+
}
53+
)
54+
)
55+
}
56+
57+
fun switchToUser(user: User) {
58+
disposables.add(
59+
userManager.setUserAsActive(user)
60+
.subscribeOn(Schedulers.io())
61+
.observeOn(AndroidSchedulers.mainThread()).subscribe({ success ->
62+
_chooseAccountShareToViewState.value =
63+
if (success) {
64+
SwitchUserSuccessStateChooseAccountShareTo
65+
} else {
66+
SwitchUserErrorStateChooseAccountShareTo
67+
}
68+
}, { e ->
69+
Log.e(TAG, "Error switching user", e)
70+
_chooseAccountShareToViewState.value = SwitchUserErrorStateChooseAccountShareTo
71+
})
72+
)
73+
}
74+
75+
override fun onCleared() {
76+
disposables.dispose()
77+
super.onCleared()
78+
}
79+
80+
companion object {
81+
private val TAG = ChooseAccountShareToViewModel::class.simpleName
82+
}
83+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/*
2+
* Nextcloud Talk - Android Client
3+
*
4+
* SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors
5+
* SPDX-License-Identifier: GPL-3.0-or-later
6+
*/
7+
8+
package com.nextcloud.talk.ui.chooseaccount.model
9+
10+
import com.nextcloud.talk.data.user.model.User
11+
12+
sealed interface ChooseAccountShareToViewState
13+
14+
object LoadUsersStartStateChooseAccountShareTo : ChooseAccountShareToViewState
15+
open class LoadUsersSuccessStateChooseAccountShareTo(val users: List<User>) : ChooseAccountShareToViewState
16+
object SwitchUserSuccessStateChooseAccountShareTo : ChooseAccountShareToViewState
17+
object SwitchUserErrorStateChooseAccountShareTo : ChooseAccountShareToViewState

app/src/main/java/com/nextcloud/talk/ui/dialog/viewmodels/ChooseAccountShareToViewModel.kt

Lines changed: 0 additions & 78 deletions
This file was deleted.

0 commit comments

Comments
 (0)