diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/fmt/Hysteria2Fmt.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/fmt/Hysteria2Fmt.kt index 51b27a4e..0aad9c88 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/fmt/Hysteria2Fmt.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/fmt/Hysteria2Fmt.kt @@ -8,13 +8,13 @@ import com.v2ray.ang.dto.ProfileItem import com.v2ray.ang.dto.V2rayConfig.OutboundBean import com.v2ray.ang.extension.idnHost import com.v2ray.ang.extension.isNotNullEmpty -import com.v2ray.ang.handler.MmkvManager.settingsStorage +import com.v2ray.ang.handler.MmkvManager import com.v2ray.ang.util.Utils import java.net.URI object Hysteria2Fmt : FmtBase() { fun parse(str: String): ProfileItem? { - var allowInsecure = settingsStorage.decodeBool(AppConfig.PREF_ALLOW_INSECURE, false) + var allowInsecure = MmkvManager.decodeSettingsBool(AppConfig.PREF_ALLOW_INSECURE, false) val config = ProfileItem.create(EConfigType.HYSTERIA2) val uri = URI(Utils.fixIllegalUrl(str)) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/fmt/TrojanFmt.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/fmt/TrojanFmt.kt index f1d373d8..f8e6a216 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/fmt/TrojanFmt.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/fmt/TrojanFmt.kt @@ -5,14 +5,14 @@ import com.v2ray.ang.dto.EConfigType import com.v2ray.ang.dto.ProfileItem import com.v2ray.ang.dto.V2rayConfig.OutboundBean import com.v2ray.ang.extension.idnHost -import com.v2ray.ang.handler.MmkvManager.settingsStorage +import com.v2ray.ang.handler.MmkvManager import com.v2ray.ang.util.Utils import java.net.URI import kotlin.text.orEmpty object TrojanFmt : FmtBase() { fun parse(str: String): ProfileItem? { - var allowInsecure = settingsStorage.decodeBool(AppConfig.PREF_ALLOW_INSECURE, false) + var allowInsecure = MmkvManager.decodeSettingsBool(AppConfig.PREF_ALLOW_INSECURE, false) val config = ProfileItem.create(EConfigType.TROJAN) val uri = URI(Utils.fixIllegalUrl(str)) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/fmt/VlessFmt.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/fmt/VlessFmt.kt index 3e2277cd..fd43fcf8 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/fmt/VlessFmt.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/fmt/VlessFmt.kt @@ -5,14 +5,14 @@ import com.v2ray.ang.dto.EConfigType import com.v2ray.ang.dto.ProfileItem import com.v2ray.ang.dto.V2rayConfig.OutboundBean import com.v2ray.ang.extension.idnHost -import com.v2ray.ang.handler.MmkvManager.settingsStorage +import com.v2ray.ang.handler.MmkvManager import com.v2ray.ang.util.Utils import java.net.URI object VlessFmt : FmtBase() { fun parse(str: String): ProfileItem? { - var allowInsecure = settingsStorage.decodeBool(AppConfig.PREF_ALLOW_INSECURE, false) + var allowInsecure = MmkvManager.decodeSettingsBool(AppConfig.PREF_ALLOW_INSECURE, false) val config = ProfileItem.create(EConfigType.VLESS) val uri = URI(Utils.fixIllegalUrl(str)) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/fmt/VmessFmt.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/fmt/VmessFmt.kt index efafcf4e..6767ef5d 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/fmt/VmessFmt.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/fmt/VmessFmt.kt @@ -9,8 +9,8 @@ import com.v2ray.ang.dto.V2rayConfig.OutboundBean import com.v2ray.ang.dto.VmessQRCode import com.v2ray.ang.extension.idnHost import com.v2ray.ang.extension.isNotNullEmpty +import com.v2ray.ang.handler.MmkvManager import com.v2ray.ang.util.JsonUtil -import com.v2ray.ang.handler.MmkvManager.settingsStorage import com.v2ray.ang.util.Utils import java.net.URI import kotlin.text.orEmpty @@ -21,7 +21,7 @@ object VmessFmt : FmtBase() { return parseVmessStd(str) } - var allowInsecure = settingsStorage.decodeBool(AppConfig.PREF_ALLOW_INSECURE, false) + var allowInsecure = MmkvManager.decodeSettingsBool(AppConfig.PREF_ALLOW_INSECURE, false) val config = ProfileItem.create(EConfigType.VMESS) var result = str.replace(EConfigType.VMESS.protocolScheme, "") @@ -119,7 +119,7 @@ object VmessFmt : FmtBase() { } fun parseVmessStd(str: String): ProfileItem? { - var allowInsecure = settingsStorage.decodeBool(AppConfig.PREF_ALLOW_INSECURE, false) + var allowInsecure = MmkvManager.decodeSettingsBool(AppConfig.PREF_ALLOW_INSECURE, false) val config = ProfileItem.create(EConfigType.VMESS) val uri = URI(Utils.fixIllegalUrl(str)) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/handler/AngConfigManager.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/handler/AngConfigManager.kt index 60adc0bd..073706e1 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/handler/AngConfigManager.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/handler/AngConfigManager.kt @@ -8,9 +8,6 @@ import com.v2ray.ang.AppConfig import com.v2ray.ang.AppConfig.HY2 import com.v2ray.ang.R import com.v2ray.ang.dto.* -import com.v2ray.ang.util.JsonUtil -import com.v2ray.ang.util.QRCodeDecoder -import com.v2ray.ang.util.Utils import com.v2ray.ang.fmt.CustomFmt import com.v2ray.ang.fmt.Hysteria2Fmt import com.v2ray.ang.fmt.ShadowsocksFmt @@ -19,6 +16,9 @@ import com.v2ray.ang.fmt.TrojanFmt import com.v2ray.ang.fmt.VlessFmt import com.v2ray.ang.fmt.VmessFmt import com.v2ray.ang.fmt.WireguardFmt +import com.v2ray.ang.util.JsonUtil +import com.v2ray.ang.util.QRCodeDecoder +import com.v2ray.ang.util.Utils import java.net.URI object AngConfigManager { diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/handler/MigrateManager.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/handler/MigrateManager.kt index bfb931c1..3509ac1a 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/handler/MigrateManager.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/handler/MigrateManager.kt @@ -7,8 +7,8 @@ import com.v2ray.ang.AppConfig.ANG_PACKAGE import com.v2ray.ang.dto.EConfigType import com.v2ray.ang.dto.ProfileItem import com.v2ray.ang.dto.ServerConfig -import com.v2ray.ang.util.JsonUtil import com.v2ray.ang.handler.MmkvManager.decodeServerConfig +import com.v2ray.ang.util.JsonUtil import com.v2ray.ang.util.Utils object MigrateManager { diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/handler/MmkvManager.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/handler/MmkvManager.kt index 96862821..522cdbeb 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/handler/MmkvManager.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/handler/MmkvManager.kt @@ -35,7 +35,7 @@ object MmkvManager { private val serverAffStorage by lazy { MMKV.mmkvWithID(ID_SERVER_AFF, MMKV.MULTI_PROCESS_MODE) } private val subStorage by lazy { MMKV.mmkvWithID(ID_SUB, MMKV.MULTI_PROCESS_MODE) } private val assetStorage by lazy { MMKV.mmkvWithID(ID_ASSET, MMKV.MULTI_PROCESS_MODE) } - val settingsStorage by lazy { MMKV.mmkvWithID(ID_SETTING, MMKV.MULTI_PROCESS_MODE) } + private val settingsStorage by lazy { MMKV.mmkvWithID(ID_SETTING, MMKV.MULTI_PROCESS_MODE) } //endregion @@ -304,9 +304,51 @@ object MmkvManager { fun encodeRoutingRulesets(rulesetList: MutableList?) { if (rulesetList.isNullOrEmpty()) - settingsStorage.encode(PREF_ROUTING_RULESET, "") + encodeSettings(PREF_ROUTING_RULESET, "") else - settingsStorage.encode(PREF_ROUTING_RULESET, JsonUtil.toJson(rulesetList)) + encodeSettings(PREF_ROUTING_RULESET, JsonUtil.toJson(rulesetList)) + } + + //endregion + fun encodeSettings(key: String, value: String?): Boolean { + return settingsStorage.encode(key, value) + } + + fun encodeSettings(key: String, value: Int): Boolean { + return settingsStorage.encode(key, value) + } + + fun encodeSettings(key: String, value: Boolean): Boolean { + return settingsStorage.encode(key, value) + } + + fun encodeSettings(key: String, value: MutableSet): Boolean { + return settingsStorage.encode(key, value) + } + + + fun decodeSettingsString(key: String): String? { + return settingsStorage.decodeString(key) + } + + fun decodeSettingsString(key: String, defaultValue: String?): String? { + return settingsStorage.decodeString(key, defaultValue) + } + + fun decodeSettingsBool(key: String): Boolean { + return settingsStorage.decodeBool(key) + } + + fun decodeSettingsBool(key: String, defaultValue: Boolean): Boolean { + return settingsStorage.decodeBool(key, defaultValue) + } + + fun decodeSettingsInt(key: String, defaultValue: Int): Int { + return settingsStorage.decodeInt(key, defaultValue) + } + + fun decodeSettingsStringSet(key: String): MutableSet? { + return settingsStorage.decodeStringSet(key) } //endregion @@ -314,11 +356,11 @@ object MmkvManager { //region Others fun encodeStartOnBoot(startOnBoot: Boolean) { - settingsStorage.encode(PREF_IS_BOOTED, startOnBoot) + MmkvManager.encodeSettings(PREF_IS_BOOTED, startOnBoot) } fun decodeStartOnBoot(): Boolean { - return settingsStorage.decodeBool(PREF_IS_BOOTED, false) + return decodeSettingsBool(PREF_IS_BOOTED, false) } //endregion diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/handler/SettingsManager.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/handler/SettingsManager.kt index 26f475e8..3c0bb5f1 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/handler/SettingsManager.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/handler/SettingsManager.kt @@ -11,7 +11,6 @@ import com.v2ray.ang.dto.RoutingType import com.v2ray.ang.dto.RulesetItem import com.v2ray.ang.handler.MmkvManager.decodeServerConfig import com.v2ray.ang.handler.MmkvManager.decodeServerList -import com.v2ray.ang.handler.MmkvManager.settingsStorage import com.v2ray.ang.util.JsonUtil import com.v2ray.ang.util.Utils import com.v2ray.ang.util.Utils.parseInt @@ -147,11 +146,11 @@ object SettingsManager { } fun getSocksPort(): Int { - return parseInt(settingsStorage?.decodeString(AppConfig.PREF_SOCKS_PORT), AppConfig.PORT_SOCKS.toInt()) + return parseInt(MmkvManager.decodeSettingsString(AppConfig.PREF_SOCKS_PORT), AppConfig.PORT_SOCKS.toInt()) } fun getHttpPort(): Int { - return parseInt(settingsStorage?.decodeString(AppConfig.PREF_HTTP_PORT), AppConfig.PORT_HTTP.toInt()) + return parseInt(MmkvManager.decodeSettingsString(AppConfig.PREF_HTTP_PORT), AppConfig.PORT_HTTP.toInt()) } } diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/handler/V2rayConfigManager.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/handler/V2rayConfigManager.kt index e9db0eb3..29ab91da 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/handler/V2rayConfigManager.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/handler/V2rayConfigManager.kt @@ -34,9 +34,6 @@ import com.v2ray.ang.dto.ProfileItem import com.v2ray.ang.dto.RulesetItem import com.v2ray.ang.dto.V2rayConfig import com.v2ray.ang.dto.V2rayConfig.RoutingBean.RulesBean -import com.v2ray.ang.handler.MmkvManager.settingsStorage -import com.v2ray.ang.util.JsonUtil -import com.v2ray.ang.util.Utils import com.v2ray.ang.fmt.HttpFmt import com.v2ray.ang.fmt.Hysteria2Fmt import com.v2ray.ang.fmt.ShadowsocksFmt @@ -45,6 +42,8 @@ import com.v2ray.ang.fmt.TrojanFmt import com.v2ray.ang.fmt.VlessFmt import com.v2ray.ang.fmt.VmessFmt import com.v2ray.ang.fmt.WireguardFmt +import com.v2ray.ang.util.JsonUtil +import com.v2ray.ang.util.Utils object V2rayConfigManager { @@ -85,7 +84,7 @@ object V2rayConfigManager { } val v2rayConfig = JsonUtil.fromJson(assets, V2rayConfig::class.java) ?: return result v2rayConfig.log.loglevel = - settingsStorage?.decodeString(AppConfig.PREF_LOGLEVEL) ?: "warning" + MmkvManager.decodeSettingsString(AppConfig.PREF_LOGLEVEL) ?: "warning" v2rayConfig.remarks = config.remarks inbounds(v2rayConfig) @@ -100,10 +99,10 @@ object V2rayConfigManager { dns(v2rayConfig) - if (settingsStorage?.decodeBool(AppConfig.PREF_LOCAL_DNS_ENABLED) == true) { + if (MmkvManager.decodeSettingsBool(AppConfig.PREF_LOCAL_DNS_ENABLED) == true) { customLocalDns(v2rayConfig) } - if (settingsStorage?.decodeBool(AppConfig.PREF_SPEED_ENABLED) != true) { + if (MmkvManager.decodeSettingsBool(AppConfig.PREF_SPEED_ENABLED) != true) { v2rayConfig.stats = null v2rayConfig.policy = null } @@ -120,18 +119,18 @@ object V2rayConfigManager { val httpPort = SettingsManager.getHttpPort() v2rayConfig.inbounds.forEach { curInbound -> - if (settingsStorage?.decodeBool(AppConfig.PREF_PROXY_SHARING) != true) { + if (MmkvManager.decodeSettingsBool(AppConfig.PREF_PROXY_SHARING) != true) { //bind all inbounds to localhost if the user requests curInbound.listen = LOOPBACK } } v2rayConfig.inbounds[0].port = socksPort - val fakedns = settingsStorage?.decodeBool(AppConfig.PREF_FAKE_DNS_ENABLED) == true + val fakedns = MmkvManager.decodeSettingsBool(AppConfig.PREF_FAKE_DNS_ENABLED) == true val sniffAllTlsAndHttp = - settingsStorage?.decodeBool(AppConfig.PREF_SNIFFING_ENABLED, true) != false + MmkvManager.decodeSettingsBool(AppConfig.PREF_SNIFFING_ENABLED, true) != false v2rayConfig.inbounds[0].sniffing?.enabled = fakedns || sniffAllTlsAndHttp v2rayConfig.inbounds[0].sniffing?.routeOnly = - settingsStorage?.decodeBool(AppConfig.PREF_ROUTE_ONLY_ENABLED, false) + MmkvManager.decodeSettingsBool(AppConfig.PREF_ROUTE_ONLY_ENABLED, false) if (!sniffAllTlsAndHttp) { v2rayConfig.inbounds[0].sniffing?.destOverride?.clear() } @@ -192,8 +191,8 @@ object V2rayConfigManager { } private fun fakedns(v2rayConfig: V2rayConfig) { - if (settingsStorage?.decodeBool(AppConfig.PREF_LOCAL_DNS_ENABLED) == true - && settingsStorage?.decodeBool(AppConfig.PREF_FAKE_DNS_ENABLED) == true + if (MmkvManager.decodeSettingsBool(AppConfig.PREF_LOCAL_DNS_ENABLED) == true + && MmkvManager.decodeSettingsBool(AppConfig.PREF_FAKE_DNS_ENABLED) == true ) { v2rayConfig.fakedns = listOf(V2rayConfig.FakednsBean()) } @@ -203,7 +202,7 @@ object V2rayConfigManager { try { v2rayConfig.routing.domainStrategy = - settingsStorage?.decodeString(AppConfig.PREF_ROUTING_DOMAIN_STRATEGY) + MmkvManager.decodeSettingsString(AppConfig.PREF_ROUTING_DOMAIN_STRATEGY) ?: "IPIfNonMatch" val rulesetItems = MmkvManager.decodeRoutingRulesets() @@ -253,7 +252,7 @@ object V2rayConfigManager { private fun customLocalDns(v2rayConfig: V2rayConfig): Boolean { try { - if (settingsStorage?.decodeBool(AppConfig.PREF_FAKE_DNS_ENABLED) == true) { + if (MmkvManager.decodeSettingsBool(AppConfig.PREF_FAKE_DNS_ENABLED) == true) { val geositeCn = arrayListOf(GEOSITE_CN) val proxyDomain = userRule2Domain(TAG_PROXY) val directDomain = userRule2Domain(TAG_DIRECT) @@ -277,7 +276,7 @@ object V2rayConfigManager { ) val localDnsPort = Utils.parseInt( - settingsStorage?.decodeString(AppConfig.PREF_LOCAL_DNS_PORT), + MmkvManager.decodeSettingsString(AppConfig.PREF_LOCAL_DNS_PORT), AppConfig.PORT_LOCAL_DNS.toInt() ) v2rayConfig.inbounds.add( @@ -411,7 +410,7 @@ object V2rayConfigManager { private fun updateOutboundWithGlobalSettings(outbound: V2rayConfig.OutboundBean): Boolean { try { - var muxEnabled = settingsStorage?.decodeBool(AppConfig.PREF_MUX_ENABLED, false) + var muxEnabled = MmkvManager.decodeSettingsBool(AppConfig.PREF_MUX_ENABLED, false) val protocol = outbound.protocol if (protocol.equals(EConfigType.SHADOWSOCKS.name, true) || protocol.equals(EConfigType.SOCKS.name, true) @@ -429,11 +428,11 @@ object V2rayConfigManager { if (muxEnabled == true) { outbound.mux?.enabled = true outbound.mux?.concurrency = - settingsStorage?.decodeInt(AppConfig.PREF_MUX_CONCURRENCY) ?: 8 + MmkvManager.decodeSettingsInt(AppConfig.PREF_MUX_CONCURRENCY, 8) outbound.mux?.xudpConcurrency = - settingsStorage?.decodeInt(AppConfig.PREF_MUX_XUDP_CONCURRENCY) ?: 8 + MmkvManager.decodeSettingsInt(AppConfig.PREF_MUX_XUDP_CONCURRENCY, 8) outbound.mux?.xudpProxyUDP443 = - settingsStorage?.decodeString(AppConfig.PREF_MUX_XUDP_QUIC) ?: "reject" + MmkvManager.decodeSettingsString(AppConfig.PREF_MUX_XUDP_QUIC) ?: "reject" } else { outbound.mux?.enabled = false outbound.mux?.concurrency = -1 @@ -445,7 +444,7 @@ object V2rayConfigManager { } else { outbound.settings?.address as List<*> } - if (settingsStorage?.decodeBool(AppConfig.PREF_PREFER_IPV6) != true) { + if (MmkvManager.decodeSettingsBool(AppConfig.PREF_PREFER_IPV6) != true) { localTunAddr = listOf(localTunAddr.first()) } outbound.settings?.address = localTunAddr @@ -483,7 +482,7 @@ object V2rayConfigManager { private fun updateOutboundFragment(v2rayConfig: V2rayConfig): Boolean { try { - if (settingsStorage?.decodeBool(AppConfig.PREF_FRAGMENT_ENABLED, false) == false) { + if (MmkvManager.decodeSettingsBool(AppConfig.PREF_FRAGMENT_ENABLED, false) == false) { return true } if (v2rayConfig.outbounds[0].streamSettings?.security != AppConfig.TLS @@ -500,7 +499,7 @@ object V2rayConfigManager { ) var packets = - settingsStorage?.decodeString(AppConfig.PREF_FRAGMENT_PACKETS) ?: "tlshello" + MmkvManager.decodeSettingsString(AppConfig.PREF_FRAGMENT_PACKETS) ?: "tlshello" if (v2rayConfig.outbounds[0].streamSettings?.security == AppConfig.REALITY && packets == "tlshello" ) { @@ -514,9 +513,9 @@ object V2rayConfigManager { fragmentOutbound.settings = V2rayConfig.OutboundBean.OutSettingsBean( fragment = V2rayConfig.OutboundBean.OutSettingsBean.FragmentBean( packets = packets, - length = settingsStorage?.decodeString(AppConfig.PREF_FRAGMENT_LENGTH) + length = MmkvManager.decodeSettingsString(AppConfig.PREF_FRAGMENT_LENGTH) ?: "50-100", - interval = settingsStorage?.decodeString(AppConfig.PREF_FRAGMENT_INTERVAL) + interval = MmkvManager.decodeSettingsString(AppConfig.PREF_FRAGMENT_INTERVAL) ?: "10-20" ), noises = listOf( @@ -559,7 +558,7 @@ object V2rayConfigManager { return returnPair } //fragment proxy - if (settingsStorage?.decodeBool(AppConfig.PREF_FRAGMENT_ENABLED, false) == true) { + if (MmkvManager.decodeSettingsBool(AppConfig.PREF_FRAGMENT_ENABLED, false) == true) { return returnPair } diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/receiver/BootReceiver.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/receiver/BootReceiver.kt index 8a6c9144..7f2eff1e 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/receiver/BootReceiver.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/receiver/BootReceiver.kt @@ -3,8 +3,8 @@ package com.v2ray.ang.receiver import android.content.BroadcastReceiver import android.content.Context import android.content.Intent -import com.v2ray.ang.service.V2RayServiceManager import com.v2ray.ang.handler.MmkvManager +import com.v2ray.ang.service.V2RayServiceManager class BootReceiver : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/receiver/TaskerReceiver.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/receiver/TaskerReceiver.kt index a543e3a9..3e16c2f6 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/receiver/TaskerReceiver.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/receiver/TaskerReceiver.kt @@ -5,8 +5,8 @@ import android.content.Context import android.content.Intent import android.text.TextUtils import com.v2ray.ang.AppConfig -import com.v2ray.ang.service.V2RayServiceManager import com.v2ray.ang.handler.MmkvManager +import com.v2ray.ang.service.V2RayServiceManager import com.v2ray.ang.util.Utils class TaskerReceiver : BroadcastReceiver() { diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayServiceManager.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayServiceManager.kt index d5746f57..a0fcf27c 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayServiceManager.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayServiceManager.kt @@ -21,13 +21,12 @@ import com.v2ray.ang.R import com.v2ray.ang.dto.ProfileItem import com.v2ray.ang.extension.toSpeedString import com.v2ray.ang.extension.toast +import com.v2ray.ang.handler.MmkvManager +import com.v2ray.ang.handler.V2rayConfigManager import com.v2ray.ang.ui.MainActivity import com.v2ray.ang.util.MessageUtil -import com.v2ray.ang.handler.MmkvManager -import com.v2ray.ang.handler.MmkvManager.settingsStorage import com.v2ray.ang.util.PluginUtil import com.v2ray.ang.util.Utils -import com.v2ray.ang.handler.V2rayConfigManager import go.Seq import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.disposables.Disposable @@ -70,12 +69,12 @@ object V2RayServiceManager { // val result = V2rayConfigUtil.getV2rayConfig(context, guid) // if (!result.status) return - if (settingsStorage?.decodeBool(AppConfig.PREF_PROXY_SHARING) == true) { + if (MmkvManager.decodeSettingsBool(AppConfig.PREF_PROXY_SHARING) == true) { context.toast(R.string.toast_warning_pref_proxysharing_short) } else { context.toast(R.string.toast_services_start) } - val intent = if ((settingsStorage?.decodeString(AppConfig.PREF_MODE) ?: VPN) == VPN) { + val intent = if ((MmkvManager.decodeSettingsString(AppConfig.PREF_MODE) ?: VPN) == VPN) { Intent(context.applicationContext, V2RayVpnService::class.java) } else { Intent(context.applicationContext, V2RayProxyOnlyService::class.java) @@ -157,7 +156,7 @@ object V2RayServiceManager { currentConfig = config try { - v2rayPoint.runLoop(settingsStorage?.decodeBool(AppConfig.PREF_PREFER_IPV6) == true) + v2rayPoint.runLoop(MmkvManager.decodeSettingsBool(AppConfig.PREF_PREFER_IPV6) == true) } catch (e: Exception) { Log.d(ANG_PACKAGE, e.toString()) } @@ -380,7 +379,7 @@ object V2RayServiceManager { private fun startSpeedNotification() { if (mDisposable == null && v2rayPoint.isRunning && - settingsStorage?.decodeBool(AppConfig.PREF_SPEED_ENABLED) == true + MmkvManager.decodeSettingsBool(AppConfig.PREF_SPEED_ENABLED) == true ) { var lastZeroSpeed = false val outboundTags = currentConfig?.getAllOutboundTags() diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayTestService.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayTestService.kt index 5cff64ca..d3cbd424 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayTestService.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayTestService.kt @@ -8,12 +8,12 @@ import com.v2ray.ang.AppConfig.MSG_MEASURE_CONFIG_CANCEL import com.v2ray.ang.AppConfig.MSG_MEASURE_CONFIG_SUCCESS import com.v2ray.ang.dto.EConfigType import com.v2ray.ang.extension.serializable -import com.v2ray.ang.util.MessageUtil import com.v2ray.ang.handler.MmkvManager +import com.v2ray.ang.handler.V2rayConfigManager +import com.v2ray.ang.util.MessageUtil import com.v2ray.ang.util.PluginUtil import com.v2ray.ang.util.SpeedtestUtil import com.v2ray.ang.util.Utils -import com.v2ray.ang.handler.V2rayConfigManager import go.Seq import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Job diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayVpnService.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayVpnService.kt index 156ed332..8b1369fa 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayVpnService.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayVpnService.kt @@ -20,9 +20,9 @@ import com.v2ray.ang.AppConfig import com.v2ray.ang.AppConfig.LOOPBACK import com.v2ray.ang.BuildConfig import com.v2ray.ang.R -import com.v2ray.ang.handler.MmkvManager.settingsStorage -import com.v2ray.ang.util.MyContextWrapper +import com.v2ray.ang.handler.MmkvManager import com.v2ray.ang.handler.SettingsManager +import com.v2ray.ang.util.MyContextWrapper import com.v2ray.ang.util.Utils import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -130,7 +130,7 @@ class V2RayVpnService : VpnService(), ServiceControl { builder.addRoute("0.0.0.0", 0) } - if (settingsStorage?.decodeBool(AppConfig.PREF_PREFER_IPV6) == true) { + if (MmkvManager.decodeSettingsBool(AppConfig.PREF_PREFER_IPV6) == true) { builder.addAddress(PRIVATE_VLAN6_CLIENT, 126) if (bypassLan) { builder.addRoute("2000::", 3) //currently only 1/8 of total ipV6 is in use @@ -139,7 +139,7 @@ class V2RayVpnService : VpnService(), ServiceControl { } } -// if (settingsStorage?.decodeBool(AppConfig.PREF_LOCAL_DNS_ENABLED) == true) { +// if (MmkvManager.decodeSettingsBool(AppConfig.PREF_LOCAL_DNS_ENABLED) == true) { // builder.addDnsServer(PRIVATE_VLAN4_ROUTER) // } else { Utils.getVpnDnsServers() @@ -153,9 +153,9 @@ class V2RayVpnService : VpnService(), ServiceControl { builder.setSession(V2RayServiceManager.currentConfig?.remarks.orEmpty()) val selfPackageName = BuildConfig.APPLICATION_ID - if (settingsStorage?.decodeBool(AppConfig.PREF_PER_APP_PROXY) == true) { - val apps = settingsStorage?.decodeStringSet(AppConfig.PREF_PER_APP_PROXY_SET) - val bypassApps = settingsStorage?.decodeBool(AppConfig.PREF_BYPASS_APPS) == true + if (MmkvManager.decodeSettingsBool(AppConfig.PREF_PER_APP_PROXY) == true) { + val apps = MmkvManager.decodeSettingsStringSet(AppConfig.PREF_PER_APP_PROXY_SET) + val bypassApps = MmkvManager.decodeSettingsBool(AppConfig.PREF_BYPASS_APPS) == true //process self package if (bypassApps) apps?.add(selfPackageName) else apps?.remove(selfPackageName) apps?.forEach { @@ -215,12 +215,12 @@ class V2RayVpnService : VpnService(), ServiceControl { "--loglevel", "notice" ) - if (settingsStorage?.decodeBool(AppConfig.PREF_PREFER_IPV6) == true) { + if (MmkvManager.decodeSettingsBool(AppConfig.PREF_PREFER_IPV6) == true) { cmd.add("--netif-ip6addr") cmd.add(PRIVATE_VLAN6_ROUTER) } - if (settingsStorage?.decodeBool(AppConfig.PREF_LOCAL_DNS_ENABLED) == true) { - val localDnsPort = Utils.parseInt(settingsStorage?.decodeString(AppConfig.PREF_LOCAL_DNS_PORT), AppConfig.PORT_LOCAL_DNS.toInt()) + if (MmkvManager.decodeSettingsBool(AppConfig.PREF_LOCAL_DNS_ENABLED) == true) { + val localDnsPort = Utils.parseInt(MmkvManager.decodeSettingsString(AppConfig.PREF_LOCAL_DNS_PORT), AppConfig.PORT_LOCAL_DNS.toInt()) cmd.add("--dnsgw") cmd.add("$LOOPBACK:${localDnsPort}") } diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt index 575adac8..753b6b99 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt @@ -34,12 +34,11 @@ import com.v2ray.ang.R import com.v2ray.ang.databinding.ActivityMainBinding import com.v2ray.ang.dto.EConfigType import com.v2ray.ang.extension.toast -import com.v2ray.ang.helper.SimpleItemTouchHelperCallback -import com.v2ray.ang.service.V2RayServiceManager import com.v2ray.ang.handler.AngConfigManager import com.v2ray.ang.handler.MigrateManager import com.v2ray.ang.handler.MmkvManager -import com.v2ray.ang.handler.MmkvManager.settingsStorage +import com.v2ray.ang.helper.SimpleItemTouchHelperCallback +import com.v2ray.ang.service.V2RayServiceManager import com.v2ray.ang.util.Utils import com.v2ray.ang.viewmodel.MainViewModel import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers @@ -91,7 +90,7 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList binding.fab.setOnClickListener { if (mainViewModel.isRunning.value == true) { Utils.stopVService(this) - } else if ((settingsStorage?.decodeString(AppConfig.PREF_MODE) ?: VPN) == VPN) { + } else if ((MmkvManager.decodeSettingsString(AppConfig.PREF_MODE) ?: VPN) == VPN) { val intent = VpnService.prepare(this) if (intent == null) { startV2Ray() diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainRecyclerAdapter.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainRecyclerAdapter.kt index f74efb53..dadbb4fd 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainRecyclerAdapter.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainRecyclerAdapter.kt @@ -17,12 +17,11 @@ import com.v2ray.ang.databinding.ItemRecyclerFooterBinding import com.v2ray.ang.databinding.ItemRecyclerMainBinding import com.v2ray.ang.dto.EConfigType import com.v2ray.ang.extension.toast +import com.v2ray.ang.handler.AngConfigManager +import com.v2ray.ang.handler.MmkvManager import com.v2ray.ang.helper.ItemTouchHelperAdapter import com.v2ray.ang.helper.ItemTouchHelperViewHolder import com.v2ray.ang.service.V2RayServiceManager -import com.v2ray.ang.handler.AngConfigManager -import com.v2ray.ang.handler.MmkvManager -import com.v2ray.ang.handler.MmkvManager.settingsStorage import com.v2ray.ang.util.Utils import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.core.Observable @@ -139,7 +138,7 @@ class MainRecyclerAdapter(val activity: MainActivity) : RecyclerView.Adapter removeServer(guid, position) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/PerAppProxyActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/PerAppProxyActivity.kt index 5302604b..b1a54db5 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/PerAppProxyActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/PerAppProxyActivity.kt @@ -17,8 +17,8 @@ import com.v2ray.ang.databinding.ActivityBypassListBinding import com.v2ray.ang.dto.AppInfo import com.v2ray.ang.extension.toast import com.v2ray.ang.extension.v2RayApplication +import com.v2ray.ang.handler.MmkvManager import com.v2ray.ang.util.AppManagerUtil -import com.v2ray.ang.handler.MmkvManager.settingsStorage import com.v2ray.ang.util.Utils import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.schedulers.Schedulers @@ -41,7 +41,7 @@ class PerAppProxyActivity : BaseActivity() { val dividerItemDecoration = DividerItemDecoration(this, LinearLayoutManager.VERTICAL) binding.recyclerView.addItemDecoration(dividerItemDecoration) - val blacklist = settingsStorage?.decodeStringSet(AppConfig.PREF_PER_APP_PROXY_SET) + val blacklist = MmkvManager.decodeSettingsStringSet(AppConfig.PREF_PER_APP_PROXY_SET) AppManagerUtil.rxLoadNetworkAppList(this) .subscribeOn(Schedulers.io()) @@ -132,14 +132,14 @@ class PerAppProxyActivity : BaseActivity() { ***/ binding.switchPerAppProxy.setOnCheckedChangeListener { _, isChecked -> - settingsStorage.encode(AppConfig.PREF_PER_APP_PROXY, isChecked) + MmkvManager.encodeSettings(AppConfig.PREF_PER_APP_PROXY, isChecked) } - binding.switchPerAppProxy.isChecked = settingsStorage.getBoolean(AppConfig.PREF_PER_APP_PROXY, false) + binding.switchPerAppProxy.isChecked = MmkvManager.decodeSettingsBool(AppConfig.PREF_PER_APP_PROXY, false) binding.switchBypassApps.setOnCheckedChangeListener { _, isChecked -> - settingsStorage.encode(AppConfig.PREF_BYPASS_APPS, isChecked) + MmkvManager.encodeSettings(AppConfig.PREF_BYPASS_APPS, isChecked) } - binding.switchBypassApps.isChecked = settingsStorage.getBoolean(AppConfig.PREF_BYPASS_APPS, false) + binding.switchBypassApps.isChecked = MmkvManager.decodeSettingsBool(AppConfig.PREF_BYPASS_APPS, false) /*** et_search.setOnEditorActionListener { v, actionId, event -> @@ -175,7 +175,7 @@ class PerAppProxyActivity : BaseActivity() { override fun onPause() { super.onPause() adapter?.let { - settingsStorage.encode(AppConfig.PREF_PER_APP_PROXY_SET, it.blacklist) + MmkvManager.encodeSettings(AppConfig.PREF_PER_APP_PROXY_SET, it.blacklist) } } diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/RoutingSettingActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/RoutingSettingActivity.kt index 0be4cdda..2f267fd6 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/RoutingSettingActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/RoutingSettingActivity.kt @@ -10,17 +10,15 @@ import androidx.appcompat.app.AlertDialog import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager - import com.v2ray.ang.AppConfig import com.v2ray.ang.R import com.v2ray.ang.databinding.ActivityRoutingSettingBinding import com.v2ray.ang.dto.RulesetItem import com.v2ray.ang.extension.toast +import com.v2ray.ang.handler.MmkvManager +import com.v2ray.ang.handler.SettingsManager import com.v2ray.ang.helper.SimpleItemTouchHelperCallback import com.v2ray.ang.util.JsonUtil -import com.v2ray.ang.handler.MmkvManager -import com.v2ray.ang.handler.MmkvManager.settingsStorage -import com.v2ray.ang.handler.SettingsManager import com.v2ray.ang.util.Utils import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -52,14 +50,14 @@ class RoutingSettingActivity : BaseActivity() { mItemTouchHelper = ItemTouchHelper(SimpleItemTouchHelperCallback(adapter)) mItemTouchHelper?.attachToRecyclerView(binding.recyclerView) - val found = Utils.arrayFind(routing_domain_strategy, settingsStorage?.decodeString(AppConfig.PREF_ROUTING_DOMAIN_STRATEGY) ?: "") + val found = Utils.arrayFind(routing_domain_strategy, MmkvManager.decodeSettingsString(AppConfig.PREF_ROUTING_DOMAIN_STRATEGY) ?: "") found.let { binding.spDomainStrategy.setSelection(if (it >= 0) it else 0) } binding.spDomainStrategy.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { override fun onNothingSelected(parent: AdapterView<*>?) { } override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) { - settingsStorage.encode(AppConfig.PREF_ROUTING_DOMAIN_STRATEGY, routing_domain_strategy[position]) + MmkvManager.encodeSettings(AppConfig.PREF_ROUTING_DOMAIN_STRATEGY, routing_domain_strategy[position]) } } } diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/RoutingSettingRecyclerAdapter.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/RoutingSettingRecyclerAdapter.kt index d6cc1d27..25c97b49 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/RoutingSettingRecyclerAdapter.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/RoutingSettingRecyclerAdapter.kt @@ -8,9 +8,9 @@ import android.view.ViewGroup import androidx.core.view.isVisible import androidx.recyclerview.widget.RecyclerView import com.v2ray.ang.databinding.ItemRecyclerRoutingSettingBinding +import com.v2ray.ang.handler.SettingsManager import com.v2ray.ang.helper.ItemTouchHelperAdapter import com.v2ray.ang.helper.ItemTouchHelperViewHolder -import com.v2ray.ang.handler.SettingsManager class RoutingSettingRecyclerAdapter(val activity: RoutingSettingActivity) : RecyclerView.Adapter(), ItemTouchHelperAdapter { diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ScannerActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ScannerActivity.kt index 13c64dbf..6402c5a2 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ScannerActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ScannerActivity.kt @@ -12,7 +12,7 @@ import com.tbruyelle.rxpermissions3.RxPermissions import com.v2ray.ang.AppConfig import com.v2ray.ang.R import com.v2ray.ang.extension.toast -import com.v2ray.ang.handler.MmkvManager.settingsStorage +import com.v2ray.ang.handler.MmkvManager import com.v2ray.ang.util.QRCodeDecoder import io.github.g00fy2.quickie.QRResult import io.github.g00fy2.quickie.ScanCustomCode @@ -25,7 +25,7 @@ class ScannerActivity : BaseActivity() { public override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - if (settingsStorage?.decodeBool(AppConfig.PREF_START_SCAN_IMMEDIATE) == true) { + if (MmkvManager.decodeSettingsBool(AppConfig.PREF_START_SCAN_IMMEDIATE) == true) { launchScan() } } diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt index 76547a45..b841e7c0 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt @@ -26,9 +26,8 @@ import com.v2ray.ang.R import com.v2ray.ang.dto.EConfigType import com.v2ray.ang.dto.ProfileItem import com.v2ray.ang.extension.toast -import com.v2ray.ang.util.JsonUtil import com.v2ray.ang.handler.MmkvManager -import com.v2ray.ang.handler.MmkvManager.settingsStorage +import com.v2ray.ang.util.JsonUtil import com.v2ray.ang.util.Utils class ServerActivity : BaseActivity() { @@ -507,7 +506,7 @@ class ServerActivity : BaseActivity() { val allowInsecure = if (allowInsecureField == null || allowinsecures[allowInsecureField].isBlank()) { - settingsStorage?.decodeBool(PREF_ALLOW_INSECURE) == true + MmkvManager.decodeSettingsBool(PREF_ALLOW_INSECURE) == true } else { allowinsecures[allowInsecureField].toBoolean() } @@ -548,7 +547,7 @@ class ServerActivity : BaseActivity() { private fun deleteServer(): Boolean { if (editGuid.isNotEmpty()) { if (editGuid != MmkvManager.getSelectServer()) { - if (settingsStorage?.decodeBool(AppConfig.PREF_CONFIRM_REMOVE) == true) { + if (MmkvManager.decodeSettingsBool(AppConfig.PREF_CONFIRM_REMOVE) == true) { AlertDialog.Builder(this).setMessage(R.string.del_config_comfirm) .setPositiveButton(android.R.string.ok) { _, _ -> MmkvManager.removeServer(editGuid) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerCustomConfigActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerCustomConfigActivity.kt index 83f0f99b..2cd9890f 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerCustomConfigActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerCustomConfigActivity.kt @@ -8,15 +8,14 @@ import android.widget.Toast import androidx.appcompat.app.AlertDialog import com.blacksquircle.ui.editorkit.utils.EditorTheme import com.blacksquircle.ui.language.json.JsonLanguage - import com.v2ray.ang.R import com.v2ray.ang.databinding.ActivityServerCustomConfigBinding import com.v2ray.ang.dto.EConfigType import com.v2ray.ang.dto.ProfileItem import com.v2ray.ang.dto.V2rayConfig import com.v2ray.ang.extension.toast -import com.v2ray.ang.util.JsonUtil import com.v2ray.ang.handler.MmkvManager +import com.v2ray.ang.util.JsonUtil import com.v2ray.ang.util.Utils import me.drakeet.support.toast.ToastCompat diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SettingsActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SettingsActivity.kt index 52af2335..8f743f33 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SettingsActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SettingsActivity.kt @@ -17,8 +17,8 @@ import com.v2ray.ang.AppConfig import com.v2ray.ang.AppConfig.VPN import com.v2ray.ang.R import com.v2ray.ang.extension.toLongEx +import com.v2ray.ang.handler.MmkvManager import com.v2ray.ang.service.SubscriptionUpdater -import com.v2ray.ang.handler.MmkvManager.settingsStorage import com.v2ray.ang.util.Utils import com.v2ray.ang.viewmodel.SettingsViewModel import java.util.concurrent.TimeUnit @@ -172,33 +172,33 @@ class SettingsActivity : BaseActivity() { override fun onStart() { super.onStart() - updateMode(settingsStorage.decodeString(AppConfig.PREF_MODE, VPN)) - localDns?.isChecked = settingsStorage.getBoolean(AppConfig.PREF_LOCAL_DNS_ENABLED, false) - fakeDns?.isChecked = settingsStorage.getBoolean(AppConfig.PREF_FAKE_DNS_ENABLED, false) - localDnsPort?.summary = settingsStorage.decodeString(AppConfig.PREF_LOCAL_DNS_PORT, AppConfig.PORT_LOCAL_DNS) - vpnDns?.summary = settingsStorage.decodeString(AppConfig.PREF_VPN_DNS, AppConfig.DNS_VPN) + updateMode(MmkvManager.decodeSettingsString(AppConfig.PREF_MODE, VPN)) + localDns?.isChecked = MmkvManager.decodeSettingsBool(AppConfig.PREF_LOCAL_DNS_ENABLED, false) + fakeDns?.isChecked = MmkvManager.decodeSettingsBool(AppConfig.PREF_FAKE_DNS_ENABLED, false) + localDnsPort?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_LOCAL_DNS_PORT, AppConfig.PORT_LOCAL_DNS) + vpnDns?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_VPN_DNS, AppConfig.DNS_VPN) - updateMux(settingsStorage.getBoolean(AppConfig.PREF_MUX_ENABLED, false)) - mux?.isChecked = settingsStorage.getBoolean(AppConfig.PREF_MUX_ENABLED, false) - muxConcurrency?.summary = settingsStorage.decodeString(AppConfig.PREF_MUX_CONCURRENCY, "8") - muxXudpConcurrency?.summary = settingsStorage.decodeString(AppConfig.PREF_MUX_XUDP_CONCURRENCY, "8") + updateMux(MmkvManager.decodeSettingsBool(AppConfig.PREF_MUX_ENABLED, false)) + mux?.isChecked = MmkvManager.decodeSettingsBool(AppConfig.PREF_MUX_ENABLED, false) + muxConcurrency?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_MUX_CONCURRENCY, "8") + muxXudpConcurrency?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_MUX_XUDP_CONCURRENCY, "8") - updateFragment(settingsStorage.getBoolean(AppConfig.PREF_FRAGMENT_ENABLED, false)) - fragment?.isChecked = settingsStorage.getBoolean(AppConfig.PREF_FRAGMENT_ENABLED, false) - fragmentPackets?.summary = settingsStorage.decodeString(AppConfig.PREF_FRAGMENT_PACKETS, "tlshello") - fragmentLength?.summary = settingsStorage.decodeString(AppConfig.PREF_FRAGMENT_LENGTH, "50-100") - fragmentInterval?.summary = settingsStorage.decodeString(AppConfig.PREF_FRAGMENT_INTERVAL, "10-20") + updateFragment(MmkvManager.decodeSettingsBool(AppConfig.PREF_FRAGMENT_ENABLED, false)) + fragment?.isChecked = MmkvManager.decodeSettingsBool(AppConfig.PREF_FRAGMENT_ENABLED, false) + fragmentPackets?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_FRAGMENT_PACKETS, "tlshello") + fragmentLength?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_FRAGMENT_LENGTH, "50-100") + fragmentInterval?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_FRAGMENT_INTERVAL, "10-20") - autoUpdateCheck?.isChecked = settingsStorage.getBoolean(AppConfig.SUBSCRIPTION_AUTO_UPDATE, false) + autoUpdateCheck?.isChecked = MmkvManager.decodeSettingsBool(AppConfig.SUBSCRIPTION_AUTO_UPDATE, false) autoUpdateInterval?.summary = - settingsStorage.decodeString(AppConfig.SUBSCRIPTION_AUTO_UPDATE_INTERVAL, AppConfig.SUBSCRIPTION_DEFAULT_UPDATE_INTERVAL) - autoUpdateInterval?.isEnabled = settingsStorage.getBoolean(AppConfig.SUBSCRIPTION_AUTO_UPDATE, false) + MmkvManager.decodeSettingsString(AppConfig.SUBSCRIPTION_AUTO_UPDATE_INTERVAL, AppConfig.SUBSCRIPTION_DEFAULT_UPDATE_INTERVAL) + autoUpdateInterval?.isEnabled = MmkvManager.decodeSettingsBool(AppConfig.SUBSCRIPTION_AUTO_UPDATE, false) - socksPort?.summary = settingsStorage.decodeString(AppConfig.PREF_SOCKS_PORT, AppConfig.PORT_SOCKS) - httpPort?.summary = settingsStorage.decodeString(AppConfig.PREF_HTTP_PORT, AppConfig.PORT_HTTP) - remoteDns?.summary = settingsStorage.decodeString(AppConfig.PREF_REMOTE_DNS, AppConfig.DNS_PROXY) - domesticDns?.summary = settingsStorage.decodeString(AppConfig.PREF_DOMESTIC_DNS, AppConfig.DNS_DIRECT) - delayTestUrl?.summary = settingsStorage.decodeString(AppConfig.PREF_DELAY_TEST_URL, AppConfig.DelayTestUrl) + socksPort?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_SOCKS_PORT, AppConfig.PORT_SOCKS) + httpPort?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_HTTP_PORT, AppConfig.PORT_HTTP) + remoteDns?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_REMOTE_DNS, AppConfig.DNS_PROXY) + domesticDns?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_DOMESTIC_DNS, AppConfig.DNS_DIRECT) + delayTestUrl?.summary = MmkvManager.decodeSettingsString(AppConfig.PREF_DELAY_TEST_URL, AppConfig.DelayTestUrl) initSharedPreference() } @@ -225,7 +225,7 @@ class SettingsActivity : BaseActivity() { AppConfig.PREF_SNIFFING_ENABLED, ).forEach { key -> findPreference(key)?.isChecked = - settingsStorage.decodeBool(key, true) + MmkvManager.decodeSettingsBool(key, true) } listOf( @@ -240,7 +240,7 @@ class SettingsActivity : BaseActivity() { AppConfig.PREF_ALLOW_INSECURE ).forEach { key -> findPreference(key)?.isChecked = - settingsStorage.decodeBool(key, false) + MmkvManager.decodeSettingsBool(key, false) } listOf( @@ -252,8 +252,8 @@ class SettingsActivity : BaseActivity() { AppConfig.PREF_LOGLEVEL, AppConfig.PREF_MODE ).forEach { key -> - if (settingsStorage.decodeString(key) != null) { - findPreference(key)?.value = settingsStorage.decodeString(key) + if (MmkvManager.decodeSettingsString(key) != null) { + findPreference(key)?.value = MmkvManager.decodeSettingsString(key) } } } @@ -261,14 +261,14 @@ class SettingsActivity : BaseActivity() { private fun updateMode(mode: String?) { val vpn = mode == VPN perAppProxy?.isEnabled = vpn - perAppProxy?.isChecked = settingsStorage.getBoolean(AppConfig.PREF_PER_APP_PROXY, false) + perAppProxy?.isChecked = MmkvManager.decodeSettingsBool(AppConfig.PREF_PER_APP_PROXY, false) localDns?.isEnabled = vpn fakeDns?.isEnabled = vpn localDnsPort?.isEnabled = vpn vpnDns?.isEnabled = vpn if (vpn) { updateLocalDns( - settingsStorage.getBoolean( + MmkvManager.decodeSettingsBool( AppConfig.PREF_LOCAL_DNS_ENABLED, false ) @@ -310,8 +310,8 @@ class SettingsActivity : BaseActivity() { muxXudpConcurrency?.isEnabled = enabled muxXudpQuic?.isEnabled = enabled if (enabled) { - updateMuxConcurrency(settingsStorage.decodeString(AppConfig.PREF_MUX_CONCURRENCY, "8")) - updateMuxXudpConcurrency(settingsStorage.decodeString(AppConfig.PREF_MUX_XUDP_CONCURRENCY, "8")) + updateMuxConcurrency(MmkvManager.decodeSettingsString(AppConfig.PREF_MUX_CONCURRENCY, "8")) + updateMuxXudpConcurrency(MmkvManager.decodeSettingsString(AppConfig.PREF_MUX_XUDP_CONCURRENCY, "8")) } } @@ -336,9 +336,9 @@ class SettingsActivity : BaseActivity() { fragmentLength?.isEnabled = enabled fragmentInterval?.isEnabled = enabled if (enabled) { - updateFragmentPackets(settingsStorage.decodeString(AppConfig.PREF_FRAGMENT_PACKETS, "tlshello")) - updateFragmentLength(settingsStorage.decodeString(AppConfig.PREF_FRAGMENT_LENGTH, "50-100")) - updateFragmentInterval(settingsStorage.decodeString(AppConfig.PREF_FRAGMENT_INTERVAL, "10-20")) + updateFragmentPackets(MmkvManager.decodeSettingsString(AppConfig.PREF_FRAGMENT_PACKETS, "tlshello")) + updateFragmentLength(MmkvManager.decodeSettingsString(AppConfig.PREF_FRAGMENT_LENGTH, "50-100")) + updateFragmentInterval(MmkvManager.decodeSettingsString(AppConfig.PREF_FRAGMENT_INTERVAL, "10-20")) } } diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubSettingActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubSettingActivity.kt index e9d6df03..e0ef627c 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubSettingActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubSettingActivity.kt @@ -13,9 +13,9 @@ import com.v2ray.ang.databinding.ActivitySubSettingBinding import com.v2ray.ang.databinding.LayoutProgressBinding import com.v2ray.ang.dto.SubscriptionItem import com.v2ray.ang.extension.toast -import com.v2ray.ang.helper.SimpleItemTouchHelperCallback import com.v2ray.ang.handler.AngConfigManager import com.v2ray.ang.handler.MmkvManager +import com.v2ray.ang.helper.SimpleItemTouchHelperCallback import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubSettingRecyclerAdapter.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubSettingRecyclerAdapter.kt index e11cb74e..9f84c093 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubSettingRecyclerAdapter.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubSettingRecyclerAdapter.kt @@ -12,11 +12,11 @@ import com.v2ray.ang.R import com.v2ray.ang.databinding.ItemQrcodeBinding import com.v2ray.ang.databinding.ItemRecyclerSubSettingBinding import com.v2ray.ang.extension.toast +import com.v2ray.ang.handler.MmkvManager +import com.v2ray.ang.handler.SettingsManager import com.v2ray.ang.helper.ItemTouchHelperAdapter import com.v2ray.ang.helper.ItemTouchHelperViewHolder -import com.v2ray.ang.handler.MmkvManager import com.v2ray.ang.util.QRCodeDecoder -import com.v2ray.ang.handler.SettingsManager import com.v2ray.ang.util.Utils class SubSettingRecyclerAdapter(val activity: SubSettingActivity) : RecyclerView.Adapter(), ItemTouchHelperAdapter { diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/PluginUtil.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/PluginUtil.kt index ed362f3c..5c68c223 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/PluginUtil.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/PluginUtil.kt @@ -6,8 +6,8 @@ import android.util.Log import com.v2ray.ang.AppConfig.ANG_PACKAGE import com.v2ray.ang.dto.EConfigType import com.v2ray.ang.dto.ProfileItem -import com.v2ray.ang.service.ProcessService import com.v2ray.ang.fmt.Hysteria2Fmt +import com.v2ray.ang.service.ProcessService import java.io.File object PluginUtil { diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/Utils.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/Utils.kt index 55ebcd15..25efc675 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/Utils.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/Utils.kt @@ -26,7 +26,6 @@ import com.v2ray.ang.dto.Language import com.v2ray.ang.extension.toast import com.v2ray.ang.handler.MmkvManager import com.v2ray.ang.service.V2RayServiceManager -import com.v2ray.ang.handler.MmkvManager.settingsStorage import java.io.IOException import java.net.* import java.util.* @@ -131,7 +130,7 @@ object Utils { * get remote dns servers from preference */ fun getRemoteDnsServers(): List { - val remoteDns = settingsStorage?.decodeString(AppConfig.PREF_REMOTE_DNS) ?: AppConfig.DNS_PROXY + val remoteDns = MmkvManager.decodeSettingsString(AppConfig.PREF_REMOTE_DNS) ?: AppConfig.DNS_PROXY val ret = remoteDns.split(",").filter { isPureIpAddress(it) || isCoreDNSAddress(it) } if (ret.isEmpty()) { return listOf(AppConfig.DNS_PROXY) @@ -140,7 +139,7 @@ object Utils { } fun getVpnDnsServers(): List { - val vpnDns = settingsStorage?.decodeString(AppConfig.PREF_VPN_DNS) ?: AppConfig.DNS_VPN + val vpnDns = MmkvManager.decodeSettingsString(AppConfig.PREF_VPN_DNS) ?: AppConfig.DNS_VPN return vpnDns.split(",").filter { isPureIpAddress(it) } // allow empty, in that case dns will use system default } @@ -149,7 +148,7 @@ object Utils { * get remote dns servers from preference */ fun getDomesticDnsServers(): List { - val domesticDns = settingsStorage?.decodeString(AppConfig.PREF_DOMESTIC_DNS) ?: AppConfig.DNS_DIRECT + val domesticDns = MmkvManager.decodeSettingsString(AppConfig.PREF_DOMESTIC_DNS) ?: AppConfig.DNS_DIRECT val ret = domesticDns.split(",").filter { isPureIpAddress(it) || isCoreDNSAddress(it) } if (ret.isEmpty()) { return listOf(AppConfig.DNS_DIRECT) @@ -388,7 +387,7 @@ object Utils { fun setNightMode(context: Context) { - when (settingsStorage?.decodeString(AppConfig.PREF_UI_MODE_NIGHT, "0")) { + when (MmkvManager.decodeSettingsString(AppConfig.PREF_UI_MODE_NIGHT, "0")) { "0" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM) "1" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) "2" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) @@ -407,7 +406,7 @@ object Utils { } fun getLocale(): Locale { - val langCode = settingsStorage?.decodeString(AppConfig.PREF_LANGUAGE) ?: Language.AUTO.code + val langCode = MmkvManager.decodeSettingsString(AppConfig.PREF_LANGUAGE) ?: Language.AUTO.code val language = Language.fromCode(langCode) return when (language) { @@ -452,7 +451,7 @@ object Utils { return if (second) { AppConfig.DelayTestUrl2 } else { - settingsStorage.decodeString(AppConfig.PREF_DELAY_TEST_URL) ?: AppConfig.DelayTestUrl + MmkvManager.decodeSettingsString(AppConfig.PREF_DELAY_TEST_URL) ?: AppConfig.DelayTestUrl } } diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/MainViewModel.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/MainViewModel.kt index 1146c3f6..1bd0dab8 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/MainViewModel.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/MainViewModel.kt @@ -19,12 +19,12 @@ import com.v2ray.ang.dto.ProfileItem import com.v2ray.ang.dto.ServersCache import com.v2ray.ang.extension.serializable import com.v2ray.ang.extension.toast +import com.v2ray.ang.fmt.CustomFmt import com.v2ray.ang.handler.AngConfigManager -import com.v2ray.ang.util.MessageUtil import com.v2ray.ang.handler.MmkvManager +import com.v2ray.ang.util.MessageUtil import com.v2ray.ang.util.SpeedtestUtil import com.v2ray.ang.util.Utils -import com.v2ray.ang.fmt.CustomFmt import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job @@ -36,9 +36,9 @@ import java.util.Collections class MainViewModel(application: Application) : AndroidViewModel(application) { private var serverList = MmkvManager.decodeServerList() - var subscriptionId: String = MmkvManager.settingsStorage.decodeString(AppConfig.CACHE_SUBSCRIPTION_ID, "").orEmpty() + var subscriptionId: String = MmkvManager.decodeSettingsString(AppConfig.CACHE_SUBSCRIPTION_ID, "").orEmpty() - //var keywordFilter: String = MmkvManager.settingsStorage.decodeString(AppConfig.CACHE_KEYWORD_FILTER, "")?:"" + //var keywordFilter: String = MmkvManager.MmkvManager.decodeSettingsString(AppConfig.CACHE_KEYWORD_FILTER, "")?:"" var keywordFilter = "" val serversCache = mutableListOf() val isRunning by lazy { MutableLiveData() } @@ -222,7 +222,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { fun subscriptionIdChanged(id: String) { if (subscriptionId != id) { subscriptionId = id - MmkvManager.settingsStorage.encode(AppConfig.CACHE_SUBSCRIPTION_ID, subscriptionId) + MmkvManager.encodeSettings(AppConfig.CACHE_SUBSCRIPTION_ID, subscriptionId) reloadServerList() } } @@ -352,7 +352,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { return } keywordFilter = keyword - MmkvManager.settingsStorage.encode(AppConfig.CACHE_KEYWORD_FILTER, keywordFilter) + MmkvManager.encodeSettings(AppConfig.CACHE_KEYWORD_FILTER, keywordFilter) reloadServerList() } diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/SettingsViewModel.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/SettingsViewModel.kt index 605a1031..311c1a4a 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/SettingsViewModel.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/SettingsViewModel.kt @@ -6,7 +6,7 @@ import android.util.Log import androidx.lifecycle.AndroidViewModel import androidx.preference.PreferenceManager import com.v2ray.ang.AppConfig -import com.v2ray.ang.handler.MmkvManager.settingsStorage +import com.v2ray.ang.handler.MmkvManager import com.v2ray.ang.util.Utils class SettingsViewModel(application: Application) : AndroidViewModel(application), @@ -45,7 +45,7 @@ class SettingsViewModel(application: Application) : AndroidViewModel(application AppConfig.PREF_FRAGMENT_INTERVAL, AppConfig.PREF_MUX_XUDP_QUIC, -> { - settingsStorage?.encode(key, sharedPreferences.getString(key, "")) + MmkvManager.encodeSettings(key, sharedPreferences.getString(key, "")) } AppConfig.PREF_ROUTE_ONLY_ENABLED, @@ -64,20 +64,20 @@ class SettingsViewModel(application: Application) : AndroidViewModel(application AppConfig.PREF_FRAGMENT_ENABLED, AppConfig.PREF_MUX_ENABLED, -> { - settingsStorage?.encode(key, sharedPreferences.getBoolean(key, false)) + MmkvManager.encodeSettings(key, sharedPreferences.getBoolean(key, false)) } AppConfig.PREF_SNIFFING_ENABLED -> { - settingsStorage?.encode(key, sharedPreferences.getBoolean(key, true)) + MmkvManager.encodeSettings(key, sharedPreferences.getBoolean(key, true)) } AppConfig.PREF_MUX_CONCURRENCY, AppConfig.PREF_MUX_XUDP_CONCURRENCY -> { - settingsStorage?.encode(key, sharedPreferences.getString(key, "8")) + MmkvManager.encodeSettings(key, sharedPreferences.getString(key, "8")) } // AppConfig.PREF_PER_APP_PROXY_SET -> { -// settingsStorage?.encode(key, sharedPreferences.getStringSet(key, setOf())) +// MmkvManager.encodeSettings(key, sharedPreferences.getStringSet(key, setOf())) // } } if (key == AppConfig.PREF_UI_MODE_NIGHT) {