1
0
Fork 0
fenix/app/src/main/java/org/mozilla/fenix/ext/DownloadItem.kt

49 lines
2.0 KiB
Kotlin

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.fenix.ext
import org.mozilla.fenix.R
import org.mozilla.fenix.library.downloads.DownloadItem
// While this looks complex, it's actually pretty simple.
@SuppressWarnings("ComplexMethod")
fun DownloadItem.getIcon(): Int {
fun getIconCornerCases(fileName: String?): Int {
return when {
fileName?.endsWith("apk") == true -> R.drawable.ic_file_type_apk
fileName?.endsWith("zip") == true -> R.drawable.ic_file_type_zip
else -> R.drawable.ic_file_type_default
}
}
fun checkForApplicationArchiveSubtypes(contentType: String): Int? {
return when {
contentType.contains("rar") -> R.drawable.ic_file_type_zip
contentType.contains("zip") -> R.drawable.ic_file_type_zip
contentType.contains("7z") -> R.drawable.ic_file_type_zip
contentType.contains("tar") -> R.drawable.ic_file_type_zip
contentType.contains("freearc") -> R.drawable.ic_file_type_zip
contentType.contains("octet-stream") -> null
contentType.contains("vnd.android.package-archive") -> null
else -> R.drawable.ic_file_type_document
}
}
fun getIconFromContentType(contentType: String): Int? {
return when {
contentType.contains("image/") -> R.drawable.ic_file_type_image
contentType.contains("audio/") -> R.drawable.ic_file_type_audio_note
contentType.contains("video/") -> R.drawable.ic_file_type_video
contentType.contains("application/") -> checkForApplicationArchiveSubtypes(contentType)
contentType.contains("text/") -> R.drawable.ic_file_type_document
else -> null
}
}
return contentType?.let { contentType ->
getIconFromContentType(contentType)
} ?: getIconCornerCases(fileName)
}