add settings migration

This commit is contained in:
Kr328 committed 2020-02-20 01:40:52 +08:00
1 parent ba8a6247f5
commit 3dd3431401
2 files changed
+39 -3

No files matched your search

@@ -1,12 +1,14 @@
package com.github.kr328.clash.service.data
import android.content.ContentValues
import android.content.Context
import android.database.sqlite.SQLiteDatabase
import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase
import com.github.kr328.clash.core.Global
import com.github.kr328.clash.core.utils.Log
import com.github.kr328.clash.service.Constants
import com.github.kr328.clash.service.settings.ServiceSettings
import com.github.kr328.clash.service.util.resolveBase
import com.github.kr328.clash.service.util.resolveProfile
import java.io.File
@@ -103,6 +105,38 @@ object ClashDatabaseMigrations {
database.execSQL("DROP TABLE _profiles")
database.execSQL("DROP TABLE _profile_select_proxies")
// Migration settings
val oldSettings = Global.application
.getSharedPreferences("clash_service", Context.MODE_PRIVATE)
val newSettings = ServiceSettings(Global.application
.getSharedPreferences(Constants.SERVICE_SETTING_FILE_NAME, Context.MODE_PRIVATE))
val accessMode = oldSettings
.getInt("key_access_control_mode", 0)
val accessPackages = oldSettings
.getStringSet("ley_access_control_apps", emptySet())!! // just typo :)
val ipv6Enabled = oldSettings
.getBoolean("key_ipv6_enabled", false)
val dnsHijack = oldSettings
.getBoolean("key_dns_hijacking_enabled", true)
val bypassPrivate = oldSettings
.getBoolean("key_bypass_private_network", true)
newSettings.commit {
val newAccessMode = when ( accessMode ) {
0 -> ServiceSettings.ACCESS_CONTROL_MODE_ALL
1 -> ServiceSettings.ACCESS_CONTROL_MODE_WHITELIST
2 -> ServiceSettings.ACCESS_CONTROL_MODE_BLACKLIST
else -> ServiceSettings.ACCESS_CONTROL_MODE_ALL
}
put(ServiceSettings.ACCESS_CONTROL_MODE, newAccessMode)
put(ServiceSettings.ACCESS_CONTROL_PACKAGES, accessPackages)
put(ServiceSettings.IPV6_SUPPORT, ipv6Enabled)
put(ServiceSettings.DNS_HIJACKING, dnsHijack)
put(ServiceSettings.BYPASS_PRIVATE_NETWORK, bypassPrivate)
}
}
override fun migrate(database: SupportSQLiteDatabase) {
@@ -1,12 +1,14 @@
package com.github.kr328.clash.service.settings
import android.content.Context
import android.content.SharedPreferences
import com.github.kr328.clash.service.Constants
import rikka.preference.MultiProcessPreference
class ServiceSettings(context: Context):
BaseSettings(MultiProcessPreference(context,
context.packageName + Constants.SETTING_PROVIDER_SUFFIX)) {
class ServiceSettings(preference: SharedPreferences):
BaseSettings(preference) {
constructor(context: Context): this(MultiProcessPreference(context,
context.packageName + Constants.SETTING_PROVIDER_SUFFIX))
companion object {
const val ACCESS_CONTROL_MODE_ALL = "access_control_mode_all"
const val ACCESS_CONTROL_MODE_BLACKLIST = "access_control_mode_blacklist"