Skip to content

Commit 2e502d8

Browse files
committed
fix(unified-search): handle slow server search for loader spinner
Signed-off-by: alperozturk96 <alper_ozturk@proton.me>
1 parent aad96b8 commit 2e502d8

2 files changed

Lines changed: 25 additions & 1 deletion

File tree

app/src/main/java/com/owncloud/android/ui/fragment/UnifiedSearchFragment.kt

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import com.nextcloud.utils.extensions.getTypedActivity
4141
import com.nextcloud.utils.extensions.searchFilesByName
4242
import com.nextcloud.utils.extensions.setVisibleIf
4343
import com.nextcloud.utils.extensions.typedActivity
44+
import com.nextcloud.utils.thumbnail.ThumbnailGenerator
4445
import com.owncloud.android.R
4546
import com.owncloud.android.databinding.ListFragmentBinding
4647
import com.owncloud.android.datamodel.FileDataStorageManager
@@ -62,12 +63,14 @@ import com.owncloud.android.ui.unifiedsearch.UnifiedSearchViewModel
6263
import com.owncloud.android.ui.unifiedsearch.filterOutHiddenFiles
6364
import com.owncloud.android.utils.DisplayUtils
6465
import com.owncloud.android.utils.PermissionUtil
65-
import com.nextcloud.utils.thumbnail.ThumbnailGenerator
6666
import com.owncloud.android.utils.theme.ViewThemeUtils
6767
import kotlinx.coroutines.Dispatchers
68+
import kotlinx.coroutines.Job
69+
import kotlinx.coroutines.delay
6870
import kotlinx.coroutines.launch
6971
import kotlinx.coroutines.withContext
7072
import javax.inject.Inject
73+
import kotlin.time.Duration.Companion.milliseconds
7174

7275
/**
7376
* Starts query to all capable unified search providers and displays them Opens result in our app, redirect to other
@@ -93,6 +96,7 @@ class UnifiedSearchFragment :
9396
private const val ARG_QUERY = "ARG_QUERY"
9497
private const val ARG_HIDDEN_FILES = "ARG_HIDDEN_FILES"
9598
private const val CURRENT_DIR_PATH = "CURRENT_DIR"
99+
private const val SEARCH_TIMEOUT_MS = 30_000L
96100

97101
fun newInstance(
98102
query: String?,
@@ -143,6 +147,7 @@ class UnifiedSearchFragment :
143147
private var showMoreActions = false
144148
private var currentDir: OCFile? = null
145149
private var initialQuery: String? = null
150+
private var searchJob: Job? = null
146151

147152
override fun onCreate(savedInstanceState: Bundle?) {
148153
super.onCreate(savedInstanceState)
@@ -319,6 +324,11 @@ class UnifiedSearchFragment :
319324
vm.searchResults.observe(viewLifecycleOwner, this::onSearchResultChanged)
320325
vm.isLoading.observe(viewLifecycleOwner) { loading ->
321326
binding.swipeContainingList.isRefreshing = loading
327+
if (loading) {
328+
startSearchTimeout()
329+
} else {
330+
searchJob?.cancel()
331+
}
322332
}
323333
vm.screenState.observe(viewLifecycleOwner) {
324334
handleScreenState(it)
@@ -353,6 +363,19 @@ class UnifiedSearchFragment :
353363
}
354364
}
355365

366+
private fun startSearchTimeout() {
367+
searchJob?.cancel()
368+
searchJob = viewLifecycleOwner.lifecycleScope.launch {
369+
delay(SEARCH_TIMEOUT_MS.milliseconds)
370+
val currentBinding = _binding ?: return@launch
371+
currentBinding.swipeContainingList.isRefreshing = false
372+
DisplayUtils.showSnackMessage(
373+
currentBinding.root,
374+
R.string.unified_search_fragment_search_takes_long
375+
)
376+
}
377+
}
378+
356379
private fun setUpBinding() {
357380
binding.swipeContainingList.setOnRefreshListener {
358381
vm.initialQuery()

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1456,6 +1456,7 @@
14561456
<string name="unified_search_fragment_calendar_event_not_found">Event not found, you can always sync to update. Redirecting to web…</string>
14571457
<string name="unified_search_fragment_contact_not_found">Contact not found, you can always sync to update. Redirecting to web…</string>
14581458
<string name="unified_search_fragment_permission_needed">Permissions are required to open search result otherwise it will redirected to web…</string>
1459+
<string name="unified_search_fragment_search_takes_long">Search is taking longer than usual. Results will appear as soon as the server responds</string>
14591460
<string name="file_name_validator_current_path_is_invalid">Current folder name is invalid, please rename the folder. Redirecting home…</string>
14601461
<string name="file_name_validator_rename_before_move_or_copy">%s. Please rename the file before moving or copying</string>
14611462
<string name="file_name_validator_error_contains_reserved_names_or_invalid_characters">Folder path contains reserved names or invalid characters</string>

0 commit comments

Comments
 (0)