Commit 75334ad9 authored by Max Lv's avatar Max Lv

fix a UI issue

parent 7e7a61c6
...@@ -5,8 +5,8 @@ import org.scalasbt.androidplugin._ ...@@ -5,8 +5,8 @@ import org.scalasbt.androidplugin._
import org.scalasbt.androidplugin.AndroidKeys._ import org.scalasbt.androidplugin.AndroidKeys._
object App { object App {
val version = "1.6.2" val version = "1.6.3"
val versionCode = 32 val versionCode = 33
} }
object General { object General {
......
...@@ -42,8 +42,7 @@ import android.content._ ...@@ -42,8 +42,7 @@ import android.content._
import android.content.res.AssetManager import android.content.res.AssetManager
import android.graphics.Typeface import android.graphics.Typeface
import android.os._ import android.os._
import android.preference.Preference import android.preference.{CheckBoxPreference, Preference, PreferenceManager}
import android.preference.PreferenceManager
import android.util.Log import android.util.Log
import android.view.KeyEvent import android.view.KeyEvent
import android.widget.CompoundButton import android.widget.CompoundButton
...@@ -67,6 +66,7 @@ import android.net.{Uri, VpnService} ...@@ -67,6 +66,7 @@ import android.net.{Uri, VpnService}
import android.webkit.{WebViewClient, WebView} import android.webkit.{WebViewClient, WebView}
import android.app.backup.BackupManager import android.app.backup.BackupManager
import scala.concurrent.ops._ import scala.concurrent.ops._
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
object Shadowsocks { object Shadowsocks {
...@@ -89,7 +89,7 @@ object Shadowsocks { ...@@ -89,7 +89,7 @@ object Shadowsocks {
private def setPreferenceEnabled() { private def setPreferenceEnabled() {
val state = getActivity.asInstanceOf[Shadowsocks].state val state = getActivity.asInstanceOf[Shadowsocks].state
val enabled: Boolean = state != State.CONNECTED && state != State.CONNECTING val enabled = state != State.CONNECTED && state != State.CONNECTING
for (name <- PROXY_PREFS) { for (name <- PROXY_PREFS) {
val pref: Preference = findPreference(name) val pref: Preference = findPreference(name)
if (pref != null) { if (pref != null) {
...@@ -125,7 +125,7 @@ object Shadowsocks { ...@@ -125,7 +125,7 @@ object Shadowsocks {
} }
} }
class FeatureFragment extends UnifiedPreferenceFragment { class FeatureFragment extends UnifiedPreferenceFragment with OnSharedPreferenceChangeListener{
var receiver: BroadcastReceiver = null var receiver: BroadcastReceiver = null
...@@ -135,14 +135,11 @@ object Shadowsocks { ...@@ -135,14 +135,11 @@ object Shadowsocks {
for (name <- Shadowsocks.FEATRUE_PREFS) { for (name <- Shadowsocks.FEATRUE_PREFS) {
val pref: Preference = findPreference(name) val pref: Preference = findPreference(name)
if (pref != null) { if (pref != null) {
val settings = PreferenceManager.getDefaultSharedPreferences(getActivity)
val status = getActivity.getSharedPreferences(Key.status, Context.MODE_PRIVATE) val status = getActivity.getSharedPreferences(Key.status, Context.MODE_PRIVATE)
val isRoot = status.getBoolean(Key.isRoot, false) val isRoot = status.getBoolean(Key.isRoot, false)
if (name == Key.isAutoConnect || name == Key.isGlobalProxy) { if (Seq(Key.isAutoConnect, Key.isGlobalProxy,
pref.setEnabled(isRoot) Key.isBypassApps, Key.proxyedApps).contains(name)) {
} else if ((name == Key.isBypassApps) || (name == Key.proxyedApps)) { pref.setEnabled(enabled && isRoot)
val isGlobalProxy: Boolean = settings.getBoolean(Key.isGlobalProxy, false)
pref.setEnabled(enabled && isRoot && !isGlobalProxy)
} else { } else {
pref.setEnabled(enabled) pref.setEnabled(enabled)
} }
...@@ -175,6 +172,10 @@ object Shadowsocks { ...@@ -175,6 +172,10 @@ object Shadowsocks {
override def onPause() { override def onPause() {
super.onPause() super.onPause()
} }
def onSharedPreferenceChanged(prefs: SharedPreferences, key: String) {
if (key == Key.isGlobalProxy) setPreferenceEnabled()
}
} }
} }
...@@ -203,7 +204,8 @@ object Typefaces { ...@@ -203,7 +204,8 @@ object Typefaces {
class Shadowsocks class Shadowsocks
extends UnifiedSherlockPreferenceActivity extends UnifiedSherlockPreferenceActivity
with CompoundButton.OnCheckedChangeListener { with CompoundButton.OnCheckedChangeListener
with OnSharedPreferenceChangeListener {
private val MSG_CRASH_RECOVER: Int = 1 private val MSG_CRASH_RECOVER: Int = 1
private val MSG_INITIAL_FINISH: Int = 2 private val MSG_INITIAL_FINISH: Int = 2
...@@ -268,14 +270,21 @@ class Shadowsocks ...@@ -268,14 +270,21 @@ class Shadowsocks
private def copyFile(in: InputStream, out: OutputStream) { private def copyFile(in: InputStream, out: OutputStream) {
val buffer: Array[Byte] = new Array[Byte](1024) val buffer: Array[Byte] = new Array[Byte](1024)
var read: Int = 0 var read: Int = 0
while ((({ while ({
read = in.read(buffer) read = in.read(buffer)
read read
})) != -1) { } != -1) {
out.write(buffer, 0, read) out.write(buffer, 0, read)
} }
} }
def onSharedPreferenceChanged(prefs: SharedPreferences, key: String) {
if (key == Key.isGlobalProxy) {
val enabled = state != State.CONNECTED && state != State.CONNECTING
setPreferenceEnabled(enabled)
}
}
private def crash_recovery() { private def crash_recovery() {
val sb = new StringBuilder val sb = new StringBuilder
...@@ -453,13 +462,13 @@ class Shadowsocks ...@@ -453,13 +462,13 @@ class Shadowsocks
switchButton.setEnabled(false) switchButton.setEnabled(false)
Crouton.makeText(Shadowsocks.this, R.string.vpn_status, style).show() Crouton.makeText(Shadowsocks.this, R.string.vpn_status, style).show()
} }
setPreferenceEnabled(false) setPreferenceEnabled(enabled = false)
onStateChanged(State.CONNECTED, null) onStateChanged(State.CONNECTED, null)
} else { } else {
switchButton.setEnabled(true) switchButton.setEnabled(true)
switchButton.setChecked(false) switchButton.setChecked(false)
Crouton.cancelAllCroutons() Crouton.cancelAllCroutons()
setPreferenceEnabled(true) setPreferenceEnabled(enabled = true)
if (status.getBoolean(Key.isRunning, false)) { if (status.getBoolean(Key.isRunning, false)) {
spawn { spawn {
crash_recovery() crash_recovery()
...@@ -474,21 +483,19 @@ class Shadowsocks ...@@ -474,21 +483,19 @@ class Shadowsocks
} }
private def setPreferenceEnabled(enabled: Boolean) { private def setPreferenceEnabled(enabled: Boolean) {
val isRoot = status.getBoolean(Key.isRoot, false)
for (name <- Shadowsocks.PROXY_PREFS) { for (name <- Shadowsocks.PROXY_PREFS) {
val pref: Preference = findPreference(name) val pref = findPreference(name)
if (pref != null) { if (pref != null) {
pref.setEnabled(enabled) pref.setEnabled(enabled)
} }
} }
for (name <- Shadowsocks.FEATRUE_PREFS) { for (name <- Shadowsocks.FEATRUE_PREFS) {
val pref: Preference = findPreference(name) val pref = findPreference(name)
if (pref != null) { if (pref != null) {
val isRoot = status.getBoolean(Key.isRoot, false) if (Seq(Key.isAutoConnect, Key.isGlobalProxy,
if (name == Key.isAutoConnect || name == Key.isGlobalProxy) { Key.isBypassApps, Key.proxyedApps).contains(name)) {
pref.setEnabled(isRoot) pref.setEnabled(enabled && isRoot)
} else if ((name == Key.isBypassApps) || (name == Key.proxyedApps)) {
val isGlobalProxy: Boolean = settings.getBoolean(Key.isGlobalProxy, false)
pref.setEnabled(enabled && isRoot && !isGlobalProxy)
} else { } else {
pref.setEnabled(enabled) pref.setEnabled(enabled)
} }
...@@ -511,7 +518,7 @@ class Shadowsocks ...@@ -511,7 +518,7 @@ class Shadowsocks
super.onDestroy() super.onDestroy()
Crouton.cancelAllCroutons() Crouton.cancelAllCroutons()
unregisterReceiver(receiver) unregisterReceiver(receiver)
(new BackupManager(this)).dataChanged() new BackupManager(this).dataChanged()
} }
def reset() { def reset() {
...@@ -673,12 +680,12 @@ class Shadowsocks ...@@ -673,12 +680,12 @@ class Shadowsocks
progressDialog = ProgressDialog progressDialog = ProgressDialog
.show(Shadowsocks.this, "", getString(R.string.connecting), true, true) .show(Shadowsocks.this, "", getString(R.string.connecting), true, true)
} }
setPreferenceEnabled(false) setPreferenceEnabled(enabled = false)
} }
case State.CONNECTED => { case State.CONNECTED => {
clearDialog() clearDialog()
if (!switchButton.isChecked) switchButton.setChecked(true) if (!switchButton.isChecked) switchButton.setChecked(true)
setPreferenceEnabled(false) setPreferenceEnabled(enabled = false)
} }
case State.STOPPED => { case State.STOPPED => {
clearDialog() clearDialog()
...@@ -697,7 +704,7 @@ class Shadowsocks ...@@ -697,7 +704,7 @@ class Shadowsocks
.makeText(Shadowsocks.this, getString(R.string.vpn_error).format(m), style) .makeText(Shadowsocks.this, getString(R.string.vpn_error).format(m), style)
.show() .show()
} }
setPreferenceEnabled(true) setPreferenceEnabled(enabled = true)
} }
} }
sendBroadcast(new Intent(Action.UPDATE_FRAGMENT)) sendBroadcast(new Intent(Action.UPDATE_FRAGMENT))
......
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