diff --git a/changelog/unreleased/4728 b/changelog/unreleased/4728
index 03039472f2e..3e3f53e25b3 100644
--- a/changelog/unreleased/4728
+++ b/changelog/unreleased/4728
@@ -6,7 +6,9 @@ This new option opens a new view that shows information like member names, roles
https://github.com/owncloud/android/issues/4612
https://github.com/owncloud/android/issues/4763
https://github.com/owncloud/android/issues/4772
+https://github.com/owncloud/android/issues/4782
https://github.com/owncloud/android/pull/4728
https://github.com/owncloud/android/pull/4765
https://github.com/owncloud/android/pull/4779
https://github.com/owncloud/android/pull/4784
+https://github.com/owncloud/android/pull/4809
diff --git a/owncloudApp/src/main/java/com/owncloud/android/presentation/spaces/members/SpaceMembersFragment.kt b/owncloudApp/src/main/java/com/owncloud/android/presentation/spaces/members/SpaceMembersFragment.kt
index 4ea5d250ba7..0a757a1d3db 100644
--- a/owncloudApp/src/main/java/com/owncloud/android/presentation/spaces/members/SpaceMembersFragment.kt
+++ b/owncloudApp/src/main/java/com/owncloud/android/presentation/spaces/members/SpaceMembersFragment.kt
@@ -72,6 +72,7 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
private var listener: SpaceMemberFragmentListener? = null
private var canRemoveMembers = false
private var canEditMembers = false
+ private var canReadMembers = false
private var numberOfManagers = 1
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
@@ -98,6 +99,7 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
savedInstanceState?.let {
canRemoveMembers = it.getBoolean(CAN_REMOVE_MEMBERS, false)
canEditMembers = it.getBoolean(CAN_EDIT_MEMBERS, false)
+ canReadMembers = it.getBoolean(CAN_READ_MEMBERS, false)
}
subscribeToViewModels()
@@ -138,6 +140,7 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
super.onSaveInstanceState(outState)
outState.putBoolean(CAN_REMOVE_MEMBERS, canRemoveMembers)
outState.putBoolean(CAN_EDIT_MEMBERS, canEditMembers)
+ outState.putBoolean(CAN_READ_MEMBERS, canReadMembers)
}
override fun onRemoveMember(spaceMember: SpaceMember) {
@@ -166,6 +169,15 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
}
private fun subscribeToViewModels() {
+ observeRoles()
+ observeSpaceMembers()
+ observeSpacePermissions()
+ observeAddMemberResult()
+ observeRemoveMemberResult()
+ observeEditMemberResult()
+ }
+
+ private fun observeRoles() {
collectLatestLifecycleFlow(spaceMembersViewModel.roles) { event ->
event?.let {
when (val uiResult = event.peekContent()) {
@@ -182,7 +194,9 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
}
}
}
+ }
+ private fun observeSpaceMembers() {
collectLatestLifecycleFlow(spaceMembersViewModel.spaceMembers) { event ->
event?.let {
when (val uiResult = event.peekContent()) {
@@ -193,10 +207,12 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
spaceMember.roles.contains(OCRoleType.toString(OCRoleType.CAN_MANAGE)) }
spaceMembers = it.members
addMemberRoles = it.roles
- spaceMembersAdapter.setSpaceMembers(spaceMembers, roles, canRemoveMembers, canEditMembers, numberOfManagers)
- val hasLinks = it.links.isNotEmpty()
- showOrHideEmptyView(hasLinks)
- if (hasLinks) { showSpaceLinks(it.links) }
+ if (canReadMembers) {
+ spaceMembersAdapter.setSpaceMembers(spaceMembers, roles, canRemoveMembers, canEditMembers, numberOfManagers)
+ val hasLinks = it.links.isNotEmpty()
+ showOrHideEmptyView(hasLinks)
+ if (hasLinks) { showSpaceLinks(it.links) }
+ }
binding.indeterminateProgressBar.isVisible = false
}
}
@@ -209,7 +225,9 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
}
}
}
+ }
+ private fun observeSpacePermissions() {
collectLatestLifecycleFlow(spaceMembersViewModel.spacePermissions) { event ->
event?.let {
when (val uiResult = event.peekContent()) {
@@ -218,7 +236,12 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
binding.addMemberButton.isVisible = DRIVES_CREATE_PERMISSION in spacePermissions
canRemoveMembers = DRIVES_DELETE_PERMISSION in spacePermissions
canEditMembers = DRIVES_UPDATE_PERMISSION in spacePermissions
- spaceMembersAdapter.setSpaceMembers(spaceMembers, roles, canRemoveMembers, canEditMembers, numberOfManagers)
+ canReadMembers = DRIVES_READ_PERMISSION in spacePermissions
+ binding.membersListSection.isVisible = canReadMembers
+ binding.publicLinksSection.isVisible = canReadMembers
+ if (canReadMembers) {
+ spaceMembersAdapter.setSpaceMembers(spaceMembers, roles, canRemoveMembers, canEditMembers, numberOfManagers)
+ }
}
}
is UIResult.Loading -> { }
@@ -228,7 +251,9 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
}
}
}
+ }
+ private fun observeAddMemberResult() {
collectLatestLifecycleFlow(spaceMembersViewModel.addMemberResultFlow) { event ->
event?.peekContent()?.let { uiResult ->
when (uiResult) {
@@ -241,7 +266,9 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
}
}
}
+ }
+ private fun observeRemoveMemberResult() {
collectLatestLifecycleFlow(spaceMembersViewModel.removeMemberResultFlow) { uiResult ->
when (uiResult) {
is UIResult.Loading -> { }
@@ -255,7 +282,9 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
}
}
}
+ }
+ private fun observeEditMemberResult() {
collectLatestLifecycleFlow(spaceMembersViewModel.editMemberResultFlow) { event ->
event?.peekContent()?.let { uiResult ->
when (uiResult) {
@@ -302,8 +331,10 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
private const val DRIVES_CREATE_PERMISSION = "libre.graph/driveItem/permissions/create"
private const val DRIVES_DELETE_PERMISSION = "libre.graph/driveItem/permissions/delete"
private const val DRIVES_UPDATE_PERMISSION = "libre.graph/driveItem/permissions/update"
+ private const val DRIVES_READ_PERMISSION = "libre.graph/driveItem/permissions/read"
private const val CAN_REMOVE_MEMBERS = "CAN_REMOVE_MEMBERS"
private const val CAN_EDIT_MEMBERS = "CAN_EDIT_MEMBERS"
+ private const val CAN_READ_MEMBERS = "CAN_READ_MEMBERS"
fun newInstance(
accountName: String,
diff --git a/owncloudApp/src/main/res/layout/members_fragment.xml b/owncloudApp/src/main/res/layout/members_fragment.xml
index 9331537adf5..95690dee1a7 100644
--- a/owncloudApp/src/main/res/layout/members_fragment.xml
+++ b/owncloudApp/src/main/res/layout/members_fragment.xml
@@ -30,111 +30,125 @@
android:layout_height="wrap_content"
android:orientation="vertical">
-
-
-
-
-
-
-
-
-
+ android:orientation="vertical">
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
-
-
-
-
-
-
+ android:orientation="vertical">
+
+
+
+
+
+
-
+
+
+
+
+
+
+
diff --git a/owncloudDomain/src/main/java/com/owncloud/android/domain/spaces/usecases/FilterSpaceMenuOptionsUseCase.kt b/owncloudDomain/src/main/java/com/owncloud/android/domain/spaces/usecases/FilterSpaceMenuOptionsUseCase.kt
index dd14799491f..3bce4cbcdee 100644
--- a/owncloudDomain/src/main/java/com/owncloud/android/domain/spaces/usecases/FilterSpaceMenuOptionsUseCase.kt
+++ b/owncloudDomain/src/main/java/com/owncloud/android/domain/spaces/usecases/FilterSpaceMenuOptionsUseCase.kt
@@ -45,11 +45,7 @@ class FilterSpaceMenuOptionsUseCase(
val editImagePermission = hasSpacePermission(spacePermissionsResult, DRIVES_MANAGE_PERMISSION)
- val membersPermission = hasSpacePermission(spacePermissionsResult, DRIVES_READ_PERMISSION)
-
- if (membersPermission) {
- optionsToShow.add(SpaceMenuOption.MEMBERS)
- }
+ optionsToShow.add(SpaceMenuOption.MEMBERS)
if (editPermission || (isSpaceManager && currentSpace.isDisabled)) {
optionsToShow.add(SpaceMenuOption.EDIT)
@@ -87,7 +83,6 @@ class FilterSpaceMenuOptionsUseCase(
companion object {
private const val DRIVES_MANAGE_PERMISSION = "libre.graph/driveItem/permissions/update"
private const val DRIVES_DELETE_PERMISSION = "libre.graph/driveItem/permissions/delete"
- private const val DRIVES_READ_PERMISSION = "libre.graph/driveItem/permissions/read"
private const val DRIVES_MANAGER_ROLE = "manager"
}
}