Skip to content

Commit 04e6cc6

Browse files
authored
Merge pull request #4809 from corevibe555/fix/apply-read-permission-to-the-list-of-members
[FIX] Apply read permission to the list of members instead of the main option
2 parents a666d1e + 0131382 commit 04e6cc6

File tree

4 files changed

+149
-126
lines changed

4 files changed

+149
-126
lines changed

changelog/unreleased/4728

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ This new option opens a new view that shows information like member names, roles
66
https://github.com/owncloud/android/issues/4612
77
https://github.com/owncloud/android/issues/4763
88
https://github.com/owncloud/android/issues/4772
9+
https://github.com/owncloud/android/issues/4782
910
https://github.com/owncloud/android/pull/4728
1011
https://github.com/owncloud/android/pull/4765
1112
https://github.com/owncloud/android/pull/4779
1213
https://github.com/owncloud/android/pull/4784
14+
https://github.com/owncloud/android/pull/4809

owncloudApp/src/main/java/com/owncloud/android/presentation/spaces/members/SpaceMembersFragment.kt

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
7979
private var listener: SpaceMemberFragmentListener? = null
8080
private var canRemoveMembers = false
8181
private var canEditMembers = false
82+
private var canReadMembers = false
8283
private var numberOfManagers = 1
8384

8485
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
@@ -105,6 +106,7 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
105106
savedInstanceState?.let {
106107
canRemoveMembers = it.getBoolean(CAN_REMOVE_MEMBERS, false)
107108
canEditMembers = it.getBoolean(CAN_EDIT_MEMBERS, false)
109+
canReadMembers = it.getBoolean(CAN_READ_MEMBERS, false)
108110
}
109111

110112
subscribeToViewModels()
@@ -150,6 +152,7 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
150152
super.onSaveInstanceState(outState)
151153
outState.putBoolean(CAN_REMOVE_MEMBERS, canRemoveMembers)
152154
outState.putBoolean(CAN_EDIT_MEMBERS, canEditMembers)
155+
outState.putBoolean(CAN_READ_MEMBERS, canReadMembers)
153156
}
154157

155158
override fun onRemoveMember(spaceMember: SpaceMember) {
@@ -217,10 +220,12 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
217220
spaceMember.roles.contains(OCRoleType.toString(OCRoleType.CAN_MANAGE)) }
218221
spaceMembers = it.members
219222
addMemberRoles = it.roles
220-
spaceMembersAdapter.setSpaceMembers(spaceMembers, roles, canRemoveMembers, canEditMembers, numberOfManagers)
221-
val hasLinks = it.links.isNotEmpty()
222-
showOrHideEmptyView(hasLinks)
223-
if (hasLinks) { showSpaceLinks(it.links) }
223+
if (canReadMembers) {
224+
spaceMembersAdapter.setSpaceMembers(spaceMembers, roles, canRemoveMembers, canEditMembers, numberOfManagers)
225+
val hasLinks = it.links.isNotEmpty()
226+
showOrHideEmptyView(hasLinks)
227+
if (hasLinks) { showSpaceLinks(it.links) }
228+
}
224229
binding.indeterminateProgressBar.isVisible = false
225230
}
226231
}
@@ -242,7 +247,9 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
242247
is UIResult.Success -> {
243248
uiResult.data?.let { spacePermissions ->
244249
checkPermissions(spacePermissions)
245-
spaceMembersAdapter.setSpaceMembers(spaceMembers, roles, canRemoveMembers, canEditMembers, numberOfManagers)
250+
if (canReadMembers) {
251+
spaceMembersAdapter.setSpaceMembers(spaceMembers, roles, canRemoveMembers, canEditMembers, numberOfManagers)
252+
}
246253
}
247254
}
248255
is UIResult.Loading -> { }
@@ -316,13 +323,16 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
316323
}
317324

318325
private fun checkPermissions(spacePermissions: List<String>) {
326+
val hasCreatePermission = DRIVES_CREATE_PERMISSION in spacePermissions
327+
canRemoveMembers = DRIVES_DELETE_PERMISSION in spacePermissions
328+
canEditMembers = DRIVES_UPDATE_PERMISSION in spacePermissions
329+
canReadMembers = DRIVES_READ_PERMISSION in spacePermissions
319330
binding.apply {
320-
val hasCreatePermission = DRIVES_CREATE_PERMISSION in spacePermissions
321331
addMemberButton.isVisible = hasCreatePermission
322332
addPublicLinkButton.isVisible = hasCreatePermission
333+
membersListSection.isVisible = canReadMembers
334+
publicLinksSection.isVisible = canReadMembers
323335
}
324-
canRemoveMembers = DRIVES_DELETE_PERMISSION in spacePermissions
325-
canEditMembers = DRIVES_UPDATE_PERMISSION in spacePermissions
326336
}
327337

328338
private fun showOrHideEmptyView(hasLinks: Boolean) {
@@ -358,8 +368,10 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
358368
private const val DRIVES_CREATE_PERMISSION = "libre.graph/driveItem/permissions/create"
359369
private const val DRIVES_DELETE_PERMISSION = "libre.graph/driveItem/permissions/delete"
360370
private const val DRIVES_UPDATE_PERMISSION = "libre.graph/driveItem/permissions/update"
371+
private const val DRIVES_READ_PERMISSION = "libre.graph/driveItem/permissions/read"
361372
private const val CAN_REMOVE_MEMBERS = "CAN_REMOVE_MEMBERS"
362373
private const val CAN_EDIT_MEMBERS = "CAN_EDIT_MEMBERS"
374+
private const val CAN_READ_MEMBERS = "CAN_READ_MEMBERS"
363375

364376
fun newInstance(
365377
accountName: String,

owncloudApp/src/main/res/layout/members_fragment.xml

Lines changed: 126 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -30,126 +30,140 @@
3030
android:layout_height="wrap_content"
3131
android:orientation="vertical">
3232

33-
<androidx.constraintlayout.widget.ConstraintLayout
33+
<LinearLayout
34+
android:id="@+id/members_list_section"
3435
android:layout_width="match_parent"
35-
android:layout_height="match_parent"
36-
android:background="@color/actionbar_start_color">
37-
38-
<TextView
39-
android:id="@+id/members_title"
40-
android:layout_width="wrap_content"
41-
android:layout_height="50dp"
42-
android:layout_centerVertical="true"
43-
android:gravity="center"
44-
android:text="@string/members_title"
45-
android:layout_marginStart="@dimen/standard_half_margin"
46-
android:textAllCaps="true"
47-
android:textColor="@color/white"
48-
android:textStyle="bold"
49-
android:accessibilityHeading="true"
50-
app:layout_constraintStart_toStartOf="parent"
51-
app:layout_constraintTop_toTopOf="parent"/>
52-
53-
<ImageButton
54-
android:id="@+id/add_member_button"
55-
android:layout_width="48dp"
56-
android:layout_height="48dp"
57-
android:padding="@dimen/standard_padding"
58-
android:background="@color/transparent"
59-
android:src="@drawable/ic_add"
60-
android:contentDescription="@string/content_description_add_member"
61-
android:visibility="gone"
62-
android:focusable="true"
63-
android:clickable="true"
64-
app:layout_constraintEnd_toEndOf="parent"
65-
app:layout_constraintTop_toTopOf="parent"
66-
tools:visibility="visible"/>
67-
68-
</androidx.constraintlayout.widget.ConstraintLayout>
69-
70-
<ProgressBar
71-
android:id="@+id/indeterminate_progress_bar"
72-
android:layout_width="wrap_content"
7336
android:layout_height="wrap_content"
74-
android:layout_gravity="center"
75-
android:indeterminate="true"
76-
android:visibility="gone"/>
37+
android:orientation="vertical">
38+
39+
<androidx.constraintlayout.widget.ConstraintLayout
40+
android:layout_width="match_parent"
41+
android:layout_height="match_parent"
42+
android:background="@color/actionbar_start_color">
43+
44+
<TextView
45+
android:id="@+id/members_title"
46+
android:layout_width="wrap_content"
47+
android:layout_height="50dp"
48+
android:layout_centerVertical="true"
49+
android:gravity="center"
50+
android:text="@string/members_title"
51+
android:layout_marginStart="@dimen/standard_half_margin"
52+
android:textAllCaps="true"
53+
android:textColor="@color/white"
54+
android:textStyle="bold"
55+
android:accessibilityHeading="true"
56+
app:layout_constraintStart_toStartOf="parent"
57+
app:layout_constraintTop_toTopOf="parent"/>
58+
59+
<ImageButton
60+
android:id="@+id/add_member_button"
61+
android:layout_width="48dp"
62+
android:layout_height="48dp"
63+
android:padding="@dimen/standard_padding"
64+
android:background="@color/transparent"
65+
android:src="@drawable/ic_add"
66+
android:contentDescription="@string/content_description_add_member"
67+
android:visibility="gone"
68+
android:focusable="true"
69+
android:clickable="true"
70+
app:layout_constraintEnd_toEndOf="parent"
71+
app:layout_constraintTop_toTopOf="parent"
72+
tools:visibility="visible"/>
73+
74+
</androidx.constraintlayout.widget.ConstraintLayout>
75+
76+
<ProgressBar
77+
android:id="@+id/indeterminate_progress_bar"
78+
android:layout_width="wrap_content"
79+
android:layout_height="wrap_content"
80+
android:layout_gravity="center"
81+
android:indeterminate="true"
82+
android:visibility="gone"/>
7783

78-
<androidx.recyclerview.widget.RecyclerView
79-
android:id="@+id/members_recycler_view"
80-
android:layout_width="match_parent"
81-
android:layout_height="wrap_content"
82-
android:scrollbars="vertical"
83-
android:visibility="visible"
84-
tools:visibility="visible"/>
84+
<androidx.recyclerview.widget.RecyclerView
85+
android:id="@+id/members_recycler_view"
86+
android:layout_width="match_parent"
87+
android:layout_height="wrap_content"
88+
android:scrollbars="vertical"/>
8589

86-
<androidx.constraintlayout.widget.ConstraintLayout
87-
android:layout_width="match_parent"
88-
android:layout_height="match_parent"
89-
android:background="@color/actionbar_start_color">
90+
</LinearLayout>
9091

91-
<TextView
92-
android:id="@+id/public_links_title"
93-
android:layout_width="wrap_content"
94-
android:layout_height="50dp"
95-
android:layout_centerVertical="true"
96-
android:gravity="center"
97-
android:text="@string/share_via_link_section_title"
98-
android:layout_marginStart="@dimen/standard_half_margin"
99-
android:textAllCaps="true"
100-
android:textColor="@color/white"
101-
android:textStyle="bold"
102-
android:accessibilityHeading="true"
103-
app:layout_constraintStart_toStartOf="parent"
104-
app:layout_constraintTop_toTopOf="parent"/>
105-
106-
<ImageButton
107-
android:id="@+id/add_public_link_button"
108-
android:layout_width="48dp"
109-
android:layout_height="48dp"
110-
android:padding="@dimen/standard_padding"
111-
android:background="@color/transparent"
112-
android:src="@drawable/ic_add"
113-
android:contentDescription="@string/content_description_add_public_link"
114-
android:visibility="gone"
115-
android:focusable="true"
116-
android:clickable="true"
117-
app:layout_constraintEnd_toEndOf="parent"
118-
app:layout_constraintTop_toTopOf="parent"
119-
tools:visibility="visible"/>
120-
121-
</androidx.constraintlayout.widget.ConstraintLayout>
122-
123-
<TextView
124-
android:id="@+id/public_links_warning"
125-
android:layout_width="match_parent"
126-
android:layout_height="wrap_content"
127-
android:background="@color/warning_background_color"
128-
android:paddingTop="@dimen/standard_padding"
129-
android:paddingBottom="@dimen/standard_padding"
130-
android:paddingStart="@dimen/standard_half_padding"
131-
android:paddingEnd="@dimen/standard_half_padding"
132-
android:text="@string/share_warning_about_forwarding_space_public_links"
133-
android:textColor="@color/warning_grey_text"
134-
android:textSize="15sp" />
135-
136-
<androidx.recyclerview.widget.RecyclerView
137-
android:id="@+id/public_links_recycler_view"
92+
<LinearLayout
93+
android:id="@+id/public_links_section"
13894
android:layout_width="match_parent"
13995
android:layout_height="wrap_content"
140-
android:scrollbars="vertical" />
96+
android:orientation="vertical">
97+
98+
<androidx.constraintlayout.widget.ConstraintLayout
99+
android:layout_width="match_parent"
100+
android:layout_height="match_parent"
101+
android:background="@color/actionbar_start_color">
102+
103+
<TextView
104+
android:id="@+id/public_links_title"
105+
android:layout_width="wrap_content"
106+
android:layout_height="50dp"
107+
android:layout_centerVertical="true"
108+
android:gravity="center"
109+
android:text="@string/share_via_link_section_title"
110+
android:layout_marginStart="@dimen/standard_half_margin"
111+
android:textAllCaps="true"
112+
android:textColor="@color/white"
113+
android:textStyle="bold"
114+
android:accessibilityHeading="true"
115+
app:layout_constraintStart_toStartOf="parent"
116+
app:layout_constraintTop_toTopOf="parent"/>
117+
118+
<ImageButton
119+
android:id="@+id/add_public_link_button"
120+
android:layout_width="48dp"
121+
android:layout_height="48dp"
122+
android:padding="@dimen/standard_padding"
123+
android:background="@color/transparent"
124+
android:src="@drawable/ic_add"
125+
android:contentDescription="@string/content_description_add_public_link"
126+
android:visibility="gone"
127+
android:focusable="true"
128+
android:clickable="true"
129+
app:layout_constraintEnd_toEndOf="parent"
130+
app:layout_constraintTop_toTopOf="parent"
131+
tools:visibility="visible"/>
132+
133+
</androidx.constraintlayout.widget.ConstraintLayout>
141134

142-
<TextView
143-
android:id="@+id/no_public_links_message"
144-
android:layout_width="match_parent"
145-
android:layout_height="wrap_content"
146-
android:paddingTop="@dimen/standard_padding"
147-
android:paddingBottom="@dimen/standard_padding"
148-
android:paddingStart="@dimen/standard_half_padding"
149-
android:paddingEnd="@dimen/standard_half_padding"
150-
android:text="@string/share_no_public_links"
151-
android:textSize="15sp"
152-
android:visibility="gone"/>
135+
<TextView
136+
android:id="@+id/public_links_warning"
137+
android:layout_width="match_parent"
138+
android:layout_height="wrap_content"
139+
android:background="@color/warning_background_color"
140+
android:paddingTop="@dimen/standard_padding"
141+
android:paddingBottom="@dimen/standard_padding"
142+
android:paddingStart="@dimen/standard_half_padding"
143+
android:paddingEnd="@dimen/standard_half_padding"
144+
android:text="@string/share_warning_about_forwarding_space_public_links"
145+
android:textColor="@color/warning_grey_text"
146+
android:textSize="15sp" />
147+
148+
<androidx.recyclerview.widget.RecyclerView
149+
android:id="@+id/public_links_recycler_view"
150+
android:layout_width="match_parent"
151+
android:layout_height="wrap_content"
152+
android:scrollbars="vertical" />
153+
154+
<TextView
155+
android:id="@+id/no_public_links_message"
156+
android:layout_width="match_parent"
157+
android:layout_height="wrap_content"
158+
android:paddingTop="@dimen/standard_padding"
159+
android:paddingBottom="@dimen/standard_padding"
160+
android:paddingStart="@dimen/standard_half_padding"
161+
android:paddingEnd="@dimen/standard_half_padding"
162+
android:text="@string/share_no_public_links"
163+
android:textSize="15sp"
164+
android:visibility="gone"/>
165+
166+
</LinearLayout>
153167

154168
</LinearLayout>
155169

owncloudDomain/src/main/java/com/owncloud/android/domain/spaces/usecases/FilterSpaceMenuOptionsUseCase.kt

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,7 @@ class FilterSpaceMenuOptionsUseCase(
4545

4646
val editImagePermission = hasSpacePermission(spacePermissionsResult, DRIVES_MANAGE_PERMISSION)
4747

48-
val membersPermission = hasSpacePermission(spacePermissionsResult, DRIVES_READ_PERMISSION)
49-
50-
if (membersPermission) {
51-
optionsToShow.add(SpaceMenuOption.MEMBERS)
52-
}
48+
optionsToShow.add(SpaceMenuOption.MEMBERS)
5349

5450
if (editPermission || (isSpaceManager && currentSpace.isDisabled)) {
5551
optionsToShow.add(SpaceMenuOption.EDIT)
@@ -87,7 +83,6 @@ class FilterSpaceMenuOptionsUseCase(
8783
companion object {
8884
private const val DRIVES_MANAGE_PERMISSION = "libre.graph/driveItem/permissions/update"
8985
private const val DRIVES_DELETE_PERMISSION = "libre.graph/driveItem/permissions/delete"
90-
private const val DRIVES_READ_PERMISSION = "libre.graph/driveItem/permissions/read"
9186
private const val DRIVES_MANAGER_ROLE = "manager"
9287
}
9388
}

0 commit comments

Comments
 (0)