From 6c047eca8ed4a17055ec1f951e0e6316e2af78bf Mon Sep 17 00:00:00 2001 From: Mygod Date: Mon, 22 Aug 2016 15:52:45 +0800 Subject: [PATCH] Add error message if failed --- .../shadowsocks/ShadowsocksSettings.scala | 5 +++- .../shadowsocks/utils/TcpFastOpen.scala | 27 ++++++++++++++----- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala index bcadcbb4..c113bd61 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala @@ -7,6 +7,7 @@ import android.content.{Intent, SharedPreferences} import android.net.Uri import android.os.Bundle import android.preference.{Preference, PreferenceFragment, SwitchPreference} +import android.support.design.widget.Snackbar import android.support.v7.app.AlertDialog import android.webkit.{WebView, WebViewClient} import com.github.shadowsocks.ShadowsocksApplication.app @@ -158,7 +159,9 @@ class ShadowsocksSettings extends PreferenceFragment with OnSharedPreferenceChan tfo.setChecked(TcpFastOpen.sendEnabled) tfo.setOnPreferenceChangeListener((_, v) => { val value = v.asInstanceOf[Boolean] - TcpFastOpen.enabled(value) + val result = TcpFastOpen.enabled(value) + if (result != null && result != "Success.") + Snackbar.make(activity.findViewById(android.R.id.content), result, Snackbar.LENGTH_LONG).show() value == TcpFastOpen.sendEnabled }) if (!TcpFastOpen.supported) { diff --git a/src/main/scala/com/github/shadowsocks/utils/TcpFastOpen.scala b/src/main/scala/com/github/shadowsocks/utils/TcpFastOpen.scala index 106a0ac8..687e3935 100644 --- a/src/main/scala/com/github/shadowsocks/utils/TcpFastOpen.scala +++ b/src/main/scala/com/github/shadowsocks/utils/TcpFastOpen.scala @@ -4,6 +4,8 @@ import java.io.File import eu.chainfire.libsuperuser.Shell +import scala.collection.JavaConverters._ + /** * @author Mygod */ @@ -26,11 +28,24 @@ object TcpFastOpen { file.canRead && (Utils.readAllLines(file).toInt & 1) > 0 } - def enabled(value: Boolean) = if (supported) { + def enabled(value: Boolean) = if (true) { val fastopen = "echo " + (if (value) 3 else 0) + " > /proc/sys/net/ipv4/tcp_fastopen" - Shell.SU.run(Array( - "mount -o remount,rw /system && " + fastopen + " && echo '#!/system/bin/sh\n" + fastopen + - "' > /etc/init.d/tcp_fastopen && chmod 755 /etc/init.d/tcp_fastopen", - "mount -o remount,ro /system")) - } + Shell.run("su", Array( + "if " + fastopen + "; then", + " success=-1", + " if mount -o remount,rw /system; then", + " echo '#!/system/bin/sh", + fastopen + "' > /etc/init.d/tcp_fastopen && chmod 755 /etc/init.d/tcp_fastopen", + " success=$?", + " mount -o remount,ro /system", + " fi", + " if [ $success -eq 0 ]; then", + " echo Success.", + " else", + " echo Warning: Unable to create boot script.", + " fi", + "else", + " echo Failed.", + "fi"), null, true).asScala.mkString("\n") + } else null }