Skip to content

Commit 27099b7

Browse files
committed
Hide Hardware Bitmap Threshold setting if unusable
This hides the setting from the UI if the user's device in on Coil's list of devices with problematic hardware bitmap implementations. Also moved HARDWARE_BITMAP_UNSUPPORTED into the ImageUtil as a property for more ergonomic access across the project.
1 parent 533b2d0 commit 27099b7

File tree

2 files changed

+117
-115
lines changed

2 files changed

+117
-115
lines changed

app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ import logcat.LogPriority
6262
import okhttp3.Headers
6363
import tachiyomi.core.common.util.lang.launchNonCancellable
6464
import tachiyomi.core.common.util.lang.withUIContext
65+
import tachiyomi.core.common.util.system.ImageUtil
6566
import tachiyomi.core.common.util.system.logcat
6667
import tachiyomi.domain.manga.interactor.ResetViewerFlags
6768
import tachiyomi.i18n.MR
@@ -341,7 +342,8 @@ object SettingsAdvancedScreen : SearchableSettings {
341342
subtitleProvider = { value, options ->
342343
stringResource(MR.strings.pref_hardware_bitmap_threshold_summary, options[value].orEmpty())
343344
},
344-
enabled = GLUtil.DEVICE_TEXTURE_LIMIT > GLUtil.SAFE_TEXTURE_LIMIT,
345+
enabled = ImageUtil.HARDWARE_BITMAP_UNSUPPORTED ||
346+
GLUtil.DEVICE_TEXTURE_LIMIT > GLUtil.SAFE_TEXTURE_LIMIT,
345347
entries = GLUtil.CUSTOM_TEXTURE_LIMIT_OPTIONS
346348
.mapIndexed { index, option ->
347349
val display = if (index == 0) {

core/common/src/main/kotlin/tachiyomi/core/common/util/system/ImageUtil.kt

Lines changed: 114 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -573,122 +573,122 @@ object ImageUtil {
573573
}
574574

575575
private val optimalImageHeight = getDisplayMaxHeightInPx * 2
576-
}
577576

578-
val getDisplayMaxHeightInPx: Int
579-
get() = Resources.getSystem().displayMetrics.let { max(it.heightPixels, it.widthPixels) }
577+
/**
578+
* Taken from Coil
579+
* (https://github.com/coil-kt/coil/blob/1674d3516f061aeacbe749a435b1924f9648fd41/coil-core/src/androidMain/kotlin/coil3/util/hardwareBitmaps.kt)
580+
* ---
581+
* Maintains a list of devices with broken/incomplete/unstable hardware bitmap implementations.
582+
*
583+
* Model names are retrieved from
584+
* [Google's official device list](https://support.google.com/googleplay/answer/1727131?hl=en).
585+
*
586+
*/
587+
val HARDWARE_BITMAP_UNSUPPORTED = when (Build.VERSION.SDK_INT) {
588+
26 -> run {
589+
val model = Build.MODEL ?: return@run false
590+
591+
// Samsung Galaxy (ALL)
592+
if (model.removePrefix("SAMSUNG-").startsWith("SM-")) return@run true
593+
594+
val device = Build.DEVICE ?: return@run false
595+
596+
return@run device in arrayOf(
597+
"nora", "nora_8917", "nora_8917_n", // Moto E5
598+
"james", "rjames_f", "rjames_go", "pettyl", // Moto E5 Play
599+
"hannah", "ahannah", "rhannah", // Moto E5 Plus
600+
601+
"ali", "ali_n", // Moto G6
602+
"aljeter", "aljeter_n", "jeter", // Moto G6 Play
603+
"evert", "evert_n", "evert_nt", // Moto G6 Plus
604+
605+
"G3112", "G3116", "G3121", "G3123", "G3125", // Xperia XA1
606+
"G3412", "G3416", "G3421", "G3423", "G3426", // Xperia XA1 Plus
607+
"G3212", "G3221", "G3223", "G3226", // Xperia XA1 Ultra
608+
609+
"BV6800Pro", // BlackView BV6800Pro
610+
"CatS41", // Cat S41
611+
"Hi9Pro", // CHUWI Hi9 Pro
612+
"manning", // Lenovo K8 Note
613+
"N5702L", // NUU Mobile G3
614+
)
615+
}
580616

581-
/**
582-
* Taken from Coil
583-
* (https://github.com/coil-kt/coil/blob/1674d3516f061aeacbe749a435b1924f9648fd41/coil-core/src/androidMain/kotlin/coil3/util/hardwareBitmaps.kt)
584-
* ---
585-
* Maintains a list of devices with broken/incomplete/unstable hardware bitmap implementations.
586-
*
587-
* Model names are retrieved from
588-
* [Google's official device list](https://support.google.com/googleplay/answer/1727131?hl=en).
589-
*
590-
*/
591-
private val HARDWARE_BITMAP_UNSUPPORTED = when (Build.VERSION.SDK_INT) {
592-
26 -> run {
593-
val model = Build.MODEL ?: return@run false
594-
595-
// Samsung Galaxy (ALL)
596-
if (model.removePrefix("SAMSUNG-").startsWith("SM-")) return@run true
597-
598-
val device = Build.DEVICE ?: return@run false
599-
600-
return@run device in arrayOf(
601-
"nora", "nora_8917", "nora_8917_n", // Moto E5
602-
"james", "rjames_f", "rjames_go", "pettyl", // Moto E5 Play
603-
"hannah", "ahannah", "rhannah", // Moto E5 Plus
604-
605-
"ali", "ali_n", // Moto G6
606-
"aljeter", "aljeter_n", "jeter", // Moto G6 Play
607-
"evert", "evert_n", "evert_nt", // Moto G6 Plus
608-
609-
"G3112", "G3116", "G3121", "G3123", "G3125", // Xperia XA1
610-
"G3412", "G3416", "G3421", "G3423", "G3426", // Xperia XA1 Plus
611-
"G3212", "G3221", "G3223", "G3226", // Xperia XA1 Ultra
612-
613-
"BV6800Pro", // BlackView BV6800Pro
614-
"CatS41", // Cat S41
615-
"Hi9Pro", // CHUWI Hi9 Pro
616-
"manning", // Lenovo K8 Note
617-
"N5702L", // NUU Mobile G3
618-
)
619-
}
617+
27 -> run {
618+
val device = Build.DEVICE ?: return@run false
619+
620+
return@run device in arrayOf(
621+
"mcv1s", // LG Tribute Empire
622+
"mcv3", // LG K11
623+
"mcv5a", // LG Q7
624+
"mcv7a", // LG Stylo 4
625+
626+
"A30ATMO", // T-Mobile REVVL 2
627+
"A70AXLTMO", // T-Mobile REVVL 2 PLUS
628+
629+
"A3A_8_4G_TMO", // Alcatel 9027W
630+
"Edison_CKT", // Alcatel ONYX
631+
"EDISON_TF", // Alcatel TCL XL2
632+
"FERMI_TF", // Alcatel A501DL
633+
"U50A_ATT", // Alcatel TETRA
634+
"U50A_PLUS_ATT", // Alcatel 5059R
635+
"U50A_PLUS_TF", // Alcatel TCL LX
636+
"U50APLUSTMO", // Alcatel 5059Z
637+
"U5A_PLUS_4G", // Alcatel 1X
638+
639+
"RCT6513W87DK5e", // RCA Galileo Pro
640+
"RCT6873W42BMF9A", // RCA Voyager
641+
"RCT6A03W13", // RCA 10 Viking
642+
"RCT6B03W12", // RCA Atlas 10 Pro
643+
"RCT6B03W13", // RCA Atlas 10 Pro+
644+
"RCT6T06E13", // RCA Artemis 10
645+
646+
"A3_Pro", // Umidigi A3 Pro
647+
"One", // Umidigi One
648+
"One_Max", // Umidigi One Max
649+
"One_Pro", // Umidigi One Pro
650+
"Z2", // Umidigi Z2
651+
"Z2_PRO", // Umidigi Z2 Pro
652+
653+
"Armor_3", // Ulefone Armor 3
654+
"Armor_6", // Ulefone Armor 6
655+
656+
"Blackview", // Blackview BV6000
657+
"BV9500", // Blackview BV9500
658+
"BV9500Pro", // Blackview BV9500Pro
659+
660+
"A6L-C", // Nuu A6L-C
661+
"N5002LA", // Nuu A7L
662+
"N5501LA", // Nuu A5L
663+
664+
"Power_2_Pro", // Leagoo Power 2 Pro
665+
"Power_5", // Leagoo Power 5
666+
"Z9", // Leagoo Z9
667+
668+
"V0310WW", // Blu VIVO VI+
669+
"V0330WW", // Blu VIVO XI
670+
671+
"A3", // BenQ A3
672+
"ASUS_X018_4", // Asus ZenFone Max Plus M1 (ZB570TL)
673+
"C210AE", // Wiko Life
674+
"fireball", // DROID Incredible 4G LTE
675+
"ILA_X1", // iLA X1
676+
"Infinix-X605_sprout", // Infinix NOTE 5 Stylus
677+
"j7maxlte", // Samsung Galaxy J7 Max
678+
"KING_KONG_3", // Cubot King Kong 3
679+
"M10500", // Packard Bell M10500
680+
"S70", // Altice ALTICE S70
681+
"S80Lite", // Doogee S80Lite
682+
"SGINO6", // SGiNO 6
683+
"st18c10bnn", // Barnes and Noble BNTV650
684+
"TECNO-CA8", // Tecno CAMON X Pro,
685+
"SHIFT6m", // SHIFT 6m
686+
)
687+
}
620688

621-
27 -> run {
622-
val device = Build.DEVICE ?: return@run false
623-
624-
return@run device in arrayOf(
625-
"mcv1s", // LG Tribute Empire
626-
"mcv3", // LG K11
627-
"mcv5a", // LG Q7
628-
"mcv7a", // LG Stylo 4
629-
630-
"A30ATMO", // T-Mobile REVVL 2
631-
"A70AXLTMO", // T-Mobile REVVL 2 PLUS
632-
633-
"A3A_8_4G_TMO", // Alcatel 9027W
634-
"Edison_CKT", // Alcatel ONYX
635-
"EDISON_TF", // Alcatel TCL XL2
636-
"FERMI_TF", // Alcatel A501DL
637-
"U50A_ATT", // Alcatel TETRA
638-
"U50A_PLUS_ATT", // Alcatel 5059R
639-
"U50A_PLUS_TF", // Alcatel TCL LX
640-
"U50APLUSTMO", // Alcatel 5059Z
641-
"U5A_PLUS_4G", // Alcatel 1X
642-
643-
"RCT6513W87DK5e", // RCA Galileo Pro
644-
"RCT6873W42BMF9A", // RCA Voyager
645-
"RCT6A03W13", // RCA 10 Viking
646-
"RCT6B03W12", // RCA Atlas 10 Pro
647-
"RCT6B03W13", // RCA Atlas 10 Pro+
648-
"RCT6T06E13", // RCA Artemis 10
649-
650-
"A3_Pro", // Umidigi A3 Pro
651-
"One", // Umidigi One
652-
"One_Max", // Umidigi One Max
653-
"One_Pro", // Umidigi One Pro
654-
"Z2", // Umidigi Z2
655-
"Z2_PRO", // Umidigi Z2 Pro
656-
657-
"Armor_3", // Ulefone Armor 3
658-
"Armor_6", // Ulefone Armor 6
659-
660-
"Blackview", // Blackview BV6000
661-
"BV9500", // Blackview BV9500
662-
"BV9500Pro", // Blackview BV9500Pro
663-
664-
"A6L-C", // Nuu A6L-C
665-
"N5002LA", // Nuu A7L
666-
"N5501LA", // Nuu A5L
667-
668-
"Power_2_Pro", // Leagoo Power 2 Pro
669-
"Power_5", // Leagoo Power 5
670-
"Z9", // Leagoo Z9
671-
672-
"V0310WW", // Blu VIVO VI+
673-
"V0330WW", // Blu VIVO XI
674-
675-
"A3", // BenQ A3
676-
"ASUS_X018_4", // Asus ZenFone Max Plus M1 (ZB570TL)
677-
"C210AE", // Wiko Life
678-
"fireball", // DROID Incredible 4G LTE
679-
"ILA_X1", // iLA X1
680-
"Infinix-X605_sprout", // Infinix NOTE 5 Stylus
681-
"j7maxlte", // Samsung Galaxy J7 Max
682-
"KING_KONG_3", // Cubot King Kong 3
683-
"M10500", // Packard Bell M10500
684-
"S70", // Altice ALTICE S70
685-
"S80Lite", // Doogee S80Lite
686-
"SGINO6", // SGiNO 6
687-
"st18c10bnn", // Barnes and Noble BNTV650
688-
"TECNO-CA8", // Tecno CAMON X Pro,
689-
"SHIFT6m", // SHIFT 6m
690-
)
689+
else -> false
691690
}
692-
693-
else -> false
694691
}
692+
693+
val getDisplayMaxHeightInPx: Int
694+
get() = Resources.getSystem().displayMetrics.let { max(it.heightPixels, it.widthPixels) }

0 commit comments

Comments
 (0)