Skip to content

Commit 1689c48

Browse files
committed
feat: display correct role for each space member in the list
1 parent c0c86b1 commit 1689c48

File tree

3 files changed

+40
-7
lines changed

3 files changed

+40
-7
lines changed

owncloudApp/src/main/java/com/owncloud/android/presentation/spaces/members/SpaceMembersAdapter.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import android.view.ViewGroup
2626
import androidx.recyclerview.widget.RecyclerView
2727
import com.owncloud.android.R
2828
import com.owncloud.android.databinding.MemberItemBinding
29+
import com.owncloud.android.domain.roles.model.OCRole
2930
import com.owncloud.android.domain.spaces.model.SpaceMember
3031
import com.owncloud.android.domain.spaces.model.SpaceMembers
3132
import com.owncloud.android.utils.DisplayUtils
@@ -64,9 +65,9 @@ class SpaceMembersAdapter: RecyclerView.Adapter<SpaceMembersAdapter.SpaceMembers
6465

6566
override fun getItemCount(): Int = members.size
6667

67-
fun setSpaceMembers(spaceMembers: SpaceMembers) {
68-
this.rolesMap = spaceMembers.roles.associate { it.id to it.displayName }
69-
this.members = spaceMembers.members.sortedByDescending { member -> spaceMembers.roles.indexOfFirst { it.id in member.roles } }
68+
fun setSpaceMembers(spaceMembers: SpaceMembers, roles: List<OCRole>) {
69+
this.rolesMap = roles.associate { it.id to it.displayName }
70+
this.members = spaceMembers.members.sortedByDescending { member -> roles.indexOfFirst { it.id in member.roles } }
7071
notifyDataSetChanged()
7172
}
7273

owncloudApp/src/main/java/com/owncloud/android/presentation/spaces/members/SpaceMembersFragment.kt

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
2929
import androidx.recyclerview.widget.RecyclerView
3030
import com.owncloud.android.R
3131
import com.owncloud.android.databinding.MembersFragmentBinding
32+
import com.owncloud.android.domain.roles.model.OCRole
3233
import com.owncloud.android.domain.spaces.model.OCSpace
3334
import com.owncloud.android.extensions.collectLatestLifecycleFlow
3435
import com.owncloud.android.presentation.common.UIResult
@@ -49,6 +50,7 @@ class SpaceMembersFragment : Fragment() {
4950

5051
private lateinit var spaceMembersAdapter: SpaceMembersAdapter
5152
private lateinit var recyclerView: RecyclerView
53+
private lateinit var roles: List<OCRole>
5254

5355
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
5456
_binding = MembersFragmentBinding.inflate(inflater, container, false)
@@ -68,7 +70,22 @@ class SpaceMembersFragment : Fragment() {
6870
event?.let {
6971
when (val uiResult = event.peekContent()) {
7072
is UIResult.Success -> {
71-
uiResult.data?.let { spaceMembersAdapter.setSpaceMembers(it) }
73+
uiResult.data?.let { spaceMembersAdapter.setSpaceMembers(it, roles) }
74+
}
75+
is UIResult.Loading -> { }
76+
is UIResult.Error -> { }
77+
}
78+
}
79+
}
80+
81+
collectLatestLifecycleFlow(spaceMembersViewModel.roles) { event ->
82+
event?.let {
83+
when (val uiResult = event.peekContent()) {
84+
is UIResult.Success -> {
85+
uiResult.data?.let {
86+
roles = it
87+
spaceMembersViewModel.getSpaceMembers()
88+
}
7289
}
7390
is UIResult.Loading -> { }
7491
is UIResult.Error -> { }

owncloudApp/src/main/java/com/owncloud/android/presentation/spaces/members/SpaceMembersViewModel.kt

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,11 @@
2121
package com.owncloud.android.presentation.spaces.members
2222

2323
import androidx.lifecycle.ViewModel
24+
import com.owncloud.android.domain.roles.model.OCRole
2425
import com.owncloud.android.domain.spaces.model.OCSpace
2526
import com.owncloud.android.domain.spaces.model.SpaceMembers
2627
import com.owncloud.android.domain.spaces.usecases.GetSpaceMembersUseCase
28+
import com.owncloud.android.domain.roles.usecases.GetRolesAsyncUseCase
2729
import com.owncloud.android.domain.utils.Event
2830
import com.owncloud.android.extensions.ViewModelExt.runUseCaseWithResult
2931
import com.owncloud.android.presentation.common.UIResult
@@ -32,24 +34,37 @@ import kotlinx.coroutines.flow.MutableStateFlow
3234
import kotlinx.coroutines.flow.StateFlow
3335

3436
class SpaceMembersViewModel(
37+
private val getRolesAsyncUseCase: GetRolesAsyncUseCase,
3538
private val getSpaceMembersUseCase: GetSpaceMembersUseCase,
3639
private val accountName: String,
3740
private val space: OCSpace,
3841
private val coroutineDispatcherProvider: CoroutinesDispatcherProvider
3942
): ViewModel() {
4043

44+
private val _roles = MutableStateFlow<Event<UIResult<List<OCRole>>>?>(null)
45+
val roles: StateFlow<Event<UIResult<List<OCRole>>>?> = _roles
46+
4147
private val _spaceMembers = MutableStateFlow<Event<UIResult<SpaceMembers>>?>(null)
4248
val spaceMembers: StateFlow<Event<UIResult<SpaceMembers>>?> = _spaceMembers
4349

4450
init {
4551
runUseCaseWithResult(
4652
coroutineDispatcher = coroutineDispatcherProvider.io,
47-
flow = _spaceMembers,
48-
useCase = getSpaceMembersUseCase,
49-
useCaseParams = GetSpaceMembersUseCase.Params(accountName = accountName, spaceId = space.id),
53+
flow = _roles,
54+
useCase = getRolesAsyncUseCase,
55+
useCaseParams = GetRolesAsyncUseCase.Params(accountName = accountName),
5056
showLoading = false,
5157
requiresConnection = true
5258
)
5359
}
5460

61+
fun getSpaceMembers() = runUseCaseWithResult(
62+
coroutineDispatcher = coroutineDispatcherProvider.io,
63+
flow = _spaceMembers,
64+
useCase = getSpaceMembersUseCase,
65+
useCaseParams = GetSpaceMembersUseCase.Params(accountName = accountName, spaceId = space.id),
66+
showLoading = false,
67+
requiresConnection = true
68+
)
69+
5570
}

0 commit comments

Comments
 (0)