Compare commits

...
5 Commits
Author SHA1 Message Date
Max Lv 5427e00012 fallback to gcc 2014-12-20 10:40:13 +08:00
Max Lv 7f226d3f0c replace crouton with snackbar 2014-12-19 17:32:00 +08:00
Max Lv ee3f3c2338 fix for clang 2014-12-19 13:54:38 +08:00
Max Lv 6ac90abbf7 update OpenSSL's header 2014-12-18 15:29:21 +08:00
Max Lv 2f553b156a fix #188 2014-12-18 14:33:32 +08:00
8 changed files with 32 additions and 26 deletions
+3 -1
View File
@@ -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"
+2 -2
View File
@@ -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"/>
+4 -2
View File
@@ -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
+2 -1
View File
@@ -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>
+2 -1
View File
@@ -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)