Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions changelog/unreleased/4728
Original file line number Diff line number Diff line change
Expand Up @@ -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
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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()
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -217,10 +220,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
}
}
Expand All @@ -242,7 +247,9 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
is UIResult.Success -> {
uiResult.data?.let { spacePermissions ->
checkPermissions(spacePermissions)
spaceMembersAdapter.setSpaceMembers(spaceMembers, roles, canRemoveMembers, canEditMembers, numberOfManagers)
if (canReadMembers) {
spaceMembersAdapter.setSpaceMembers(spaceMembers, roles, canRemoveMembers, canEditMembers, numberOfManagers)
}
}
}
is UIResult.Loading -> { }
Expand Down Expand Up @@ -316,13 +323,16 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
}

private fun checkPermissions(spacePermissions: List<String>) {
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
membersListSection.isVisible = canReadMembers
publicLinksSection.isVisible = canReadMembers
}
canRemoveMembers = DRIVES_DELETE_PERMISSION in spacePermissions
canEditMembers = DRIVES_UPDATE_PERMISSION in spacePermissions
}

private fun showOrHideEmptyView(hasLinks: Boolean) {
Expand Down Expand Up @@ -358,8 +368,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,
Expand Down
238 changes: 126 additions & 112 deletions owncloudApp/src/main/res/layout/members_fragment.xml
Original file line number Diff line number Diff line change
Expand Up @@ -30,126 +30,140 @@
android:layout_height="wrap_content"
android:orientation="vertical">

<androidx.constraintlayout.widget.ConstraintLayout
<LinearLayout
android:id="@+id/members_list_section"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/actionbar_start_color">

<TextView
android:id="@+id/members_title"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_centerVertical="true"
android:gravity="center"
android:text="@string/members_title"
android:layout_marginStart="@dimen/standard_half_margin"
android:textAllCaps="true"
android:textColor="@color/white"
android:textStyle="bold"
android:accessibilityHeading="true"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>

<ImageButton
android:id="@+id/add_member_button"
android:layout_width="48dp"
android:layout_height="48dp"
android:padding="@dimen/standard_padding"
android:background="@color/transparent"
android:src="@drawable/ic_add"
android:contentDescription="@string/content_description_add_member"
android:visibility="gone"
android:focusable="true"
android:clickable="true"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible"/>

</androidx.constraintlayout.widget.ConstraintLayout>

<ProgressBar
android:id="@+id/indeterminate_progress_bar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:indeterminate="true"
android:visibility="gone"/>
android:orientation="vertical">

<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/actionbar_start_color">

<TextView
android:id="@+id/members_title"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_centerVertical="true"
android:gravity="center"
android:text="@string/members_title"
android:layout_marginStart="@dimen/standard_half_margin"
android:textAllCaps="true"
android:textColor="@color/white"
android:textStyle="bold"
android:accessibilityHeading="true"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>

<ImageButton
android:id="@+id/add_member_button"
android:layout_width="48dp"
android:layout_height="48dp"
android:padding="@dimen/standard_padding"
android:background="@color/transparent"
android:src="@drawable/ic_add"
android:contentDescription="@string/content_description_add_member"
android:visibility="gone"
android:focusable="true"
android:clickable="true"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible"/>

</androidx.constraintlayout.widget.ConstraintLayout>

<ProgressBar
android:id="@+id/indeterminate_progress_bar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:indeterminate="true"
android:visibility="gone"/>

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/members_recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical"
android:visibility="visible"
tools:visibility="visible"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/members_recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical"/>

<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/actionbar_start_color">
</LinearLayout>

<TextView
android:id="@+id/public_links_title"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_centerVertical="true"
android:gravity="center"
android:text="@string/share_via_link_section_title"
android:layout_marginStart="@dimen/standard_half_margin"
android:textAllCaps="true"
android:textColor="@color/white"
android:textStyle="bold"
android:accessibilityHeading="true"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>

<ImageButton
android:id="@+id/add_public_link_button"
android:layout_width="48dp"
android:layout_height="48dp"
android:padding="@dimen/standard_padding"
android:background="@color/transparent"
android:src="@drawable/ic_add"
android:contentDescription="@string/content_description_add_public_link"
android:visibility="gone"
android:focusable="true"
android:clickable="true"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible"/>

</androidx.constraintlayout.widget.ConstraintLayout>

<TextView
android:id="@+id/public_links_warning"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/warning_background_color"
android:paddingTop="@dimen/standard_padding"
android:paddingBottom="@dimen/standard_padding"
android:paddingStart="@dimen/standard_half_padding"
android:paddingEnd="@dimen/standard_half_padding"
android:text="@string/share_warning_about_forwarding_space_public_links"
android:textColor="@color/warning_grey_text"
android:textSize="15sp" />

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/public_links_recycler_view"
<LinearLayout
android:id="@+id/public_links_section"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical" />
android:orientation="vertical">

<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/actionbar_start_color">

<TextView
android:id="@+id/public_links_title"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_centerVertical="true"
android:gravity="center"
android:text="@string/share_via_link_section_title"
android:layout_marginStart="@dimen/standard_half_margin"
android:textAllCaps="true"
android:textColor="@color/white"
android:textStyle="bold"
android:accessibilityHeading="true"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>

<ImageButton
android:id="@+id/add_public_link_button"
android:layout_width="48dp"
android:layout_height="48dp"
android:padding="@dimen/standard_padding"
android:background="@color/transparent"
android:src="@drawable/ic_add"
android:contentDescription="@string/content_description_add_public_link"
android:visibility="gone"
android:focusable="true"
android:clickable="true"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible"/>

</androidx.constraintlayout.widget.ConstraintLayout>

<TextView
android:id="@+id/no_public_links_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/standard_padding"
android:paddingBottom="@dimen/standard_padding"
android:paddingStart="@dimen/standard_half_padding"
android:paddingEnd="@dimen/standard_half_padding"
android:text="@string/share_no_public_links"
android:textSize="15sp"
android:visibility="gone"/>
<TextView
android:id="@+id/public_links_warning"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/warning_background_color"
android:paddingTop="@dimen/standard_padding"
android:paddingBottom="@dimen/standard_padding"
android:paddingStart="@dimen/standard_half_padding"
android:paddingEnd="@dimen/standard_half_padding"
android:text="@string/share_warning_about_forwarding_space_public_links"
android:textColor="@color/warning_grey_text"
android:textSize="15sp" />

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/public_links_recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical" />

<TextView
android:id="@+id/no_public_links_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/standard_padding"
android:paddingBottom="@dimen/standard_padding"
android:paddingStart="@dimen/standard_half_padding"
android:paddingEnd="@dimen/standard_half_padding"
android:text="@string/share_no_public_links"
android:textSize="15sp"
android:visibility="gone"/>

</LinearLayout>

</LinearLayout>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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"
}
}