mirror of
https://github.com/Helium314/HeliBoard.git
synced 2025-06-08 15:47:43 +00:00
solve a bunch of recent todos
This commit is contained in:
parent
86f15e11d8
commit
ff27d1f1c5
13 changed files with 95 additions and 70 deletions
|
@ -2,6 +2,8 @@ package helium314.keyboard.settings.dialogs
|
|||
|
||||
import android.content.Intent
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material3.HorizontalDivider
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
|
@ -9,20 +11,24 @@ import androidx.compose.runtime.getValue
|
|||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import helium314.keyboard.compat.locale
|
||||
import helium314.keyboard.dictionarypack.DictionaryPackConstants
|
||||
import helium314.keyboard.latin.Dictionary
|
||||
import helium314.keyboard.latin.R
|
||||
import helium314.keyboard.latin.ReadOnlyBinaryDictionary
|
||||
import helium314.keyboard.latin.common.LocaleUtils
|
||||
import helium314.keyboard.latin.common.LocaleUtils.constructLocale
|
||||
import helium314.keyboard.latin.common.LocaleUtils.localizedDisplayName
|
||||
import helium314.keyboard.latin.makedict.DictionaryHeader
|
||||
import helium314.keyboard.latin.settings.USER_DICTIONARY_SUFFIX
|
||||
import helium314.keyboard.latin.utils.DictionaryInfoUtils
|
||||
import helium314.keyboard.latin.utils.ScriptUtils.script
|
||||
import helium314.keyboard.latin.utils.SubtypeSettings
|
||||
import helium314.keyboard.latin.utils.locale
|
||||
import helium314.keyboard.latin.utils.prefs
|
||||
import java.io.File
|
||||
import java.util.Locale
|
||||
|
||||
|
@ -40,17 +46,20 @@ fun NewDictionaryDialog(
|
|||
val ctx = LocalContext.current
|
||||
val dictLocale = header.mLocaleString.constructLocale()
|
||||
var locale by remember { mutableStateOf(mainLocale ?: dictLocale) }
|
||||
val comparer = compareBy<Locale>({ it != mainLocale}, { it != dictLocale }, { it.script() != dictLocale.script() })
|
||||
val enabledLanguages = SubtypeSettings.getEnabledSubtypes(ctx.prefs()).map { it.locale().language }
|
||||
val comparer = compareBy<Locale>({ it != mainLocale }, { it != dictLocale }, { it.language !in enabledLanguages }, { it.script() != dictLocale.script() })
|
||||
val locales = SubtypeSettings.getAvailableSubtypeLocales().sortedWith(comparer)
|
||||
val cacheDir = DictionaryInfoUtils.getCacheDirectoryForLocale(locale, ctx)
|
||||
val dictFile = File(cacheDir, header.mIdString.substringBefore(":") + "_" + USER_DICTIONARY_SUFFIX)
|
||||
val type = header.mIdString.substringBefore(":")
|
||||
val info = header.info(ctx.resources.configuration.locale())
|
||||
ThreeButtonAlertDialog(
|
||||
onDismissRequest = { onDismissRequest(); cachedFile.delete() },
|
||||
onConfirmed = {
|
||||
dictFile.parentFile?.mkdirs()
|
||||
dictFile.delete()
|
||||
cachedFile.renameTo(dictFile)
|
||||
if (header.mIdString.substringBefore(":") == Dictionary.TYPE_MAIN) {
|
||||
if (type == Dictionary.TYPE_MAIN) {
|
||||
// replaced main dict, remove the one created from internal data
|
||||
val internalMainDictFile = File(cacheDir, DictionaryInfoUtils.getExtractedMainDictFilename())
|
||||
internalMainDictFile.delete()
|
||||
|
@ -60,7 +69,7 @@ fun NewDictionaryDialog(
|
|||
},
|
||||
text = {
|
||||
Column {
|
||||
Text(header.info(LocalContext.current.resources.configuration.locale()))
|
||||
Text(info)
|
||||
// todo: dropdown takes very long to load, should be lazy!
|
||||
// but can't be lazy because of measurements (has width of widest element)
|
||||
// -> what do?
|
||||
|
@ -68,11 +77,25 @@ fun NewDictionaryDialog(
|
|||
selectedItem = locale,
|
||||
onSelected = { locale = it },
|
||||
items = locales
|
||||
) { Text(LocaleUtils.getLocaleDisplayNameInSystemLocale(it, ctx)) }
|
||||
if (locale.script() != dictLocale.script())
|
||||
Text("wrong script", color = MaterialTheme.colorScheme.error) // todo: string resource
|
||||
if (dictFile.exists())
|
||||
Text("will overwrite existing dictionary", color = MaterialTheme.colorScheme.error) // todo: string resource
|
||||
) { Text(it.localizedDisplayName(ctx)) }
|
||||
if (locale.script() != dictLocale.script()) {
|
||||
// whatever, still allow it if the user wants
|
||||
HorizontalDivider()
|
||||
Text(
|
||||
stringResource(R.string.dictionary_file_wrong_script),
|
||||
color = MaterialTheme.colorScheme.error,
|
||||
modifier = Modifier.padding(bottom = 8.dp, top = 4.dp)
|
||||
)
|
||||
}
|
||||
if (dictFile.exists()) {
|
||||
val oldInfo = DictionaryInfoUtils.getDictionaryFileHeaderOrNull(dictFile, 0, dictFile.length())?.info(ctx.resources.configuration.locale())
|
||||
HorizontalDivider()
|
||||
Text(
|
||||
stringResource(R.string.replace_dictionary_message, type, oldInfo ?: "(no info)", info),
|
||||
color = MaterialTheme.colorScheme.error,
|
||||
modifier = Modifier.padding(top = 4.dp)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue