Skip to content

Commit 2821fe9

Browse files
committed
fix(gallery-fragment): oome
Signed-off-by: alperozturk96 <alper_ozturk@proton.me>
1 parent b8912a0 commit 2821fe9

2 files changed

Lines changed: 19 additions & 25 deletions

File tree

app/src/main/java/com/nextcloud/utils/extensions/OCFileExtensions.kt

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -58,21 +58,22 @@ fun OCFile?.getDepth(): OCFileDepth? {
5858
fun List<OCFile>.toGalleryItems(columns: Int, defaultSize: Int): List<GalleryItems> {
5959
if (isEmpty()) return emptyList()
6060

61-
return groupBy { firstOfMonth(it.modificationTimestamp) }
61+
val calendar = Calendar.getInstance()
62+
return groupBy {
63+
calendar.timeInMillis = it.modificationTimestamp
64+
calendar.set(Calendar.DAY_OF_MONTH, 1)
65+
calendar.set(Calendar.HOUR_OF_DAY, 0)
66+
calendar.set(Calendar.MINUTE, 0)
67+
calendar.set(Calendar.SECOND, 0)
68+
calendar.set(Calendar.MILLISECOND, 0)
69+
calendar.timeInMillis
70+
}
6271
.map { (date, filesList) ->
6372
GalleryItems(date, transformToRows(filesList, columns, defaultSize))
6473
}
6574
.sortedByDescending { it.date }
6675
}
6776

68-
private fun firstOfMonth(timestamp: Long): Long = Calendar.getInstance().apply {
69-
time = Date(timestamp)
70-
set(Calendar.DAY_OF_MONTH, getActualMinimum(Calendar.DAY_OF_MONTH))
71-
set(Calendar.HOUR_OF_DAY, 0)
72-
set(Calendar.MINUTE, 0)
73-
set(Calendar.SECOND, 0)
74-
}.timeInMillis
75-
7677
private fun transformToRows(list: List<OCFile>, columns: Int, defaultSize: Int): List<GalleryRow> {
7778
if (list.isEmpty()) return emptyList()
7879

app/src/main/java/com/owncloud/android/ui/fragment/GalleryFragment.kt

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -382,32 +382,25 @@ class GalleryFragment :
382382
val mediaState = bottomSheet?.currMediaState ?: return
383383

384384
showGalleryJob?.cancel()
385-
showGalleryJob = lifecycleScope.launch(Dispatchers.IO) {
385+
showGalleryJob = lifecycleScope.launch(Dispatchers.Default) {
386386
val remotePath = preferences.getLastSelectedMediaFolder()
387387
val items = mContainerActivity.storageManager.getAllGalleryItemsSuspended()
388388

389-
val predicate: (OCFile) -> Boolean = {
390-
when (mediaState) {
391-
MediaState.MEDIA_STATE_PHOTOS_ONLY -> {
392-
it.remotePath.startsWith(remotePath) && MimeTypeUtil.isImage(it.mimeType)
393-
}
394-
395-
MediaState.MEDIA_STATE_VIDEOS_ONLY -> {
396-
it.remotePath.startsWith(remotePath) && MimeTypeUtil.isVideo(it.mimeType)
397-
}
389+
val isPhotosOnly = mediaState == MediaState.MEDIA_STATE_PHOTOS_ONLY
390+
val isVideosOnly = mediaState == MediaState.MEDIA_STATE_VIDEOS_ONLY
398391

399-
else -> {
400-
it.remotePath.startsWith(remotePath)
401-
}
402-
}
392+
val filteredItems = items.filter {
393+
if (!it.remotePath.startsWith(remotePath)) return@filter false
394+
if (isPhotosOnly) return@filter MimeTypeUtil.isImage(it.mimeType)
395+
if (isVideosOnly) return@filter MimeTypeUtil.isVideo(it.mimeType)
396+
true
403397
}
404398

405-
val filteredItems = items.filter(predicate)
406399
val galleryItems =
407400
filteredItems.toGalleryItems(columnsCount, ThumbnailsCacheManager.getThumbnailDimension())
408401

409402
withContext(Dispatchers.Main) {
410-
if (filteredItems.isEmpty()) {
403+
if (galleryItems.isEmpty()) {
411404
setEmptyListMessage(SearchType.GALLERY_SEARCH)
412405
}
413406
adapter?.updateList(galleryItems)

0 commit comments

Comments
 (0)