Commit 29c51169 authored by Max Lv's avatar Max Lv

delay the startup when screen locked

parent a17f12d3
...@@ -39,10 +39,10 @@ ...@@ -39,10 +39,10 @@
package com.github.shadowsocks package com.github.shadowsocks
import android.app.Activity import android.app.{Activity, KeyguardManager}
import android.os.{IBinder, Bundle} import android.os.{IBinder, Bundle, Handler}
import android.net.VpnService import android.net.VpnService
import android.content.{Context, ComponentName, ServiceConnection, Intent} import android.content._
import android.util.Log import android.util.Log
import android.preference.PreferenceManager import android.preference.PreferenceManager
import com.github.shadowsocks.utils._ import com.github.shadowsocks.utils._
...@@ -53,11 +53,30 @@ class ShadowsocksRunnerActivity extends Activity { ...@@ -53,11 +53,30 @@ class ShadowsocksRunnerActivity extends Activity {
lazy val settings = PreferenceManager.getDefaultSharedPreferences(this) lazy val settings = PreferenceManager.getDefaultSharedPreferences(this)
lazy val isRoot = Utils.getRoot lazy val isRoot = Utils.getRoot
val handler = new Handler()
val receiver = new BroadcastReceiver() {
override def onReceive(context: Context, intent: Intent) {
if (intent.getAction == Intent.ACTION_USER_PRESENT) {
attachService()
}
}
}
// Services // Services
var bgService: IShadowsocksService = null var bgService: IShadowsocksService = null
val connection = new ServiceConnection { val connection = new ServiceConnection {
override def onServiceConnected(name: ComponentName, service: IBinder) { override def onServiceConnected(name: ComponentName, service: IBinder) {
bgService = IShadowsocksService.Stub.asInterface(service) bgService = IShadowsocksService.Stub.asInterface(service)
handler.postDelayed(new Runnable() {
override def run() = startBackgroundService()
}, 1000)
}
override def onServiceDisconnected(name: ComponentName) {
bgService = null
}
}
def startBackgroundService() {
if (!isRoot) { if (!isRoot) {
val intent = VpnService.prepare(ShadowsocksRunnerActivity.this) val intent = VpnService.prepare(ShadowsocksRunnerActivity.this)
if (intent != null) { if (intent != null) {
...@@ -70,10 +89,6 @@ class ShadowsocksRunnerActivity extends Activity { ...@@ -70,10 +89,6 @@ class ShadowsocksRunnerActivity extends Activity {
finish() finish()
} }
} }
override def onServiceDisconnected(name: ComponentName) {
bgService = null
}
}
def attachService() { def attachService() {
if (bgService == null) { if (bgService == null) {
...@@ -94,12 +109,20 @@ class ShadowsocksRunnerActivity extends Activity { ...@@ -94,12 +109,20 @@ class ShadowsocksRunnerActivity extends Activity {
override def onCreate(savedInstanceState: Bundle) { override def onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
val km = getSystemService(Context.KEYGUARD_SERVICE).asInstanceOf[KeyguardManager]
val locked = km.inKeyguardRestrictedInputMode
if (locked) {
val filter = new IntentFilter(Intent.ACTION_USER_PRESENT)
registerReceiver(receiver, filter)
} else {
attachService() attachService()
} }
}
override def onDestroy() { override def onDestroy() {
super.onDestroy() super.onDestroy()
deattachService() deattachService()
unregisterReceiver(receiver)
} }
override def onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { override def onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment