From 9966368ad64a8e92fe43f6274257567898ef1469 Mon Sep 17 00:00:00 2001 From: Mygod Date: Sun, 8 Nov 2015 16:40:54 +0800 Subject: [PATCH] Add long press toast for FAB --- src/main/res/values-zh/strings.xml | 2 +- src/main/res/values/strings.xml | 2 +- .../com/github/shadowsocks/Shadowsocks.scala | 5 +++++ .../com/github/shadowsocks/utils/Utils.scala | 22 ++++++++++++++++++- 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/main/res/values-zh/strings.xml b/src/main/res/values-zh/strings.xml index 809d3219..195090d5 100755 --- a/src/main/res/values-zh/strings.xml +++ b/src/main/res/values-zh/strings.xml @@ -53,7 +53,7 @@ 端口号不能为空 代理服务器地址不能为空 检测到意外退出,状态已被重置。 - 正在连接... + 连接 正在初始化... 重置中... 正在加载... diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index a7f1f2c7..0fa48668 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -74,7 +74,7 @@ Proxy should not be empty An unexpected exit detected, the context has been reset. - Connecting… + Connect Initializing… Resetting… Loading… diff --git a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala index 74ff0780..3763031b 100644 --- a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala +++ b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala @@ -505,6 +505,11 @@ class Shadowsocks } } }) + fab.setOnLongClickListener((v: View) => { + Utils.positionToast(Toast.makeText(this, if (serviceStarted) R.string.stop else R.string.connect, + Toast.LENGTH_SHORT), fab, getWindow, 0, Utils.dpToPx(this, 8).toInt).show + true + }) toolbar.setNavigationIcon(R.drawable.ic_drawer) toolbar.setNavigationOnClickListener((v: View) => drawer.toggleMenu()) title.setOnLongClickListener((v: View) => { diff --git a/src/main/scala/com/github/shadowsocks/utils/Utils.scala b/src/main/scala/com/github/shadowsocks/utils/Utils.scala index e455effc..f9f7fc2b 100644 --- a/src/main/scala/com/github/shadowsocks/utils/Utils.scala +++ b/src/main/scala/com/github/shadowsocks/utils/Utils.scala @@ -50,7 +50,10 @@ import android.graphics.drawable.{BitmapDrawable, Drawable} import android.os.Build import android.provider.Settings import android.support.v4.content.ContextCompat -import android.util.{Base64, Log} +import android.util.{DisplayMetrics, Base64, Log} +import android.view.View.MeasureSpec +import android.view.{Gravity, View, Window} +import android.widget.Toast import com.github.shadowsocks.BuildConfig import org.xbill.DNS._ @@ -126,6 +129,23 @@ object Utils { bitmap } + // Based on: http://stackoverflow.com/a/21026866/2245107 + def positionToast(toast: Toast, view: View, window: Window, offsetX: Int = 0, offsetY: Int = 0) = { + val rect = new Rect + window.getDecorView.getWindowVisibleDisplayFrame(rect) + val viewLocation = new Array[Int](2) + view.getLocationInWindow(viewLocation) + val metrics = new DisplayMetrics + window.getWindowManager.getDefaultDisplay.getMetrics(metrics) + val toastView = toast.getView + toastView.measure(MeasureSpec.makeMeasureSpec(metrics.widthPixels, MeasureSpec.UNSPECIFIED), + MeasureSpec.makeMeasureSpec(metrics.heightPixels, MeasureSpec.UNSPECIFIED)) + toast.setGravity(Gravity.LEFT | Gravity.TOP, + viewLocation(0) - rect.left + (view.getWidth - toast.getView.getMeasuredWidth) / 2 + offsetX, + viewLocation(1) - rect.top + view.getHeight + offsetY) + toast + } + // Blocked > 3 seconds def toggleAirplaneMode(context: Context) { if (Build.VERSION.SDK_INT >= 17) {