From 39c765c7ced355067bcc7965ad48653054f1112b Mon Sep 17 00:00:00 2001 From: Max Lv Date: Sun, 2 Jun 2013 20:46:20 +0800 Subject: [PATCH] refine crash recover --- project/Build.scala | 4 ++-- src/main/AndroidManifest.xml | 1 + .../com/github/shadowsocks/ShadowVpnService.scala | 7 ------- .../scala/com/github/shadowsocks/Shadowsocks.scala | 6 +++--- .../com/github/shadowsocks/ShadowsocksReceiver.scala | 12 ++++++++++++ .../com/github/shadowsocks/ShadowsocksService.scala | 6 ------ 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/project/Build.scala b/project/Build.scala index 2b308412..6ed35e09 100644 --- a/project/Build.scala +++ b/project/Build.scala @@ -5,8 +5,8 @@ import org.scalasbt.androidplugin._ import org.scalasbt.androidplugin.AndroidKeys._ object App { - val version = "1.5.1" - val versionCode = 29 + val version = "1.5.2" + val versionCode = 30 } object General { diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index 0defed9e..c9991cee 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -67,6 +67,7 @@ + diff --git a/src/main/scala/com/github/shadowsocks/ShadowVpnService.scala b/src/main/scala/com/github/shadowsocks/ShadowVpnService.scala index 1904b1b8..af9afd28 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowVpnService.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowVpnService.scala @@ -42,7 +42,6 @@ import android.content._ import android.content.pm.PackageInfo import android.content.pm.PackageManager import android.os._ -import android.preference.PreferenceManager import android.support.v4.app.NotificationCompat import android.util.Log import com.google.analytics.tracking.android.EasyTracker @@ -78,7 +77,6 @@ class ShadowVpnService extends VpnService { var udpgw: String = null var notificationManager: NotificationManager = null var receiver: BroadcastReceiver = null - var settings: SharedPreferences = null var apps: Array[ProxiedApp] = null var config: Config = null @@ -174,12 +172,9 @@ class ShadowVpnService extends VpnService { return } - settings.edit().putBoolean(Key.isRunning, true).commit() - changeState(State.CONNECTING) config = Extra.get(intent) - Extra.save(settings, config) new Thread(new Runnable { def run() { @@ -358,7 +353,6 @@ class ShadowVpnService extends VpnService { super.onCreate() EasyTracker.getTracker.setStartSession(true) EasyTracker.getTracker.sendEvent(TAG, "start", getVersionName, 0L) - settings = PreferenceManager.getDefaultSharedPreferences(this) notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) .asInstanceOf[NotificationManager] @@ -377,7 +371,6 @@ class ShadowVpnService extends VpnService { def destroy() { changeState(State.STOPPED) - settings.edit.putBoolean(Key.isRunning, false).commit EasyTracker.getTracker.sendEvent(TAG, "stop", getVersionName, 0L) if (receiver != null) { unregisterReceiver(receiver) diff --git a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala index 38394de1..dff196e4 100644 --- a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala +++ b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala @@ -360,8 +360,7 @@ class Shadowsocks receiver = new StateBroadcastReceiver() registerReceiver(receiver, new IntentFilter(Action.UPDATE_STATE)) - val init: Boolean = !settings.getBoolean("isRunning", false) && - !settings.getBoolean("isConnecting", false) + val init: Boolean = !Shadowsocks.isServiceStarted(this) if (init) { if (progressDialog == null) { progressDialog = ProgressDialog.show(this, "", getString(R.string.initializing), true, true) @@ -459,7 +458,7 @@ class Shadowsocks switchButton.setChecked(false) Crouton.cancelAllCroutons() setPreferenceEnabled(true) - if (settings.getBoolean("isRunning", false)) { + if (settings.getBoolean(Key.isRunning, false)) { new Thread { override def run() { crash_recovery() @@ -714,4 +713,5 @@ class Shadowsocks onStateChanged(state, message) } } + } diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksReceiver.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksReceiver.scala index d73f0ed2..d19519c2 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksReceiver.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksReceiver.scala @@ -50,6 +50,18 @@ class ShadowsocksReceiver extends BroadcastReceiver { def onReceive(context: Context, intent: Intent) { val settings: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context) + + if (intent.getAction == Action.UPDATE_STATE) { + val state = intent.getIntExtra(Extra.STATE, State.INIT) + val running = state match { + case State.CONNECTING => true + case State.CONNECTED => true + case _ => false + } + settings.edit.putBoolean(Key.isRunning, running).apply() + return + } + var versionName: String = null try { versionName = context.getPackageManager.getPackageInfo(context.getPackageName, 0).versionName diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksService.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksService.scala index 80da9edf..77c1911c 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksService.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksService.scala @@ -45,7 +45,6 @@ import android.content._ import android.content.pm.PackageInfo import android.content.pm.PackageManager import android.os._ -import android.preference.PreferenceManager import android.support.v4.app.NotificationCompat import android.util.Log import com.google.analytics.tracking.android.EasyTracker @@ -105,7 +104,6 @@ class ShadowsocksService extends Service { var config: Config = null var hasRedirectSupport = false var apps: Array[ProxiedApp] = null - var settings: SharedPreferences = null var mSetForeground: Method = null var mStartForeground: Method = null @@ -130,7 +128,6 @@ class ShadowsocksService extends Service { msg.what match { case MSG_CONNECT_SUCCESS => changeState(State.CONNECTED) - settings.edit().putBoolean(Key.isRunning, true).apply() case MSG_CONNECT_FAIL => changeState(State.STOPPED) case MSG_STOP_SELF => @@ -213,7 +210,6 @@ class ShadowsocksService extends Service { changeState(State.CONNECTING) config = Extra.get(intent) - Extra.save(settings, config) new Thread(new Runnable { def run() { @@ -347,7 +343,6 @@ class ShadowsocksService extends Service { super.onCreate() EasyTracker.getTracker.setStartSession(true) EasyTracker.getTracker.sendEvent(TAG, "start", getVersionName, 0L) - settings = PreferenceManager.getDefaultSharedPreferences(this) notificationManager = this .getSystemService(Context.NOTIFICATION_SERVICE) .asInstanceOf[NotificationManager] @@ -394,7 +389,6 @@ class ShadowsocksService extends Service { killProcesses() } }.start() - settings.edit.putBoolean(Key.isRunning, false).apply() if (receiver != null) { unregisterReceiver(receiver) receiver = null