diff --git a/app/src/main/java/helium314/keyboard/latin/common/Constants.kt b/app/src/main/java/helium314/keyboard/latin/common/Constants.kt new file mode 100644 index 000000000..9553c685f --- /dev/null +++ b/app/src/main/java/helium314/keyboard/latin/common/Constants.kt @@ -0,0 +1,13 @@ +package helium314.keyboard.latin.common + +object Links { + const val DICTIONARY_URL = "https://codeberg.org/Helium314/aosp-dictionaries" + const val DICTIONARY_DOWNLOAD_SUFFIX = "/src/branch/main/" + const val DICTIONARY_NORMAL_SUFFIX = "dictionaries/" + const val DICTIONARY_EXPERIMENTAL_SUFFIX = "dictionaries_experimental/" + const val GITHUB = "https://github.com/Helium314/HeliBoard" + const val LICENSE = "$GITHUB/blob/main/LICENSE-GPL-3" + const val LAYOUT_FORMAT_URL = "$GITHUB/blob/main/layouts.md" + const val CUSTOM_LAYOUTS = "$GITHUB/discussions/categories/custom-layout" + const val CUSTOM_COLORS = "$GITHUB/discussions/categories/custom-colors" +} diff --git a/app/src/main/java/helium314/keyboard/latin/settings/LanguageSettingsDialog.kt b/app/src/main/java/helium314/keyboard/latin/settings/LanguageSettingsDialog.kt index b7083a0ee..0edc49de5 100644 --- a/app/src/main/java/helium314/keyboard/latin/settings/LanguageSettingsDialog.kt +++ b/app/src/main/java/helium314/keyboard/latin/settings/LanguageSettingsDialog.kt @@ -22,6 +22,8 @@ import helium314.keyboard.dictionarypack.DictionaryPackConstants import helium314.keyboard.keyboard.KeyboardLayoutSet import helium314.keyboard.keyboard.KeyboardSwitcher import helium314.keyboard.latin.R +import helium314.keyboard.latin.common.Links.DICTIONARY_URL +import helium314.keyboard.latin.common.Links.LAYOUT_FORMAT_URL import helium314.keyboard.latin.common.LocaleUtils import helium314.keyboard.latin.common.LocaleUtils.constructLocale import helium314.keyboard.latin.databinding.LanguageListItemBinding @@ -425,4 +427,3 @@ private fun getAvailableSecondaryLocales(context: Context, mainLocale: Locale, a return locales } -private const val LAYOUT_FORMAT_URL = "https://github.com/Helium314/HeliBoard/blob/main/layouts.md" diff --git a/app/src/main/java/helium314/keyboard/latin/utils/DictionaryUtils.kt b/app/src/main/java/helium314/keyboard/latin/utils/DictionaryUtils.kt index af7bab23c..28e7b6f1a 100644 --- a/app/src/main/java/helium314/keyboard/latin/utils/DictionaryUtils.kt +++ b/app/src/main/java/helium314/keyboard/latin/utils/DictionaryUtils.kt @@ -16,6 +16,7 @@ import androidx.compose.ui.text.buildAnnotatedString import androidx.core.content.edit import helium314.keyboard.compat.locale import helium314.keyboard.latin.R +import helium314.keyboard.latin.common.Links import helium314.keyboard.latin.common.LocaleUtils import helium314.keyboard.latin.common.LocaleUtils.constructLocale import helium314.keyboard.latin.settings.Defaults @@ -50,8 +51,8 @@ fun showMissingDictionaryDialog(context: Context, locale: Locale) { if (prefs.getBoolean(Settings.PREF_DONT_SHOW_MISSING_DICTIONARY_DIALOG, Defaults.PREF_DONT_SHOW_MISSING_DICTIONARY_DIALOG) || locale.toString() == SubtypeLocaleUtils.NO_LANGUAGE) return - val repositoryLink = "" + context.getString(R.string.dictionary_link_text) + "" - val dictionaryLink = "" + context.getString( + val repositoryLink = "" + context.getString(R.string.dictionary_link_text) + "" + val dictionaryLink = "" + context.getString( R.string.dictionary_link_text) + "" val startMessage = context.getString( // todo: now with the available dicts csv, is the full text still necessary? R.string.no_dictionary_message, @@ -88,8 +89,8 @@ fun createDictionaryTextHtml(message: String, locale: Locale, context: Context): val rawDictString = "$type: ${dictLocale.getDisplayName(context.resources.configuration.locale())}" val dictString = if (experimental.isEmpty()) rawDictString else context.getString(R.string.available_dictionary_experimental, rawDictString) - val dictBaseUrl = DICTIONARY_URL + DICTIONARY_DOWNLOAD_SUFFIX + - if (experimental.isEmpty()) DICTIONARY_NORMAL_SUFFIX else DICTIONARY_EXPERIMENTAL_SUFFIX + val dictBaseUrl = Links.DICTIONARY_URL + Links.DICTIONARY_DOWNLOAD_SUFFIX + + if (experimental.isEmpty()) Links.DICTIONARY_NORMAL_SUFFIX else Links.DICTIONARY_EXPERIMENTAL_SUFFIX val dictLink = dictBaseUrl + type + "_" + localeString.lowercase() + ".dict" val fullText = "
  • $dictString
  • " knownDicts.add(fullText) @@ -109,7 +110,7 @@ fun createDictionaryTextHtml(message: String, locale: Locale, context: Context): fun MissingDictionaryDialog(onDismissRequest: () -> Unit, locale: Locale) { val prefs = LocalContext.current.prefs() val availableDicts = createDictionaryTextAnnotated(locale) - val dictLink = "$DICTIONARY_URL/src/branch/main/dictionaries/main_$locale.dict" + val dictLink = "${Links.DICTIONARY_URL}/src/branch/main/dictionaries/main_$locale.dict" val message = stringResource(R.string.no_dictionary_message, "§repl1§", locale.toString(), "§repl2§") .replace("
    ", "\n") // compose doesn't understand html... // todo: modify the string? @@ -120,7 +121,7 @@ fun MissingDictionaryDialog(onDismissRequest: () -> Unit, locale: Locale) { val annotatedString = buildAnnotatedString { append(part1) - appendLink(stringResource(R.string.dictionary_link_text), DICTIONARY_URL) + appendLink(stringResource(R.string.dictionary_link_text), Links.DICTIONARY_URL) append(part2) appendLink(stringResource(R.string.dictionary_link_text), dictLink) append(part3) @@ -158,8 +159,8 @@ fun createDictionaryTextAnnotated(locale: Locale): AnnotatedString { val rawDictString = "$type: ${dictLocale.getDisplayName(context.resources.configuration.locale())}" val dictString = if (experimental.isEmpty()) rawDictString else context.getString(R.string.available_dictionary_experimental, rawDictString) - val dictBaseUrl = DICTIONARY_URL + DICTIONARY_DOWNLOAD_SUFFIX + - if (experimental.isEmpty()) DICTIONARY_NORMAL_SUFFIX else DICTIONARY_EXPERIMENTAL_SUFFIX + val dictBaseUrl = Links.DICTIONARY_URL + Links.DICTIONARY_DOWNLOAD_SUFFIX + + if (experimental.isEmpty()) Links.DICTIONARY_NORMAL_SUFFIX else Links.DICTIONARY_EXPERIMENTAL_SUFFIX val dictLink = dictBaseUrl + type + "_" + localeString.lowercase() + ".dict" knownDicts.add(dictString to dictLink) } @@ -195,8 +196,3 @@ fun cleanUnusedMainDicts(context: Context) { private fun hasAnythingOtherThanExtractedMainDictionary(dir: File) = dir.listFiles()?.any { it.name != DictionaryInfoUtils.getExtractedMainDictFilename() } != false - -const val DICTIONARY_URL = "https://codeberg.org/Helium314/aosp-dictionaries" -const val DICTIONARY_DOWNLOAD_SUFFIX = "/src/branch/main/" -const val DICTIONARY_NORMAL_SUFFIX = "dictionaries/" -const val DICTIONARY_EXPERIMENTAL_SUFFIX = "dictionaries_experimental/" diff --git a/app/src/main/java/helium314/keyboard/settings/dialogs/ColorThemePickerDialog.kt b/app/src/main/java/helium314/keyboard/settings/dialogs/ColorThemePickerDialog.kt index 20b2d5406..d9c5a6d92 100644 --- a/app/src/main/java/helium314/keyboard/settings/dialogs/ColorThemePickerDialog.kt +++ b/app/src/main/java/helium314/keyboard/settings/dialogs/ColorThemePickerDialog.kt @@ -33,6 +33,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -40,9 +41,11 @@ import helium314.keyboard.keyboard.ColorSetting import helium314.keyboard.keyboard.KeyboardTheme import helium314.keyboard.latin.R import helium314.keyboard.latin.common.ColorType +import helium314.keyboard.latin.common.Links import helium314.keyboard.latin.common.decodeBase36 import helium314.keyboard.latin.settings.Settings import helium314.keyboard.latin.utils.Log +import helium314.keyboard.latin.utils.appendLink import helium314.keyboard.latin.utils.getActivity import helium314.keyboard.latin.utils.getStringResourceOrName import helium314.keyboard.latin.utils.prefs @@ -132,6 +135,15 @@ fun ColorThemePickerDialog( ConfirmationDialog( onDismissRequest = { showLoadDialog = false }, title = { Text(stringResource(R.string.load)) }, + content = { + val text = stringResource(R.string.get_colors_message) + val annotated = buildAnnotatedString { + append(text.substringBefore("%s")) + appendLink(stringResource(R.string.discussion_section_link), Links.CUSTOM_COLORS) + append(text.substringAfter("%s")) + } + Text(annotated) + }, onConfirmed = { val intent = Intent(Intent.ACTION_OPEN_DOCUMENT) .addCategory(Intent.CATEGORY_OPENABLE) diff --git a/app/src/main/java/helium314/keyboard/settings/dialogs/SubtypeDialog.kt b/app/src/main/java/helium314/keyboard/settings/dialogs/SubtypeDialog.kt index 7ab384cc5..68b3639d4 100644 --- a/app/src/main/java/helium314/keyboard/settings/dialogs/SubtypeDialog.kt +++ b/app/src/main/java/helium314/keyboard/settings/dialogs/SubtypeDialog.kt @@ -45,6 +45,7 @@ import helium314.keyboard.keyboard.internal.keyboard_parser.morePopupKeysResId import helium314.keyboard.latin.R import helium314.keyboard.latin.common.Constants.Separators import helium314.keyboard.latin.common.Constants.Subtype.ExtraValue +import helium314.keyboard.latin.common.Links import helium314.keyboard.latin.common.LocaleUtils.constructLocale import helium314.keyboard.latin.common.LocaleUtils.localizedDisplayName import helium314.keyboard.latin.settings.Defaults @@ -380,10 +381,15 @@ private fun MainLayoutRow( // layoutString contains "%s" since we didn't supply a formatArg val layoutString = stringResource(R.string.message_add_custom_layout) val linkText = stringResource(R.string.dictionary_link_text) + val discussionSectionText = stringResource(R.string.get_layouts_message) val annotated = buildAnnotatedString { append(layoutString.substringBefore("%s")) - appendLink(linkText, LAYOUT_FORMAT_URL) + appendLink(linkText, Links.LAYOUT_FORMAT_URL) append(layoutString.substringAfter("%s")) + appendLine() + append(discussionSectionText.substringBefore("%s")) + appendLink(stringResource(R.string.discussion_section_link), Links.CUSTOM_LAYOUTS) + append(discussionSectionText.substringAfter("%s")) } ConfirmationDialog( @@ -460,5 +466,3 @@ fun DropDownField( private fun getAvailableSecondaryLocales(context: Context, mainLocale: Locale): List = getDictionaryLocales(context).filter { it != mainLocale && it.script() == mainLocale.script() } - -private const val LAYOUT_FORMAT_URL = "https://github.com/Helium314/HeliBoard/blob/main/layouts.md" diff --git a/app/src/main/java/helium314/keyboard/settings/screens/AboutScreen.kt b/app/src/main/java/helium314/keyboard/settings/screens/AboutScreen.kt index 8e9948b7c..c8a6a28ea 100644 --- a/app/src/main/java/helium314/keyboard/settings/screens/AboutScreen.kt +++ b/app/src/main/java/helium314/keyboard/settings/screens/AboutScreen.kt @@ -24,6 +24,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.core.net.toUri import helium314.keyboard.latin.BuildConfig import helium314.keyboard.latin.R +import helium314.keyboard.latin.common.Links import helium314.keyboard.latin.settings.DebugSettings import helium314.keyboard.latin.settings.Defaults import helium314.keyboard.latin.utils.Log @@ -93,7 +94,7 @@ fun createAboutSettings(context: Context) = listOf( description = it.description, onClick = { val intent = Intent() - intent.data = "https://github.com/Helium314/HeliBoard/blob/main/LICENSE-GPL-3".toUri() + intent.data = Links.LICENSE.toUri() intent.action = Intent.ACTION_VIEW ctx.startActivity(intent) }, @@ -131,7 +132,7 @@ fun createAboutSettings(context: Context) = listOf( description = it.description, onClick = { val intent = Intent() - intent.data = "https://github.com/Helium314/HeliBoard".toUri() + intent.data = Links.GITHUB.toUri() intent.action = Intent.ACTION_VIEW ctx.startActivity(intent) }, diff --git a/app/src/main/java/helium314/keyboard/settings/screens/DictionaryScreen.kt b/app/src/main/java/helium314/keyboard/settings/screens/DictionaryScreen.kt index 47c80d2be..15dc0eaa9 100644 --- a/app/src/main/java/helium314/keyboard/settings/screens/DictionaryScreen.kt +++ b/app/src/main/java/helium314/keyboard/settings/screens/DictionaryScreen.kt @@ -20,12 +20,12 @@ import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.unit.dp import helium314.keyboard.latin.Dictionary import helium314.keyboard.latin.R +import helium314.keyboard.latin.common.Links import helium314.keyboard.latin.common.LocaleUtils import helium314.keyboard.latin.common.LocaleUtils.constructLocale import helium314.keyboard.latin.common.LocaleUtils.localizedDisplayName import helium314.keyboard.latin.common.splitOnWhitespace import helium314.keyboard.latin.settings.USER_DICTIONARY_SUFFIX -import helium314.keyboard.latin.utils.DICTIONARY_URL import helium314.keyboard.latin.utils.DictionaryInfoUtils import helium314.keyboard.latin.utils.SubtypeLocaleUtils import helium314.keyboard.latin.utils.SubtypeSettings @@ -102,7 +102,7 @@ fun DictionaryScreen( val addDictString = stringResource(R.string.add_dictionary) val annotated = buildAnnotatedString { append(addDictString.substringBefore("%s")) - appendLink(stringResource(R.string.dictionary_link_text), DICTIONARY_URL) + appendLink(stringResource(R.string.dictionary_link_text), Links.DICTIONARY_URL) append(addDictString.substringAfter("%s")) } Text(annotated) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f2e698806..2979f1185 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -517,7 +517,7 @@ disposition rather than other common dispositions for Latin languages. [CHAR LIM Layout Add custom layout - + Select a file in a compatible format. Information about the formats is available %s. Load file @@ -688,11 +688,11 @@ New dictionary: You can download dictionaries %1$s, or check whether a dictionary for \"%2$s\" can be downloaded directly %3$s." "Don't show again" - + "Select a dictionary to add. Dictionaries in .dict format can be downloaded %s." - + "here" - + "%s (experimental)" "Error: Selected file is not a valid dictionary file" @@ -841,6 +841,12 @@ New dictionary: Accent Gesture input + + "You can find and share colors in the %s." + + "You can find and share layouts in the %s." + + "discussion section" About