diff --git a/app/src/main/java/helium314/keyboard/latin/utils/SubtypeSettings.kt b/app/src/main/java/helium314/keyboard/latin/utils/SubtypeSettings.kt index f941f997c..fe0eae826 100644 --- a/app/src/main/java/helium314/keyboard/latin/utils/SubtypeSettings.kt +++ b/app/src/main/java/helium314/keyboard/latin/utils/SubtypeSettings.kt @@ -125,6 +125,25 @@ object SubtypeSettings { fun getAvailableSubtypeLocales(): List = resourceSubtypesByLocale.keys.toList() + fun onRenameLayout(type: LayoutType, from: String, to: String, context: Context) { + val prefs = context.prefs() + listOf( + Settings.PREF_ADDITIONAL_SUBTYPES to Defaults.PREF_ADDITIONAL_SUBTYPES, + Settings.PREF_ENABLED_SUBTYPES to Defaults.PREF_ENABLED_SUBTYPES, + Settings.PREF_SELECTED_SUBTYPE to Defaults.PREF_SELECTED_SUBTYPE + ).forEach { (key, default) -> + val new = prefs.getString(key, default)!!.split(Separators.SETS).joinToString(Separators.SETS) { + val subtype = it.toSettingsSubtype() + if (subtype.layoutName(type) == from) subtype.withLayout(type, to).toPref() + else subtype.toPref() + } + prefs.edit().putString(key, new).apply() + } + if (Settings.readDefaultLayoutName(type, prefs) == from) + Settings.writeDefaultLayoutName(to, type, prefs) + reloadEnabledSubtypes(context) + } + fun reloadEnabledSubtypes(context: Context) { enabledSubtypes.clear() removeInvalidCustomSubtypes(context) diff --git a/app/src/main/java/helium314/keyboard/settings/dialogs/LayoutEditDialog.kt b/app/src/main/java/helium314/keyboard/settings/dialogs/LayoutEditDialog.kt index f0b5241a2..8932ad4dc 100644 --- a/app/src/main/java/helium314/keyboard/settings/dialogs/LayoutEditDialog.kt +++ b/app/src/main/java/helium314/keyboard/settings/dialogs/LayoutEditDialog.kt @@ -24,6 +24,7 @@ import helium314.keyboard.latin.R import helium314.keyboard.latin.utils.LayoutType import helium314.keyboard.latin.utils.LayoutUtilsCustom import helium314.keyboard.latin.utils.Log +import helium314.keyboard.latin.utils.SubtypeSettings import helium314.keyboard.latin.utils.getStringResourceOrName import helium314.keyboard.settings.keyboardNeedsReload import kotlinx.coroutines.Job @@ -61,8 +62,10 @@ fun LayoutEditDialog( }, onConfirmed = { val newLayoutName = LayoutUtilsCustom.getSecondaryLayoutName(displayNameValue.text) - if (startIsCustom && initialLayoutName != newLayoutName) + if (startIsCustom && initialLayoutName != newLayoutName) { LayoutUtilsCustom.getLayoutFile(initialLayoutName, layoutType, ctx).delete() + SubtypeSettings.onRenameLayout(layoutType, initialLayoutName, newLayoutName, ctx) + } LayoutUtilsCustom.getLayoutFile(newLayoutName, layoutType, ctx).writeText(it) LayoutUtilsCustom.onLayoutFileChanged() keyboardNeedsReload = true @@ -84,6 +87,7 @@ fun LayoutEditDialog( job?.cancel() if (!valid) { job = scope.launch { + // todo: this can end up in toast-spam val message = Log.getLog(10) .lastOrNull { it.tag == "LayoutUtilsCustom" }?.message ?.split("\n")?.take(2)?.joinToString("\n")