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" } }