Skip to content

Commit

Permalink
try fetching Last Modified from Mediastore, if possible
Browse files Browse the repository at this point in the history
  • Loading branch information
tibbi committed Sep 16, 2020
1 parent ee9210c commit b3ea28c
Showing 1 changed file with 41 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.simplemobiletools.filemanager.pro.fragments

import android.os.Bundle
import android.os.Parcelable
import android.provider.MediaStore
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
Expand Down Expand Up @@ -216,10 +217,11 @@ class ItemsFragment : Fragment(), ItemOperationsListener, Breadcrumbs.Breadcrumb
return
}

val lastModifieds = getFolderLastModifieds(path)
val isSortingBySize = context!!.config.getFolderSorting(currentPath) and SORT_BY_SIZE != 0
if (files != null) {
for (file in files) {
val fileDirItem = getFileDirItemFromFile(file, isSortingBySize)
val fileDirItem = getFileDirItemFromFile(file, isSortingBySize, lastModifieds)
if (fileDirItem != null) {
items.add(fileDirItem)
}
Expand All @@ -229,7 +231,7 @@ class ItemsFragment : Fragment(), ItemOperationsListener, Breadcrumbs.Breadcrumb
callback(path, items)
}

private fun getFileDirItemFromFile(file: File, isSortingBySize: Boolean): ListItem? {
private fun getFileDirItemFromFile(file: File, isSortingBySize: Boolean, lastModifieds: HashMap<String, Long>): ListItem? {
val curPath = file.absolutePath
val curName = file.name
if (!showHidden && curName.startsWith(".")) {
Expand All @@ -248,7 +250,12 @@ class ItemsFragment : Fragment(), ItemOperationsListener, Breadcrumbs.Breadcrumb
file.length()
}

return ListItem(curPath, curName, isDirectory, children, size, file.lastModified(), false)
var lastModified = lastModifieds.remove(curPath)
if (lastModified == null) {
lastModified = file.lastModified()
}

return ListItem(curPath, curName, isDirectory, children, size, lastModified, false)
}

private fun getListItemsFromFileDirItems(fileDirItems: ArrayList<FileDirItem>): ArrayList<ListItem> {
Expand All @@ -260,6 +267,36 @@ class ItemsFragment : Fragment(), ItemOperationsListener, Breadcrumbs.Breadcrumb
return listItems
}

private fun getFolderLastModifieds(folder: String): HashMap<String, Long> {
val lastModifieds = HashMap<String, Long>()
val projection = arrayOf(
MediaStore.Images.Media.DISPLAY_NAME,
MediaStore.Images.Media.DATE_MODIFIED
)

val uri = MediaStore.Files.getContentUri("external")
val selection = "${MediaStore.Images.Media.DATA} LIKE ? AND ${MediaStore.Images.Media.DATA} NOT LIKE ?"
val selectionArgs = arrayOf("$folder/%", "$folder/%/%")

val cursor = context!!.contentResolver.query(uri, projection, selection, selectionArgs, null)
cursor?.use {
if (cursor.moveToFirst()) {
do {
try {
val lastModified = cursor.getLongValue(MediaStore.Images.Media.DATE_MODIFIED) * 1000
if (lastModified != 0L) {
val name = cursor.getStringValue(MediaStore.Images.Media.DISPLAY_NAME)
lastModifieds["$folder/$name"] = lastModified
}
} catch (e: Exception) {
}
} while (cursor.moveToNext())
}
}

return lastModifieds
}

private fun itemClicked(item: FileDirItem) {
if (item.isDirectory) {
(activity as? MainActivity)?.apply {
Expand Down Expand Up @@ -354,7 +391,7 @@ class ItemsFragment : Fragment(), ItemOperationsListener, Breadcrumbs.Breadcrumb
files.addAll(searchFiles(text, it.absolutePath))
} else {
if (it.name.contains(text, true)) {
val fileDirItem = getFileDirItemFromFile(it, isSortingBySize)
val fileDirItem = getFileDirItemFromFile(it, isSortingBySize, HashMap<String, Long>())
if (fileDirItem != null) {
files.add(fileDirItem)
}
Expand Down

0 comments on commit b3ea28c

Please sign in to comment.