adding Search at the mimetype activity

This commit is contained in:
tibbi
2021-10-13 20:32:54 +02:00
parent a74315fc66
commit 8e31bc2e76
3 changed files with 109 additions and 21 deletions

View File

@@ -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<ListItem>()
@@ -124,7 +125,44 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
override fun selectedPaths(paths: ArrayList<String>) {}
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<ListItem>
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<FileDirItem>) -> Unit) {
val fileDirItems = ArrayList<FileDirItem>()
val showHidden = config.shouldShowHidden

View File

@@ -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() }

View File

@@ -5,6 +5,36 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/mimetypes_placeholder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:alpha="0.8"
android:gravity="center"
android:paddingStart="@dimen/activity_margin"
android:paddingTop="@dimen/activity_margin"
android:paddingEnd="@dimen/activity_margin"
android:text="@string/no_items_found"
android:textSize="@dimen/bigger_text_size"
android:textStyle="italic"
android:visibility="gone" />
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/mimetypes_placeholder_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/mimetypes_placeholder"
android:layout_centerHorizontal="true"
android:alpha="0.8"
android:background="?attr/selectableItemBackground"
android:gravity="center"
android:padding="@dimen/activity_margin"
android:text="@string/type_2_characters"
android:textSize="@dimen/bigger_text_size"
android:textStyle="italic"
android:visibility="gone" />
<com.simplemobiletools.commons.views.MyRecyclerView
android:id="@+id/mimetypes_list"
android:layout_width="match_parent"