@@ -4,26 +4,39 @@ import android.annotation.SuppressLint
44import android.app.usage.StorageStatsManager
55import android.content.Context
66import android.content.Intent
7+ import android.os.Handler
78import android.os.storage.StorageManager
89import android.provider.MediaStore
910import android.provider.Settings
1011import android.util.AttributeSet
1112import androidx.appcompat.app.AppCompatActivity
1213import com.simplemobiletools.commons.extensions.*
14+ import com.simplemobiletools.commons.helpers.LOWER_ALPHA
15+ import com.simplemobiletools.commons.helpers.SHORT_ANIMATION_DURATION
1316import com.simplemobiletools.commons.helpers.ensureBackgroundThread
1417import com.simplemobiletools.commons.helpers.isOreoPlus
18+ import com.simplemobiletools.commons.models.FileDirItem
1519import com.simplemobiletools.filemanager.pro.R
1620import com.simplemobiletools.filemanager.pro.activities.MimeTypesActivity
1721import com.simplemobiletools.filemanager.pro.activities.SimpleActivity
22+ import com.simplemobiletools.filemanager.pro.adapters.ItemsAdapter
23+ import com.simplemobiletools.filemanager.pro.extensions.config
1824import com.simplemobiletools.filemanager.pro.extensions.formatSizeThousand
1925import com.simplemobiletools.filemanager.pro.helpers.*
26+ import com.simplemobiletools.filemanager.pro.interfaces.ItemOperationsListener
27+ import com.simplemobiletools.filemanager.pro.models.ListItem
2028import kotlinx.android.synthetic.main.storage_fragment.view.*
2129import 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}
0 commit comments