diff --git a/app/src/main/aidl/io/nekohasekai/sagernet/aidl/ISagerNetServiceCallback.aidl b/app/src/main/aidl/io/nekohasekai/sagernet/aidl/ISagerNetServiceCallback.aidl index f6760c1..cb41c2b 100644 --- a/app/src/main/aidl/io/nekohasekai/sagernet/aidl/ISagerNetServiceCallback.aidl +++ b/app/src/main/aidl/io/nekohasekai/sagernet/aidl/ISagerNetServiceCallback.aidl @@ -6,7 +6,6 @@ import io.nekohasekai.sagernet.aidl.TrafficData; oneway interface ISagerNetServiceCallback { void stateChanged(int state, String profileName, String msg); void missingPlugin(String profileName, String pluginName); - void routeAlert(int type, String routeName); void cbSpeedUpdate(in SpeedDisplayData stats); void cbTrafficUpdate(in TrafficData stats); void cbSelectorUpdate(long id); diff --git a/app/src/main/java/io/nekohasekai/sagernet/bg/BaseService.kt b/app/src/main/java/io/nekohasekai/sagernet/bg/BaseService.kt index 2c1594a..099e051 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/bg/BaseService.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/bg/BaseService.kt @@ -345,12 +345,6 @@ class BaseService { startProcesses() data.changeState(State.Connected) - for ((type, routeName) in proxy.config.alerts) { - data.binder.broadcast { - it.routeAlert(type, routeName) - } - } - lateInit() } catch (_: CancellationException) { // if the job was cancelled, it is canceller's responsibility to call stopRunner } catch (_: UnknownHostException) { diff --git a/app/src/main/java/io/nekohasekai/sagernet/bg/SagerConnection.kt b/app/src/main/java/io/nekohasekai/sagernet/bg/SagerConnection.kt index 4ed87f2..91a6232 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/bg/SagerConnection.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/bg/SagerConnection.kt @@ -44,7 +44,6 @@ class SagerConnection( fun stateChanged(state: BaseService.State, profileName: String?, msg: String?) fun missingPlugin(profileName: String, pluginName: String) {} - fun routeAlert(type: Int, routeName: String) {} fun onServiceConnected(service: ISagerNetService) @@ -98,13 +97,6 @@ class SagerConnection( } } - override fun routeAlert(type: Int, routeName: String) { - val callback = callback ?: return - runOnMainDispatcher { - callback.routeAlert(type, routeName) - } - } - } private var binder: IBinder? = null diff --git a/app/src/main/java/io/nekohasekai/sagernet/database/RuleEntity.kt b/app/src/main/java/io/nekohasekai/sagernet/database/RuleEntity.kt index 20cbbc0..fa43ee9 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/database/RuleEntity.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/database/RuleEntity.kt @@ -54,7 +54,7 @@ data class RuleEntity( -1L -> app.getString(R.string.route_bypass) -2L -> app.getString(R.string.route_block) else -> ProfileManager.getProfile(outbound)?.displayName() - ?: app.getString(R.string.route_proxy) + ?: app.getString(R.string.error_title) } } diff --git a/app/src/main/java/io/nekohasekai/sagernet/fmt/ConfigBuilder.kt b/app/src/main/java/io/nekohasekai/sagernet/fmt/ConfigBuilder.kt index aa9f7d6..40dda4a 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/fmt/ConfigBuilder.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/fmt/ConfigBuilder.kt @@ -1,7 +1,10 @@ package io.nekohasekai.sagernet.fmt +import android.widget.Toast import io.nekohasekai.sagernet.IPv6Mode import io.nekohasekai.sagernet.Key +import io.nekohasekai.sagernet.R +import io.nekohasekai.sagernet.SagerNet import io.nekohasekai.sagernet.bg.VpnService import io.nekohasekai.sagernet.database.DataStore import io.nekohasekai.sagernet.database.ProxyEntity @@ -59,7 +62,6 @@ class ConfigBuildResult( var mainEntId: Long, var trafficMap: Map>, var profileTagMap: Map, - val alerts: List>, val selectorGroupId: Long, ) { data class IndexEntity(var chain: LinkedHashMap) @@ -78,7 +80,6 @@ fun buildConfig( proxy.id, // mapOf(TAG_PROXY to listOf(proxy)), // mapOf(proxy.id to TAG_PROXY), // - listOf(), -1L ) } @@ -153,7 +154,6 @@ fun buildConfig( val externalIndexMap = ArrayList() val requireTransproxy = if (forTest) false else DataStore.requireTransproxy val ipv6Mode = if (forTest) IPv6Mode.ENABLE else DataStore.ipv6Mode - val alerts = mutableListOf>() fun genDomainStrategy(noAsIs: Boolean): String { return when { @@ -524,7 +524,11 @@ fun buildConfig( } val uidList = rule.packages.map { if (!isVPN) { - alerts.add(0 to rule.displayName()) + Toast.makeText( + SagerNet.application, + SagerNet.application.getString(R.string.route_need_vpn, rule.displayName()), + Toast.LENGTH_SHORT + ).show() } PackageCache[it]?.takeIf { uid -> uid >= 1000 } }.toHashSet().filterNotNull() @@ -605,13 +609,20 @@ fun buildConfig( 0L -> TAG_PROXY -1L -> TAG_BYPASS -2L -> TAG_BLOCK - else -> if (outId == proxy.id) TAG_PROXY else tagMap[outId] - ?: throw Exception("invalid rule") + else -> if (outId == proxy.id) TAG_PROXY else tagMap[outId] ?: "" } } if (!ruleObj.checkEmpty()) { - route.rules.add(ruleObj) + if (ruleObj.outbound.isNullOrBlank()) { + Toast.makeText( + SagerNet.application, + "Warning: " + rule.displayName() + ": A non-existent outbound was specified.", + Toast.LENGTH_LONG + ).show() + } else { + route.rules.add(ruleObj) + } } } @@ -780,7 +791,6 @@ fun buildConfig( proxy.id, trafficMap, tagMap, - alerts, if (buildSelector) group!!.id else -1L ) } diff --git a/app/src/main/java/io/nekohasekai/sagernet/ui/GroupSettingsActivity.kt b/app/src/main/java/io/nekohasekai/sagernet/ui/GroupSettingsActivity.kt index ff2205a..e8440bf 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/ui/GroupSettingsActivity.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/ui/GroupSettingsActivity.kt @@ -248,7 +248,12 @@ class GroupSettingsActivity( finish() return } - entity.subscription?.subscriptionUserinfo = ""; + val keepUserInfo = (entity.type == GroupType.SUBSCRIPTION && + DataStore.groupType == GroupType.SUBSCRIPTION && + entity.subscription?.link == DataStore.subscriptionLink) + if (!keepUserInfo) { + entity.subscription?.subscriptionUserinfo = ""; + } GroupManager.updateGroup(entity.apply { serialize() }) } diff --git a/app/src/main/java/io/nekohasekai/sagernet/ui/MainActivity.kt b/app/src/main/java/io/nekohasekai/sagernet/ui/MainActivity.kt index 5c0b376..d1626df 100644 --- a/app/src/main/java/io/nekohasekai/sagernet/ui/MainActivity.kt +++ b/app/src/main/java/io/nekohasekai/sagernet/ui/MainActivity.kt @@ -363,18 +363,6 @@ class MainActivity : ThemedActivity(), changeState(state, msg, true) } - override fun routeAlert(type: Int, routeName: String) { - when (type) { - 0 -> { - // need vpn - - Toast.makeText( - this, getString(R.string.route_need_vpn, routeName), Toast.LENGTH_SHORT - ).show() - } - } - } - val connection = SagerConnection(SagerConnection.CONNECTION_ID_MAIN_ACTIVITY_FOREGROUND, true) override fun onServiceConnected(service: ISagerNetService) = changeState( try {