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
1 change: 1 addition & 0 deletions changelog/unreleased/4754
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ https://github.com/owncloud/android/issues/4770
https://github.com/owncloud/android/pull/4754
https://github.com/owncloud/android/pull/4764
https://github.com/owncloud/android/pull/4777
https://github.com/owncloud/android/pull/4847
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
* @author David A. Velasco
* @author Juan Carlos González Cabrero
* @author David González Verdugo
* Copyright (C) 2020 ownCloud GmbH.
* @author Jorge Aguado Recio
*
* Copyright (C) 2026 ownCloud GmbH.
*
*
* This program is free software: you can redistribute it and/or modify
Expand Down Expand Up @@ -129,11 +131,10 @@ class UsersAndGroupsSearchProvider : ContentProvider() {

val getStoredCapabilitiesUseCase: GetStoredCapabilitiesUseCase by inject()

val capabilities = getStoredCapabilitiesUseCase(
GetStoredCapabilitiesUseCase.Params(
accountName = account.name
)
)
val capabilities = getStoredCapabilitiesUseCase(GetStoredCapabilitiesUseCase.Params(accountName = account.name))

val searchMinLength = capabilities?.filesSharingSearchMinLength ?: 3
if (userQuery.length < searchMinLength) { return MatrixCursor(COLUMNS) }
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you elaborate this line? return MatrixCursor(COLUMNS)


val getShareesAsyncUseCase: GetShareesAsyncUseCase by inject()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ class AddMemberFragment: Fragment(), SearchMembersAdapter.SearchMembersAdapterLi

private var editMode = false
private var selectedMemberId = ""
private var searchMinLength = 3
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As a constant by default, should it be moved to a companion object?


override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
_binding = AddMemberFragmentBinding.inflate(inflater, container, false)
Expand Down Expand Up @@ -106,7 +107,11 @@ class AddMemberFragment: Fragment(), SearchMembersAdapter.SearchMembersAdapterLi
override fun onQueryTextSubmit(query: String): Boolean = true

override fun onQueryTextChange(newText: String): Boolean {
if (newText.length > 2) { spaceMembersViewModel.searchMembers(newText) } else { spaceMembersViewModel.clearSearch() }
if (newText.length >= searchMinLength) {
spaceMembersViewModel.searchMembers(newText)
} else {
spaceMembersViewModel.clearSearch()
}
return true
}
})
Expand All @@ -116,7 +121,7 @@ class AddMemberFragment: Fragment(), SearchMembersAdapter.SearchMembersAdapterLi
private fun showOrHideEmptyView(hasMembers: Boolean) {
binding.membersRecyclerView.isVisible = hasMembers
binding.emptyDataParent.apply {
val shouldShow = !hasMembers && binding.searchBar.query.length > 2
val shouldShow = !hasMembers && binding.searchBar.query.length >= searchMinLength
root.isVisible = shouldShow
if (shouldShow) {
listEmptyDatasetIcon.setImageResource(R.drawable.ic_share_generic_white)
Expand All @@ -137,6 +142,7 @@ class AddMemberFragment: Fragment(), SearchMembersAdapter.SearchMembersAdapterLi

private fun subscribeToViewModels() {
val spaceMembers = requireArguments().getParcelableArrayList<SpaceMember>(ARG_SPACE_MEMBERS) ?: arrayListOf()
searchMinLength = spaceMembersViewModel.capabilities?.filesSharingSearchMinLength ?: searchMinLength

collectLatestLifecycleFlow(spaceMembersViewModel.members) { uiState ->
if (uiState.isLoading) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ package com.owncloud.android.presentation.spaces.members
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.owncloud.android.domain.UseCaseResult
import com.owncloud.android.domain.capabilities.model.OCCapability
import com.owncloud.android.domain.capabilities.usecases.GetStoredCapabilitiesUseCase
import com.owncloud.android.domain.members.model.OCMember
import com.owncloud.android.domain.members.usecases.AddMemberUseCase
import com.owncloud.android.domain.members.usecases.EditMemberUseCase
Expand Down Expand Up @@ -54,6 +56,7 @@ class SpaceMembersViewModel(
private val getRolesAsyncUseCase: GetRolesAsyncUseCase,
private val getSpaceMembersUseCase: GetSpaceMembersUseCase,
private val getSpacePermissionsAsyncUseCase: GetSpacePermissionsAsyncUseCase,
private val getStoredCapabilitiesUseCase: GetStoredCapabilitiesUseCase,
private val removeMemberUseCase: RemoveMemberUseCase,
private val searchMembersUseCase: SearchMembersUseCase,
private val accountName: String,
Expand Down Expand Up @@ -86,6 +89,7 @@ class SpaceMembersViewModel(
val editMemberResultFlow: StateFlow<Event<UIResult<Unit>>?> = _editMemberResultFlow

private var searchJob: Job? = null
var capabilities: OCCapability? = null

init {
runUseCaseWithResult(
Expand All @@ -97,7 +101,9 @@ class SpaceMembersViewModel(
requiresConnection = true
)
getSpacePermissions()

viewModelScope.launch(coroutineDispatcherProvider.io) {
capabilities = getStoredCapabilitiesUseCase(GetStoredCapabilitiesUseCase.Params(accountName))
}
}

fun getSpacePermissions() = runUseCaseWithResult(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@
* @author David González Verdugo
* @author Abel García de Prada
* @author Juan Carlos Garrote Gascón
* @author Jorge Aguado Recio
*
* Copyright (C) 2024 ownCloud GmbH.
* Copyright (C) 2026 ownCloud GmbH.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
Expand Down Expand Up @@ -66,6 +67,7 @@ data class RemoteCapability(
var filesSharingFederationOutgoing: CapabilityBooleanType = CapabilityBooleanType.UNKNOWN,
var filesSharingFederationIncoming: CapabilityBooleanType = CapabilityBooleanType.UNKNOWN,
var filesSharingUserProfilePicture: CapabilityBooleanType = CapabilityBooleanType.UNKNOWN,
var filesSharingSearchMinLength: Int,

// Files
var filesBigFileChunking: CapabilityBooleanType = CapabilityBooleanType.UNKNOWN,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ data class CapabilityResponse(
CapabilityBooleanType.fromBooleanValue(capabilities?.fileSharingCapabilities?.fileSharingUser?.profilePicture),
spaces = capabilities?.spacesCapabilities?.toSpaces(),
passwordPolicy = capabilities?.passwordPolicyCapabilities?.toPasswordPolicy(),
filesSharingSearchMinLength = capabilities?.fileSharingCapabilities?.fileSharingSearchMinLength ?: 3
)
}

Expand Down Expand Up @@ -127,6 +128,8 @@ data class FileSharingCapabilities(
val fileSharingFederation: FileSharingFederation?,
@Json(name = "user")
val fileSharingUser: FileSharingUser?,
@Json(name = "search_min_length")
val fileSharingSearchMinLength: Int
)

@JsonClass(generateAdapter = true)
Expand Down
Loading
Loading