From 8f8a0373c8db195db349d9f3c105698279e2ea19 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 | 22 ++++++++++++++----- .../usecases/FilterSpaceMenuOptionsUseCase.kt | 7 +----- 2 files changed, 17 insertions(+), 12 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 234e20ae2d1..6d96124e965 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 @@ -79,6 +79,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 { @@ -105,6 +106,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() @@ -150,6 +152,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) { @@ -217,7 +220,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) } @@ -242,7 +246,6 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter is UIResult.Success -> { uiResult.data?.let { spacePermissions -> checkPermissions(spacePermissions) - spaceMembersAdapter.setSpaceMembers(spaceMembers, roles, canRemoveMembers, canEditMembers, numberOfManagers) } } is UIResult.Loading -> { } @@ -316,13 +319,18 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter } private fun checkPermissions(spacePermissions: List) { + val hasCreatePermission = DRIVES_CREATE_PERMISSION in spacePermissions + canRemoveMembers = DRIVES_DELETE_PERMISSION in spacePermissions + canEditMembers = DRIVES_UPDATE_PERMISSION in spacePermissions + canReadMembers = DRIVES_READ_PERMISSION in spacePermissions binding.apply { - val hasCreatePermission = DRIVES_CREATE_PERMISSION in spacePermissions addMemberButton.isVisible = hasCreatePermission - addPublicLinkButton.isVisible = hasCreatePermission + addPublicLinkButton.isVisible = hasCreatePermission && canReadMembers + membersListSection.isVisible = canReadMembers + publicLinksSection.isVisible = canReadMembers } - canRemoveMembers = DRIVES_DELETE_PERMISSION in spacePermissions - canEditMembers = DRIVES_UPDATE_PERMISSION in spacePermissions + val membersForList = if (canReadMembers) spaceMembers else emptyList() + spaceMembersAdapter.setSpaceMembers(membersForList, roles, canRemoveMembers, canEditMembers, numberOfManagers) } private fun showOrHideEmptyView(hasLinks: Boolean) { @@ -358,8 +366,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 9e9e73a5c0e0c4b495c44c3c553f53b754ef9620 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 01313825b29784a4e1cf51c4980d5b496aca9a74 Mon Sep 17 00:00:00 2001 From: corevibe555 Date: Mon, 30 Mar 2026 12:04:16 +0200 Subject: [PATCH 3/3] fix: hide public links when there is no read permission fix: remove updateToolbarTitle() as this is not in the requirement fix: keep simple UX refactor: remove updateMembersLoadingProgressVisibility refactor: resolve code review comment feedback fix: remove redundant properties fix: hide public links when there is no read permission fix: remove updateToolbarTitle() as this is not in the requirement fix: keep simple UX refactor: remove updateMembersLoadingProgressVisibility refactor: resolve code review comment feedback fix: remove redundant properties fix: resolve conflicts Made-with: Cursor fix: review feedback fix --- .../spaces/members/SpaceMembersFragment.kt | 18 +- .../src/main/res/layout/members_fragment.xml | 238 +++++++++--------- 2 files changed, 136 insertions(+), 120 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 6d96124e965..7c3cd1e0466 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 @@ -220,11 +220,12 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter spaceMember.roles.contains(OCRoleType.toString(OCRoleType.CAN_MANAGE)) } spaceMembers = it.members addMemberRoles = it.roles - 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) } + 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 } } @@ -246,6 +247,9 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter is UIResult.Success -> { uiResult.data?.let { spacePermissions -> checkPermissions(spacePermissions) + if (canReadMembers) { + spaceMembersAdapter.setSpaceMembers(spaceMembers, roles, canRemoveMembers, canEditMembers, numberOfManagers) + } } } is UIResult.Loading -> { } @@ -325,12 +329,10 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter canReadMembers = DRIVES_READ_PERMISSION in spacePermissions binding.apply { addMemberButton.isVisible = hasCreatePermission - addPublicLinkButton.isVisible = hasCreatePermission && canReadMembers + addPublicLinkButton.isVisible = hasCreatePermission membersListSection.isVisible = canReadMembers publicLinksSection.isVisible = canReadMembers } - val membersForList = if (canReadMembers) spaceMembers else emptyList() - spaceMembersAdapter.setSpaceMembers(membersForList, roles, canRemoveMembers, canEditMembers, numberOfManagers) } private fun showOrHideEmptyView(hasLinks: Boolean) { diff --git a/owncloudApp/src/main/res/layout/members_fragment.xml b/owncloudApp/src/main/res/layout/members_fragment.xml index f56c56796d8..f3b99a760e8 100644 --- a/owncloudApp/src/main/res/layout/members_fragment.xml +++ b/owncloudApp/src/main/res/layout/members_fragment.xml @@ -30,126 +30,140 @@ android:layout_height="wrap_content" android:orientation="vertical"> - - - - - - - - - + android:orientation="vertical"> + + + + + + + + + + - + - + - - - - - - - - - + android:orientation="vertical"> + + + + + + + + - + + + + + + +