@@ -22,6 +22,7 @@ package com.owncloud.android.presentation.spaces.members
2222
2323import android.app.AlertDialog
2424import android.content.Context
25+ import android.content.DialogInterface
2526import android.os.Bundle
2627import android.view.LayoutInflater
2728import android.view.View
@@ -38,6 +39,7 @@ import com.owncloud.android.domain.spaces.model.OCSpace
3839import com.owncloud.android.domain.spaces.model.SpaceMember
3940import com.owncloud.android.extensions.avoidScreenshotsIfNeeded
4041import com.owncloud.android.extensions.collectLatestLifecycleFlow
42+ import com.owncloud.android.extensions.showAlertDialog
4143import com.owncloud.android.extensions.showErrorInSnackbar
4244import com.owncloud.android.extensions.showMessageInSnackbar
4345import com.owncloud.android.presentation.common.UIResult
@@ -77,7 +79,7 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
7779 private var addMemberRoles: List <OCRole > = emptyList()
7880 private var spaceMembers: List <SpaceMember > = emptyList()
7981 private var listener: SpaceMemberFragmentListener ? = null
80- private var canRemoveMembers = false
82+ private var canRemoveMembersAndLinks = false
8183 private var canEditMembers = false
8284 private var canReadMembers = false
8385 private var numberOfManagers = 1
@@ -109,7 +111,7 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
109111
110112 currentSpace = requireArguments().getParcelable<OCSpace >(ARG_CURRENT_SPACE ) ? : return
111113 savedInstanceState?.let {
112- canRemoveMembers = it.getBoolean(CAN_REMOVE_MEMBERS , false )
114+ canRemoveMembersAndLinks = it.getBoolean(CAN_REMOVE_MEMBERS , false )
113115 canEditMembers = it.getBoolean(CAN_EDIT_MEMBERS , false )
114116 canReadMembers = it.getBoolean(CAN_READ_MEMBERS , false )
115117 }
@@ -155,7 +157,7 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
155157
156158 override fun onSaveInstanceState (outState : Bundle ) {
157159 super .onSaveInstanceState(outState)
158- outState.putBoolean(CAN_REMOVE_MEMBERS , canRemoveMembers )
160+ outState.putBoolean(CAN_REMOVE_MEMBERS , canRemoveMembersAndLinks )
159161 outState.putBoolean(CAN_EDIT_MEMBERS , canEditMembers)
160162 outState.putBoolean(CAN_READ_MEMBERS , canReadMembers)
161163 }
@@ -185,6 +187,16 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
185187 listener?.copyOrSendPublicLink(publicLinkUrl, currentSpace.name)
186188 }
187189
190+ override fun onRemovePublicLink (publicLinkId : String , publicLinkDisplayName : String ) {
191+ showAlertDialog(
192+ title = getString(R .string.public_link_remove_dialog_title, publicLinkDisplayName),
193+ message = getString(R .string.public_link_remove_dialog_message),
194+ positiveButtonText = getString(R .string.common_yes),
195+ positiveButtonListener = { _: DialogInterface ? , _: Int -> spaceLinksViewModel.removePublicLink(publicLinkId) },
196+ negativeButtonText = getString(R .string.common_no)
197+ )
198+ }
199+
188200 private fun subscribeToViewModels () {
189201 observeRoles()
190202 observeSpaceMembers()
@@ -193,6 +205,7 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
193205 observeRemoveMemberResult()
194206 observeEditMemberResult()
195207 observeAddLinkResult()
208+ observeRemoveLinkResult()
196209 }
197210
198211 private fun observeRoles () {
@@ -226,7 +239,7 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
226239 spaceMembers = it.members
227240 addMemberRoles = it.roles
228241 if (canReadMembers) {
229- spaceMembersAdapter.setSpaceMembers(spaceMembers, roles, canRemoveMembers, canEditMembers, numberOfManagers )
242+ showSpaceMembers( )
230243 val hasLinks = it.links.isNotEmpty()
231244 showOrHideEmptyView(hasLinks)
232245 if (hasLinks) { showSpaceLinks(it.links) }
@@ -253,7 +266,7 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
253266 uiResult.data?.let { spacePermissions ->
254267 checkPermissions(spacePermissions)
255268 if (canReadMembers) {
256- spaceMembersAdapter.setSpaceMembers(spaceMembers, roles, canRemoveMembers, canEditMembers, numberOfManagers )
269+ showSpaceMembers( )
257270 }
258271 }
259272 }
@@ -327,9 +340,25 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
327340 }
328341 }
329342
343+ private fun observeRemoveLinkResult () {
344+ collectLatestLifecycleFlow(spaceLinksViewModel.removeLinkResultFlow) { uiResult ->
345+ when (uiResult) {
346+ is UIResult .Loading -> { }
347+ is UIResult .Success -> {
348+ showMessageInSnackbar(getString(R .string.public_link_remove_correctly))
349+ spaceMembersViewModel.getSpaceMembers()
350+ }
351+ is UIResult .Error -> {
352+ Timber .e(uiResult.error, " Failed to remove a public link from space: ${currentSpace.id} " )
353+ showErrorInSnackbar(R .string.public_link_remove_failed, uiResult.error)
354+ }
355+ }
356+ }
357+ }
358+
330359 private fun checkPermissions (spacePermissions : List <String >) {
331360 val hasCreatePermission = DRIVES_CREATE_PERMISSION in spacePermissions
332- canRemoveMembers = DRIVES_DELETE_PERMISSION in spacePermissions
361+ canRemoveMembersAndLinks = DRIVES_DELETE_PERMISSION in spacePermissions
333362 canEditMembers = DRIVES_UPDATE_PERMISSION in spacePermissions
334363 canReadMembers = DRIVES_READ_PERMISSION in spacePermissions
335364 binding.apply {
@@ -347,17 +376,30 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
347376 }
348377 }
349378
379+ private fun showSpaceMembers () {
380+ spaceMembersAdapter.setSpaceMembers(
381+ spaceMembers = spaceMembers,
382+ roles = roles,
383+ canRemoveMembers = canRemoveMembersAndLinks,
384+ canEditMembers = canEditMembers,
385+ numberOfManagers = numberOfManagers
386+ )
387+ }
388+
350389 private fun showSpaceLinks (spaceLinks : List <OCLink >) {
351390 val formatter = SimpleDateFormat (DisplayUtils .DATE_FORMAT_ISO , Locale .ROOT ).apply {
352391 timeZone = TimeZone .getTimeZone(" UTC" )
353392 }
354- spaceLinksAdapter.setSpaceLinks(spaceLinks.sortedByDescending { spaceLink ->
355- if (spaceLink.createdDateTime.isNotEmpty()) {
356- formatter.parse(spaceLink.createdDateTime)
357- } else {
358- Date (0 )
359- }
360- })
393+ spaceLinksAdapter.setSpaceLinks(
394+ spaceLinks = spaceLinks.sortedByDescending { spaceLink ->
395+ if (spaceLink.createdDateTime.isNotEmpty()) {
396+ formatter.parse(spaceLink.createdDateTime)
397+ } else {
398+ Date (0 )
399+ }
400+ },
401+ canRemoveLinks = canRemoveMembersAndLinks
402+ )
361403 }
362404
363405 interface SpaceMemberFragmentListener {
0 commit comments