From 2fa97be12de68f9c54629ed203b9df488b84445f Mon Sep 17 00:00:00 2001 From: Mygod Date: Sun, 8 Nov 2015 16:14:45 +0800 Subject: [PATCH] Add FABProgressCircle --- build.sbt | 1 + src/main/res/layout/layout_main.xml | 29 ++++++------ .../com/github/shadowsocks/Shadowsocks.scala | 46 +++++++++---------- 3 files changed, 39 insertions(+), 37 deletions(-) diff --git a/build.sbt b/build.sbt index 2194c008..3abae4dd 100644 --- a/build.sbt +++ b/build.sbt @@ -37,6 +37,7 @@ libraryDependencies ++= Seq( "com.google.android.gms" % "play-services-analytics" % "8.1.0", "com.android.support" % "support-v4" % "23.1.0", "com.android.support" % "design" % "23.1.0", + "com.github.jorgecastilloprz" % "fabprogresscircle" % "1.01", "com.nostra13.universalimageloader" % "universal-image-loader" % "1.9.4", "com.j256.ormlite" % "ormlite-core" % "4.48", "com.j256.ormlite" % "ormlite-android" % "4.48" diff --git a/src/main/res/layout/layout_main.xml b/src/main/res/layout/layout_main.xml index 74a6db30..e73a5eae 100644 --- a/src/main/res/layout/layout_main.xml +++ b/src/main/res/layout/layout_main.xml @@ -2,21 +2,24 @@ + tools:ignore="UnknownIdInLayout" android:clipChildren="false"> - + + + diff --git a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala index e9250b23..74ff0780 100644 --- a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala +++ b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala @@ -50,7 +50,7 @@ import android.content.res.AssetManager import android.graphics.{Bitmap, Color, Typeface} import android.net.{Uri, VpnService} import android.os._ -import android.preference.{PreferenceManager, SwitchPreference, Preference} +import android.preference.{Preference, PreferenceManager, SwitchPreference} import android.support.design.widget.{FloatingActionButton, Snackbar} import android.support.v7.app.AppCompatActivity import android.support.v7.widget.Toolbar @@ -58,6 +58,7 @@ import android.util.{DisplayMetrics, Log} import android.view.{View, ViewGroup, ViewParent} import android.webkit.{WebView, WebViewClient} import android.widget._ +import com.github.jorgecastilloprz.FABProgressCircle import com.github.shadowsocks.aidl.{IShadowsocksService, IShadowsocksServiceCallback} import com.github.shadowsocks.database._ import com.github.shadowsocks.preferences.{DropDownPreference, PasswordEditTextPreference, ProfileEditTextPreference, SummaryEditTextPreference} @@ -186,6 +187,7 @@ class Shadowsocks // Variables private var serviceStarted = false var fab: FloatingActionButton = _ + var fabProgressCircle: FABProgressCircle = _ var progressDialog: ProgressDialog = _ var progressTag = -1 var state = State.INIT @@ -394,7 +396,6 @@ class Shadowsocks } def prepareStartService() { - showProgress(R.string.connecting) Future { if (isVpnEnabled) { val intent = VpnService.prepare(this) @@ -485,6 +486,7 @@ class Shadowsocks val tf: Typeface = Typefaces.get(this, "fonts/Iceland.ttf") if (tf != null) title.setTypeface(tf) fab = findViewById(R.id.fab).asInstanceOf[FloatingActionButton] + fabProgressCircle = findViewById(R.id.fabProgressCircle).asInstanceOf[FABProgressCircle] fab.setOnClickListener((v: View) => { serviceStarted = !serviceStarted serviceStarted match { @@ -495,10 +497,12 @@ class Shadowsocks changeSwitch(checked = false) case false => serviceStop() - } - if (fab.isEnabled) { - fab.setEnabled(false) - handler.postDelayed(() => fab.setEnabled(true), 1000) + if (fab.isEnabled) { + fab.setEnabled(false) + handler.postDelayed(() => { + fab.setEnabled(true) + }, 1000) + } } }) toolbar.setNavigationIcon(R.drawable.ic_drawer) @@ -1015,36 +1019,30 @@ class Shadowsocks def onStateChanged(s: Int, m: String) { handler.post(() => if (state != s) { - state = s - state match { + s match { case State.CONNECTING => - if (progressDialog == null) { - progressDialog = ProgressDialog - .show(Shadowsocks.this, "", getString(R.string.connecting), true, true) - progressTag = R.string.connecting - } + fab.setImageResource(R.drawable.ic_cloud_queue) + fab.setEnabled(false) + fabProgressCircle.show() setPreferenceEnabled(enabled = false) case State.CONNECTED => - if (progressTag == R.string.connecting) { - clearDialog() - } + if (state == State.CONNECTING) fabProgressCircle.beginFinalAnimation() + fab.setEnabled(true) changeSwitch(checked = true) setPreferenceEnabled(enabled = false) case State.STOPPED => - if (progressTag == R.string.stopping || progressTag == R.string.connecting) { - clearDialog() - } + if (state == State.STOPPING || state == State.CONNECTING) fabProgressCircle.hide() + fab.setEnabled(true) changeSwitch(checked = false) if (m != null) Snackbar.make(getWindow.getDecorView.findViewById(android.R.id.content), getString(R.string.vpn_error).formatLocal(Locale.ENGLISH, m), Snackbar.LENGTH_LONG).show setPreferenceEnabled(enabled = true) case State.STOPPING => - if (progressDialog == null) { - progressDialog = ProgressDialog - .show(Shadowsocks.this, "", getString(R.string.stopping), true, true) - progressTag = R.string.stopping - } + fab.setImageResource(R.drawable.ic_cloud_queue) + fab.setEnabled(false) + fabProgressCircle.show() } + state = s }) }