Bugfix: When a setting is changed proxy will now auto restart to apply the change. Fix proxy service cannot be stopped bug.
This commit is contained in:
@@ -11,6 +11,7 @@ class AngApplication : Application() {
|
||||
const val PREF_LAST_VERSION = "pref_last_version"
|
||||
}
|
||||
|
||||
var curIndex = -1 //Current proxy that is opened. (Used to implement restart feature)
|
||||
var firstRun = false
|
||||
private set
|
||||
|
||||
|
||||
@@ -64,7 +64,6 @@ class V2RayVpnService : VpnService() {
|
||||
private var mNotificationManager: NotificationManager? = null
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Unfortunately registerDefaultNetworkCallback is going to return our VPN interface: https://android.googlesource.com/platform/frameworks/base/+/dda156ab0c5d66ad82bdcf76cda07cbc0a9c8a2e
|
||||
*
|
||||
@@ -282,12 +281,19 @@ class V2RayVpnService : VpnService() {
|
||||
unregisterReceiver(mMsgReceive)
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
|
||||
//stopSelf has to be called ahead of mInterface.close(). otherwise v2ray core cannot be stooped
|
||||
//It's strage but true.
|
||||
//This can be verified by putting stopself() behind and call stopLoop and startLoop
|
||||
//in a row for several times. You will find that later created v2ray core report port in use
|
||||
//which means the first v2ray core somehow failed to stop and release the port.
|
||||
stopSelf()
|
||||
|
||||
try {
|
||||
mInterface.close()
|
||||
} catch (ignored: Exception) {
|
||||
}
|
||||
|
||||
stopSelf()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4,10 +4,8 @@ import android.content.Intent
|
||||
import android.content.SharedPreferences
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.preference.CheckBoxPreference
|
||||
import android.preference.EditTextPreference
|
||||
import android.preference.Preference
|
||||
import android.preference.PreferenceFragment
|
||||
import android.preference.*
|
||||
import com.v2ray.ang.AngApplication
|
||||
import com.v2ray.ang.BuildConfig
|
||||
//import com.v2ray.ang.InappBuyActivity
|
||||
import com.v2ray.ang.R
|
||||
@@ -60,13 +58,19 @@ class SettingsActivity : BaseActivity() {
|
||||
|
||||
class SettingsFragment : PreferenceFragment(), SharedPreferences.OnSharedPreferenceChangeListener {
|
||||
val perAppProxy by lazy { findPreference(PREF_PER_APP_PROXY) as CheckBoxPreference }
|
||||
val sppedEnabled by lazy { findPreference(PREF_SPEED_ENABLED) as CheckBoxPreference }
|
||||
val sniffingEnabled by lazy { findPreference(PREF_SNIFFING_ENABLED) as CheckBoxPreference }
|
||||
val proxySharing by lazy { findPreference(PREF_PROXY_SHARING) as CheckBoxPreference }
|
||||
// val autoRestart by lazy { findPreference(PREF_AUTO_RESTART) as CheckBoxPreference }
|
||||
val remoteDns by lazy { findPreference(PREF_REMOTE_DNS) as EditTextPreference }
|
||||
val domesticDns by lazy { findPreference(PREF_DOMESTIC_DNS) as EditTextPreference }
|
||||
val domainStrategy by lazy { findPreference(PREF_ROUTING_DOMAIN_STRATEGY) as ListPreference }
|
||||
val routingMode by lazy { findPreference(PREF_ROUTING_MODE) as ListPreference }
|
||||
|
||||
val enableLocalDns by lazy { findPreference(PREF_LOCAL_DNS_ENABLED) as CheckBoxPreference }
|
||||
val forwardIpv6 by lazy { findPreference(PREF_FORWARD_IPV6) as CheckBoxPreference }
|
||||
val enableLocalDns by lazy { findPreference(PREF_LOCAL_DNS_ENABLED) as CheckBoxPreference }
|
||||
val domesticDns by lazy { findPreference(PREF_DOMESTIC_DNS) as EditTextPreference }
|
||||
val remoteDns by lazy { findPreference(PREF_REMOTE_DNS) as EditTextPreference }
|
||||
|
||||
// val autoRestart by lazy { findPreference(PREF_AUTO_RESTART) as CheckBoxPreference }
|
||||
|
||||
|
||||
// val socksPort by lazy { findPreference(PREF_SOCKS_PORT) as EditTextPreference }
|
||||
// val httpPort by lazy { findPreference(PREF_HTTP_PORT) as EditTextPreference }
|
||||
@@ -78,14 +82,95 @@ class SettingsActivity : BaseActivity() {
|
||||
// val tgGroup: Preference by lazy { findPreference(PREF_TG_GROUP) }
|
||||
val version: Preference by lazy { findPreference(PREF_VERSION) }
|
||||
|
||||
private fun restartProxy() {
|
||||
Utils.stopVService(activity)
|
||||
Utils.startVService(activity)
|
||||
}
|
||||
|
||||
private fun isRunning(): Boolean {
|
||||
return Utils.isServiceRun(activity, "com.v2ray.ang.service.V2RayVpnService")
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
addPreferencesFromResource(R.xml.pref_settings)
|
||||
var app = activity.application as AngApplication
|
||||
|
||||
perAppProxy.setOnPreferenceClickListener {
|
||||
if (isRunning()) {
|
||||
Utils.stopVService(activity)
|
||||
}
|
||||
startActivity<PerAppProxyActivity>()
|
||||
perAppProxy.isChecked = true
|
||||
true
|
||||
}
|
||||
sppedEnabled.setOnPreferenceClickListener {
|
||||
if (isRunning())
|
||||
restartProxy()
|
||||
true
|
||||
}
|
||||
sniffingEnabled.setOnPreferenceClickListener {
|
||||
if (isRunning())
|
||||
restartProxy()
|
||||
true
|
||||
}
|
||||
|
||||
proxySharing.setOnPreferenceClickListener {
|
||||
if (proxySharing.isChecked)
|
||||
toast(R.string.toast_warning_pref_proxysharing)
|
||||
if (isRunning())
|
||||
restartProxy()
|
||||
true
|
||||
}
|
||||
|
||||
domainStrategy.setOnPreferenceChangeListener { _, _ ->
|
||||
if (isRunning())
|
||||
restartProxy()
|
||||
true
|
||||
}
|
||||
routingMode.setOnPreferenceChangeListener { _, _ ->
|
||||
if (isRunning())
|
||||
restartProxy()
|
||||
true
|
||||
}
|
||||
|
||||
routingCustom.onClick {
|
||||
if (isRunning())
|
||||
Utils.stopVService(activity)
|
||||
startActivity<RoutingSettingsActivity>()
|
||||
}
|
||||
|
||||
forwardIpv6.setOnPreferenceClickListener {
|
||||
if (isRunning())
|
||||
restartProxy()
|
||||
true
|
||||
}
|
||||
|
||||
enableLocalDns.setOnPreferenceClickListener {
|
||||
if (isRunning())
|
||||
restartProxy()
|
||||
true
|
||||
}
|
||||
|
||||
|
||||
domesticDns.setOnPreferenceChangeListener { preference, any ->
|
||||
// domesticDns.summary = any as String
|
||||
val nval = any as String
|
||||
domesticDns.summary = if (nval == "") AppConfig.DNS_DIRECT else nval
|
||||
if (isRunning())
|
||||
restartProxy()
|
||||
true
|
||||
}
|
||||
|
||||
remoteDns.setOnPreferenceChangeListener { preference, any ->
|
||||
// remoteDns.summary = any as String
|
||||
val nval = any as String
|
||||
remoteDns.summary = if (nval == "") AppConfig.DNS_AGENT else nval
|
||||
if (isRunning())
|
||||
restartProxy()
|
||||
true
|
||||
}
|
||||
|
||||
// donate.onClick {
|
||||
// startActivity<InappBuyActivity>()
|
||||
// }
|
||||
@@ -112,32 +197,7 @@ class SettingsActivity : BaseActivity() {
|
||||
// }
|
||||
// }
|
||||
|
||||
perAppProxy.setOnPreferenceClickListener {
|
||||
startActivity<PerAppProxyActivity>()
|
||||
perAppProxy.isChecked = true
|
||||
false
|
||||
}
|
||||
|
||||
proxySharing.setOnPreferenceClickListener {
|
||||
if (proxySharing.isChecked)
|
||||
toast(R.string.toast_warning_pref_proxysharing)
|
||||
false
|
||||
}
|
||||
|
||||
|
||||
|
||||
remoteDns.setOnPreferenceChangeListener { preference, any ->
|
||||
// remoteDns.summary = any as String
|
||||
val nval = any as String
|
||||
remoteDns.summary = if (nval == "") AppConfig.DNS_AGENT else nval
|
||||
true
|
||||
}
|
||||
domesticDns.setOnPreferenceChangeListener { preference, any ->
|
||||
// domesticDns.summary = any as String
|
||||
val nval = any as String
|
||||
domesticDns.summary = if (nval == "") AppConfig.DNS_DIRECT else nval
|
||||
true
|
||||
}
|
||||
// socksPort.setOnPreferenceChangeListener { preference, any ->
|
||||
// socksPort.summary = any as String
|
||||
// true
|
||||
|
||||
@@ -147,13 +147,15 @@ object AngConfigManager {
|
||||
fun setActiveServer(index: Int): Int {
|
||||
try {
|
||||
if (index < 0 || index > angConfig.vmess.count() - 1) {
|
||||
app.curIndex = -1
|
||||
return -1
|
||||
}
|
||||
angConfig.index = index
|
||||
|
||||
app.curIndex = index
|
||||
storeConfigFile()
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
app.curIndex = -1
|
||||
return -1
|
||||
}
|
||||
return 0
|
||||
|
||||
@@ -340,6 +340,7 @@ object Utils {
|
||||
*/
|
||||
fun startVService(context: Context, guid: String): Boolean {
|
||||
val index = AngConfigManager.getIndexViaGuid(guid)
|
||||
context.v2RayApplication.curIndex=index
|
||||
return startVService(context, index)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user