diff --git a/src/main/res/values/arrays.xml b/src/main/res/values/arrays.xml index 08fb0cb3..0ff34c1a 100644 --- a/src/main/res/values/arrays.xml +++ b/src/main/res/values/arrays.xml @@ -521,7 +521,6 @@ 124.219 124.244 125.6 - 127.0 128.100 128.241 131.84 diff --git a/src/main/scala/com/github/shadowsocks/ShadowVpnService.scala b/src/main/scala/com/github/shadowsocks/ShadowVpnService.scala index 3d473182..6da4ebca 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowVpnService.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowVpnService.scala @@ -236,6 +236,7 @@ class ShadowVpnService extends VpnService { .setMtu(VPN_MTU) .addAddress("172.16.0.1", 24) .addDnsServer("8.8.8.8") + .addDnsServer("8.8.4.4") if (InetAddressUtils.isIPv6Address(appHost)) { builder.addRoute("0.0.0.0", 0) @@ -244,8 +245,11 @@ class ShadowVpnService extends VpnService { val address = appHost.split('.') val prefix = address(0) + "." + address(1) gfwList.foreach(addr => - if (addr != prefix) builder.addRoute(prefix + ".0.0", 16) + if (addr != prefix) { + builder.addRoute(addr + ".0.0", 16) + } ) + builder.addRoute("8.8.0.0", 16) } else { val prefix = appHost.split('.')(0).toInt for (i <- 1 to 254) { diff --git a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala index e69e2792..8b12331d 100644 --- a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala +++ b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala @@ -313,28 +313,6 @@ class Shadowsocks extends UnifiedSherlockPreferenceActivity with CompoundButton. } }.start() } - - if (isServiceStarted) { - switchButton.setChecked(true) - if (ShadowVpnService.isServiceStarted) { - val style = new Style.Builder() - .setBackgroundColorValue(Style.holoBlueLight) - .setDuration(Style.DURATION_INFINITE) - .build() - switchButton.setEnabled(false) - Crouton.makeText(Shadowsocks.this, R.string.vpn_status, style).show() - } - } else { - switchButton.setChecked(false) - if (settings.getBoolean("isRunning", false)) { - new Thread { - override def run() { - crash_recovery() - handler.sendEmptyMessage(MSG_CRASH_RECOVER) - } - }.start() - } - } } override def onCreateOptionsMenu(menu: Menu): Boolean = { @@ -376,6 +354,11 @@ class Shadowsocks extends UnifiedSherlockPreferenceActivity with CompoundButton. super.onOptionsItemSelected(item) } + protected override def onNewIntent(intent: Intent) { + super.onNewIntent(intent) + setIntent(intent) + } + protected override def onPause() { super.onPause() PreferenceManager.getDefaultSharedPreferences(this).unregisterOnSharedPreferenceChangeListener(this) @@ -383,7 +366,32 @@ class Shadowsocks extends UnifiedSherlockPreferenceActivity with CompoundButton. protected override def onResume() { super.onResume() - val settings: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(this) + if (getIntent.getAction != Shadowsocks.REQUEST_CONNECT) { + val settings: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(this) + if (isServiceStarted) { + switchButton.setChecked(true) + if (ShadowVpnService.isServiceStarted) { + val style = new Style.Builder() + .setBackgroundColorValue(Style.holoBlueLight) + .setDuration(Style.DURATION_INFINITE) + .build() + switchButton.setEnabled(false) + Crouton.makeText(Shadowsocks.this, R.string.vpn_status, style).show() + } + } else { + switchButton.setEnabled(true) + switchButton.setChecked(false) + Crouton.cancelAllCroutons() + if (settings.getBoolean("isRunning", false)) { + new Thread { + override def run() { + crash_recovery() + handler.sendEmptyMessage(MSG_CRASH_RECOVER) + } + }.start() + } + } + } setPreferenceEnabled() switchButton.setOnCheckedChangeListener(this) PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this) @@ -419,7 +427,10 @@ class Shadowsocks extends UnifiedSherlockPreferenceActivity with CompoundButton. if (!switchButton.isChecked) switchButton.setChecked(true) } else { - if (switchButton.isChecked) switchButton.setChecked(false) + if (switchButton.isChecked) { + switchButton.setEnabled(true) + switchButton.setChecked(false) + } } } if (key == "isConnecting") {