Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5427e00012 | ||
|
|
7f226d3f0c | ||
|
|
ee3f3c2338 | ||
|
|
6ac90abbf7 | ||
|
|
2f553b156a |
@@ -14,6 +14,8 @@ ndkJavah in Android := List()
|
|||||||
|
|
||||||
ndkBuild in Android := List()
|
ndkBuild in Android := List()
|
||||||
|
|
||||||
|
typedResources in Android := false
|
||||||
|
|
||||||
resolvers += "JRAF" at "http://JRAF.org/static/maven/2"
|
resolvers += "JRAF" at "http://JRAF.org/static/maven/2"
|
||||||
|
|
||||||
resolvers += "madeye private releases" at "http://madeye-maven-repository.googlecode.com/git/"
|
resolvers += "madeye private releases" at "http://madeye-maven-repository.googlecode.com/git/"
|
||||||
@@ -32,7 +34,7 @@ libraryDependencies ++= Seq(
|
|||||||
)
|
)
|
||||||
|
|
||||||
libraryDependencies ++= Seq(
|
libraryDependencies ++= Seq(
|
||||||
"de.keyboardsurfer.android.widget" % "crouton" % "1.8.4" exclude("com.google.android", "support-v4"),
|
"com.github.mrengineer13" % "snackbar" % "0.5.0",
|
||||||
"com.nostra13.universalimageloader" % "universal-image-loader" % "1.8.4",
|
"com.nostra13.universalimageloader" % "universal-image-loader" % "1.8.4",
|
||||||
"com.j256.ormlite" % "ormlite-core" % "4.47",
|
"com.j256.ormlite" % "ormlite-core" % "4.47",
|
||||||
"com.j256.ormlite" % "ormlite-android" % "4.47"
|
"com.j256.ormlite" % "ormlite-android" % "4.47"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="com.github.shadowsocks"
|
package="com.github.shadowsocks"
|
||||||
android:versionCode="95"
|
android:versionCode="96"
|
||||||
android:versionName="2.5.5">
|
android:versionName="2.5.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"/>
|
||||||
|
|||||||
@@ -59,7 +59,8 @@ static void
|
|||||||
ev_arc4random_buf(void *buf, size_t n)
|
ev_arc4random_buf(void *buf, size_t n)
|
||||||
{
|
{
|
||||||
#if defined(_EVENT_HAVE_ARC4RANDOM_BUF) && !defined(__APPLE__)
|
#if defined(_EVENT_HAVE_ARC4RANDOM_BUF) && !defined(__APPLE__)
|
||||||
return arc4random_buf(buf, n);
|
arc4random_buf(buf, n);
|
||||||
|
return;
|
||||||
#else
|
#else
|
||||||
unsigned char *b = buf;
|
unsigned char *b = buf;
|
||||||
|
|
||||||
@@ -71,7 +72,8 @@ ev_arc4random_buf(void *buf, size_t n)
|
|||||||
* trickery.)
|
* trickery.)
|
||||||
*/
|
*/
|
||||||
if (arc4random_buf != NULL) {
|
if (arc4random_buf != NULL) {
|
||||||
return arc4random_buf(buf, n);
|
arc4random_buf(buf, n);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
/* Make sure that we start out with b at a 4-byte alignment; plenty
|
/* Make sure that we start out with b at a 4-byte alignment; plenty
|
||||||
|
|||||||
@@ -25,11 +25,11 @@
|
|||||||
* (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for
|
* (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for
|
||||||
* major minor fix final patch/beta)
|
* major minor fix final patch/beta)
|
||||||
*/
|
*/
|
||||||
#define OPENSSL_VERSION_NUMBER 0x1000103fL
|
#define OPENSSL_VERSION_NUMBER 0x100010afL
|
||||||
#ifdef OPENSSL_FIPS
|
#ifdef OPENSSL_FIPS
|
||||||
#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1c-fips 10 May 2012"
|
#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1j-fips 15 Oct 2014"
|
||||||
#else
|
#else
|
||||||
#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1c 10 May 2012"
|
#define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1j 15 Oct 2014"
|
||||||
#endif
|
#endif
|
||||||
#define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT
|
#define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT
|
||||||
|
|
||||||
|
|||||||
@@ -47,7 +47,7 @@
|
|||||||
<string name="service_failed">无法连接远程服务器</string>
|
<string name="service_failed">无法连接远程服务器</string>
|
||||||
<string name="stop">停止服务</string>
|
<string name="stop">停止服务</string>
|
||||||
<string name="stopping">正在关闭...</string>
|
<string name="stopping">正在关闭...</string>
|
||||||
<string name="vpn_error">后台服务启动失败:\"%s\"。</string>
|
<string name="vpn_error">后台服务启动失败:%s</string>
|
||||||
<string name="ok_iknow">确定</string>
|
<string name="ok_iknow">确定</string>
|
||||||
<string name="port_alert">端口号应大于1024</string>
|
<string name="port_alert">端口号应大于1024</string>
|
||||||
<string name="port_empty">端口号不能为空</string>
|
<string name="port_empty">端口号不能为空</string>
|
||||||
@@ -94,5 +94,6 @@
|
|||||||
<string name="action_export_err">导出失败</string>
|
<string name="action_export_err">导出失败</string>
|
||||||
<string name="action_import_msg">导入成功</string>
|
<string name="action_import_msg">导入成功</string>
|
||||||
<string name="action_import_err">导入失败</string>
|
<string name="action_import_err">导入失败</string>
|
||||||
|
<string name="error">错误</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -58,9 +58,10 @@
|
|||||||
<string name="service_failed">Failed to connect the remote server</string>
|
<string name="service_failed">Failed to connect the remote server</string>
|
||||||
<string name="stop">Stop the service</string>
|
<string name="stop">Stop the service</string>
|
||||||
<string name="stopping">Shutting down...</string>
|
<string name="stopping">Shutting down...</string>
|
||||||
<string name="vpn_error">Error: \"%s\".</string>
|
<string name="vpn_error">%s</string>
|
||||||
<string name="enable_nat">Turn on NAT mode.</string>
|
<string name="enable_nat">Turn on NAT mode.</string>
|
||||||
<string name="disable_nat">Turn off NAT mode.</string>
|
<string name="disable_nat">Turn off NAT mode.</string>
|
||||||
|
<string name="error">ERROR</string>
|
||||||
|
|
||||||
<!-- alert category -->
|
<!-- alert category -->
|
||||||
<string name="ok_iknow">OK</string>
|
<string name="ok_iknow">OK</string>
|
||||||
|
|||||||
@@ -227,8 +227,9 @@ class AppManager extends Activity with OnCheckedChangeListener with OnClickListe
|
|||||||
val prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext)
|
val prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext)
|
||||||
item.getItemId match {
|
item.getItemId match {
|
||||||
case R.id.action_export =>
|
case R.id.action_export =>
|
||||||
|
val bypass = prefs.getBoolean(Key.isBypassApps, false)
|
||||||
val proxiedAppString = prefs.getString(Key.proxied, "")
|
val proxiedAppString = prefs.getString(Key.proxied, "")
|
||||||
val clip = ClipData.newPlainText(Key.proxied, proxiedAppString)
|
val clip = ClipData.newPlainText(Key.proxied, bypass + " " + proxiedAppString)
|
||||||
clipboard.setPrimaryClip(clip)
|
clipboard.setPrimaryClip(clip)
|
||||||
Toast.makeText(this, R.string.action_export_msg, Toast.LENGTH_SHORT).show()
|
Toast.makeText(this, R.string.action_export_msg, Toast.LENGTH_SHORT).show()
|
||||||
return true
|
return true
|
||||||
@@ -241,8 +242,12 @@ class AppManager extends Activity with OnCheckedChangeListener with OnClickListe
|
|||||||
if (proxiedAppSequence != null) {
|
if (proxiedAppSequence != null) {
|
||||||
val proxiedAppString = proxiedAppSequence.toString
|
val proxiedAppString = proxiedAppSequence.toString
|
||||||
if (!proxiedAppString.isEmpty) {
|
if (!proxiedAppString.isEmpty) {
|
||||||
|
val array = proxiedAppString.split(" ")
|
||||||
|
val bypass = array(0).toBoolean
|
||||||
|
val apps = if (array.size > 1) array(1) else ""
|
||||||
|
prefs.edit.putBoolean(Key.isBypassApps, bypass).commit()
|
||||||
|
prefs.edit.putString(Key.proxied, apps).commit()
|
||||||
Toast.makeText(this, R.string.action_import_msg, Toast.LENGTH_SHORT).show()
|
Toast.makeText(this, R.string.action_import_msg, Toast.LENGTH_SHORT).show()
|
||||||
prefs.edit.putString(Key.proxied, proxiedAppString).commit()
|
|
||||||
// Restart activity
|
// Restart activity
|
||||||
val intent = getIntent
|
val intent = getIntent
|
||||||
finish()
|
finish()
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ import android.view.View.OnLongClickListener
|
|||||||
import android.view._
|
import android.view._
|
||||||
import android.webkit.{WebView, WebViewClient}
|
import android.webkit.{WebView, WebViewClient}
|
||||||
import android.widget._
|
import android.widget._
|
||||||
|
import com.github.mrengineer13.snackbar._
|
||||||
import com.github.shadowsocks.aidl.{IShadowsocksService, IShadowsocksServiceCallback}
|
import com.github.shadowsocks.aidl.{IShadowsocksService, IShadowsocksServiceCallback}
|
||||||
import com.github.shadowsocks.database._
|
import com.github.shadowsocks.database._
|
||||||
import com.github.shadowsocks.preferences.{PasswordEditTextPreference, ProfileEditTextPreference, SummaryEditTextPreference}
|
import com.github.shadowsocks.preferences.{PasswordEditTextPreference, ProfileEditTextPreference, SummaryEditTextPreference}
|
||||||
@@ -64,7 +65,6 @@ import com.google.android.gms.ads.{AdRequest, AdSize, AdView}
|
|||||||
import com.google.android.gms.analytics.HitBuilders
|
import com.google.android.gms.analytics.HitBuilders
|
||||||
import com.google.zxing.integration.android.IntentIntegrator
|
import com.google.zxing.integration.android.IntentIntegrator
|
||||||
import com.nostra13.universalimageloader.core.download.BaseImageDownloader
|
import com.nostra13.universalimageloader.core.download.BaseImageDownloader
|
||||||
import de.keyboardsurfer.android.widget.crouton.{Configuration, Crouton, Style}
|
|
||||||
import net.simonvt.menudrawer.MenuDrawer
|
import net.simonvt.menudrawer.MenuDrawer
|
||||||
|
|
||||||
import scala.collection.mutable.{ArrayBuffer, ListBuffer}
|
import scala.collection.mutable.{ArrayBuffer, ListBuffer}
|
||||||
@@ -205,7 +205,6 @@ class Shadowsocks
|
|||||||
// Update the UI
|
// Update the UI
|
||||||
if (switchButton != null) switchButton.setEnabled(true)
|
if (switchButton != null) switchButton.setEnabled(true)
|
||||||
if (State.isAvailable(bgService.getState)) {
|
if (State.isAvailable(bgService.getState)) {
|
||||||
Crouton.cancelAllCroutons()
|
|
||||||
setPreferenceEnabled(enabled = true)
|
setPreferenceEnabled(enabled = true)
|
||||||
} else {
|
} else {
|
||||||
changeSwitch(checked = true)
|
changeSwitch(checked = true)
|
||||||
@@ -367,7 +366,7 @@ class Shadowsocks
|
|||||||
|
|
||||||
def isTextEmpty(s: String, msg: String): Boolean = {
|
def isTextEmpty(s: String, msg: String): Boolean = {
|
||||||
if (s == null || s.length <= 0) {
|
if (s == null || s.length <= 0) {
|
||||||
Crouton.makeText(this, msg, Style.ALERT).show()
|
new SnackBar.Builder(this).withMessage(msg).withStyle(SnackBar.Style.ALERT).show()
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
false
|
false
|
||||||
@@ -828,7 +827,6 @@ class Shadowsocks
|
|||||||
override def onDestroy() {
|
override def onDestroy() {
|
||||||
super.onDestroy()
|
super.onDestroy()
|
||||||
deattachService()
|
deattachService()
|
||||||
Crouton.cancelAllCroutons()
|
|
||||||
unregisterReceiver(preferenceReceiver)
|
unregisterReceiver(preferenceReceiver)
|
||||||
new BackupManager(this).dataChanged()
|
new BackupManager(this).dataChanged()
|
||||||
if (handler != null) {
|
if (handler != null) {
|
||||||
@@ -927,12 +925,12 @@ class Shadowsocks
|
|||||||
try {
|
try {
|
||||||
val port: Int = Integer.valueOf(text)
|
val port: Int = Integer.valueOf(text)
|
||||||
if (!low && port <= 1024) {
|
if (!low && port <= 1024) {
|
||||||
Crouton.makeText(this, R.string.port_alert, Style.ALERT).show()
|
new SnackBar.Builder(this).withMessageId(R.string.port_alert).withStyle(SnackBar.Style.ALERT).show()
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
case ex: Exception =>
|
case ex: Exception =>
|
||||||
Crouton.makeText(this, R.string.port_alert, Style.ALERT).show()
|
new SnackBar.Builder(this).withMessageId(R.string.port_alert).withStyle(SnackBar.Style.ALERT).show()
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
true
|
true
|
||||||
@@ -1014,15 +1012,12 @@ class Shadowsocks
|
|||||||
case State.STOPPED =>
|
case State.STOPPED =>
|
||||||
clearDialog()
|
clearDialog()
|
||||||
changeSwitch(checked = false)
|
changeSwitch(checked = false)
|
||||||
Crouton.cancelAllCroutons()
|
|
||||||
if (m != null) {
|
if (m != null) {
|
||||||
val style = new Style.Builder().setBackgroundColorValue(Style.holoRedLight).build()
|
new SnackBar.Builder(Shadowsocks.this)
|
||||||
val config = new Configuration.Builder()
|
.withMessage(getString(R.string.vpn_error).formatLocal(Locale.ENGLISH, m))
|
||||||
.setDuration(Configuration.DURATION_LONG)
|
.withActionMessageId(R.string.error)
|
||||||
.build()
|
.withStyle(SnackBar.Style.ALERT)
|
||||||
Crouton
|
.withDuration(SnackBar.LONG_SNACK)
|
||||||
.makeText(Shadowsocks.this, getString(R.string.vpn_error).formatLocal(Locale.ENGLISH, m), style)
|
|
||||||
.setConfiguration(config)
|
|
||||||
.show()
|
.show()
|
||||||
}
|
}
|
||||||
setPreferenceEnabled(enabled = true)
|
setPreferenceEnabled(enabled = true)
|
||||||
|
|||||||
Reference in New Issue
Block a user