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) {