@@ -55,6 +55,7 @@ class GraphShareFragment : Fragment() {
5555
5656 private var roles: List <OCRole > = emptyList()
5757 private var listener: GraphShareFragmentListener ? = null
58+ private var canRemoveShares: Boolean = false
5859
5960 override fun onCreateView (inflater : LayoutInflater , container : ViewGroup ? , savedInstanceState : Bundle ? ): View {
6061 _binding = MembersFragmentBinding .inflate(inflater, container, false )
@@ -107,6 +108,7 @@ class GraphShareFragment : Fragment() {
107108 private fun subscribeToViewModels () {
108109 observeRoles()
109110 observeShares()
111+ observeSpacePermissions()
110112 observeAddShareResult()
111113 }
112114
@@ -139,7 +141,7 @@ class GraphShareFragment : Fragment() {
139141 val hasMembers = it.members.isNotEmpty()
140142 binding.membersRecyclerView.isVisible = hasMembers
141143 binding.noSharesMessage.isVisible = ! hasMembers
142- graphSharesAdapter.setShares(it.members, it.roles)
144+ graphSharesAdapter.setShares(it.members, it.roles, canRemoveShares )
143145 binding.swipeRefreshMembers.isRefreshing = false
144146 }
145147 }
@@ -154,6 +156,28 @@ class GraphShareFragment : Fragment() {
154156 }
155157 }
156158
159+ private fun observeSpacePermissions () {
160+ collectLatestLifecycleFlow(graphShareViewModel.spacePermissions) { event ->
161+ event?.let {
162+ when (val uiResult = event.peekContent()) {
163+ is UIResult .Success -> {
164+ uiResult.data?.let { spacePermissions ->
165+ checkPermissions(spacePermissions)
166+ }
167+ }
168+ is UIResult .Loading -> { }
169+ is UIResult .Error -> {
170+ Timber .e(uiResult.error, " Failed to retrieve space permissions" )
171+ }
172+ }
173+ }
174+ }
175+ }
176+
177+ private fun checkPermissions (spacePermissions : List <String >) {
178+ canRemoveShares = DRIVES_DELETE_PERMISSION in spacePermissions
179+ }
180+
157181 private fun observeAddShareResult () {
158182 collectLatestLifecycleFlow(graphShareViewModel.addShareResultFlow) { event ->
159183 event?.peekContent()?.let { uiResult ->
@@ -176,6 +200,7 @@ class GraphShareFragment : Fragment() {
176200 companion object {
177201 private const val ARG_FILE = " FILE"
178202 private const val ARG_ACCOUNT_NAME = " ACCOUNT_NAME"
203+ private const val DRIVES_DELETE_PERMISSION = " libre.graph/driveItem/permissions/delete"
179204
180205 fun newInstance (file : OCFile , accountName : String ): GraphShareFragment {
181206 val args = Bundle ().apply {
0 commit comments