mirror of
https://github.com/Helium314/HeliBoard.git
synced 2025-06-10 00:27:45 +00:00
remove old upgrade functionality done for migration from previous package name
should be fine after more than a year of HeliBoard fixes issue when restoring custom layouts upgrade now would need to be OpenBoard -> HeliBoard <= 2.3 -> HeliBoard >= 3.0
This commit is contained in:
parent
d87ed8e53d
commit
da7ab05920
2 changed files with 6 additions and 142 deletions
|
@ -34,7 +34,6 @@ import helium314.keyboard.latin.utils.getResourceSubtypes
|
|||
import helium314.keyboard.latin.utils.locale
|
||||
import helium314.keyboard.latin.utils.mainLayoutName
|
||||
import helium314.keyboard.latin.utils.prefs
|
||||
import helium314.keyboard.latin.utils.protectedPrefs
|
||||
import helium314.keyboard.latin.utils.upgradeToolbarPrefs
|
||||
import helium314.keyboard.latin.utils.writeCustomKeyCodes
|
||||
import helium314.keyboard.settings.screens.colorPrefsAndResIds
|
||||
|
@ -91,8 +90,6 @@ fun checkVersionUpgrade(context: Context) {
|
|||
file.delete()
|
||||
}
|
||||
}
|
||||
if (oldVersion == 0) // new install or restoring settings from old app name
|
||||
upgradesWhenComingFromOldAppName(context)
|
||||
if (oldVersion <= 1000) { // upgrade old custom layouts name
|
||||
val oldShiftSymbolsFile = getCustomLayoutFile("custom.shift_symbols", context)
|
||||
if (oldShiftSymbolsFile.exists()) {
|
||||
|
@ -566,99 +563,3 @@ fun checkVersionUpgrade(context: Context) {
|
|||
LayoutUtilsCustom.onLayoutFileChanged() // just to be sure
|
||||
prefs.edit { putInt(Settings.PREF_VERSION_CODE, BuildConfig.VERSION_CODE) }
|
||||
}
|
||||
|
||||
// todo (later): remove it when most users probably have upgraded
|
||||
private fun upgradesWhenComingFromOldAppName(context: Context) {
|
||||
// move layout files
|
||||
try {
|
||||
File(context.filesDir, "layouts").listFiles()?.forEach {
|
||||
it.copyTo(getCustomLayoutFile(it.name, context), true)
|
||||
it.delete()
|
||||
}
|
||||
} catch (_: Exception) {}
|
||||
// move background images
|
||||
try {
|
||||
val bgDay = File(context.filesDir, "custom_background_image")
|
||||
if (bgDay.isFile) {
|
||||
bgDay.copyTo(Settings.getCustomBackgroundFile(context, false, false), true)
|
||||
bgDay.delete()
|
||||
}
|
||||
val bgNight = File(context.filesDir, "custom_background_image_night")
|
||||
if (bgNight.isFile) {
|
||||
bgNight.copyTo(Settings.getCustomBackgroundFile(context, true, false), true)
|
||||
bgNight.delete()
|
||||
}
|
||||
} catch (_: Exception) {}
|
||||
// upgrade prefs
|
||||
val prefs = context.prefs()
|
||||
if (prefs.all.containsKey("theme_variant")) {
|
||||
prefs.edit().putString(Settings.PREF_THEME_COLORS, prefs.getString("theme_variant", "")).apply()
|
||||
prefs.edit().remove("theme_variant").apply()
|
||||
}
|
||||
if (prefs.all.containsKey("theme_variant_night")) {
|
||||
prefs.edit().putString(Settings.PREF_THEME_COLORS_NIGHT, prefs.getString("theme_variant_night", "")).apply()
|
||||
prefs.edit().remove("theme_variant_night").apply()
|
||||
}
|
||||
prefs.all.toMap().forEach {
|
||||
if (it.key.startsWith("pref_key_") && it.key != "pref_key_longpress_timeout") {
|
||||
var remove = true
|
||||
when (val value = it.value) {
|
||||
is Boolean -> prefs.edit().putBoolean(it.key.substringAfter("pref_key_"), value).apply()
|
||||
is Int -> prefs.edit().putInt(it.key.substringAfter("pref_key_"), value).apply()
|
||||
is Long -> prefs.edit().putLong(it.key.substringAfter("pref_key_"), value).apply()
|
||||
is String -> prefs.edit().putString(it.key.substringAfter("pref_key_"), value).apply()
|
||||
is Float -> prefs.edit().putFloat(it.key.substringAfter("pref_key_"), value).apply()
|
||||
else -> remove = false
|
||||
}
|
||||
if (remove)
|
||||
prefs.edit().remove(it.key).apply()
|
||||
} else if (it.key.startsWith("pref_")) {
|
||||
var remove = true
|
||||
when (val value = it.value) {
|
||||
is Boolean -> prefs.edit().putBoolean(it.key.substringAfter("pref_"), value).apply()
|
||||
is Int -> prefs.edit().putInt(it.key.substringAfter("pref_"), value).apply()
|
||||
is Long -> prefs.edit().putLong(it.key.substringAfter("pref_"), value).apply()
|
||||
is String -> prefs.edit().putString(it.key.substringAfter("pref_"), value).apply()
|
||||
is Float -> prefs.edit().putFloat(it.key.substringAfter("pref_"), value).apply()
|
||||
else -> remove = false
|
||||
}
|
||||
if (remove)
|
||||
prefs.edit().remove(it.key).apply()
|
||||
}
|
||||
}
|
||||
// change more_keys to popup_keys
|
||||
if (prefs.contains("more_keys_order")) {
|
||||
prefs.edit().putString(Settings.PREF_POPUP_KEYS_ORDER, prefs.getString("more_keys_order", "")?.replace("more_", "popup_")).apply()
|
||||
prefs.edit().remove("more_keys_order").apply()
|
||||
}
|
||||
if (prefs.contains("more_keys_labels_order")) {
|
||||
prefs.edit().putString(Settings.PREF_POPUP_KEYS_LABELS_ORDER, prefs.getString("more_keys_labels_order", "")?.replace("more_", "popup_")).apply()
|
||||
prefs.edit().remove("more_keys_labels_order").apply()
|
||||
}
|
||||
if (prefs.contains("more_more_keys")) {
|
||||
prefs.edit().putString(Settings.PREF_MORE_POPUP_KEYS, prefs.getString("more_more_keys", "")).apply()
|
||||
prefs.edit().remove("more_more_keys").apply()
|
||||
}
|
||||
if (prefs.contains("spellcheck_use_contacts")) {
|
||||
prefs.edit().putBoolean(Settings.PREF_USE_CONTACTS, prefs.getBoolean("spellcheck_use_contacts", false)).apply()
|
||||
prefs.edit().remove("spellcheck_use_contacts").apply()
|
||||
}
|
||||
// upgrade additional subtype locale strings
|
||||
if (prefs.contains(Settings.PREF_ADDITIONAL_SUBTYPES)) {
|
||||
val additionalSubtypes = mutableListOf<String>()
|
||||
prefs.getString(Settings.PREF_ADDITIONAL_SUBTYPES, "")!!.split(";").forEach {
|
||||
val localeString = it.substringBefore(":")
|
||||
additionalSubtypes.add(it.replace(localeString, localeString.constructLocale().toLanguageTag()))
|
||||
}
|
||||
prefs.edit().putString(Settings.PREF_ADDITIONAL_SUBTYPES, additionalSubtypes.joinToString(";")).apply()
|
||||
}
|
||||
// move pinned clips to credential protected storage if device is not locked (should never happen)
|
||||
if (!prefs.contains(Settings.PREF_PINNED_CLIPS)) return
|
||||
try {
|
||||
val defaultProtectedPrefs = context.protectedPrefs()
|
||||
defaultProtectedPrefs.edit { putString(Settings.PREF_PINNED_CLIPS, prefs.getString(Settings.PREF_PINNED_CLIPS, "")) }
|
||||
prefs.edit { remove(Settings.PREF_PINNED_CLIPS) }
|
||||
} catch (_: IllegalStateException) {
|
||||
// SharedPreferences in credential encrypted storage are not available until after user is unlocked
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,10 +16,8 @@ import helium314.keyboard.keyboard.KeyboardSwitcher
|
|||
import helium314.keyboard.latin.R
|
||||
import helium314.keyboard.latin.checkVersionUpgrade
|
||||
import helium314.keyboard.latin.common.FileUtils
|
||||
import helium314.keyboard.latin.common.LocaleUtils.constructLocale
|
||||
import helium314.keyboard.latin.settings.Settings
|
||||
import helium314.keyboard.latin.utils.DeviceProtectedUtils
|
||||
import helium314.keyboard.latin.utils.DictionaryInfoUtils
|
||||
import helium314.keyboard.latin.utils.ExecutorUtils
|
||||
import helium314.keyboard.latin.utils.LayoutUtilsCustom
|
||||
import helium314.keyboard.latin.utils.Log
|
||||
|
@ -51,10 +49,10 @@ fun BackupRestorePreference(setting: Setting) {
|
|||
val prefs = ctx.prefs()
|
||||
var error: String? by rememberSaveable { mutableStateOf(null) }
|
||||
val backupFilePatterns by lazy { listOf(
|
||||
"blacklists/.*\\.txt".toRegex(),
|
||||
"layouts/.*${LayoutUtilsCustom.CUSTOM_LAYOUT_PREFIX}+\\..{0,4}".toRegex(), // can't expect a period at the end, as this would break restoring older backups
|
||||
"dicts/.*/.*user\\.dict".toRegex(),
|
||||
"UserHistoryDictionary.*/UserHistoryDictionary.*\\.(body|header)".toRegex(),
|
||||
"blacklists${File.separator}.*\\.txt".toRegex(),
|
||||
"layouts${File.separator}.*${LayoutUtilsCustom.CUSTOM_LAYOUT_PREFIX}+\\..{0,4}".toRegex(), // can't expect a period at the end, as this would break restoring older backups
|
||||
"dicts${File.separator}.*${File.separator}.*user\\.dict".toRegex(),
|
||||
"UserHistoryDictionary.*${File.separator}UserHistoryDictionary.*\\.(body|header)".toRegex(),
|
||||
"custom_background_image.*".toRegex(),
|
||||
"custom_font".toRegex(),
|
||||
) }
|
||||
|
@ -131,13 +129,11 @@ fun BackupRestorePreference(setting: Setting) {
|
|||
if (entry.name.startsWith("unprotected${File.separator}")) {
|
||||
val adjustedName = entry.name.substringAfter("unprotected${File.separator}")
|
||||
if (backupFilePatterns.any { adjustedName.matches(it) }) {
|
||||
val targetFileName = upgradeFileNames(adjustedName)
|
||||
val file = File(deviceProtectedFilesDir, targetFileName)
|
||||
val file = File(deviceProtectedFilesDir, adjustedName)
|
||||
FileUtils.copyStreamToNewFile(zip, file)
|
||||
}
|
||||
} else if (backupFilePatterns.any { entry!!.name.matches(it) }) {
|
||||
val targetFileName = upgradeFileNames(entry.name)
|
||||
val file = File(filesDir, targetFileName)
|
||||
val file = File(filesDir, entry.name)
|
||||
FileUtils.copyStreamToNewFile(zip, file)
|
||||
} else if (entry.name == PREFS_FILE_NAME) {
|
||||
val prefLines = String(zip.readBytes()).split("\n")
|
||||
|
@ -253,38 +249,5 @@ private fun readJsonLinesToSettings(list: List<String>, prefs: SharedPreferences
|
|||
}
|
||||
}
|
||||
|
||||
// todo (later): remove this when new package name has been in use for long enough, this is only for migrating from old openboard name
|
||||
private fun upgradeFileNames(originalName: String): String {
|
||||
return when {
|
||||
originalName.endsWith(DictionaryInfoUtils.USER_DICTIONARY_SUFFIX) -> {
|
||||
// replace directory after switch to language tag
|
||||
val dirName = originalName.substringAfter(File.separator).substringBefore(File.separator)
|
||||
originalName.replace(dirName, dirName.constructLocale().toLanguageTag())
|
||||
}
|
||||
originalName.startsWith("blacklists") -> {
|
||||
// replace file name after switch to language tag
|
||||
val fileName = originalName.substringAfter("blacklists${File.separator}").substringBefore(".txt")
|
||||
originalName.replace(fileName, fileName.constructLocale().toLanguageTag())
|
||||
}
|
||||
originalName.startsWith("layouts") -> {
|
||||
// replace file name after switch to language tag, but only if it's not a layout
|
||||
val localeString = originalName.substringAfter(".").substringBefore(".")
|
||||
if (localeString in listOf("symbols", "symbols_shifted", "symbols_arabic", "number", "numpad", "numpad_landscape", "phone", "phone_symbols"))
|
||||
return originalName // it's a layout!
|
||||
val locale = localeString.constructLocale()
|
||||
if (locale.toLanguageTag() != "und")
|
||||
originalName.replace(localeString, locale.toLanguageTag())
|
||||
else
|
||||
originalName // no valid locale -> must be symbols layout, don't change
|
||||
}
|
||||
originalName.startsWith("UserHistoryDictionary") -> {
|
||||
val localeString = originalName.substringAfter(".").substringBefore(".")
|
||||
val locale = localeString.constructLocale()
|
||||
originalName.replace(localeString, locale.toLanguageTag())
|
||||
}
|
||||
else -> originalName
|
||||
}
|
||||
}
|
||||
|
||||
private const val PREFS_FILE_NAME = "preferences.json"
|
||||
private const val PROTECTED_PREFS_FILE_NAME = "protected_preferences.json"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue