Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7098e57893 | ||
|
|
a4c5fc4919 | ||
|
|
3c69b23a5b | ||
|
|
738febbac7 | ||
|
|
ed91010b18 | ||
|
|
8f4d7db797 | ||
|
|
52ead0a02c | ||
|
|
7d099b1faf | ||
|
|
89b9914f15 | ||
|
|
809b81a332 | ||
|
|
395c07a0f6 | ||
|
|
cb61c290a4 | ||
|
|
9ccf2bc436 |
@@ -5,6 +5,7 @@ Please read FAQ in wiki then answer these questions before submitting your issue
|
|||||||
* Android version: *e.g. "7.0.0_r14", more detailed description is preferred*
|
* Android version: *e.g. "7.0.0_r14", more detailed description is preferred*
|
||||||
* Device: *e.g. Google Pixel XL*
|
* Device: *e.g. Google Pixel XL*
|
||||||
* Shadowsocks version: *version code "v3.0.0" or commit ID "a073f85"*
|
* Shadowsocks version: *version code "v3.0.0" or commit ID "a073f85"*
|
||||||
|
* Last version that did not exhibit the issue (if applicable):
|
||||||
|
|
||||||
### Configuration
|
### Configuration
|
||||||
|
|
||||||
@@ -17,7 +18,13 @@ _Put an `x` inside the [ ] that applies._
|
|||||||
* Local port: 1080
|
* Local port: 1080
|
||||||
* Encrypt method:
|
* Encrypt method:
|
||||||
* [ ] One-time authentication
|
* [ ] One-time authentication
|
||||||
* Route:
|
* Route
|
||||||
|
* [ ] All
|
||||||
|
* [ ] Bypass LAN
|
||||||
|
* [ ] Bypass China
|
||||||
|
* [ ] Bypass LAN & China
|
||||||
|
* [ ] GFW List
|
||||||
|
* [ ] China List
|
||||||
* [ ] IPv6 route
|
* [ ] IPv6 route
|
||||||
* [ ] Per-App Proxy
|
* [ ] Per-App Proxy
|
||||||
* [ ] Bypass mode
|
* [ ] Bypass mode
|
||||||
|
|||||||
+1
-1
@@ -27,7 +27,7 @@ cache:
|
|||||||
android:
|
android:
|
||||||
components:
|
components:
|
||||||
- tools
|
- tools
|
||||||
- build-tools-24.0.1
|
- build-tools-24.0.3
|
||||||
- extra-android-m2repository
|
- extra-android-m2repository
|
||||||
- extra-google-m2repository
|
- extra-google-m2repository
|
||||||
|
|
||||||
|
|||||||
@@ -1,66 +1,55 @@
|
|||||||
import android.Keys._
|
|
||||||
|
|
||||||
android.Plugin.androidBuild
|
|
||||||
|
|
||||||
platformTarget in Android := "android-24"
|
|
||||||
|
|
||||||
name := "shadowsocks"
|
|
||||||
|
|
||||||
scalaVersion := "2.11.8"
|
scalaVersion := "2.11.8"
|
||||||
|
dexMaxHeap := "4g"
|
||||||
|
|
||||||
compileOrder in Compile := CompileOrder.JavaThenScala
|
enablePlugins(AndroidApp)
|
||||||
|
|
||||||
javacOptions ++= Seq("-source", "1.7", "-target", "1.7")
|
|
||||||
|
|
||||||
scalacOptions ++= Seq("-target:jvm-1.7", "-Xexperimental")
|
|
||||||
|
|
||||||
ndkJavah in Android := List()
|
|
||||||
|
|
||||||
ndkBuild in Android := List()
|
|
||||||
|
|
||||||
shrinkResources in Android := true
|
|
||||||
|
|
||||||
typedResources in Android := false
|
|
||||||
|
|
||||||
resConfigs in Android := Seq("ru", "zh-rCN", "zh-rTW")
|
|
||||||
|
|
||||||
dexMaxHeap in Android := "4g"
|
|
||||||
|
|
||||||
resolvers += Resolver.jcenterRepo
|
|
||||||
|
|
||||||
useSupportVectors
|
useSupportVectors
|
||||||
|
|
||||||
libraryDependencies ++= Seq(
|
name := "shadowsocks"
|
||||||
"com.android.support" % "design" % "24.2.1",
|
version := "3.2.7"
|
||||||
"com.android.support" % "gridlayout-v7" % "24.2.1",
|
versionCode := Some(167)
|
||||||
"com.android.support" % "preference-v14" % "24.2.1",
|
|
||||||
"com.evernote" % "android-job" % "1.1.0",
|
|
||||||
"com.github.clans" % "fab" % "1.6.4",
|
|
||||||
"com.github.jorgecastilloprz" % "fabprogresscircle" % "1.01",
|
|
||||||
"com.github.kevinsawicki" % "http-request" % "6.0",
|
|
||||||
"com.google.android.gms" % "play-services-ads" % "9.6.1",
|
|
||||||
"com.google.android.gms" % "play-services-analytics" % "9.6.1",
|
|
||||||
"com.google.android.gms" % "play-services-gcm" % "9.6.1",
|
|
||||||
"com.j256.ormlite" % "ormlite-android" % "5.0",
|
|
||||||
"com.twofortyfouram" % "android-plugin-api-for-locale" % "1.0.2",
|
|
||||||
"dnsjava" % "dnsjava" % "2.1.7",
|
|
||||||
"eu.chainfire" % "libsuperuser" % "1.0.0.201608240809",
|
|
||||||
"me.dm7.barcodescanner" % "zxing" % "1.9",
|
|
||||||
"net.glxn.qrgen" % "android" % "2.0"
|
|
||||||
)
|
|
||||||
|
|
||||||
proguardVersion in Android := "5.3"
|
platformTarget := "android-24"
|
||||||
|
|
||||||
proguardCache in Android := Seq()
|
compileOrder := CompileOrder.JavaThenScala
|
||||||
|
javacOptions ++= "-source" :: "1.7" :: "-target" :: "1.7" :: Nil
|
||||||
|
scalacOptions ++= "-target:jvm-1.7" :: "-Xexperimental" :: Nil
|
||||||
|
ndkJavah := Seq()
|
||||||
|
ndkBuild := Seq()
|
||||||
|
|
||||||
proguardOptions in Android ++= Seq(
|
proguardVersion := "5.3"
|
||||||
"-keep class com.github.shadowsocks.System { *; }",
|
proguardCache := Seq()
|
||||||
"-dontwarn com.google.android.gms.internal.**",
|
proguardOptions ++=
|
||||||
"-dontwarn com.j256.ormlite.**",
|
"-keep class com.github.shadowsocks.System { *; }" ::
|
||||||
"-dontwarn org.xbill.**")
|
"-dontwarn com.google.android.gms.internal.**" ::
|
||||||
|
"-dontwarn com.j256.ormlite.**" ::
|
||||||
|
"-dontwarn org.xbill.**" ::
|
||||||
|
Nil
|
||||||
|
|
||||||
|
shrinkResources := true
|
||||||
|
typedResources := false
|
||||||
|
resConfigs := Seq("ru", "zh-rCN", "zh-rTW")
|
||||||
|
|
||||||
|
resolvers += Resolver.jcenterRepo
|
||||||
|
libraryDependencies ++=
|
||||||
|
"com.android.support" % "design" % "24.2.1" ::
|
||||||
|
"com.android.support" % "gridlayout-v7" % "24.2.1" ::
|
||||||
|
"com.android.support" % "preference-v14" % "24.2.1" ::
|
||||||
|
"com.evernote" % "android-job" % "1.1.0" ::
|
||||||
|
"com.github.clans" % "fab" % "1.6.4" ::
|
||||||
|
"com.github.jorgecastilloprz" % "fabprogresscircle" % "1.01" ::
|
||||||
|
"com.github.kevinsawicki" % "http-request" % "6.0" ::
|
||||||
|
"com.google.android.gms" % "play-services-ads" % "9.6.1" ::
|
||||||
|
"com.google.android.gms" % "play-services-analytics" % "9.6.1" ::
|
||||||
|
"com.google.android.gms" % "play-services-gcm" % "9.6.1" ::
|
||||||
|
"com.j256.ormlite" % "ormlite-android" % "5.0" ::
|
||||||
|
"com.twofortyfouram" % "android-plugin-api-for-locale" % "1.0.2" ::
|
||||||
|
"dnsjava" % "dnsjava" % "2.1.7" ::
|
||||||
|
"eu.chainfire" % "libsuperuser" % "1.0.0.201608240809" ::
|
||||||
|
"me.dm7.barcodescanner" % "zxing" % "1.9" ::
|
||||||
|
"net.glxn.qrgen" % "android" % "2.0" ::
|
||||||
|
Nil
|
||||||
|
|
||||||
lazy val nativeBuild = TaskKey[Unit]("native-build", "Build native executables")
|
lazy val nativeBuild = TaskKey[Unit]("native-build", "Build native executables")
|
||||||
|
|
||||||
nativeBuild := {
|
nativeBuild := {
|
||||||
val logger = streams.value.log
|
val logger = streams.value.log
|
||||||
Process("./build.sh") ! logger match {
|
Process("./build.sh") ! logger match {
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
addSbtPlugin("org.scala-android" % "sbt-android" % "1.6.18")
|
addSbtPlugin("org.scala-android" % "sbt-android" % "1.7.0")
|
||||||
|
|
||||||
addSbtPlugin("com.timushev.sbt" % "sbt-updates" % "0.1.10")
|
addSbtPlugin("com.timushev.sbt" % "sbt-updates" % "0.1.10")
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:tools="http://schemas.android.com/tools" package="com.github.shadowsocks"
|
xmlns:tools="http://schemas.android.com/tools" package="com.github.shadowsocks">
|
||||||
android:versionCode="166"
|
|
||||||
android:versionName="3.2.6">
|
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.INTERNET"/>
|
<uses-permission android:name="android.permission.INTERNET"/>
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||||
|
|||||||
+3779
-3989
File diff suppressed because it is too large
Load Diff
+3779
-3989
File diff suppressed because it is too large
Load Diff
+3779
-3989
File diff suppressed because it is too large
Load Diff
Submodule src/main/jni/shadowsocks-libev updated: 248fdcb610...7029cfca3a
@@ -2,14 +2,11 @@ package be.mygod.preference
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.support.v14.preference.PreferenceDialogFragment
|
import android.support.v14.preference.PreferenceDialogFragment
|
||||||
import android.view.inputmethod.InputMethodManager
|
|
||||||
import android.view.{View, ViewGroup}
|
import android.view.{View, ViewGroup}
|
||||||
|
|
||||||
class NumberPickerPreferenceDialogFragment extends PreferenceDialogFragment {
|
class NumberPickerPreferenceDialogFragment extends PreferenceDialogFragment {
|
||||||
private lazy val preference = getPreference.asInstanceOf[NumberPickerPreference]
|
private lazy val preference = getPreference.asInstanceOf[NumberPickerPreference]
|
||||||
private lazy val picker = preference.picker
|
private lazy val picker = preference.picker
|
||||||
private lazy val inputMethodManager =
|
|
||||||
getActivity.getSystemService(Context.INPUT_METHOD_SERVICE).asInstanceOf[InputMethodManager]
|
|
||||||
|
|
||||||
override protected def onCreateDialogView(context: Context) = {
|
override protected def onCreateDialogView(context: Context) = {
|
||||||
val parent = picker.getParent.asInstanceOf[ViewGroup]
|
val parent = picker.getParent.asInstanceOf[ViewGroup]
|
||||||
@@ -30,7 +27,5 @@ class NumberPickerPreferenceDialogFragment extends PreferenceDialogFragment {
|
|||||||
val value = picker.getValue
|
val value = picker.getValue
|
||||||
if (preference.callChangeListener(value)) preference.setValue(value)
|
if (preference.callChangeListener(value)) preference.setValue(value)
|
||||||
}
|
}
|
||||||
inputMethodManager.hideSoftInputFromWindow(getActivity.getCurrentFocus.getWindowToken,
|
|
||||||
InputMethodManager.HIDE_NOT_ALWAYS)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,9 @@ abstract class PreferenceFragment extends Base {
|
|||||||
bundle.putString("key", key)
|
bundle.putString("key", key)
|
||||||
fragment.setArguments(bundle)
|
fragment.setArguments(bundle)
|
||||||
fragment.setTargetFragment(this, 0)
|
fragment.setTargetFragment(this, 0)
|
||||||
fragment.show(getFragmentManager, "android.support.v14.preference.PreferenceFragment.DIALOG")
|
getFragmentManager.beginTransaction()
|
||||||
|
.add(fragment, "android.support.v14.preference.PreferenceFragment.DIALOG")
|
||||||
|
.commitAllowingStateLoss()
|
||||||
}
|
}
|
||||||
|
|
||||||
override protected def onCreateAdapter(screen: PreferenceScreen) = new PreferenceGroupAdapter(screen)
|
override protected def onCreateAdapter(screen: PreferenceScreen) = new PreferenceGroupAdapter(screen)
|
||||||
|
|||||||
@@ -63,9 +63,7 @@ import com.github.shadowsocks.database._
|
|||||||
import com.github.shadowsocks.utils.CloseUtils._
|
import com.github.shadowsocks.utils.CloseUtils._
|
||||||
import com.github.shadowsocks.utils._
|
import com.github.shadowsocks.utils._
|
||||||
import com.google.android.gms.ads.{AdRequest, AdSize, AdView}
|
import com.google.android.gms.ads.{AdRequest, AdSize, AdView}
|
||||||
import eu.chainfire.libsuperuser.Shell
|
|
||||||
|
|
||||||
import scala.collection.mutable.ArrayBuffer
|
|
||||||
import scala.util.Random
|
import scala.util.Random
|
||||||
|
|
||||||
object Typefaces {
|
object Typefaces {
|
||||||
@@ -189,8 +187,8 @@ class Shadowsocks extends AppCompatActivity with ServiceBoundContext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override def binderDied {
|
override def binderDied {
|
||||||
detachService
|
detachService()
|
||||||
crashRecovery
|
app.crashRecovery()
|
||||||
attachService
|
attachService
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -228,23 +226,6 @@ class Shadowsocks extends AppCompatActivity with ServiceBoundContext {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def crashRecovery() {
|
|
||||||
val cmd = new ArrayBuffer[String]()
|
|
||||||
|
|
||||||
for (task <- Array("ss-local", "ss-tunnel", "pdnsd", "redsocks", "tun2socks", "kcptun")) {
|
|
||||||
cmd.append("killall %s".formatLocal(Locale.ENGLISH, task))
|
|
||||||
cmd.append("rm -f %1$s/%2$s-nat.conf %1$s/%2$s-vpn.conf"
|
|
||||||
.formatLocal(Locale.ENGLISH, getApplicationInfo.dataDir, task))
|
|
||||||
}
|
|
||||||
if (app.isNatEnabled) {
|
|
||||||
cmd.append("iptables -t nat -F OUTPUT")
|
|
||||||
cmd.append("echo done")
|
|
||||||
val result = Shell.SU.run(cmd.toArray)
|
|
||||||
if (result != null && !result.isEmpty) return // fallback to SH
|
|
||||||
}
|
|
||||||
Shell.SH.run(cmd.toArray)
|
|
||||||
}
|
|
||||||
|
|
||||||
def cancelStart() {
|
def cancelStart() {
|
||||||
clearDialog()
|
clearDialog()
|
||||||
changeSwitch(checked = false)
|
changeSwitch(checked = false)
|
||||||
@@ -463,17 +444,11 @@ class Shadowsocks extends AppCompatActivity with ServiceBoundContext {
|
|||||||
handler.removeCallbacksAndMessages(null)
|
handler.removeCallbacksAndMessages(null)
|
||||||
}
|
}
|
||||||
|
|
||||||
def reset() {
|
|
||||||
crashRecovery()
|
|
||||||
|
|
||||||
app.copyAssets()
|
|
||||||
}
|
|
||||||
|
|
||||||
def recovery() {
|
def recovery() {
|
||||||
if (serviceStarted) serviceStop()
|
if (serviceStarted) serviceStop()
|
||||||
val h = showProgress(R.string.recovering)
|
val h = showProgress(R.string.recovering)
|
||||||
Utils.ThrowableFuture {
|
Utils.ThrowableFuture {
|
||||||
reset()
|
app.copyAssets()
|
||||||
h.sendEmptyMessage(0)
|
h.sendEmptyMessage(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,6 +62,8 @@ import com.google.android.gms.tagmanager.{ContainerHolder, TagManager}
|
|||||||
import com.j256.ormlite.logger.LocalLog
|
import com.j256.ormlite.logger.LocalLog
|
||||||
import eu.chainfire.libsuperuser.Shell
|
import eu.chainfire.libsuperuser.Shell
|
||||||
|
|
||||||
|
import scala.collection.mutable.ArrayBuffer
|
||||||
|
|
||||||
object ShadowsocksApplication {
|
object ShadowsocksApplication {
|
||||||
var app: ShadowsocksApplication = _
|
var app: ShadowsocksApplication = _
|
||||||
|
|
||||||
@@ -207,7 +209,25 @@ class ShadowsocksApplication extends Application {
|
|||||||
IOUtils.copy(in, out)))
|
IOUtils.copy(in, out)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def crashRecovery() {
|
||||||
|
val cmd = new ArrayBuffer[String]()
|
||||||
|
|
||||||
|
for (task <- Array("ss-local", "ss-tunnel", "pdnsd", "redsocks", "tun2socks", "kcptun")) {
|
||||||
|
cmd.append("killall %s".formatLocal(Locale.ENGLISH, task))
|
||||||
|
cmd.append("rm -f %1$s/%2$s-nat.conf %1$s/%2$s-vpn.conf"
|
||||||
|
.formatLocal(Locale.ENGLISH, getApplicationInfo.dataDir, task))
|
||||||
|
}
|
||||||
|
if (app.isNatEnabled) {
|
||||||
|
cmd.append("iptables -t nat -F OUTPUT")
|
||||||
|
cmd.append("echo done")
|
||||||
|
val result = Shell.SU.run(cmd.toArray)
|
||||||
|
if (result != null && !result.isEmpty) return // fallback to SH
|
||||||
|
}
|
||||||
|
Shell.SH.run(cmd.toArray)
|
||||||
|
}
|
||||||
|
|
||||||
def copyAssets() {
|
def copyAssets() {
|
||||||
|
crashRecovery() // ensure executables are killed before writing to them
|
||||||
copyAssets(System.getABI)
|
copyAssets(System.getABI)
|
||||||
copyAssets("acl")
|
copyAssets("acl")
|
||||||
Shell.SH.run(EXECUTABLES.map("chmod 755 " + getApplicationInfo.dataDir + '/' + _))
|
Shell.SH.run(EXECUTABLES.map("chmod 755 " + getApplicationInfo.dataDir + '/' + _))
|
||||||
|
|||||||
@@ -189,12 +189,12 @@ class ShadowsocksNatService extends BaseService {
|
|||||||
val conf = profile.route match {
|
val conf = profile.route match {
|
||||||
case Route.BYPASS_CHN | Route.BYPASS_LAN_CHN | Route.GFWLIST => {
|
case Route.BYPASS_CHN | Route.BYPASS_LAN_CHN | Route.GFWLIST => {
|
||||||
ConfigUtils.PDNSD_DIRECT.formatLocal(Locale.ENGLISH, "", getApplicationInfo.dataDir,
|
ConfigUtils.PDNSD_DIRECT.formatLocal(Locale.ENGLISH, "", getApplicationInfo.dataDir,
|
||||||
"127.0.0.1", profile.localPort + 53, "1.2.4.8, 114.114.114.114",
|
"127.0.0.1", profile.localPort + 53, "114.114.114.114, 223.5.5.5, 1.2.4.8",
|
||||||
getBlackList, reject, profile.localPort + 63, reject)
|
getBlackList, reject, profile.localPort + 63, reject)
|
||||||
}
|
}
|
||||||
case Route.CHINALIST => {
|
case Route.CHINALIST => {
|
||||||
ConfigUtils.PDNSD_DIRECT.formatLocal(Locale.ENGLISH, "", getApplicationInfo.dataDir,
|
ConfigUtils.PDNSD_DIRECT.formatLocal(Locale.ENGLISH, "", getApplicationInfo.dataDir,
|
||||||
"127.0.0.1", profile.localPort + 53, "8.8.8.8, 208.67.222.222",
|
"127.0.0.1", profile.localPort + 53, "8.8.8.8, 8.8.4.4, 208.67.222.222",
|
||||||
"", reject, profile.localPort + 63, reject)
|
"", reject, profile.localPort + 63, reject)
|
||||||
}
|
}
|
||||||
case _ => {
|
case _ => {
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ class ShadowsocksNotification(private val service: BaseService, profileName: Str
|
|||||||
.setContentIntent(PendingIntent.getActivity(service, 0, new Intent(service, classOf[Shadowsocks])
|
.setContentIntent(PendingIntent.getActivity(service, 0, new Intent(service, classOf[Shadowsocks])
|
||||||
.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT), 0))
|
.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT), 0))
|
||||||
.setSmallIcon(R.drawable.ic_stat_shadowsocks)
|
.setSmallIcon(R.drawable.ic_stat_shadowsocks)
|
||||||
if (!ShadowsocksTileService.running) builder.addAction(R.drawable.ic_navigation_close,
|
builder.addAction(R.drawable.ic_navigation_close,
|
||||||
service.getString(R.string.stop), PendingIntent.getBroadcast(service, 0, new Intent(Action.CLOSE), 0))
|
service.getString(R.string.stop), PendingIntent.getBroadcast(service, 0, new Intent(Action.CLOSE), 0))
|
||||||
app.profileManager.getAllProfiles match {
|
app.profileManager.getAllProfiles match {
|
||||||
case Some(profiles) => if (profiles.length > 1)
|
case Some(profiles) => if (profiles.length > 1)
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ class ShadowsocksRunnerService extends Service with ServiceBoundContext {
|
|||||||
if (bgService != null) {
|
if (bgService != null) {
|
||||||
if (app.isNatEnabled) startBackgroundService()
|
if (app.isNatEnabled) startBackgroundService()
|
||||||
else if (VpnService.prepare(ShadowsocksRunnerService.this) == null) startBackgroundService()
|
else if (VpnService.prepare(ShadowsocksRunnerService.this) == null) startBackgroundService()
|
||||||
handler.postDelayed(() => stopSelf(), 10000)
|
handler.postDelayed(() => stopSelf(), 3000)
|
||||||
}
|
}
|
||||||
}, 1000)
|
}, 1000)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,13 +9,8 @@ import com.github.shadowsocks.utils.{State, Utils}
|
|||||||
/**
|
/**
|
||||||
* @author Mygod
|
* @author Mygod
|
||||||
*/
|
*/
|
||||||
object ShadowsocksTileService {
|
|
||||||
var running: Boolean = _
|
|
||||||
}
|
|
||||||
|
|
||||||
@TargetApi(24)
|
@TargetApi(24)
|
||||||
final class ShadowsocksTileService extends TileService with ServiceBoundContext {
|
final class ShadowsocksTileService extends TileService with ServiceBoundContext {
|
||||||
import ShadowsocksTileService._
|
|
||||||
|
|
||||||
private lazy val iconIdle = Icon.createWithResource(this, R.drawable.ic_start_idle).setTint(0x80ffffff)
|
private lazy val iconIdle = Icon.createWithResource(this, R.drawable.ic_start_idle).setTint(0x80ffffff)
|
||||||
private lazy val iconBusy = Icon.createWithResource(this, R.drawable.ic_start_busy)
|
private lazy val iconBusy = Icon.createWithResource(this, R.drawable.ic_start_busy)
|
||||||
@@ -46,15 +41,6 @@ final class ShadowsocksTileService extends TileService with ServiceBoundContext
|
|||||||
|
|
||||||
override def onServiceConnected() = callback.stateChanged(bgService.getState, bgService.getProfileName, null)
|
override def onServiceConnected() = callback.stateChanged(bgService.getState, bgService.getProfileName, null)
|
||||||
|
|
||||||
override def onCreate {
|
|
||||||
super.onCreate
|
|
||||||
running = true
|
|
||||||
}
|
|
||||||
override def onDestroy {
|
|
||||||
super.onDestroy
|
|
||||||
running = false
|
|
||||||
}
|
|
||||||
|
|
||||||
override def onStartListening {
|
override def onStartListening {
|
||||||
super.onStartListening
|
super.onStartListening
|
||||||
attachService(callback)
|
attachService(callback)
|
||||||
|
|||||||
@@ -310,7 +310,7 @@ class ShadowsocksVpnService extends VpnService with BaseService {
|
|||||||
val conf = profile.route match {
|
val conf = profile.route match {
|
||||||
case Route.BYPASS_CHN | Route.BYPASS_LAN_CHN | Route.GFWLIST => {
|
case Route.BYPASS_CHN | Route.BYPASS_LAN_CHN | Route.GFWLIST => {
|
||||||
ConfigUtils.PDNSD_DIRECT.formatLocal(Locale.ENGLISH, protect, getApplicationInfo.dataDir,
|
ConfigUtils.PDNSD_DIRECT.formatLocal(Locale.ENGLISH, protect, getApplicationInfo.dataDir,
|
||||||
"0.0.0.0", profile.localPort + 53, "114.114.114.114, 119.29.29.29, 1.2.4.8",
|
"0.0.0.0", profile.localPort + 53, "114.114.114.114, 223.5.5.5, 1.2.4.8",
|
||||||
getBlackList, reject, profile.localPort + 63, reject)
|
getBlackList, reject, profile.localPort + 63, reject)
|
||||||
}
|
}
|
||||||
case Route.CHINALIST => {
|
case Route.CHINALIST => {
|
||||||
|
|||||||
Reference in New Issue
Block a user