Skip to content

Commit 9259ef9

Browse files
committed
change how file icons work
1 parent e8575d3 commit 9259ef9

File tree

59 files changed

+202
-1022
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+202
-1022
lines changed

app/src/main/java/com/raival/compose/file/explorer/screen/main/tab/apps/ui/AppInfoBottomSheet.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ fun AppInfoBottomSheet(
9494
.clip(RoundedCornerShape(12.dp)),
9595
model = app.path,
9696
filterQuality = FilterQuality.Low,
97-
error = painterResource(id = R.drawable.apk_file_extension),
97+
error = painterResource(id = R.drawable.apk_file_placeholder),
9898
contentScale = ContentScale.Fit,
9999
contentDescription = null
100100
)

app/src/main/java/com/raival/compose/file/explorer/screen/main/tab/apps/ui/AppListItem.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ fun AppListItem(
5757
.clip(RoundedCornerShape(8.dp)),
5858
model = app.path,
5959
filterQuality = FilterQuality.Low,
60-
error = painterResource(id = R.drawable.apk_file_extension),
60+
error = painterResource(id = R.drawable.apk_file_placeholder),
6161
contentScale = ContentScale.Fit,
6262
contentDescription = null
6363
)

app/src/main/java/com/raival/compose/file/explorer/screen/main/tab/files/coil/DocumentFileMapper.kt

Lines changed: 3 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -2,58 +2,16 @@ package com.raival.compose.file.explorer.screen.main.tab.files.coil
22

33
import coil3.map.Mapper
44
import coil3.request.Options
5-
import com.raival.compose.file.explorer.R
65
import com.raival.compose.file.explorer.screen.main.tab.files.holder.ContentHolder
76
import com.raival.compose.file.explorer.screen.main.tab.files.holder.LocalFileHolder
87
import com.raival.compose.file.explorer.screen.main.tab.files.holder.ZipFileHolder
9-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.aiFileType
10-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.apkFileType
11-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.archiveFileType
12-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.audioFileType
13-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.codeFileType
14-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.cssFileType
15-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.docFileType
16-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.editableFileType
17-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.excelFileType
18-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.fontFileType
19-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.imageFileType
20-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.isoFileType
21-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.javaFileType
22-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.jsFileType
23-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.kotlinFileType
24-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.pptFileType
25-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.psdFileType
26-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.sqlFileType
27-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.vcfFileType
28-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.vectorFileType
298

309
class DocumentFileMapper : Mapper<ContentHolder, Any> {
31-
override fun map(data: ContentHolder, options: Options): Any {
10+
override fun map(data: ContentHolder, options: Options): Any? {
3211
return when {
33-
data.isFolder -> R.drawable.baseline_folder_24
34-
data is LocalFileHolder && canUseCoil(data) -> data.icon
12+
data is LocalFileHolder && canUseCoil(data) -> data.file
3513
data is ZipFileHolder && !data.isFolder -> data
36-
data.extension == aiFileType -> R.drawable.ai_file_extension
37-
data.extension == cssFileType -> R.drawable.css_file_extension
38-
data.extension == isoFileType -> R.drawable.iso_file_extension
39-
data.extension == jsFileType -> R.drawable.js_file_extension
40-
data.extension == psdFileType -> R.drawable.psd_file_extension
41-
data.extension == sqlFileType -> R.drawable.sql_file_extension
42-
data.extension == vcfFileType -> R.drawable.vcf_file_extension
43-
data.extension == javaFileType -> R.drawable.css_file_extension
44-
data.extension == kotlinFileType -> R.drawable.css_file_extension
45-
imageFileType.contains(data.extension) -> R.drawable.jpg_file_extension
46-
docFileType.contains(data.extension) -> R.drawable.doc_file_extension
47-
excelFileType.contains(data.extension) -> R.drawable.xls_file_extension
48-
pptFileType.contains(data.extension) -> R.drawable.ppt_file_extension
49-
fontFileType.contains(data.extension) -> R.drawable.font_file_extension
50-
vectorFileType.contains(data.extension) -> R.drawable.vector_file_extension
51-
audioFileType.contains(data.extension) -> R.drawable.music_file_extension
52-
codeFileType.contains(data.extension) -> R.drawable.css_file_extension
53-
editableFileType.contains(data.extension) -> R.drawable.txt_file_extension
54-
archiveFileType.contains(data.extension) -> R.drawable.zip_file_extension
55-
apkFileType == data.extension -> R.drawable.apk_file_extension
56-
else -> R.drawable.unknown_file_extension
14+
else -> null
5715
}
5816
}
5917
}

app/src/main/java/com/raival/compose/file/explorer/screen/main/tab/files/holder/ContentHolder.kt

Lines changed: 0 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,12 @@
11
package com.raival.compose.file.explorer.screen.main.tab.files.holder
22

33
import android.content.Context
4-
import androidx.annotation.DrawableRes
54
import com.raival.compose.file.explorer.App.Companion.globalClass
65
import com.raival.compose.file.explorer.R
76
import com.raival.compose.file.explorer.common.emptyString
87
import com.raival.compose.file.explorer.common.toFormattedDate
98
import com.raival.compose.file.explorer.screen.main.tab.files.misc.ContentCount
10-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.aiFileType
119
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.apkFileType
12-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.archiveFileType
13-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.audioFileType
14-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.codeFileType
15-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.cssFileType
16-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.docFileType
17-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.editableFileType
18-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.excelFileType
19-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.fontFileType
20-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.imageFileType
21-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.isoFileType
22-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.javaFileType
23-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.jsFileType
24-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.kotlinFileType
25-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.pptFileType
26-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.psdFileType
27-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.sqlFileType
28-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.vcfFileType
29-
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.vectorFileType
3010
import com.raival.compose.file.explorer.screen.main.tab.files.misc.SortingMethod.SORT_BY_DATE
3111
import com.raival.compose.file.explorer.screen.main.tab.files.misc.SortingMethod.SORT_BY_NAME
3212
import com.raival.compose.file.explorer.screen.main.tab.files.misc.SortingMethod.SORT_BY_SIZE
@@ -47,10 +27,6 @@ abstract class ContentHolder {
4727
abstract val uniquePath: String
4828

4929
abstract val displayName: String
50-
abstract val icon: Any
51-
52-
@get:DrawableRes
53-
abstract val iconPlaceholder: Int
5430

5531
abstract val isFolder: Boolean
5632
abstract val lastModified: Long
@@ -167,32 +143,4 @@ abstract class ContentHolder {
167143
fun getLastModifiedDate(): String {
168144
return lastModified.toFormattedDate(hideSeconds = true)
169145
}
170-
171-
@DrawableRes
172-
fun getContentIconPlaceholderResource(): Int {
173-
return when {
174-
isFolder -> R.drawable.baseline_folder_24
175-
extension == aiFileType -> R.drawable.ai_file_extension
176-
extension == cssFileType -> R.drawable.css_file_extension
177-
extension == isoFileType -> R.drawable.iso_file_extension
178-
extension == jsFileType -> R.drawable.js_file_extension
179-
extension == psdFileType -> R.drawable.psd_file_extension
180-
extension == sqlFileType -> R.drawable.sql_file_extension
181-
extension == vcfFileType -> R.drawable.vcf_file_extension
182-
extension == javaFileType -> R.drawable.css_file_extension
183-
extension == kotlinFileType -> R.drawable.css_file_extension
184-
imageFileType.contains(extension) -> R.drawable.jpg_file_extension
185-
docFileType.contains(extension) -> R.drawable.doc_file_extension
186-
excelFileType.contains(extension) -> R.drawable.xls_file_extension
187-
pptFileType.contains(extension) -> R.drawable.ppt_file_extension
188-
fontFileType.contains(extension) -> R.drawable.font_file_extension
189-
vectorFileType.contains(extension) -> R.drawable.vector_file_extension
190-
audioFileType.contains(extension) -> R.drawable.music_file_extension
191-
codeFileType.contains(extension) -> R.drawable.css_file_extension
192-
editableFileType.contains(extension) -> R.drawable.txt_file_extension
193-
archiveFileType.contains(extension) -> R.drawable.zip_file_extension
194-
apkFileType == extension -> R.drawable.apk_file_extension
195-
else -> R.drawable.unknown_file_extension
196-
}
197-
}
198146
}

app/src/main/java/com/raival/compose/file/explorer/screen/main/tab/files/holder/LocalFileHolder.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,6 @@ class LocalFileHolder(val file: File) : ContentHolder() {
4040

4141
override val size: Long by lazy { file.length() }
4242

43-
override val icon: Any = file
44-
45-
override val iconPlaceholder: Int by lazy { getContentIconPlaceholderResource() }
46-
4743
override val uniquePath: String by lazy { file.absolutePath }
4844

4945
override val extension: String by lazy { file.extension.lowercase() }

app/src/main/java/com/raival/compose/file/explorer/screen/main/tab/files/holder/RootFileHolder.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ class RootFileHolder : ContentHolder() {
2222

2323
override val uniquePath = rootDir
2424
override val displayName = globalClass.getString(R.string.root_dir)
25-
override val icon = R.drawable.baseline_folder_24
26-
override val iconPlaceholder = R.drawable.baseline_folder_24
2725
override val isFolder = true
2826
override val lastModified = 0L
2927
override val size = 0L

app/src/main/java/com/raival/compose/file/explorer/screen/main/tab/files/holder/VirtualFileHolder.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ class VirtualFileHolder(val type: Int) : ContentHolder() {
2828
else -> globalClass.getString(R.string.unknown)
2929
}
3030

31-
override val icon = emptyString
32-
3331
override val isFolder = true
3432

3533
override val lastModified = 0L
@@ -44,8 +42,6 @@ class VirtualFileHolder(val type: Int) : ContentHolder() {
4442

4543
override suspend fun getParent() = null
4644

47-
override val iconPlaceholder = R.drawable.baseline_folder_24
48-
4945
override suspend fun listContent() = when (type) {
5046
BOOKMARKS -> getBookmarks()
5147
AUDIO -> getAudioFiles()

app/src/main/java/com/raival/compose/file/explorer/screen/main/tab/files/holder/ZipFileHolder.kt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,6 @@ class ZipFileHolder(
2525
override val displayName = node.name
2626
var details = emptyString
2727

28-
override val icon = if (node.isDirectory)
29-
R.drawable.baseline_folder_24 else R.drawable.unknown_file_extension
30-
31-
override val iconPlaceholder = if (node.isDirectory)
32-
R.drawable.baseline_folder_24 else R.drawable.unknown_file_extension
33-
3428
override val isFolder = node.isDirectory
3529
override val lastModified = node.lastModified
3630
override val size = node.size
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package com.raival.compose.file.explorer.screen.main.tab.files.ui
2+
3+
import androidx.compose.foundation.background
4+
import androidx.compose.foundation.layout.Box
5+
import androidx.compose.foundation.layout.fillMaxSize
6+
import androidx.compose.material.icons.Icons
7+
import androidx.compose.material.icons.filled.Android
8+
import androidx.compose.material.icons.filled.Archive
9+
import androidx.compose.material.icons.filled.AudioFile
10+
import androidx.compose.material.icons.filled.DataObject
11+
import androidx.compose.material.icons.filled.Description
12+
import androidx.compose.material.icons.filled.Image
13+
import androidx.compose.material.icons.filled.ImagesearchRoller
14+
import androidx.compose.material.icons.filled.QuestionMark
15+
import androidx.compose.material.icons.filled.Slideshow
16+
import androidx.compose.material.icons.filled.TableChart
17+
import androidx.compose.material.icons.filled.TextFields
18+
import androidx.compose.material.icons.filled.VideoFile
19+
import androidx.compose.material.icons.rounded.Folder
20+
import androidx.compose.material3.Icon
21+
import androidx.compose.material3.MaterialTheme.colorScheme
22+
import androidx.compose.runtime.Composable
23+
import androidx.compose.ui.Alignment
24+
import androidx.compose.ui.Modifier
25+
import androidx.compose.ui.graphics.Color
26+
import androidx.compose.ui.graphics.vector.ImageVector
27+
import com.raival.compose.file.explorer.screen.main.tab.files.holder.ContentHolder
28+
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.apkFileType
29+
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.archiveFileType
30+
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.audioFileType
31+
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.codeFileType
32+
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.docFileType
33+
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.editableFileType
34+
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.excelFileType
35+
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.fontFileType
36+
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.imageFileType
37+
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.pptFileType
38+
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.vectorFileType
39+
import com.raival.compose.file.explorer.screen.main.tab.files.misc.FileMimeType.videoFileType
40+
41+
data class FileContentIcon(
42+
val icon: Any,
43+
val backgroundColor: Color? = Color(0xFF1C439B),
44+
val iconColor: Color? = Color.White,
45+
)
46+
47+
@Composable
48+
private fun getContentIcon(content: ContentHolder): FileContentIcon {
49+
if (content.isFolder) return FileContentIcon(
50+
icon = Icons.Rounded.Folder,
51+
backgroundColor = colorScheme.surfaceVariant,
52+
iconColor = colorScheme.onSurfaceVariant
53+
)
54+
55+
val extension = content.extension
56+
57+
if (videoFileType.contains(extension)) return FileContentIcon(Icons.Default.VideoFile)
58+
if (imageFileType.contains(extension)) return FileContentIcon(Icons.Default.Image)
59+
if (docFileType.contains(extension)) return FileContentIcon(Icons.Default.Description)
60+
if (excelFileType.contains(extension)) return FileContentIcon(Icons.Default.TableChart)
61+
if (pptFileType.contains(extension)) return FileContentIcon(Icons.Default.Slideshow)
62+
if (fontFileType.contains(extension)) return FileContentIcon(Icons.Default.TextFields)
63+
if (vectorFileType.contains(extension)) return FileContentIcon(Icons.Default.ImagesearchRoller)
64+
if (audioFileType.contains(extension)) return FileContentIcon(Icons.Default.AudioFile)
65+
if (codeFileType.contains(extension)) return FileContentIcon(Icons.Default.DataObject)
66+
if (editableFileType.contains(extension)) return FileContentIcon(Icons.Default.Description)
67+
if (apkFileType == extension) return FileContentIcon(Icons.Default.Android)
68+
if (archiveFileType.contains(extension)) return FileContentIcon(Icons.Default.Archive)
69+
70+
return FileContentIcon(Icons.Default.QuestionMark)
71+
}
72+
73+
@Composable
74+
fun FileContentIcon(item: ContentHolder) {
75+
val fileContentIcon = getContentIcon(item)
76+
Box(
77+
modifier = Modifier
78+
.fillMaxSize()
79+
.background(color = fileContentIcon.backgroundColor ?: colorScheme.surfaceVariant),
80+
contentAlignment = Alignment.Center
81+
) {
82+
val fileIcon = fileContentIcon.icon
83+
if (fileIcon is ImageVector) {
84+
Icon(
85+
imageVector = fileIcon,
86+
contentDescription = null,
87+
tint = fileContentIcon.iconColor ?: Color.Unspecified
88+
)
89+
}
90+
}
91+
}

0 commit comments

Comments
 (0)