From 568f1f12e7b7c3eb4d57c324a0cd4c6daecc35e6 Mon Sep 17 00:00:00 2001 From: Kr328 <39107975+Kr328@users.noreply.github.com> Date: Wed, 26 Feb 2020 14:06:46 +0800 Subject: [PATCH] fix crash on ipv6 enable & reduce provider call --- .../kr328/clash/service/ServiceSettingsProvider.kt | 12 ++++++++++++ .../com/github/kr328/clash/service/TunService.kt | 2 +- .../kr328/clash/service/settings/ServiceSettings.kt | 6 ++---- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/service/src/main/java/com/github/kr328/clash/service/ServiceSettingsProvider.kt b/service/src/main/java/com/github/kr328/clash/service/ServiceSettingsProvider.kt index 8be43d7..162335d 100644 --- a/service/src/main/java/com/github/kr328/clash/service/ServiceSettingsProvider.kt +++ b/service/src/main/java/com/github/kr328/clash/service/ServiceSettingsProvider.kt @@ -2,6 +2,7 @@ package com.github.kr328.clash.service import android.content.Context import android.content.SharedPreferences +import rikka.preference.MultiProcessPreference import rikka.preference.PreferenceProvider class ServiceSettingsProvider : PreferenceProvider() { @@ -11,4 +12,15 @@ class ServiceSettingsProvider : PreferenceProvider() { Context.MODE_PRIVATE ) } + + companion object { + fun createSharedPreferencesFromContext(context: Context): SharedPreferences { + return when ( context ) { + is BaseService, is TunService -> + context.getSharedPreferences(Constants.SERVICE_SETTING_FILE_NAME, Context.MODE_PRIVATE) + else -> + MultiProcessPreference(context, context.packageName + Constants.SETTING_PROVIDER_SUFFIX) + } + } + } } \ No newline at end of file diff --git a/service/src/main/java/com/github/kr328/clash/service/TunService.kt b/service/src/main/java/com/github/kr328/clash/service/TunService.kt index f008f00..a59fa46 100644 --- a/service/src/main/java/com/github/kr328/clash/service/TunService.kt +++ b/service/src/main/java/com/github/kr328/clash/service/TunService.kt @@ -190,7 +190,7 @@ class TunService : VpnService(), CoroutineScope by MainScope() { addAddress(PRIVATE_VLAN4_CLIENT, PRIVATE_VLAN4_SUBNET) if (settings.get(ServiceSettings.IPV6_SUPPORT)) - addRoute(PRIVATE_VLAN6_CLIENT, 126) + addAddress(PRIVATE_VLAN6_CLIENT, 126) return this } diff --git a/service/src/main/java/com/github/kr328/clash/service/settings/ServiceSettings.kt b/service/src/main/java/com/github/kr328/clash/service/settings/ServiceSettings.kt index 7f38766..0e304ce 100644 --- a/service/src/main/java/com/github/kr328/clash/service/settings/ServiceSettings.kt +++ b/service/src/main/java/com/github/kr328/clash/service/settings/ServiceSettings.kt @@ -3,15 +3,13 @@ package com.github.kr328.clash.service.settings import android.content.Context import android.content.SharedPreferences import com.github.kr328.clash.service.Constants +import com.github.kr328.clash.service.ServiceSettingsProvider import rikka.preference.MultiProcessPreference class ServiceSettings(preference: SharedPreferences) : BaseSettings(preference) { constructor(context: Context) : this( - MultiProcessPreference( - context, - context.packageName + Constants.SETTING_PROVIDER_SUFFIX - ) + ServiceSettingsProvider.createSharedPreferencesFromContext(context) ) companion object {