adding some storage search improvements

This commit is contained in:
tibbi 2023-01-07 21:06:52 +01:00
parent bce66e3cde
commit cd426324df
2 changed files with 395 additions and 339 deletions

View File

@ -1,6 +1,7 @@
package com.simplemobiletools.filemanager.pro.fragments package com.simplemobiletools.filemanager.pro.fragments
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.app.Activity
import android.app.usage.StorageStatsManager import android.app.usage.StorageStatsManager
import android.content.ContentResolver import android.content.ContentResolver
import android.content.Context import android.content.Context
@ -31,6 +32,7 @@ import java.util.*
class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet), ItemOperationsListener { class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet), ItemOperationsListener {
private val SIZE_DIVIDER = 100000 private val SIZE_DIVIDER = 100000
private var allDeviceListItems = ArrayList<ListItem>() private var allDeviceListItems = ArrayList<ListItem>()
private var lastSearchedText = ""
override fun setupFragment(activity: SimpleActivity) { override fun setupFragment(activity: SimpleActivity) {
if (this.activity == null) { if (this.activity == null) {
@ -64,7 +66,6 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
override fun onResume(textColor: Int) { override fun onResume(textColor: Int) {
getSizes() getSizes()
context.updateTextColors(storage_fragment) context.updateTextColors(storage_fragment)
search_holder.setBackgroundColor(context.getProperBackgroundColor())
val properPrimaryColor = context.getProperPrimaryColor() val properPrimaryColor = context.getProperPrimaryColor()
main_storage_usage_progressbar.setIndicatorColor(properPrimaryColor) main_storage_usage_progressbar.setIndicatorColor(properPrimaryColor)
@ -93,6 +94,10 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
val pinkColor = context.resources.getColor(R.color.md_pink_700) val pinkColor = context.resources.getColor(R.color.md_pink_700)
others_progressbar.setIndicatorColor(pinkColor) others_progressbar.setIndicatorColor(pinkColor)
others_progressbar.trackColor = pinkColor.adjustAlpha(LOWER_ALPHA) others_progressbar.trackColor = pinkColor.adjustAlpha(LOWER_ALPHA)
search_holder.setBackgroundColor(context.getProperBackgroundColor())
progress_bar.setIndicatorColor(properPrimaryColor)
progress_bar.trackColor = properPrimaryColor.adjustAlpha(LOWER_ALPHA)
} }
private fun launchMimetypeActivity(mimetype: String) { private fun launchMimetypeActivity(mimetype: String) {
@ -239,6 +244,8 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
} }
override fun searchQueryChanged(text: String) { override fun searchQueryChanged(text: String) {
lastSearchedText = text
if (text.isNotEmpty()) { if (text.isNotEmpty()) {
if (search_holder.alpha < 1f) { if (search_holder.alpha < 1f) {
search_holder.fadeIn() search_holder.fadeIn()
@ -250,10 +257,31 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
}.start() }.start()
} }
if (text.isNotEmpty()) { if (text.length == 1) {
search_results_list.beGone()
search_placeholder.beVisible()
search_placeholder_2.beVisible()
hideProgressBar()
} else if (text.isEmpty()) {
search_results_list.beGone()
hideProgressBar()
} else {
showProgressBar()
ensureBackgroundThread {
val start = System.currentTimeMillis()
val filtered = allDeviceListItems.filter { it.mName.contains(text, true) }.toMutableList() as ArrayList<ListItem> val filtered = allDeviceListItems.filter { it.mName.contains(text, true) }.toMutableList() as ArrayList<ListItem>
if (lastSearchedText != text) {
return@ensureBackgroundThread
}
(context as? Activity)?.runOnUiThread {
(search_results_list.adapter as? ItemsAdapter)?.updateItems(filtered, text) (search_results_list.adapter as? ItemsAdapter)?.updateItems(filtered, text)
search_results_list.beVisible()
search_placeholder.beVisibleIf(filtered.isEmpty()) search_placeholder.beVisibleIf(filtered.isEmpty())
search_placeholder_2.beGone()
hideProgressBar()
}
}
} }
} }
@ -281,7 +309,7 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
} }
private fun addItems() { private fun addItems() {
ItemsAdapter(context as SimpleActivity, allDeviceListItems, this, search_results_list, false, null, false) { ItemsAdapter(context as SimpleActivity, ArrayList(), this, search_results_list, false, null, false) {
clickedPath((it as FileDirItem).path) clickedPath((it as FileDirItem).path)
}.apply { }.apply {
search_results_list.adapter = this search_results_list.adapter = this
@ -338,6 +366,14 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
return fileDirItems return fileDirItems
} }
private fun showProgressBar() {
progress_bar.show()
}
private fun hideProgressBar() {
progress_bar.hide()
}
private fun getRecyclerAdapter() = search_results_list.adapter as? ItemsAdapter private fun getRecyclerAdapter() = search_results_list.adapter as? ItemsAdapter
override fun refreshFragment() { override fun refreshFragment() {

View File

@ -6,12 +6,6 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<androidx.core.widget.NestedScrollView
android:id="@+id/storage_nested_scrollview"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:fillViewport="true">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/storage_holder" android:id="@+id/storage_holder"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -324,6 +318,18 @@
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"> app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.progressindicator.LinearProgressIndicator
android:id="@+id/progress_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:indeterminate="true"
android:visibility="gone"
app:hideAnimationBehavior="outward"
app:showAnimationBehavior="inward"
app:showDelay="250"
tools:visibility="visible" />
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/search_placeholder" android:id="@+id/search_placeholder"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -339,6 +345,21 @@
android:textStyle="italic" android:textStyle="italic"
android:visibility="gone" /> android:visibility="gone" />
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/search_placeholder_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/search_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 <com.simplemobiletools.commons.views.MyRecyclerView
android:id="@+id/search_results_list" android:id="@+id/search_results_list"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -353,5 +374,4 @@
</RelativeLayout> </RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
</com.simplemobiletools.filemanager.pro.fragments.StorageFragment> </com.simplemobiletools.filemanager.pro.fragments.StorageFragment>