Commit 2fa97be1 authored by Mygod's avatar Mygod

Add FABProgressCircle

parent 65fba3ff
......@@ -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"
......
......@@ -2,21 +2,24 @@
<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"
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" />
<fragment android:name="com.github.shadowsocks.ShadowsocksSettings"
android:id="@android:id/content" android:layout_below="@+id/toolbar"
android:layout_width="match_parent" android:layout_height="match_parent"/>
<android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:backgroundTint="@color/material_green_600"
android:src="@drawable/ic_cloud_off"
android:layout_gravity="end|bottom"
android:layout_alignBottom="@+id/toolbar"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginRight="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="-28dp" app:elevation="6dp"
app:pressedTranslationZ="6dp" app:borderWidth="0dp" />
<com.github.jorgecastilloprz.FABProgressCircle android:id="@+id/fabProgressCircle" app:reusable="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:elevation="6dp"
android:layout_alignBottom="@+id/toolbar"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginRight="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="-28dp">
<android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:backgroundTint="@color/material_green_600"
android:src="@drawable/ic_cloud_off"
app:pressedTranslationZ="6dp" app:borderWidth="0dp" />
</com.github.jorgecastilloprz.FABProgressCircle>
</RelativeLayout>
......@@ -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
})
}
......
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