Skip to content

Commit b127028

Browse files
committed
adding an initial implementation of Search at Recents tab
1 parent 989e682 commit b127028

File tree

5 files changed

+198
-54
lines changed

5 files changed

+198
-54
lines changed

app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/MainActivity.kt

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -144,16 +144,12 @@ class MainActivity : SimpleActivity() {
144144
}
145145

146146
override fun onBackPressed() {
147-
if (getCurrentFragment() is StorageFragment) {
148-
super.onBackPressed()
149-
return
150-
}
151-
147+
val currentFragment = getCurrentFragment()
152148
if (main_menu.isSearchOpen) {
153149
main_menu.closeSearch()
154-
} else if (getCurrentFragment() is RecentsFragment) {
150+
} else if (currentFragment is RecentsFragment) {
155151
super.onBackPressed()
156-
} else if (getCurrentFragment()!!.breadcrumbs.getItemCount() <= 1) {
152+
} else if (currentFragment != null && currentFragment.breadcrumbs.getItemCount() <= 1) {
157153
if (!wasBackJustPressed && config.pressBackTwice) {
158154
wasBackJustPressed = true
159155
toast(R.string.press_back_again)
@@ -164,8 +160,8 @@ class MainActivity : SimpleActivity() {
164160
finish()
165161
}
166162
} else {
167-
getCurrentFragment()!!.breadcrumbs.removeBreadcrumb()
168-
openPath(getCurrentFragment()!!.breadcrumbs.getLastItem().path)
163+
currentFragment?.breadcrumbs?.removeBreadcrumb() ?: return
164+
openPath(currentFragment.breadcrumbs.getLastItem().path)
169165
}
170166
}
171167

app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/MimeTypesActivity.kt

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -349,15 +349,6 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
349349
mimetypes_placeholder.beVisibleIf(items.isEmpty())
350350
}
351351

352-
private fun getListItemsFromFileDirItems(fileDirItems: ArrayList<FileDirItem>): ArrayList<ListItem> {
353-
val listItems = ArrayList<ListItem>()
354-
fileDirItems.forEach {
355-
val listItem = ListItem(it.path, it.name, false, 0, it.size, it.modified, false, false)
356-
listItems.add(listItem)
357-
}
358-
return listItems
359-
}
360-
361352
private fun getRecyclerAdapter() = mimetypes_list.adapter as? ItemsAdapter
362353

363354
private fun showSortingDialog() {

app/src/main/kotlin/com/simplemobiletools/filemanager/pro/fragments/StorageFragment.kt

Lines changed: 104 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,39 @@ import android.annotation.SuppressLint
44
import android.app.usage.StorageStatsManager
55
import android.content.Context
66
import android.content.Intent
7+
import android.os.Handler
78
import android.os.storage.StorageManager
89
import android.provider.MediaStore
910
import android.provider.Settings
1011
import android.util.AttributeSet
1112
import androidx.appcompat.app.AppCompatActivity
1213
import com.simplemobiletools.commons.extensions.*
14+
import com.simplemobiletools.commons.helpers.LOWER_ALPHA
15+
import com.simplemobiletools.commons.helpers.SHORT_ANIMATION_DURATION
1316
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
1417
import com.simplemobiletools.commons.helpers.isOreoPlus
18+
import com.simplemobiletools.commons.models.FileDirItem
1519
import com.simplemobiletools.filemanager.pro.R
1620
import com.simplemobiletools.filemanager.pro.activities.MimeTypesActivity
1721
import com.simplemobiletools.filemanager.pro.activities.SimpleActivity
22+
import com.simplemobiletools.filemanager.pro.adapters.ItemsAdapter
23+
import com.simplemobiletools.filemanager.pro.extensions.config
1824
import com.simplemobiletools.filemanager.pro.extensions.formatSizeThousand
1925
import com.simplemobiletools.filemanager.pro.helpers.*
26+
import com.simplemobiletools.filemanager.pro.interfaces.ItemOperationsListener
27+
import com.simplemobiletools.filemanager.pro.models.ListItem
2028
import kotlinx.android.synthetic.main.storage_fragment.view.*
2129
import java.util.*
2230

23-
class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet) {
31+
class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet), ItemOperationsListener {
2432
private val SIZE_DIVIDER = 100000
33+
private var allDeviceListItems = ArrayList<ListItem>()
2534

2635
override fun setupFragment(activity: SimpleActivity) {
36+
if (this.activity == null) {
37+
this.activity = activity
38+
}
39+
2740
total_space.text = String.format(context.getString(R.string.total_storage), "")
2841
getSizes()
2942

@@ -42,41 +55,46 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
4255
documents_holder.setOnClickListener { launchMimetypeActivity(DOCUMENTS) }
4356
archives_holder.setOnClickListener { launchMimetypeActivity(ARCHIVES) }
4457
others_holder.setOnClickListener { launchMimetypeActivity(OTHERS) }
45-
}
4658

47-
override fun refreshFragment() {}
59+
Handler().postDelayed({
60+
val fileDirItems = getAllFiles()
61+
allDeviceListItems = getListItemsFromFileDirItems(fileDirItems)
62+
setupSearchResultsAdapter()
63+
}, 2000)
64+
}
4865

4966
override fun onResume(textColor: Int) {
5067
getSizes()
5168
context.updateTextColors(storage_fragment)
69+
search_holder.setBackgroundColor(context.getProperBackgroundColor())
5270

5371
val properPrimaryColor = context.getProperPrimaryColor()
5472
main_storage_usage_progressbar.setIndicatorColor(properPrimaryColor)
55-
main_storage_usage_progressbar.trackColor = properPrimaryColor.adjustAlpha(0.3f)
73+
main_storage_usage_progressbar.trackColor = properPrimaryColor.adjustAlpha(LOWER_ALPHA)
5674

5775
val redColor = context.resources.getColor(R.color.md_red_700)
5876
images_progressbar.setIndicatorColor(redColor)
59-
images_progressbar.trackColor = redColor.adjustAlpha(0.3f)
77+
images_progressbar.trackColor = redColor.adjustAlpha(LOWER_ALPHA)
6078

6179
val greenColor = context.resources.getColor(R.color.md_green_700)
6280
videos_progressbar.setIndicatorColor(greenColor)
63-
videos_progressbar.trackColor = greenColor.adjustAlpha(0.3f)
81+
videos_progressbar.trackColor = greenColor.adjustAlpha(LOWER_ALPHA)
6482

6583
val lightBlueColor = context.resources.getColor(R.color.md_light_blue_700)
6684
audio_progressbar.setIndicatorColor(lightBlueColor)
67-
audio_progressbar.trackColor = lightBlueColor.adjustAlpha(0.3f)
85+
audio_progressbar.trackColor = lightBlueColor.adjustAlpha(LOWER_ALPHA)
6886

6987
val yellowColor = context.resources.getColor(R.color.md_yellow_700)
7088
documents_progressbar.setIndicatorColor(yellowColor)
71-
documents_progressbar.trackColor = yellowColor.adjustAlpha(0.3f)
89+
documents_progressbar.trackColor = yellowColor.adjustAlpha(LOWER_ALPHA)
7290

7391
val tealColor = context.resources.getColor(R.color.md_teal_700)
7492
archives_progressbar.setIndicatorColor(tealColor)
75-
archives_progressbar.trackColor = tealColor.adjustAlpha(0.3f)
93+
archives_progressbar.trackColor = tealColor.adjustAlpha(LOWER_ALPHA)
7694

7795
val pinkColor = context.resources.getColor(R.color.md_pink_700)
7896
others_progressbar.setIndicatorColor(pinkColor)
79-
others_progressbar.trackColor = pinkColor.adjustAlpha(0.3f)
97+
others_progressbar.trackColor = pinkColor.adjustAlpha(LOWER_ALPHA)
8098
}
8199

82100
private fun launchMimetypeActivity(mimetype: String) {
@@ -223,6 +241,82 @@ class StorageFragment(context: Context, attributeSet: AttributeSet) : MyViewPage
223241
}
224242

225243
override fun searchQueryChanged(text: String) {
244+
if (text.isNotEmpty()) {
245+
if (search_holder.alpha < 1f) {
246+
search_holder.fadeIn()
247+
}
248+
} else {
249+
search_holder.animate().alpha(0f).setDuration(SHORT_ANIMATION_DURATION).withEndAction {
250+
search_holder.beGone()
251+
(search_results_list.adapter as? ItemsAdapter)?.updateItems(allDeviceListItems, text)
252+
}.start()
253+
}
254+
255+
if (text.isNotEmpty()) {
256+
val filtered = allDeviceListItems.filter { it.mName.contains(text, true) }.toMutableList() as ArrayList<ListItem>
257+
(search_results_list.adapter as? ItemsAdapter)?.updateItems(filtered, text)
258+
search_placeholder.beVisibleIf(filtered.isEmpty())
259+
}
260+
}
261+
262+
private fun setupSearchResultsAdapter() {
263+
ItemsAdapter(context as SimpleActivity, allDeviceListItems, this, search_results_list, false, null, false) {
264+
clickedPath((it as FileDirItem).path)
265+
}.apply {
266+
search_results_list.adapter = this
267+
}
268+
}
269+
270+
private fun getAllFiles(): ArrayList<FileDirItem> {
271+
val fileDirItems = ArrayList<FileDirItem>()
272+
val showHidden = context?.config?.shouldShowHidden ?: return fileDirItems
273+
val uri = MediaStore.Files.getContentUri("external")
274+
val projection = arrayOf(
275+
MediaStore.Files.FileColumns.DATA,
276+
MediaStore.Files.FileColumns.DISPLAY_NAME,
277+
MediaStore.Files.FileColumns.SIZE,
278+
MediaStore.Files.FileColumns.DATE_MODIFIED
279+
)
280+
281+
try {
282+
context?.queryCursor(uri, projection) { cursor ->
283+
try {
284+
val name = cursor.getStringValue(MediaStore.Files.FileColumns.DISPLAY_NAME)
285+
if (!showHidden && name.startsWith(".")) {
286+
return@queryCursor
287+
}
288+
289+
val size = cursor.getLongValue(MediaStore.Files.FileColumns.SIZE)
290+
if (size == 0L) {
291+
return@queryCursor
292+
}
226293

294+
val path = cursor.getStringValue(MediaStore.Files.FileColumns.DATA)
295+
val lastModified = cursor.getLongValue(MediaStore.Files.FileColumns.DATE_MODIFIED) * 1000
296+
fileDirItems.add(FileDirItem(path, name, false, 0, size, lastModified))
297+
} catch (e: Exception) {
298+
}
299+
}
300+
} catch (e: Exception) {
301+
context?.showErrorToast(e)
302+
}
303+
304+
return fileDirItems
227305
}
306+
307+
override fun refreshFragment() {}
308+
309+
override fun deleteFiles(files: ArrayList<FileDirItem>) {}
310+
311+
override fun selectedPaths(paths: ArrayList<String>) {}
312+
313+
override fun setupDateTimeFormat() {}
314+
315+
override fun setupFontSize() {}
316+
317+
override fun toggleFilenameVisibility() {}
318+
319+
override fun columnCountChanged() {}
320+
321+
override fun finishActMode() {}
228322
}

app/src/main/kotlin/com/simplemobiletools/filemanager/pro/helpers/Constants.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package com.simplemobiletools.filemanager.pro.helpers
33
import com.simplemobiletools.commons.helpers.TAB_FILES
44
import com.simplemobiletools.commons.helpers.TAB_RECENT_FILES
55
import com.simplemobiletools.commons.helpers.TAB_STORAGE_ANALYSIS
6+
import com.simplemobiletools.commons.models.FileDirItem
7+
import com.simplemobiletools.filemanager.pro.models.ListItem
68

79
const val PATH = "path"
810
const val MAX_COLUMN_COUNT = 15
@@ -64,3 +66,12 @@ val archiveMimeTypes = arrayListOf(
6466
"application/java-archive",
6567
"multipart/x-zip"
6668
)
69+
70+
fun getListItemsFromFileDirItems(fileDirItems: ArrayList<FileDirItem>): ArrayList<ListItem> {
71+
val listItems = ArrayList<ListItem>()
72+
fileDirItems.forEach {
73+
val listItem = ListItem(it.path, it.name, false, 0, it.size, it.modified, false, false)
74+
listItems.add(listItem)
75+
}
76+
return listItems
77+
}

0 commit comments

Comments
 (0)