Commit 2eb0b193 authored by Max Lv's avatar Max Lv

Tricks to start VPN service in background

parent 18e62360
......@@ -16,13 +16,13 @@
android:targetSdkVersion="16"/>
<application
android:name="com.github.shadowsocks.ShadowsocksApplication"
android:name=".ShadowsocksApplication"
android:hardwareAccelerated="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name">
<activity
android:name="com.github.shadowsocks.Shadowsocks"
android:name=".Shadowsocks"
android:label="@string/app_name"
android:theme="@style/Theme.GAEProxy"
android:launchMode="singleTask">
......@@ -32,8 +32,14 @@
</intent-filter>
</activity>
<activity
android:name=".ShadowVpnActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:launchMode="singleTask">
</activity>
<activity
android:name="com.github.shadowsocks.AppManager"
android:name=".AppManager"
android:theme="@style/Theme.GAEProxy"
android:label="@string/app_name">
<intent-filter>
......@@ -43,11 +49,11 @@
</activity>
<service
android:name="com.github.shadowsocks.ShadowsocksService"
android:name=".ShadowsocksService"
android:enabled="true"/>
<service
android:name="com.github.shadowsocks.ShadowVpnService"
android:name=".ShadowVpnService"
android:label="@string/app_name"
android:permission="android.permission.BIND_VPN_SERVICE"
android:exported="false">
......@@ -56,7 +62,7 @@
</intent-filter>
</service>
<receiver android:name="com.github.shadowsocks.ShadowsocksReceiver">
<receiver android:name=".ShadowsocksReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
......
package com.github.shadowsocks
import android.app.Activity
import android.os.Bundle
import android.net.VpnService
import android.content.Intent
import android.util.Log
class ShadowVpnActivity extends Activity {
override def onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState)
val intent = VpnService.prepare(this)
if (intent != null) {
startActivityForResult(intent, Shadowsocks.REQUEST_CONNECT)
} else {
onActivityResult(Shadowsocks.REQUEST_CONNECT, Activity.RESULT_OK, null)
}
}
override def onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
resultCode match {
case Activity.RESULT_OK => {
val it: Intent = new Intent(this, classOf[ShadowVpnService])
startService(it)
}
case _ => {
Log.e(Shadowsocks.TAG, "Failed to start VpnService")
}
}
finish()
}
}
......@@ -37,7 +37,7 @@
*/
package com.github.shadowsocks
import android.app.{NotificationManager, Notification, PendingIntent, Service}
import android.app._
import android.content._
import android.content.pm.PackageInfo
import android.content.pm.PackageManager
......@@ -166,10 +166,15 @@ class ShadowVpnService extends VpnService {
}
def handleCommand(intent: Intent) {
if (intent == null) {
if (VpnService.prepare(this) != null) {
val i = new Intent(this, classOf[ShadowVpnActivity])
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(i)
stopSelf()
return
}
appHost = settings.getString("proxy", "127.0.0.1")
sitekey = settings.getString("sitekey", "default")
encMethod = settings.getString("encMethod", "table")
......@@ -362,7 +367,6 @@ class ShadowVpnService extends VpnService {
super.onCreate()
EasyTracker.getTracker.sendEvent("service", "start", getVersionName, 0L)
settings = PreferenceManager.getDefaultSharedPreferences(this)
notificationManager = getSystemService(Context.NOTIFICATION_SERVICE)
.asInstanceOf[NotificationManager]
......
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