Commit 2fa97be1 authored by Mygod's avatar Mygod

Add FABProgressCircle

parent 65fba3ff
...@@ -37,6 +37,7 @@ libraryDependencies ++= Seq( ...@@ -37,6 +37,7 @@ libraryDependencies ++= Seq(
"com.google.android.gms" % "play-services-analytics" % "8.1.0", "com.google.android.gms" % "play-services-analytics" % "8.1.0",
"com.android.support" % "support-v4" % "23.1.0", "com.android.support" % "support-v4" % "23.1.0",
"com.android.support" % "design" % "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.nostra13.universalimageloader" % "universal-image-loader" % "1.9.4",
"com.j256.ormlite" % "ormlite-core" % "4.48", "com.j256.ormlite" % "ormlite-core" % "4.48",
"com.j256.ormlite" % "ormlite-android" % "4.48" "com.j256.ormlite" % "ormlite-android" % "4.48"
......
...@@ -2,21 +2,24 @@ ...@@ -2,21 +2,24 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_height="match_parent" android:layout_width="match_parent" android:layout_height="match_parent"
tools:ignore="UnknownIdInLayout"> tools:ignore="UnknownIdInLayout" android:clipChildren="false">
<include layout="@layout/toolbar_light_dark" /> <include layout="@layout/toolbar_light_dark" />
<fragment android:name="com.github.shadowsocks.ShadowsocksSettings" <fragment android:name="com.github.shadowsocks.ShadowsocksSettings"
android:id="@android:id/content" android:layout_below="@+id/toolbar" android:id="@android:id/content" android:layout_below="@+id/toolbar"
android:layout_width="match_parent" android:layout_height="match_parent"/> android:layout_width="match_parent" android:layout_height="match_parent"/>
<android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" <com.github.jorgecastilloprz.FABProgressCircle android:id="@+id/fabProgressCircle" app:reusable="true"
android:layout_height="wrap_content" android:layout_width="wrap_content"
app:backgroundTint="@color/material_green_600" android:layout_height="wrap_content" android:elevation="6dp"
android:src="@drawable/ic_cloud_off" android:layout_alignBottom="@+id/toolbar"
android:layout_gravity="end|bottom" android:layout_alignParentRight="true"
android:layout_alignBottom="@+id/toolbar" android:layout_alignParentEnd="true"
android:layout_alignParentRight="true" android:layout_marginRight="16dp"
android:layout_alignParentEnd="true" android:layout_marginEnd="16dp"
android:layout_marginRight="16dp" android:layout_marginBottom="-28dp">
android:layout_marginEnd="16dp" <android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content"
android:layout_marginBottom="-28dp" app:elevation="6dp" android:layout_height="wrap_content"
app:pressedTranslationZ="6dp" app:borderWidth="0dp" /> app:backgroundTint="@color/material_green_600"
android:src="@drawable/ic_cloud_off"
app:pressedTranslationZ="6dp" app:borderWidth="0dp" />
</com.github.jorgecastilloprz.FABProgressCircle>
</RelativeLayout> </RelativeLayout>
...@@ -50,7 +50,7 @@ import android.content.res.AssetManager ...@@ -50,7 +50,7 @@ import android.content.res.AssetManager
import android.graphics.{Bitmap, Color, Typeface} import android.graphics.{Bitmap, Color, Typeface}
import android.net.{Uri, VpnService} import android.net.{Uri, VpnService}
import android.os._ 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.design.widget.{FloatingActionButton, Snackbar}
import android.support.v7.app.AppCompatActivity import android.support.v7.app.AppCompatActivity
import android.support.v7.widget.Toolbar import android.support.v7.widget.Toolbar
...@@ -58,6 +58,7 @@ import android.util.{DisplayMetrics, Log} ...@@ -58,6 +58,7 @@ import android.util.{DisplayMetrics, Log}
import android.view.{View, ViewGroup, ViewParent} import android.view.{View, ViewGroup, ViewParent}
import android.webkit.{WebView, WebViewClient} import android.webkit.{WebView, WebViewClient}
import android.widget._ import android.widget._
import com.github.jorgecastilloprz.FABProgressCircle
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.{DropDownPreference, PasswordEditTextPreference, ProfileEditTextPreference, SummaryEditTextPreference} import com.github.shadowsocks.preferences.{DropDownPreference, PasswordEditTextPreference, ProfileEditTextPreference, SummaryEditTextPreference}
...@@ -186,6 +187,7 @@ class Shadowsocks ...@@ -186,6 +187,7 @@ class Shadowsocks
// Variables // Variables
private var serviceStarted = false private var serviceStarted = false
var fab: FloatingActionButton = _ var fab: FloatingActionButton = _
var fabProgressCircle: FABProgressCircle = _
var progressDialog: ProgressDialog = _ var progressDialog: ProgressDialog = _
var progressTag = -1 var progressTag = -1
var state = State.INIT var state = State.INIT
...@@ -394,7 +396,6 @@ class Shadowsocks ...@@ -394,7 +396,6 @@ class Shadowsocks
} }
def prepareStartService() { def prepareStartService() {
showProgress(R.string.connecting)
Future { Future {
if (isVpnEnabled) { if (isVpnEnabled) {
val intent = VpnService.prepare(this) val intent = VpnService.prepare(this)
...@@ -485,6 +486,7 @@ class Shadowsocks ...@@ -485,6 +486,7 @@ class Shadowsocks
val tf: Typeface = Typefaces.get(this, "fonts/Iceland.ttf") val tf: Typeface = Typefaces.get(this, "fonts/Iceland.ttf")
if (tf != null) title.setTypeface(tf) if (tf != null) title.setTypeface(tf)
fab = findViewById(R.id.fab).asInstanceOf[FloatingActionButton] fab = findViewById(R.id.fab).asInstanceOf[FloatingActionButton]
fabProgressCircle = findViewById(R.id.fabProgressCircle).asInstanceOf[FABProgressCircle]
fab.setOnClickListener((v: View) => { fab.setOnClickListener((v: View) => {
serviceStarted = !serviceStarted serviceStarted = !serviceStarted
serviceStarted match { serviceStarted match {
...@@ -495,10 +497,12 @@ class Shadowsocks ...@@ -495,10 +497,12 @@ class Shadowsocks
changeSwitch(checked = false) changeSwitch(checked = false)
case false => case false =>
serviceStop() serviceStop()
} if (fab.isEnabled) {
if (fab.isEnabled) { fab.setEnabled(false)
fab.setEnabled(false) handler.postDelayed(() => {
handler.postDelayed(() => fab.setEnabled(true), 1000) fab.setEnabled(true)
}, 1000)
}
} }
}) })
toolbar.setNavigationIcon(R.drawable.ic_drawer) toolbar.setNavigationIcon(R.drawable.ic_drawer)
...@@ -1015,36 +1019,30 @@ class Shadowsocks ...@@ -1015,36 +1019,30 @@ class Shadowsocks
def onStateChanged(s: Int, m: String) { def onStateChanged(s: Int, m: String) {
handler.post(() => if (state != s) { handler.post(() => if (state != s) {
state = s s match {
state match {
case State.CONNECTING => case State.CONNECTING =>
if (progressDialog == null) { fab.setImageResource(R.drawable.ic_cloud_queue)
progressDialog = ProgressDialog fab.setEnabled(false)
.show(Shadowsocks.this, "", getString(R.string.connecting), true, true) fabProgressCircle.show()
progressTag = R.string.connecting
}
setPreferenceEnabled(enabled = false) setPreferenceEnabled(enabled = false)
case State.CONNECTED => case State.CONNECTED =>
if (progressTag == R.string.connecting) { if (state == State.CONNECTING) fabProgressCircle.beginFinalAnimation()
clearDialog() fab.setEnabled(true)
}
changeSwitch(checked = true) changeSwitch(checked = true)
setPreferenceEnabled(enabled = false) setPreferenceEnabled(enabled = false)
case State.STOPPED => case State.STOPPED =>
if (progressTag == R.string.stopping || progressTag == R.string.connecting) { if (state == State.STOPPING || state == State.CONNECTING) fabProgressCircle.hide()
clearDialog() fab.setEnabled(true)
}
changeSwitch(checked = false) changeSwitch(checked = false)
if (m != null) Snackbar.make(getWindow.getDecorView.findViewById(android.R.id.content), 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 getString(R.string.vpn_error).formatLocal(Locale.ENGLISH, m), Snackbar.LENGTH_LONG).show
setPreferenceEnabled(enabled = true) setPreferenceEnabled(enabled = true)
case State.STOPPING => case State.STOPPING =>
if (progressDialog == null) { fab.setImageResource(R.drawable.ic_cloud_queue)
progressDialog = ProgressDialog fab.setEnabled(false)
.show(Shadowsocks.this, "", getString(R.string.stopping), true, true) fabProgressCircle.show()
progressTag = R.string.stopping
}
} }
state = s
}) })
} }
......
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