Commit ba8b5162 authored by Max Lv's avatar Max Lv

refine the switch button

parent 36cdcdac
......@@ -336,8 +336,8 @@ class Shadowsocks
.show()
switchButton.setEnabled(false)
}
switchButton.setChecked(true)
onStateChanged(State.CONNECTED, null)
changeSwitch(checked = true)
onStateChanged(bgService.getState, null)
setPreferenceEnabled(enabled = false)
}
// set the listener
......@@ -370,6 +370,16 @@ class Shadowsocks
}
}
private def changeSwitch (checked: Boolean) {
switchButton.setChecked(checked)
if (switchButton.isEnabled) {
switchButton.setEnabled(false)
handler.postDelayed(new Runnable {
override def run() { switchButton.setEnabled(true) }
}, 1000)
}
}
private def showProgress(msg: String): Handler = {
clearDialog()
progressDialog = ProgressDialog.show(this, "", msg, true, false)
......@@ -458,14 +468,23 @@ class Shadowsocks
version
}
private def isTextEmpty(s: String, msg: String): Boolean = {
def isTextEmpty(s: String, msg: String): Boolean = {
if (s == null || s.length <= 0) {
showDialog(msg)
Crouton.makeText(this, msg, Style.ALERT).show()
return true
}
false
}
def cancelStart() {
handler.postDelayed(new Runnable {
override def run() {
clearDialog()
changeSwitch(checked = false)
}
}, 1000)
}
def prepareStartService() {
showProgress(getString(R.string.connecting))
spawn {
......@@ -478,7 +497,7 @@ class Shadowsocks
}
} else {
if (!serviceStart) {
switchButton.setChecked(false)
cancelStart()
}
}
}
......@@ -492,6 +511,12 @@ class Shadowsocks
case false =>
serviceStop()
}
if (switchButton.isEnabled) {
switchButton.setEnabled(false)
handler.postDelayed(new Runnable {
override def run() { switchButton.setEnabled(true) }
}, 1000)
}
}
}
......@@ -920,11 +945,10 @@ class Shadowsocks
case Activity.RESULT_OK =>
prepared = true
if (!serviceStart) {
switchButton.setChecked(false)
cancelStart()
}
case _ =>
clearDialog()
switchButton.setChecked(false)
cancelStart()
Log.e(Shadowsocks.TAG, "Failed to start VpnService")
}
}
......@@ -946,24 +970,35 @@ class Shadowsocks
if (bgService != null) bgService.stop()
}
/** Called when connect button is clicked. */
def serviceStart: Boolean = {
def checkText(key: String): Boolean = {
val text = settings.getString(key, "")
!isTextEmpty(text, getString(R.string.proxy_empty))
}
val proxy = settings.getString(Key.proxy, "")
if (isTextEmpty(proxy, getString(R.string.proxy_empty))) return false
val portText = settings.getString(Key.localPort, "")
if (isTextEmpty(portText, getString(R.string.port_empty))) return false
def checkNumber(key: String): Boolean = {
val text = settings.getString(key, "")
if (isTextEmpty(text, getString(R.string.port_empty))) return false
try {
val port: Int = Integer.valueOf(portText)
val port: Int = Integer.valueOf(text)
if (port <= 1024) {
this.showDialog(getString(R.string.port_alert))
Crouton.makeText(this, R.string.port_alert, Style.ALERT).show()
return false
}
} catch {
case ex: Exception =>
this.showDialog(getString(R.string.port_alert))
Crouton.makeText(this, R.string.port_alert, Style.ALERT).show()
return false
}
true
}
/** Called when connect button is clicked. */
def serviceStart: Boolean = {
if (!checkText(Key.proxy)) return false
if (!checkText(Key.sitekey)) return false
if (!checkNumber(Key.localPort)) return false
if (!checkNumber(Key.remotePort)) return false
if (bgService == null) return false
......@@ -973,7 +1008,7 @@ class Shadowsocks
val style = new Style.Builder().setBackgroundColorValue(Style.holoBlueLight).build()
val config = new Configuration.Builder().setDuration(Configuration.DURATION_LONG).build()
Crouton.makeText(Shadowsocks.this, R.string.vpn_status, style).setConfiguration(config).show()
switchButton.setEnabled(false)
changeSwitch(checked = false)
}
true
}
......@@ -1010,20 +1045,6 @@ class Shadowsocks
.show()
}
private def showDialog(msg: String) {
val builder: AlertDialog.Builder = new AlertDialog.Builder(this)
builder
.setMessage(msg)
.setCancelable(false)
.setNegativeButton(getString(R.string.ok_iknow), new DialogInterface.OnClickListener {
def onClick(dialog: DialogInterface, id: Int) {
dialog.cancel()
}
})
val alert: AlertDialog = builder.create
alert.show()
}
def clearDialog() {
if (progressDialog != null) {
progressDialog.dismiss()
......@@ -1045,13 +1066,13 @@ class Shadowsocks
setPreferenceEnabled(enabled = false)
case State.CONNECTED =>
clearDialog()
if (!switchButton.isChecked) switchButton.setChecked(true)
if (!switchButton.isChecked) changeSwitch(checked = true)
setPreferenceEnabled(enabled = false)
case State.STOPPED =>
clearDialog()
if (switchButton.isChecked) {
switchButton.setEnabled(true)
switchButton.setChecked(false)
changeSwitch(checked = false)
Crouton.cancelAllCroutons()
}
if (m != null) {
......
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