Skip to content

Commit b3ea28c

Browse files
committed
try fetching Last Modified from Mediastore, if possible
1 parent ee9210c commit b3ea28c

File tree

1 file changed

+41
-4
lines changed
  • app/src/main/kotlin/com/simplemobiletools/filemanager/pro/fragments

1 file changed

+41
-4
lines changed

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

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.simplemobiletools.filemanager.pro.fragments
22

33
import android.os.Bundle
44
import android.os.Parcelable
5+
import android.provider.MediaStore
56
import android.view.LayoutInflater
67
import android.view.View
78
import android.view.ViewGroup
@@ -216,10 +217,11 @@ class ItemsFragment : Fragment(), ItemOperationsListener, Breadcrumbs.Breadcrumb
216217
return
217218
}
218219

220+
val lastModifieds = getFolderLastModifieds(path)
219221
val isSortingBySize = context!!.config.getFolderSorting(currentPath) and SORT_BY_SIZE != 0
220222
if (files != null) {
221223
for (file in files) {
222-
val fileDirItem = getFileDirItemFromFile(file, isSortingBySize)
224+
val fileDirItem = getFileDirItemFromFile(file, isSortingBySize, lastModifieds)
223225
if (fileDirItem != null) {
224226
items.add(fileDirItem)
225227
}
@@ -229,7 +231,7 @@ class ItemsFragment : Fragment(), ItemOperationsListener, Breadcrumbs.Breadcrumb
229231
callback(path, items)
230232
}
231233

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

251-
return ListItem(curPath, curName, isDirectory, children, size, file.lastModified(), false)
253+
var lastModified = lastModifieds.remove(curPath)
254+
if (lastModified == null) {
255+
lastModified = file.lastModified()
256+
}
257+
258+
return ListItem(curPath, curName, isDirectory, children, size, lastModified, false)
252259
}
253260

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

270+
private fun getFolderLastModifieds(folder: String): HashMap<String, Long> {
271+
val lastModifieds = HashMap<String, Long>()
272+
val projection = arrayOf(
273+
MediaStore.Images.Media.DISPLAY_NAME,
274+
MediaStore.Images.Media.DATE_MODIFIED
275+
)
276+
277+
val uri = MediaStore.Files.getContentUri("external")
278+
val selection = "${MediaStore.Images.Media.DATA} LIKE ? AND ${MediaStore.Images.Media.DATA} NOT LIKE ?"
279+
val selectionArgs = arrayOf("$folder/%", "$folder/%/%")
280+
281+
val cursor = context!!.contentResolver.query(uri, projection, selection, selectionArgs, null)
282+
cursor?.use {
283+
if (cursor.moveToFirst()) {
284+
do {
285+
try {
286+
val lastModified = cursor.getLongValue(MediaStore.Images.Media.DATE_MODIFIED) * 1000
287+
if (lastModified != 0L) {
288+
val name = cursor.getStringValue(MediaStore.Images.Media.DISPLAY_NAME)
289+
lastModifieds["$folder/$name"] = lastModified
290+
}
291+
} catch (e: Exception) {
292+
}
293+
} while (cursor.moveToNext())
294+
}
295+
}
296+
297+
return lastModifieds
298+
}
299+
263300
private fun itemClicked(item: FileDirItem) {
264301
if (item.isDirectory) {
265302
(activity as? MainActivity)?.apply {
@@ -354,7 +391,7 @@ class ItemsFragment : Fragment(), ItemOperationsListener, Breadcrumbs.Breadcrumb
354391
files.addAll(searchFiles(text, it.absolutePath))
355392
} else {
356393
if (it.name.contains(text, true)) {
357-
val fileDirItem = getFileDirItemFromFile(it, isSortingBySize)
394+
val fileDirItem = getFileDirItemFromFile(it, isSortingBySize, HashMap<String, Long>())
358395
if (fileDirItem != null) {
359396
files.add(fileDirItem)
360397
}

0 commit comments

Comments
 (0)