Skip to content

Commit 07fb447

Browse files
committed
enhance gallery mode (#152)
1 parent fda9cc3 commit 07fb447

File tree

12 files changed

+114
-55
lines changed

12 files changed

+114
-55
lines changed

app/src/main/java/com/raival/compose/file/explorer/screen/main/tab/files/misc/ViewConfigs.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@ package com.raival.compose.file.explorer.screen.main.tab.files.misc
33
import com.raival.compose.file.explorer.App.Companion.globalClass
44

55
data class ViewConfigs(
6-
val viewType: ViewType = ViewType.COLUMNS,
6+
val viewType: ViewType = ViewType.LIST,
77
val columnCount: Int = 1,
88
val cropThumbnails: Boolean = false,
9+
val galleryMode: Boolean = false,
10+
val hideMediaNames: Boolean = false,
911
val itemSize: Int = globalClass.preferencesManager.itemSize
1012
)
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
package com.raival.compose.file.explorer.screen.main.tab.files.misc
22

33
enum class ViewType {
4-
COLUMNS, GRID
4+
LIST, GRID
55
}

app/src/main/java/com/raival/compose/file/explorer/screen/main/tab/files/ui/FilesList.kt

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ import com.raival.compose.file.explorer.common.ui.Space
6464
import com.raival.compose.file.explorer.screen.main.tab.files.FilesTab
6565
import com.raival.compose.file.explorer.screen.main.tab.files.coil.canUseCoil
6666
import com.raival.compose.file.explorer.screen.main.tab.files.holder.ContentHolder
67+
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.imageFileType
68+
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.videoFileType
6769
import com.raival.compose.file.explorer.screen.main.tab.files.misc.ViewConfigs
6870
import com.raival.compose.file.explorer.screen.main.tab.files.misc.ViewType
6971
import com.raival.compose.file.explorer.screen.preferences.constant.FileItemSizeMap.getFileListFontSize
@@ -170,7 +172,7 @@ private fun LoadingOverlay(tab: FilesTab) {
170172
@Composable
171173
private fun FilesListContent(tab: FilesTab) {
172174
when (tab.viewConfig.viewType) {
173-
ViewType.COLUMNS -> FilesListColumns(tab)
175+
ViewType.LIST -> FilesListColumns(tab)
174176
ViewType.GRID -> FilesListGrid(tab)
175177
}
176178
}
@@ -380,7 +382,7 @@ private fun GridFileItem(
380382
Box(
381383
modifier = Modifier
382384
.fillMaxWidth()
383-
.then(if (viewConfigs.cropThumbnails) Modifier.aspectRatio(1f) else Modifier)
385+
.then(if (viewConfigs.galleryMode) Modifier.aspectRatio(1f) else Modifier)
384386
.combinedClickable(
385387
onClick = {
386388
if (tab.selectedFiles.isNotEmpty()) {
@@ -410,11 +412,11 @@ private fun GridFileItem(
410412
Column(
411413
modifier = Modifier
412414
.fillMaxWidth()
413-
.padding(if (viewConfigs.cropThumbnails) 1.dp else 8.dp),
415+
.padding(if (viewConfigs.galleryMode) 1.dp else 6.dp),
414416
horizontalAlignment = Alignment.CenterHorizontally
415417
) {
416418
Box(
417-
modifier = if (viewConfigs.cropThumbnails) Modifier
419+
modifier = if (viewConfigs.galleryMode) Modifier
418420
.fillMaxWidth()
419421
.weight(1f)
420422
else Modifier
@@ -438,7 +440,10 @@ private fun GridFileItem(
438440
handleLongClick(tab, itemPath, item, index)
439441
}
440442
)
441-
if (viewConfigs.cropThumbnails) {
443+
if (viewConfigs.galleryMode && (item.isFolder || (item.isFile() && ((!videoFileType.contains(
444+
item.extension
445+
) && !imageFileType.contains(item.extension)) || !viewConfigs.hideMediaNames)))
446+
) {
442447
Row(
443448
modifier = Modifier
444449
.fillMaxWidth()
@@ -467,14 +472,14 @@ private fun GridFileItem(
467472
}
468473
}
469474
}
470-
if (!viewConfigs.cropThumbnails) {
475+
if (!viewConfigs.galleryMode) {
471476
Spacer(modifier = Modifier.height(4.dp))
472477
val fontSize = getFileListFontSize(tab.activeFolder) * 0.8
473478
Text(
474479
text = item.displayName,
475480
fontSize = fontSize.sp,
476481
fontWeight = if (isSelected) FontWeight.Medium else FontWeight.Normal,
477-
maxLines = 1,
482+
maxLines = 2,
478483
lineHeight = (fontSize + 2).sp,
479484
overflow = TextOverflow.Ellipsis,
480485
textAlign = TextAlign.Center,
@@ -486,14 +491,6 @@ private fun GridFileItem(
486491
modifier = Modifier.fillMaxWidth()
487492
)
488493
}
489-
490-
// Does not fit. Maybe find a better place later.
491-
/*Spacer(modifier = Modifier.height(4.dp))
492-
FileDetailsCompact(
493-
item = item,
494-
currentItemPath = itemPath,
495-
isHighlighted = tab.highlightedFiles.contains(itemPath)
496-
)*/
497494
}
498495
}
499496
}
@@ -506,7 +503,7 @@ private fun FileIcon(
506503
onClick: () -> Unit,
507504
onLongClick: () -> Unit = {}
508505
) {
509-
val sizeModifier = if (viewConfigs.viewType == ViewType.GRID && viewConfigs.cropThumbnails) {
506+
val sizeModifier = if (viewConfigs.viewType == ViewType.GRID && viewConfigs.galleryMode) {
510507
Modifier.fillMaxSize()
511508
} else {
512509
Modifier.size(size)

app/src/main/java/com/raival/compose/file/explorer/screen/main/tab/files/ui/dialog/FileViewConfigDialog.kt

Lines changed: 89 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import androidx.compose.material.icons.automirrored.rounded.ViewList
1818
import androidx.compose.material.icons.rounded.CropFree
1919
import androidx.compose.material.icons.rounded.Folder
2020
import androidx.compose.material.icons.rounded.GridView
21+
import androidx.compose.material.icons.rounded.Image
22+
import androidx.compose.material.icons.rounded.TextFields
2123
import androidx.compose.material.icons.rounded.ViewModule
2224
import androidx.compose.material3.Card
2325
import androidx.compose.material3.CardDefaults
@@ -93,11 +95,21 @@ fun FileViewConfigDialog(
9395
mutableStateOf(tab.viewConfig.cropThumbnails)
9496
}
9597

98+
var galleryMode by remember {
99+
mutableStateOf(tab.viewConfig.galleryMode)
100+
}
101+
102+
var hideMediaNames by remember {
103+
mutableStateOf(tab.viewConfig.hideMediaNames)
104+
}
105+
96106
fun saveConfigs() {
97107
val configs = ViewConfigs(
98-
viewType = if (viewType == ViewType.GRID.ordinal) ViewType.GRID else ViewType.COLUMNS,
108+
viewType = if (viewType == ViewType.GRID.ordinal) ViewType.GRID else ViewType.LIST,
99109
columnCount = columnCount.roundToInt(),
100110
cropThumbnails = cropThumbnails,
111+
galleryMode = galleryMode,
112+
hideMediaNames = hideMediaNames,
101113
itemSize = itemSize
102114
)
103115

@@ -170,45 +182,39 @@ fun FileViewConfigDialog(
170182
modifier = Modifier.padding(bottom = 12.dp)
171183
)
172184

173-
Card(
174-
modifier = Modifier.fillMaxWidth(),
175-
colors = CardDefaults.cardColors(
176-
containerColor = MaterialTheme.colorScheme.surfaceContainer
177-
),
178-
elevation = CardDefaults.cardElevation(defaultElevation = 0.dp)
185+
Column(
186+
modifier = Modifier
187+
.fillMaxWidth()
188+
.selectableGroup()
179189
) {
180-
Column(
181-
modifier = Modifier
182-
.selectableGroup()
183-
.padding(8.dp)
184-
) {
185-
RadioButtonItem(
186-
icon = Icons.Rounded.GridView,
187-
text = stringResource(R.string.grid_view),
188-
selected = viewType == ViewType.GRID.ordinal,
189-
onClick = {
190-
viewType = ViewType.GRID.ordinal
191-
// Reset column count for grid view
192-
columnCount = 4f
193-
}
194-
)
190+
RadioButtonItem(
191+
icon = Icons.Rounded.GridView,
192+
text = stringResource(R.string.grid_view),
193+
selected = viewType == ViewType.GRID.ordinal,
194+
onClick = {
195+
viewType = ViewType.GRID.ordinal
196+
// Reset column count for grid view
197+
columnCount = 4f
198+
}
199+
)
195200

196-
HorizontalDivider(
197-
modifier = Modifier.padding(horizontal = 16.dp, vertical = 4.dp),
198-
color = MaterialTheme.colorScheme.outline.copy(alpha = 0.12f)
201+
HorizontalDivider(
202+
modifier = Modifier.padding(
203+
horizontal = 8.dp,
204+
vertical = 4.dp
199205
)
206+
)
200207

201-
RadioButtonItem(
202-
icon = Icons.AutoMirrored.Rounded.ViewList,
203-
text = stringResource(R.string.list_view),
204-
selected = viewType == ViewType.COLUMNS.ordinal,
205-
onClick = {
206-
viewType = ViewType.COLUMNS.ordinal
207-
// Reset column count for column view
208-
columnCount = 1f
209-
}
210-
)
211-
}
208+
RadioButtonItem(
209+
icon = Icons.AutoMirrored.Rounded.ViewList,
210+
text = stringResource(R.string.list_view),
211+
selected = viewType == ViewType.LIST.ordinal,
212+
onClick = {
213+
viewType = ViewType.LIST.ordinal
214+
// Reset column count for column view
215+
columnCount = 1f
216+
}
217+
)
212218
}
213219

214220
Space(size = 24.dp)
@@ -376,13 +382,59 @@ fun FileViewConfigDialog(
376382
) {
377383
SwitchSettingItem(
378384
icon = Icons.Rounded.CropFree,
379-
title = if (viewType == ViewType.GRID.ordinal) stringResource(R.string.gallery_mode) else stringResource(
385+
title = stringResource(
380386
R.string.crop_in_thumbnails
381387
),
382388
checked = cropThumbnails,
383389
onCheckedChange = { cropThumbnails = it }
384390
)
385391
}
392+
393+
if (viewType == ViewType.GRID.ordinal) {
394+
HorizontalDivider(
395+
modifier = Modifier.padding(
396+
horizontal = 8.dp,
397+
vertical = 4.dp
398+
)
399+
)
400+
401+
Card(
402+
modifier = Modifier.fillMaxWidth(),
403+
colors = CardDefaults.cardColors(
404+
containerColor = MaterialTheme.colorScheme.surfaceContainer
405+
),
406+
elevation = CardDefaults.cardElevation(defaultElevation = 0.dp)
407+
) {
408+
SwitchSettingItem(
409+
icon = Icons.Rounded.Image,
410+
title = stringResource(R.string.gallery_mode),
411+
checked = galleryMode,
412+
onCheckedChange = { galleryMode = it }
413+
)
414+
}
415+
416+
HorizontalDivider(
417+
modifier = Modifier.padding(
418+
horizontal = 8.dp,
419+
vertical = 4.dp
420+
)
421+
)
422+
423+
Card(
424+
modifier = Modifier.fillMaxWidth(),
425+
colors = CardDefaults.cardColors(
426+
containerColor = MaterialTheme.colorScheme.surfaceContainer
427+
),
428+
elevation = CardDefaults.cardElevation(defaultElevation = 0.dp)
429+
) {
430+
SwitchSettingItem(
431+
icon = Icons.Rounded.TextFields,
432+
title = stringResource(R.string.hide_media_names),
433+
checked = hideMediaNames,
434+
onCheckedChange = { hideMediaNames = it }
435+
)
436+
}
437+
}
386438
}
387439
}
388440
}

app/src/main/res/values-fa/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,4 +433,5 @@
433433
<string name="import_prefs_desc">آیا می خواهید تنظیمات فعلی خود را با تنظیمات موجود در فایل انتخاب شده جایگزین کنید؟</string>
434434
<string name="other">دیگر</string>
435435
<string name="path_copied_to_clipboard">مسیر در کلیپ‌بورد کپی شد</string>
436+
<string name="hide_media_names">مخفی کردن نام‌ها از فایل‌های رسانه</string>
436437
</resources>

app/src/main/res/values-fr/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,4 +433,5 @@
433433
<string name="import_prefs_desc">Voulez-vous remplacer vos préférences actuelles par celles contenues dans le fichier sélectionné ?</string>
434434
<string name="other">Autre</string>
435435
<string name="path_copied_to_clipboard">Chemin copié dans le presse-papiers</string>
436+
<string name="hide_media_names">Masquer les noms des fichiers multimédias</string>
436437
</resources>

app/src/main/res/values-pl/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,4 +433,5 @@
433433
<string name="import_prefs_desc">Czy chcesz zastąpić bieżące preferencje tymi zawartymi w wybranym pliku?</string>
434434
<string name="other">Inne</string>
435435
<string name="path_copied_to_clipboard">Ścieżka skopiowana do schowka</string>
436+
<string name="hide_media_names">Ukryj nazwy plików multimedialnych</string>
436437
</resources>

app/src/main/res/values-pt-rBR/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,4 +433,5 @@
433433
<string name="import_prefs_desc">Você deseja substituir suas preferências atuais pelas contidas no arquivo selecionado?</string>
434434
<string name="other">Outro</string>
435435
<string name="path_copied_to_clipboard">Caminho copiado para a área de transferência</string>
436+
<string name="hide_media_names">Ocultar nomes de arquivos de mídia</string>
436437
</resources>

app/src/main/res/values-ru/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,4 +433,5 @@
433433
<string name="import_prefs_desc">Вы хотите перезаписать текущие настройки теми, которые содержатся в выбранном файле?</string>
434434
<string name="other">Другое</string>
435435
<string name="path_copied_to_clipboard">Путь скопирован в буфер обмена</string>
436+
<string name="hide_media_names">Скрыть названия медиафайлов</string>
436437
</resources>

app/src/main/res/values-tr/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,4 +434,5 @@
434434
<string name="import_prefs_desc">Geçerli tercihlerinizi seçilen dosyadaki tercihlerle değiştirmek istiyor musunuz?</string>
435435
<string name="other">Diğer</string>
436436
<string name="path_copied_to_clipboard">Yol panoya kopyalandı</string>
437+
<string name="hide_media_names">Medya dosyalarındaki adları gizle</string>
437438
</resources>

0 commit comments

Comments
 (0)