From e33a62bdb162202b5db9ea20186105a85f0b4b77 Mon Sep 17 00:00:00 2001 From: corevibe555 Date: Sat, 21 Mar 2026 16:39:30 +0100 Subject: [PATCH 1/3] fix: show members menu without permissions/read by removing DRIVES_READ_PERMISSION check Made-with: Cursor --- .../spaces/members/SpaceMembersFragment.kt | 14 ++++++++++++-- .../usecases/FilterSpaceMenuOptionsUseCase.kt | 7 +------ 2 files changed, 13 insertions(+), 8 deletions(-) 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..485bb8f8545 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,7 +99,9 @@ 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) } + binding.membersRecyclerView.isVisible = canReadMembers subscribeToViewModels() @@ -138,6 +141,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) { @@ -193,7 +197,8 @@ 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 membersForList = if (canReadMembers) spaceMembers else emptyList() + spaceMembersAdapter.setSpaceMembers(membersForList, roles, canRemoveMembers, canEditMembers, numberOfManagers) val hasLinks = it.links.isNotEmpty() showOrHideEmptyView(hasLinks) if (hasLinks) { showSpaceLinks(it.links) } @@ -218,7 +223,10 @@ 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.membersRecyclerView.isVisible = canReadMembers + val membersForList = if (canReadMembers) spaceMembers else emptyList() + spaceMembersAdapter.setSpaceMembers(membersForList, roles, canRemoveMembers, canEditMembers, numberOfManagers) } } is UIResult.Loading -> { } @@ -302,8 +310,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/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" } } From a4c0d227d59584467cdd735eff3b88f2b846a4b6 Mon Sep 17 00:00:00 2001 From: corevibe555 Date: Mon, 23 Mar 2026 12:58:28 +0100 Subject: [PATCH 2/3] chore: add changelog Made-with: Cursor --- changelog/unreleased/4728 | 2 ++ 1 file changed, 2 insertions(+) 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 From bf812a9ee6fc60022c49d632d4b875f2bb446e04 Mon Sep 17 00:00:00 2001 From: corevibe555 Date: Mon, 23 Mar 2026 13:05:41 +0100 Subject: [PATCH 3/3] refactor: resolve Detekt issue Made-with: Cursor --- .../spaces/members/SpaceMembersFragment.kt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) 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 485bb8f8545..c4412afd4ff 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 @@ -170,6 +170,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()) { @@ -186,7 +195,9 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter } } } + } + private fun observeSpaceMembers() { collectLatestLifecycleFlow(spaceMembersViewModel.spaceMembers) { event -> event?.let { when (val uiResult = event.peekContent()) { @@ -214,7 +225,9 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter } } } + } + private fun observeSpacePermissions() { collectLatestLifecycleFlow(spaceMembersViewModel.spacePermissions) { event -> event?.let { when (val uiResult = event.peekContent()) { @@ -236,7 +249,9 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter } } } + } + private fun observeAddMemberResult() { collectLatestLifecycleFlow(spaceMembersViewModel.addMemberResultFlow) { event -> event?.peekContent()?.let { uiResult -> when (uiResult) { @@ -249,7 +264,9 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter } } } + } + private fun observeRemoveMemberResult() { collectLatestLifecycleFlow(spaceMembersViewModel.removeMemberResultFlow) { uiResult -> when (uiResult) { is UIResult.Loading -> { } @@ -263,7 +280,9 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter } } } + } + private fun observeEditMemberResult() { collectLatestLifecycleFlow(spaceMembersViewModel.editMemberResultFlow) { event -> event?.peekContent()?.let { uiResult -> when (uiResult) {