Skip to content

Commit e95ebb0

Browse files
committed
feat: show trash bin button for removing space public links
1 parent 2372758 commit e95ebb0

3 files changed

Lines changed: 58 additions & 15 deletions

File tree

owncloudApp/src/main/java/com/owncloud/android/presentation/spaces/links/SpaceLinksAdapter.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class SpaceLinksAdapter(
3838
): RecyclerView.Adapter<SpaceLinksAdapter.SpaceLinksViewHolder>() {
3939

4040
private var spaceLinks: List<OCLink> = emptyList()
41+
private var canRemoveLinks = false
4142

4243
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SpaceLinksViewHolder {
4344
val inflater = LayoutInflater.from(parent.context)
@@ -69,12 +70,21 @@ class SpaceLinksAdapter(
6970
listener.onCopyOrSendPublicLink(spaceLink.webUrl)
7071
}
7172
}
73+
74+
removePublicLinkButton.apply {
75+
contentDescription = holder.itemView.context.getString(R.string.content_description_delete_public_link, spaceLink.displayName)
76+
isVisible = canRemoveLinks
77+
setOnClickListener {
78+
listener.onRemovePublicLink(spaceLink.id)
79+
}
80+
}
7281
}
7382
}
7483

7584
override fun getItemCount(): Int = spaceLinks.size
7685

77-
fun setSpaceLinks(spaceLinks: List<OCLink>) {
86+
fun setSpaceLinks(spaceLinks: List<OCLink>, canRemoveLinks: Boolean) {
87+
this.canRemoveLinks = canRemoveLinks
7888
val diffCallback = SpaceLinksDiffUtil(this.spaceLinks, spaceLinks)
7989
val diffResult = DiffUtil.calculateDiff(diffCallback)
8090
this.spaceLinks = spaceLinks
@@ -87,5 +97,6 @@ class SpaceLinksAdapter(
8797

8898
interface SpaceLinksAdapterListener {
8999
fun onCopyOrSendPublicLink(publicLinkUrl: String)
100+
fun onRemovePublicLink(publicLinkId: String)
90101
}
91102
}

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

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
7777
private var addMemberRoles: List<OCRole> = emptyList()
7878
private var spaceMembers: List<SpaceMember> = emptyList()
7979
private var listener: SpaceMemberFragmentListener? = null
80-
private var canRemoveMembers = false
80+
private var canRemoveMembersAndLinks = false
8181
private var canEditMembers = false
8282
private var canReadMembers = false
8383
private var numberOfManagers = 1
@@ -109,7 +109,7 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
109109

110110
currentSpace = requireArguments().getParcelable<OCSpace>(ARG_CURRENT_SPACE) ?: return
111111
savedInstanceState?.let {
112-
canRemoveMembers = it.getBoolean(CAN_REMOVE_MEMBERS, false)
112+
canRemoveMembersAndLinks = it.getBoolean(CAN_REMOVE_MEMBERS, false)
113113
canEditMembers = it.getBoolean(CAN_EDIT_MEMBERS, false)
114114
canReadMembers = it.getBoolean(CAN_READ_MEMBERS, false)
115115
}
@@ -155,7 +155,7 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
155155

156156
override fun onSaveInstanceState(outState: Bundle) {
157157
super.onSaveInstanceState(outState)
158-
outState.putBoolean(CAN_REMOVE_MEMBERS, canRemoveMembers)
158+
outState.putBoolean(CAN_REMOVE_MEMBERS, canRemoveMembersAndLinks)
159159
outState.putBoolean(CAN_EDIT_MEMBERS, canEditMembers)
160160
outState.putBoolean(CAN_READ_MEMBERS, canReadMembers)
161161
}
@@ -185,6 +185,10 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
185185
listener?.copyOrSendPublicLink(publicLinkUrl, currentSpace.name)
186186
}
187187

188+
override fun onRemovePublicLink(publicLinkId: String) {
189+
190+
}
191+
188192
private fun subscribeToViewModels() {
189193
observeRoles()
190194
observeSpaceMembers()
@@ -226,7 +230,13 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
226230
spaceMembers = it.members
227231
addMemberRoles = it.roles
228232
if (canReadMembers) {
229-
spaceMembersAdapter.setSpaceMembers(spaceMembers, roles, canRemoveMembers, canEditMembers, numberOfManagers)
233+
spaceMembersAdapter.setSpaceMembers(
234+
spaceMembers = spaceMembers,
235+
roles = roles,
236+
canRemoveMembers = canRemoveMembersAndLinks,
237+
canEditMembers = canEditMembers,
238+
numberOfManagers = numberOfManagers
239+
)
230240
val hasLinks = it.links.isNotEmpty()
231241
showOrHideEmptyView(hasLinks)
232242
if (hasLinks) { showSpaceLinks(it.links) }
@@ -253,7 +263,13 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
253263
uiResult.data?.let { spacePermissions ->
254264
checkPermissions(spacePermissions)
255265
if (canReadMembers) {
256-
spaceMembersAdapter.setSpaceMembers(spaceMembers, roles, canRemoveMembers, canEditMembers, numberOfManagers)
266+
spaceMembersAdapter.setSpaceMembers(
267+
spaceMembers = spaceMembers,
268+
roles = roles,
269+
canRemoveMembers = canRemoveMembersAndLinks,
270+
canEditMembers = canEditMembers,
271+
numberOfManagers = numberOfManagers
272+
)
257273
}
258274
}
259275
}
@@ -329,7 +345,7 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
329345

330346
private fun checkPermissions(spacePermissions: List<String>) {
331347
val hasCreatePermission = DRIVES_CREATE_PERMISSION in spacePermissions
332-
canRemoveMembers = DRIVES_DELETE_PERMISSION in spacePermissions
348+
canRemoveMembersAndLinks = DRIVES_DELETE_PERMISSION in spacePermissions
333349
canEditMembers = DRIVES_UPDATE_PERMISSION in spacePermissions
334350
canReadMembers = DRIVES_READ_PERMISSION in spacePermissions
335351
binding.apply {
@@ -351,13 +367,16 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
351367
val formatter = SimpleDateFormat(DisplayUtils.DATE_FORMAT_ISO, Locale.ROOT).apply {
352368
timeZone = TimeZone.getTimeZone("UTC")
353369
}
354-
spaceLinksAdapter.setSpaceLinks(spaceLinks.sortedByDescending { spaceLink ->
355-
if (spaceLink.createdDateTime.isNotEmpty()) {
356-
formatter.parse(spaceLink.createdDateTime)
357-
} else {
358-
Date(0)
359-
}
360-
})
370+
spaceLinksAdapter.setSpaceLinks(
371+
spaceLinks = spaceLinks.sortedByDescending { spaceLink ->
372+
if (spaceLink.createdDateTime.isNotEmpty()) {
373+
formatter.parse(spaceLink.createdDateTime)
374+
} else {
375+
Date(0)
376+
}
377+
},
378+
canRemoveLinks = canRemoveMembersAndLinks
379+
)
361380
}
362381

363382
interface SpaceMemberFragmentListener {

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,14 +101,27 @@
101101
android:layout_height="40dp"
102102
android:layout_gravity="center_vertical"
103103
android:layout_marginStart="@dimen/standard_half_margin"
104-
android:layout_marginEnd="@dimen/standard_margin"
104+
android:layout_marginEnd="@dimen/standard_half_margin"
105105
android:scaleType="centerCrop"
106106
android:padding="@dimen/standard_half_padding"
107107
android:background="?android:attr/selectableItemBackground"
108108
android:focusable="true"
109109
android:src="@drawable/copy_link"
110110
android:visibility="visible"/>
111111

112+
<ImageButton
113+
android:id="@+id/remove_public_link_button"
114+
android:layout_width="40dp"
115+
android:layout_height="40dp"
116+
android:layout_gravity="center_vertical"
117+
android:layout_marginEnd="@dimen/standard_half_margin"
118+
android:padding="@dimen/standard_half_padding"
119+
android:background="?android:attr/selectableItemBackground"
120+
android:focusable="true"
121+
android:src="@drawable/ic_action_delete_grey"
122+
android:visibility="gone"
123+
tools:visibility="visible" />
124+
112125
</LinearLayout>
113126

114127
<View

0 commit comments

Comments
 (0)