@@ -2,6 +2,7 @@ package com.simplemobiletools.filemanager.pro.fragments
22
33import android.os.Bundle
44import android.os.Parcelable
5+ import android.provider.MediaStore
56import android.view.LayoutInflater
67import android.view.View
78import 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