From 3499a3e356c1f683aa083c1d136fe4d9ccca331c Mon Sep 17 00:00:00 2001 From: m Date: Tue, 15 Sep 2026 10:27:52 +0200 Subject: [PATCH] display images thumbnail --- .../java/com/vaultdrop/mobile/features/saf/FileDeleter.kt | 4 ++++ .../java/com/vaultdrop/mobile/features/saf/FolderDeleter.kt | 4 ++++ .../com/vaultdrop/mobile/features/saf/SafFileDeleter.kt | 3 +++ .../vaultdrop/mobile/ui/folderdetail/FolderDetailScreen.kt | 4 ++-- .../com/vaultdrop/mobile/ui/folderlist/FolderListScreen.kt | 6 +++--- 5 files changed, 16 insertions(+), 5 deletions(-) diff --git a/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/features/saf/FileDeleter.kt b/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/features/saf/FileDeleter.kt index 5f3ded6..673e6dc 100644 --- a/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/features/saf/FileDeleter.kt +++ b/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/features/saf/FileDeleter.kt @@ -10,6 +10,7 @@ import com.vaultdrop.mobile.data.local.entity.FileEntity import com.vaultdrop.mobile.data.local.entity.FileStatus import com.vaultdrop.mobile.data.repository.FileRepository import com.vaultdrop.mobile.data.repository.OutboxRepository +import com.vaultdrop.mobile.features.thumbnails.ThumbnailStore import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext @@ -33,6 +34,7 @@ class FileDeleter @Inject constructor( private val fileRepository: FileRepository, private val outboxRepository: OutboxRepository, private val appDatabase: AppDatabase, + private val thumbnailStore: ThumbnailStore, ) { private val resolver: ContentResolver get() = context.contentResolver @@ -68,6 +70,7 @@ class FileDeleter @Inject constructor( }.onSuccess { deleted -> if (deleted) { fileRepository.markMissing(file.resourceId, System.currentTimeMillis()) + thumbnailStore.delete(file.resourceId) Timber.d("deleted locally %s", uri) } else { Timber.w("deleteDocument returned false for %s", uri) @@ -115,6 +118,7 @@ class FileDeleter @Inject constructor( } } Timber.d("deleted full %s", uri) + thumbnailStore.delete(file.resourceId) } else { Timber.w("deleteDocument returned false for %s", uri) } diff --git a/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/features/saf/FolderDeleter.kt b/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/features/saf/FolderDeleter.kt index a4aa888..7419466 100644 --- a/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/features/saf/FolderDeleter.kt +++ b/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/features/saf/FolderDeleter.kt @@ -11,6 +11,7 @@ import com.vaultdrop.mobile.data.local.entity.FolderEntity import com.vaultdrop.mobile.data.repository.FileRepository import com.vaultdrop.mobile.data.repository.FolderRepository import com.vaultdrop.mobile.data.repository.OutboxRepository +import com.vaultdrop.mobile.features.thumbnails.ThumbnailStore import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext @@ -39,6 +40,7 @@ class FolderDeleter @Inject constructor( private val fileRepository: FileRepository, private val outboxRepository: OutboxRepository, private val appDatabase: AppDatabase, + private val thumbnailStore: ThumbnailStore, ) { private val resolver: ContentResolver get() = context.contentResolver @@ -77,6 +79,7 @@ class FolderDeleter @Inject constructor( tree.files.forEach { fileRepository.markMissing(it.resourceId, now) } tree.folders.forEach { folderRepository.markMissing(it.resourceId, now) } folderRepository.markMissing(folder.resourceId, now) + tree.files.forEach { thumbnailStore.delete(it.resourceId) } Timber.d("deleted folder locally %s", uri) return true } @@ -109,6 +112,7 @@ class FolderDeleter @Inject constructor( appDatabase.withTransaction { treeMarkMissing(folder, tree, now) } + tree.files.forEach { thumbnailStore.delete(it.resourceId) } Timber.d("deleted folder full %s", uri) return true } diff --git a/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/features/saf/SafFileDeleter.kt b/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/features/saf/SafFileDeleter.kt index 0bc2774..6cc8065 100644 --- a/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/features/saf/SafFileDeleter.kt +++ b/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/features/saf/SafFileDeleter.kt @@ -9,6 +9,7 @@ import com.vaultdrop.mobile.data.local.AppDatabase import com.vaultdrop.mobile.data.local.entity.FileEntity import com.vaultdrop.mobile.data.repository.FileRepository import com.vaultdrop.mobile.data.repository.OutboxRepository +import com.vaultdrop.mobile.features.thumbnails.ThumbnailStore import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext @@ -35,6 +36,7 @@ class SafFileDeleter @Inject constructor( private val fileRepository: FileRepository, private val outboxRepository: OutboxRepository, private val appDatabase: AppDatabase, + private val thumbnailStore: ThumbnailStore, ) { private val resolver: ContentResolver get() = context.contentResolver @@ -58,6 +60,7 @@ class SafFileDeleter @Inject constructor( } } Timber.d("deleted %s", uri) + thumbnailStore.delete(file.resourceId) } else { Timber.w("deleteDocument returned false for %s", uri) } diff --git a/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/ui/folderdetail/FolderDetailScreen.kt b/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/ui/folderdetail/FolderDetailScreen.kt index f0b97d3..e8f7df5 100644 --- a/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/ui/folderdetail/FolderDetailScreen.kt +++ b/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/ui/folderdetail/FolderDetailScreen.kt @@ -53,9 +53,9 @@ import com.vaultdrop.mobile.data.local.entity.FileEntity import com.vaultdrop.mobile.data.local.entity.FolderEntity import com.vaultdrop.mobile.features.connection.ConnectionStatusViewModel import com.vaultdrop.mobile.features.sync.SyncViewModel -import com.vaultdrop.mobile.ui.components.FileCategoryIcon import com.vaultdrop.mobile.ui.components.FilePendingReviewBadge import com.vaultdrop.mobile.ui.components.FileSyncStatusIcon +import com.vaultdrop.mobile.ui.components.FileThumbnail import com.vaultdrop.mobile.ui.components.FolderNameDialog import com.vaultdrop.mobile.ui.components.MoveFolderPickerDialog import com.vaultdrop.mobile.ui.components.SelectionState @@ -457,7 +457,7 @@ private fun FileRow( verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(12.dp), ) { - FileCategoryIcon(file = file, size = 24.dp) + FileThumbnail(file = file, size = 40.dp) Column(modifier = Modifier.weight(1f)) { Text( text = file.name, diff --git a/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/ui/folderlist/FolderListScreen.kt b/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/ui/folderlist/FolderListScreen.kt index b520b2d..d241fad 100644 --- a/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/ui/folderlist/FolderListScreen.kt +++ b/mobile-kotlin/app/src/main/java/com/vaultdrop/mobile/ui/folderlist/FolderListScreen.kt @@ -89,9 +89,9 @@ import com.vaultdrop.mobile.features.saf.FileDeleter import com.vaultdrop.mobile.ui.components.DeleteConfirmDialog import com.vaultdrop.mobile.ui.components.DeleteReview import com.vaultdrop.mobile.ui.components.DeleteWarningDialog -import com.vaultdrop.mobile.ui.components.FileCategoryIcon import com.vaultdrop.mobile.ui.components.FilePendingReviewBadge import com.vaultdrop.mobile.ui.components.FileSyncStatusIcon +import com.vaultdrop.mobile.ui.components.FileThumbnail import com.vaultdrop.mobile.ui.components.FolderNameDialog import com.vaultdrop.mobile.ui.components.SelectionState @@ -1059,7 +1059,7 @@ private fun FileCard( ) { Column(modifier = Modifier.padding(12.dp)) { Row(verticalAlignment = androidx.compose.ui.Alignment.CenterVertically) { - FileCategoryIcon(file = file, size = 36.dp) + FileThumbnail(file = file, size = 56.dp) Spacer(Modifier.weight(1f)) if (selection.active) { SelectionStatusIcon(selected = selected) @@ -1122,7 +1122,7 @@ private fun BrowseFileRow( verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(12.dp), ) { - FileCategoryIcon(file = file, size = 26.dp) + FileThumbnail(file = file, size = 40.dp) Column(modifier = Modifier.weight(1f)) { Text( text = file.name,