From 8e31bc2e76514055dc7b2fef17b2a728fea73151 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 13 Oct 2021 20:32:54 +0200 Subject: [PATCH] adding Search at the mimetype activity --- .../pro/activities/MimeTypesActivity.kt | 57 ++++++++++++++++++- .../pro/fragments/ItemsFragment.kt | 43 +++++++------- .../main/res/layout/activity_mimetypes.xml | 30 ++++++++++ 3 files changed, 109 insertions(+), 21 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/MimeTypesActivity.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/MimeTypesActivity.kt index 15516578..7d07b9c8 100644 --- a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/MimeTypesActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/MimeTypesActivity.kt @@ -32,6 +32,7 @@ import java.util.* class MimeTypesActivity : SimpleActivity(), ItemOperationsListener { private var isSearchOpen = false private var currentMimeType = "" + private var lastSearchedText = "" private var searchMenuItem: MenuItem? = null private var zoomListener: MyRecyclerView.MyZoomListener? = null private var storedItems = ArrayList() @@ -124,7 +125,44 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener { override fun selectedPaths(paths: ArrayList) {} - override fun searchQueryChanged(text: String) {} + override fun searchQueryChanged(text: String) { + val searchText = text.trim() + lastSearchedText = searchText + when { + searchText.isEmpty() -> { + mimetypes_list.beVisible() + getRecyclerAdapter()?.updateItems(storedItems) + mimetypes_placeholder.beGone() + mimetypes_placeholder_2.beGone() + } + searchText.length == 1 -> { + mimetypes_list.beGone() + mimetypes_placeholder.beVisible() + mimetypes_placeholder_2.beVisible() + } + else -> { + ensureBackgroundThread { + if (lastSearchedText != searchText) { + return@ensureBackgroundThread + } + + val listItems = storedItems.filter { it.name.contains(searchText, true) } as ArrayList + + runOnUiThread { + getRecyclerAdapter()?.updateItems(listItems, text) + mimetypes_list.beVisibleIf(listItems.isNotEmpty()) + mimetypes_placeholder.beVisibleIf(listItems.isEmpty()) + mimetypes_placeholder_2.beGone() + + mimetypes_list.onGlobalLayout { + items_fastscroller.setScrollToY(mimetypes_list.computeVerticalScrollOffset()) + calculateContentHeight(listItems) + } + } + } + } + } + } override fun setupDateTimeFormat() {} @@ -163,6 +201,7 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener { override fun onQueryTextChange(newText: String): Boolean { if (isSearchOpen) { + searchQueryChanged(newText) } return true } @@ -172,16 +211,32 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener { MenuItemCompat.setOnActionExpandListener(searchMenuItem, object : MenuItemCompat.OnActionExpandListener { override fun onMenuItemActionExpand(item: MenuItem?): Boolean { isSearchOpen = true + searchOpened() return true } override fun onMenuItemActionCollapse(item: MenuItem?): Boolean { isSearchOpen = false + searchClosed() return true } }) } + fun searchOpened() { + isSearchOpen = true + lastSearchedText = "" + } + + fun searchClosed() { + isSearchOpen = false + lastSearchedText = "" + + mimetypes_list.beVisible() + mimetypes_placeholder.beGone() + mimetypes_placeholder_2.beGone() + } + private fun getProperFileDirItems(callback: (ArrayList) -> Unit) { val fileDirItems = ArrayList() val showHidden = config.shouldShowHidden diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/fragments/ItemsFragment.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/fragments/ItemsFragment.kt index 4b0cf9fb..008576da 100644 --- a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/fragments/ItemsFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/fragments/ItemsFragment.kt @@ -28,7 +28,8 @@ import java.io.File import java.util.* import kotlin.collections.ArrayList -class ItemsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet), ItemOperationsListener, Breadcrumbs.BreadcrumbsListener { +class ItemsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet), ItemOperationsListener, + Breadcrumbs.BreadcrumbsListener { private var showHidden = false private var skipItemUpdating = false private var isSearchOpen = false @@ -118,8 +119,10 @@ class ItemsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerF breadcrumbs.updateFontSize(context!!.getTextSize()) } - ItemsAdapter(activity as SimpleActivity, storedItems, this, items_list, isPickMultipleIntent, items_fastscroller, - items_swipe_refresh) { + ItemsAdapter( + activity as SimpleActivity, storedItems, this, items_list, isPickMultipleIntent, items_fastscroller, + items_swipe_refresh + ) { if ((it as? ListItem)?.isSectionTitle == true) { openDirectory(it.mPath) searchClosed() @@ -264,24 +267,24 @@ class ItemsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerF override fun searchQueryChanged(text: String) { val searchText = text.trim() lastSearchedText = searchText - ensureBackgroundThread { - if (context == null) { - return@ensureBackgroundThread - } + if (context == null) { + return + } - when { - searchText.isEmpty() -> activity?.runOnUiThread { - items_list.beVisible() - getRecyclerAdapter()?.updateItems(storedItems) - items_placeholder.beGone() - items_placeholder_2.beGone() - } - searchText.length == 1 -> activity?.runOnUiThread { - items_list.beGone() - items_placeholder.beVisible() - items_placeholder_2.beVisible() - } - else -> { + when { + searchText.isEmpty() -> { + items_list.beVisible() + getRecyclerAdapter()?.updateItems(storedItems) + items_placeholder.beGone() + items_placeholder_2.beGone() + } + searchText.length == 1 -> { + items_list.beGone() + items_placeholder.beVisible() + items_placeholder_2.beVisible() + } + else -> { + ensureBackgroundThread { val files = searchFiles(searchText, currentPath) files.sortBy { it.getParentPath() } diff --git a/app/src/main/res/layout/activity_mimetypes.xml b/app/src/main/res/layout/activity_mimetypes.xml index f04eeadd..3b377baf 100644 --- a/app/src/main/res/layout/activity_mimetypes.xml +++ b/app/src/main/res/layout/activity_mimetypes.xml @@ -5,6 +5,36 @@ android:layout_width="wrap_content" android:layout_height="wrap_content"> + + + +