From 5956c6fb9b474b259ad7dbb21fc867245c2b52fd Mon Sep 17 00:00:00 2001 From: Abdallah Mehiz Date: Tue, 31 Oct 2023 00:21:02 +0100 Subject: [PATCH 1/5] feat(player): Add option to change fonts --- app/build.gradle.kts | 2 + .../tachiyomi/ui/player/PlayerActivity.kt | 16 +++++++ .../ui/player/settings/PlayerPreferences.kt | 2 + .../sheets/subtitle/SubtitleColorPage.kt | 3 ++ .../sheets/subtitle/SubtitleFontPage.kt | 16 +++++++ .../sheets/subtitle/SubtitleSettingsSheet.kt | 45 ++++++++++++++----- gradle/libs.versions.toml | 2 + i18n/src/main/res/values/strings-aniyomi.xml | 1 + 8 files changed, 76 insertions(+), 11 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index a0d9b26115..2c482d54e4 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -273,6 +273,8 @@ dependencies { implementation(libs.arthenica.smartexceptions) // seeker seek bar implementation(libs.seeker) + // true type parser + implementation(libs.truetypeparser) } androidComponents { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerActivity.kt index 056205badc..49c30debc2 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerActivity.kt @@ -13,6 +13,7 @@ import android.media.AudioManager import android.net.Uri import android.os.Build import android.os.Bundle +import android.os.Environment import android.os.Handler import android.os.Looper import android.os.ParcelFileDescriptor @@ -573,6 +574,21 @@ class PlayerActivity : BaseActivity() { MPVLib.setPropertyDouble("sub-delay", subtitlesDelay().get() / 1000.0) } + MPVLib.setPropertyString( + "sub-fonts-dir", + File( + Environment.getExternalStorageDirectory().absolutePath + File.separator + + getString(R.string.app_name), + "fonts", + ).path, + ) + + if (playerPreferences.subtitleFont().get().trim() != "") { + MPVLib.setPropertyString("sub-font", playerPreferences.subtitleFont().get()) + } else { + MPVLib.setPropertyString("sub-font", "Sans Serif") + } + MPVLib.setPropertyString("sub-bold", if (boldSubtitles().get()) "yes" else "no") MPVLib.setPropertyString("sub-italic", if (italicSubtitles().get()) "yes" else "no") MPVLib.setPropertyInt("sub-font-size", subtitleFontSize().get()) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/PlayerPreferences.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/PlayerPreferences.kt index ee9b9961c7..f9eb2e1fa9 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/PlayerPreferences.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/PlayerPreferences.kt @@ -76,6 +76,8 @@ class PlayerPreferences( fun overrideSubsASS() = preferenceStore.getBoolean("pref_override_subtitles_ass", false) + fun subtitleFont() = preferenceStore.getString("pref_subtitle_font", "Sans Serif") + fun subtitleFontSize() = preferenceStore.getInt("pref_subtitles_font_size", 55) fun boldSubtitles() = preferenceStore.getBoolean("pref_bold_subtitles", false) fun italicSubtitles() = preferenceStore.getBoolean("pref_italic_subtitles", false) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleColorPage.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleColorPage.kt index 3867809134..90c5679dd5 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleColorPage.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleColorPage.kt @@ -66,6 +66,8 @@ private fun SubtitleColors( val borderColorPref = screenModel.preferences.borderColorSubtitles() val backgroundColorPref = screenModel.preferences.backgroundColorSubtitles() + val font by screenModel.preferences.subtitleFont().collectAsState() + Row(horizontalArrangement = Arrangement.SpaceEvenly, modifier = Modifier.fillMaxWidth()) { SubtitleColorSelector( label = R.string.player_subtitle_text_color, @@ -89,6 +91,7 @@ private fun SubtitleColors( Column(horizontalAlignment = Alignment.CenterHorizontally) { SubtitlePreview( + font = font, isBold = screenModel.preferences.boldSubtitles().collectAsState().value, isItalic = screenModel.preferences.italicSubtitles().collectAsState().value, textColor = Color(textColorPref.collectAsState().value), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleFontPage.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleFontPage.kt index 5fadf519b7..07f766b3c8 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleFontPage.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleFontPage.kt @@ -13,6 +13,8 @@ import androidx.compose.material.icons.outlined.FormatItalic import androidx.compose.material.icons.outlined.FormatSize import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment @@ -41,6 +43,7 @@ fun SubtitleFontPage(screenModel: PlayerSettingsScreenModel) { private fun SubtitleFont( screenModel: PlayerSettingsScreenModel, ) { + val font by screenModel.preferences.subtitleFont().collectAsState() val boldSubtitles by screenModel.preferences.boldSubtitles().collectAsState() val italicSubtitles by screenModel.preferences.italicSubtitles().collectAsState() val subtitleFontSize by screenModel.preferences.subtitleFontSize().collectAsState() @@ -65,6 +68,11 @@ private fun SubtitleFont( screenModel.preferences.subtitleFontSize().set(it) } + val updateFont: (String) -> Unit = { + MPVLib.setPropertyString("sub-font", it) + screenModel.preferences.subtitleFont().set(it) + } + Column( horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.tiny), @@ -111,7 +119,15 @@ private fun SubtitleFont( ) } + OutlinedTextField( + value = font, + onValueChange = updateFont, + label = { Text(stringResource(id = R.string.player_subtitle_font_text_field)) }, + singleLine = true, + ) + SubtitlePreview( + font = font, isBold = boldSubtitles, isItalic = italicSubtitles, textColor = Color(textColor), diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleSettingsSheet.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleSettingsSheet.kt index c2c57d9c99..e52f6d364f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleSettingsSheet.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleSettingsSheet.kt @@ -3,6 +3,7 @@ package eu.kanade.tachiyomi.ui.player.settings.sheets.subtitle import android.graphics.Rect import android.graphics.Typeface import android.os.Build +import android.os.Environment import androidx.annotation.RequiresApi import androidx.compose.foundation.Canvas import androidx.compose.foundation.background @@ -25,6 +26,7 @@ import androidx.compose.ui.graphics.Shadow import androidx.compose.ui.graphics.drawscope.drawIntoCanvas import androidx.compose.ui.graphics.nativeCanvas import androidx.compose.ui.graphics.toArgb +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontFamily @@ -32,11 +34,13 @@ import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp +import com.jaredrummler.fontreader.truetype.TTFFile import eu.kanade.presentation.components.TabbedDialog import eu.kanade.presentation.components.TabbedDialogPaddings import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.player.settings.PlayerSettingsScreenModel import tachiyomi.presentation.core.components.material.padding +import java.io.File @Composable fun SubtitleSettingsSheet( @@ -71,18 +75,15 @@ fun SubtitleSettingsSheet( @Composable fun OutLineText( text: String, + font: Typeface, outlineColor: Color = Color.Black, textColor: Color = Color.White, - backgroundColor: Color = Color.Black, isBold: Boolean = false, isItalic: Boolean = false, + backgroundColor: Color = Color.Black, ) { val textPaintStroke = Paint().asFrameworkPaint().apply { - typeface = Typeface.create( - Typeface.SANS_SERIF, - if (isBold) FontWeight.Bold.weight else FontWeight.Normal.weight, - isItalic, - ) + typeface = font isAntiAlias = true style = android.graphics.Paint.Style.STROKE textSize = 16f @@ -94,18 +95,18 @@ fun OutLineText( // keep in mind that this only affects horizontal alignment // https://developer.android.com/reference/android/graphics/Paint.Align textAlign = android.graphics.Paint.Align.CENTER + isFakeBoldText = isBold + textSkewX = if (isItalic) -0.25f else 0f } val textPaint = Paint().asFrameworkPaint().apply { - typeface = Typeface.create( - Typeface.SANS_SERIF, - if (isBold) FontWeight.Bold.weight else FontWeight.Normal.weight, - isItalic, - ) + typeface = font isAntiAlias = true style = android.graphics.Paint.Style.FILL textSize = 16f color = textColor.toArgb() textAlign = android.graphics.Paint.Align.CENTER + isFakeBoldText = isBold + textSkewX = if (isItalic) -0.25f else 0f } Canvas(modifier = Modifier.fillMaxSize()) { drawIntoCanvas { @@ -145,12 +146,33 @@ fun OutLineText( @RequiresApi(Build.VERSION_CODES.P) @Composable fun SubtitlePreview( + font: String, isBold: Boolean, isItalic: Boolean, textColor: Color, borderColor: Color, backgroundColor: Color, ) { + val fontDirectory = File( + Environment.getExternalStorageDirectory().absolutePath + + File.separator + LocalContext.current.getString(R.string.app_name) + + File.separator, + "fonts", + ) + + val fontMap = fontDirectory.listFiles { file -> + file.extension.equals("ttf", true) + }.orEmpty().associateBy({ TTFFile.open(it).fullName }, { it.absolutePath }) + + val fontFile = fontMap.keys.firstOrNull { it.contains(font, ignoreCase = true) } + ?.let { + if (font.trim() == "") { + Typeface.SANS_SERIF + } else { + Typeface.createFromFile(fontMap[it]?.let(::File)) + } + } ?: Typeface.SANS_SERIF + Box( modifier = Modifier .padding(vertical = MaterialTheme.padding.medium) @@ -160,6 +182,7 @@ fun SubtitlePreview( if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { OutLineText( text = stringResource(R.string.player_subtitle_settings_example), + font = fontFile, outlineColor = borderColor, textColor = textColor, isBold = isBold, diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 16730c66c1..2d7457fe98 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -97,6 +97,8 @@ arthenica-smartexceptions = "com.arthenica:smart-exception-java:0.1.1" seeker = "io.github.2307vivek:seeker:1.1.1" +truetypeparser = "com.jaredrummler:truetypeparser:1.0.0" + [bundles] reactivex = ["rxandroid", "rxjava", "rxrelay"] okhttp = ["okhttp-core", "okhttp-logging", "okhttp-dnsoverhttps"] diff --git a/i18n/src/main/res/values/strings-aniyomi.xml b/i18n/src/main/res/values/strings-aniyomi.xml index fa858e9260..1fa7b066e5 100644 --- a/i18n/src/main/res/values/strings-aniyomi.xml +++ b/i18n/src/main/res/values/strings-aniyomi.xml @@ -341,6 +341,7 @@ Text Border Background + Font Name Exclude from data saver From 3fbea757a70a8a156d963bef8dc6e314ffdf6561 Mon Sep 17 00:00:00 2001 From: Abdallah Mehiz Date: Tue, 31 Oct 2023 10:05:19 +0100 Subject: [PATCH 2/5] Use light version of `truetypeparser` instead --- .../ui/player/settings/sheets/subtitle/SubtitleSettingsSheet.kt | 2 +- gradle/libs.versions.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleSettingsSheet.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleSettingsSheet.kt index e52f6d364f..e46add88de 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleSettingsSheet.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleSettingsSheet.kt @@ -34,7 +34,7 @@ import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp -import com.jaredrummler.fontreader.truetype.TTFFile +import com.jaredrummler.truetypeparser.TTFFile import eu.kanade.presentation.components.TabbedDialog import eu.kanade.presentation.components.TabbedDialogPaddings import eu.kanade.tachiyomi.R diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2d7457fe98..48186c547a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -97,7 +97,7 @@ arthenica-smartexceptions = "com.arthenica:smart-exception-java:0.1.1" seeker = "io.github.2307vivek:seeker:1.1.1" -truetypeparser = "com.jaredrummler:truetypeparser:1.0.0" +truetypeparser = "com.jaredrummler:truetypeparser-light:1.0.0" [bundles] reactivex = ["rxandroid", "rxjava", "rxrelay"] From 4fc8c75544d398ebce69c4c25af68317e4c01b2a Mon Sep 17 00:00:00 2001 From: Abdallah Mehiz Date: Tue, 31 Oct 2023 20:51:21 +0100 Subject: [PATCH 3/5] use a different version of truetypeparser that supports otf files --- .../sheets/subtitle/SubtitleSettingsSheet.kt | 20 +++++++++---------- gradle/libs.versions.toml | 2 +- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleSettingsSheet.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleSettingsSheet.kt index e46add88de..f6aaf1da1c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleSettingsSheet.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleSettingsSheet.kt @@ -34,7 +34,7 @@ import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp -import com.jaredrummler.truetypeparser.TTFFile +import com.yubyf.truetypeparser.TTFFile import eu.kanade.presentation.components.TabbedDialog import eu.kanade.presentation.components.TabbedDialogPaddings import eu.kanade.tachiyomi.R @@ -161,17 +161,15 @@ fun SubtitlePreview( ) val fontMap = fontDirectory.listFiles { file -> - file.extension.equals("ttf", true) - }.orEmpty().associateBy({ TTFFile.open(it).fullName }, { it.absolutePath }) + file.extension.equals("ttf", true) || + file.extension.equals("otf", true) + }?.associateBy( + { TTFFile.open(it).families.values.toTypedArray()[0] }, + { it.absolutePath }, + ) ?: emptyMap() - val fontFile = fontMap.keys.firstOrNull { it.contains(font, ignoreCase = true) } - ?.let { - if (font.trim() == "") { - Typeface.SANS_SERIF - } else { - Typeface.createFromFile(fontMap[it]?.let(::File)) - } - } ?: Typeface.SANS_SERIF + val fontFile = fontMap.keys.firstOrNull { it.contains(font, true) } + ?.let { Typeface.createFromFile(fontMap[it]?.let(::File)) } ?: Typeface.SANS_SERIF Box( modifier = Modifier diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 48186c547a..5e271a9a9f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -97,7 +97,7 @@ arthenica-smartexceptions = "com.arthenica:smart-exception-java:0.1.1" seeker = "io.github.2307vivek:seeker:1.1.1" -truetypeparser = "com.jaredrummler:truetypeparser-light:1.0.0" +truetypeparser = "io.github.yubyf:truetypeparser-light:2.1.4" [bundles] reactivex = ["rxandroid", "rxjava", "rxrelay"] From 951a1fa729e53fe2b5b05a8f1d7451ade09caf9c Mon Sep 17 00:00:00 2001 From: Abdallah Mehiz Date: Tue, 31 Oct 2023 21:35:42 +0100 Subject: [PATCH 4/5] Change few values to get a more accurate preview --- .../sheets/subtitle/SubtitleSettingsSheet.kt | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleSettingsSheet.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleSettingsSheet.kt index f6aaf1da1c..a14e9eb782 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleSettingsSheet.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleSettingsSheet.kt @@ -86,10 +86,10 @@ fun OutLineText( typeface = font isAntiAlias = true style = android.graphics.Paint.Style.STROKE - textSize = 16f + textSize = 48f color = outlineColor.toArgb() - strokeWidth = 2f - strokeMiter = 2f + strokeWidth = 12f + strokeMiter = 8f strokeJoin = android.graphics.Paint.Join.ROUND // change the text alignment from left to center (basically shift the anchor point of the text) // keep in mind that this only affects horizontal alignment @@ -102,7 +102,7 @@ fun OutLineText( typeface = font isAntiAlias = true style = android.graphics.Paint.Style.FILL - textSize = 16f + textSize = 48f color = textColor.toArgb() textAlign = android.graphics.Paint.Align.CENTER isFakeBoldText = isBold @@ -153,14 +153,12 @@ fun SubtitlePreview( borderColor: Color, backgroundColor: Color, ) { - val fontDirectory = File( + val fontMap = File( Environment.getExternalStorageDirectory().absolutePath + File.separator + LocalContext.current.getString(R.string.app_name) + File.separator, "fonts", - ) - - val fontMap = fontDirectory.listFiles { file -> + ).listFiles { file -> file.extension.equals("ttf", true) || file.extension.equals("otf", true) }?.associateBy( From bb9a6ca281031a5072e6819cd643d105a5542330 Mon Sep 17 00:00:00 2001 From: jmir1 Date: Thu, 2 Nov 2023 22:00:25 +0100 Subject: [PATCH 5/5] feat: Use a dropdown menu for font selection --- .../sheets/subtitle/SubtitleFontPage.kt | 68 +++++++++++++++---- .../sheets/subtitle/SubtitleSettingsSheet.kt | 1 - 2 files changed, 55 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleFontPage.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleFontPage.kt index 07f766b3c8..a2e75965fa 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleFontPage.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleFontPage.kt @@ -1,28 +1,37 @@ package eu.kanade.tachiyomi.ui.player.settings.sheets.subtitle +import android.os.Environment import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.size -import androidx.compose.material.SnackbarDefaults.backgroundColor import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Check import androidx.compose.material.icons.outlined.FormatBold import androidx.compose.material.icons.outlined.FormatItalic import androidx.compose.material.icons.outlined.FormatSize +import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp +import com.yubyf.truetypeparser.TTFFile +import eu.kanade.presentation.components.DropdownMenu import eu.kanade.presentation.components.OutlinedNumericChooser import eu.kanade.presentation.util.collectAsState import eu.kanade.tachiyomi.R @@ -31,6 +40,7 @@ import eu.kanade.tachiyomi.ui.player.settings.PlayerSettingsScreenModel import `is`.xyz.mpv.MPVLib import tachiyomi.presentation.core.components.material.ReadItemAlpha import tachiyomi.presentation.core.components.material.padding +import java.io.File @Composable fun SubtitleFontPage(screenModel: PlayerSettingsScreenModel) { @@ -73,6 +83,25 @@ private fun SubtitleFont( screenModel.preferences.subtitleFont().set(it) } + val context = LocalContext.current + val fontList by remember { + derivedStateOf { + val customFonts = File( + Environment.getExternalStorageDirectory().absolutePath + + File.separator + context.getString(R.string.app_name) + + File.separator, + "fonts", + ).listFiles { file -> + file.extension.equals("ttf", true) || + file.extension.equals("otf", true) + }?.map { + TTFFile.open(it).families.values.toTypedArray()[0] to it.absolutePath + } ?: emptyList() + listOf("Sans Serif" to "") + customFonts + } + } + var selectingFont by remember { mutableStateOf(false) } + Column( horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.tiny), @@ -82,11 +111,13 @@ private fun SubtitleFont( horizontalArrangement = Arrangement.SpaceEvenly, modifier = Modifier.fillMaxWidth(), ) { - Icon( - imageVector = Icons.Outlined.FormatSize, - contentDescription = null, - modifier = Modifier.size(32.dp), - ) + IconButton(onClick = { selectingFont = true }) { + Icon( + imageVector = Icons.Outlined.FormatSize, + contentDescription = null, + modifier = Modifier.size(32.dp), + ) + } OutlinedNumericChooser( label = stringResource(id = R.string.player_font_size_text_field), @@ -119,12 +150,23 @@ private fun SubtitleFont( ) } - OutlinedTextField( - value = font, - onValueChange = updateFont, - label = { Text(stringResource(id = R.string.player_subtitle_font_text_field)) }, - singleLine = true, - ) + DropdownMenu(expanded = selectingFont, onDismissRequest = { selectingFont = false }) { + fontList.map { + val fontName = it.first + DropdownMenuItem( + text = { Text(fontName) }, + onClick = { updateFont(fontName) }, + trailingIcon = { + if (font == fontName) { + Icon( + imageVector = Icons.Default.Check, + contentDescription = null, + ) + } + }, + ) + } + } SubtitlePreview( font = font, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleSettingsSheet.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleSettingsSheet.kt index a14e9eb782..79802baeed 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleSettingsSheet.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/sheets/subtitle/SubtitleSettingsSheet.kt @@ -143,7 +143,6 @@ fun OutLineText( } } -@RequiresApi(Build.VERSION_CODES.P) @Composable fun SubtitlePreview( font: String,