Commit d5c1455a authored by Mygod's avatar Mygod

Replace Toast.position with TooltipCompat

parent 9fd86fe8
...@@ -38,11 +38,11 @@ import android.support.v7.app.AlertDialog ...@@ -38,11 +38,11 @@ import android.support.v7.app.AlertDialog
import android.support.v7.app.AppCompatActivity import android.support.v7.app.AppCompatActivity
import android.support.v7.content.res.AppCompatResources import android.support.v7.content.res.AppCompatResources
import android.support.v7.preference.PreferenceDataStore import android.support.v7.preference.PreferenceDataStore
import android.support.v7.widget.TooltipCompat
import android.text.TextUtils import android.text.TextUtils
import android.util.Log import android.util.Log
import android.view.View import android.view.View
import android.widget.TextView import android.widget.TextView
import android.widget.Toast
import com.github.jorgecastilloprz.FABProgressCircle import com.github.jorgecastilloprz.FABProgressCircle
import com.github.shadowsocks.App.Companion.app import com.github.shadowsocks.App.Companion.app
import com.github.shadowsocks.acl.Acl import com.github.shadowsocks.acl.Acl
...@@ -57,7 +57,6 @@ import com.github.shadowsocks.database.ProfileManager ...@@ -57,7 +57,6 @@ import com.github.shadowsocks.database.ProfileManager
import com.github.shadowsocks.preference.DataStore import com.github.shadowsocks.preference.DataStore
import com.github.shadowsocks.preference.OnPreferenceDataStoreChangeListener import com.github.shadowsocks.preference.OnPreferenceDataStoreChangeListener
import com.github.shadowsocks.utils.Key import com.github.shadowsocks.utils.Key
import com.github.shadowsocks.utils.position
import com.github.shadowsocks.utils.responseLength import com.github.shadowsocks.utils.responseLength
import com.github.shadowsocks.utils.thread import com.github.shadowsocks.utils.thread
import com.mikepenz.crossfader.Crossfader import com.mikepenz.crossfader.Crossfader
...@@ -165,8 +164,12 @@ class MainActivity : AppCompatActivity(), ShadowsocksConnection.Interface, Drawe ...@@ -165,8 +164,12 @@ class MainActivity : AppCompatActivity(), ShadowsocksConnection.Interface, Drawe
} }
} }
this.state = state this.state = state
if (state == BaseService.CONNECTED) fab.backgroundTintList = greenTint else { if (state == BaseService.CONNECTED) {
fab.backgroundTintList = greenTint
TooltipCompat.setTooltipText(fab, getString(R.string.stop))
} else {
fab.backgroundTintList = greyTint fab.backgroundTintList = greyTint
TooltipCompat.setTooltipText(fab, getString(R.string.connect))
updateTraffic(-1, 0, 0, 0, 0) updateTraffic(-1, 0, 0, 0, 0)
testCount += 1 // suppress previous test messages testCount += 1 // suppress previous test messages
} }
...@@ -329,13 +332,6 @@ class MainActivity : AppCompatActivity(), ShadowsocksConnection.Interface, Drawe ...@@ -329,13 +332,6 @@ class MainActivity : AppCompatActivity(), ShadowsocksConnection.Interface, Drawe
} else app.startService() } else app.startService()
} }
} }
fab.setOnLongClickListener {
Toast.makeText(this, if (state == BaseService.CONNECTED) R.string.stop else R.string.connect,
Toast.LENGTH_SHORT)
.position(fab, window, 0, resources.getDimensionPixelOffset(R.dimen.margin_small))
.show()
true
}
changeState(BaseService.IDLE) // reset everything to init state changeState(BaseService.IDLE) // reset everything to init state
app.handler.post { connection.connect() } app.handler.post { connection.connect() }
......
...@@ -46,7 +46,6 @@ import com.github.shadowsocks.database.ProfileManager ...@@ -46,7 +46,6 @@ import com.github.shadowsocks.database.ProfileManager
import com.github.shadowsocks.plugin.PluginConfiguration import com.github.shadowsocks.plugin.PluginConfiguration
import com.github.shadowsocks.preference.DataStore import com.github.shadowsocks.preference.DataStore
import com.github.shadowsocks.utils.Action import com.github.shadowsocks.utils.Action
import com.github.shadowsocks.utils.position
import com.github.shadowsocks.widget.UndoSnackbarManager import com.github.shadowsocks.widget.UndoSnackbarManager
import com.google.android.gms.ads.AdRequest import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.AdSize import com.google.android.gms.ads.AdSize
...@@ -112,7 +111,7 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener { ...@@ -112,7 +111,7 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener {
} }
inner class ProfileViewHolder(view: View) : RecyclerView.ViewHolder(view), inner class ProfileViewHolder(view: View) : RecyclerView.ViewHolder(view),
View.OnClickListener, View.OnLongClickListener, PopupMenu.OnMenuItemClickListener { View.OnClickListener, PopupMenu.OnMenuItemClickListener {
internal lateinit var item: Profile internal lateinit var item: Profile
private val text1 = itemView.findViewById<TextView>(android.R.id.text1) private val text1 = itemView.findViewById<TextView>(android.R.id.text1)
...@@ -123,7 +122,7 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener { ...@@ -123,7 +122,7 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener {
init { init {
edit.setOnClickListener { startConfig(item.id) } edit.setOnClickListener { startConfig(item.id) }
edit.setOnLongClickListener(this) TooltipCompat.setTooltipText(edit, edit.contentDescription)
itemView.setOnClickListener(this) itemView.setOnClickListener(this)
val share = itemView.findViewById<View>(R.id.share) val share = itemView.findViewById<View>(R.id.share)
share.setOnClickListener { share.setOnClickListener {
...@@ -132,7 +131,7 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener { ...@@ -132,7 +131,7 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener {
popup.setOnMenuItemClickListener(this) popup.setOnMenuItemClickListener(this)
popup.show() popup.show()
} }
share.setOnLongClickListener(this) TooltipCompat.setTooltipText(share, share.contentDescription)
} }
fun bind(item: Profile) { fun bind(item: Profile) {
...@@ -202,12 +201,6 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener { ...@@ -202,12 +201,6 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener {
} }
} }
override fun onLongClick(view: View): Boolean {
Toast.makeText(activity, view.contentDescription, Toast.LENGTH_SHORT).position(view, activity!!.window,
0, resources.getDimensionPixelOffset(R.dimen.margin_small)).show()
return true
}
override fun onMenuItemClick(item: MenuItem): Boolean = when (item.itemId) { override fun onMenuItemClick(item: MenuItem): Boolean = when (item.itemId) {
R.id.action_qr_code_nfc -> { R.id.action_qr_code_nfc -> {
fragmentManager!!.beginTransaction().add(QRCodeDialog(this.item.toString()), "") fragmentManager!!.beginTransaction().add(QRCodeDialog(this.item.toString()), "")
......
...@@ -3,17 +3,11 @@ package com.github.shadowsocks.utils ...@@ -3,17 +3,11 @@ package com.github.shadowsocks.utils
import android.content.BroadcastReceiver import android.content.BroadcastReceiver
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.graphics.Rect
import android.os.Build import android.os.Build
import android.support.v4.app.Fragment import android.support.v4.app.Fragment
import android.support.v4.app.FragmentManager import android.support.v4.app.FragmentManager
import android.support.v7.util.SortedList import android.support.v7.util.SortedList
import android.util.DisplayMetrics
import android.util.TypedValue import android.util.TypedValue
import android.view.Gravity
import android.view.View
import android.view.Window
import android.widget.Toast
import com.github.shadowsocks.App.Companion.app import com.github.shadowsocks.App.Companion.app
import java.lang.reflect.InvocationTargetException import java.lang.reflect.InvocationTargetException
import java.net.InetAddress import java.net.InetAddress
...@@ -59,25 +53,6 @@ fun thread(start: Boolean = true, isDaemon: Boolean = false, contextClassLoader: ...@@ -59,25 +53,6 @@ fun thread(start: Boolean = true, isDaemon: Boolean = false, contextClassLoader:
val URLConnection.responseLength: Long val URLConnection.responseLength: Long
get() = if (Build.VERSION.SDK_INT >= 24) contentLengthLong else contentLength.toLong() get() = if (Build.VERSION.SDK_INT >= 24) contentLengthLong else contentLength.toLong()
/**
* Based on: http://stackoverflow.com/a/21026866/2245107
*/
fun Toast.position(view: View, window: Window, offsetX: Int = 0, offsetY: Int = 0): Toast {
val rect = Rect()
window.decorView.getWindowVisibleDisplayFrame(rect)
val viewLocation = IntArray(2)
view.getLocationInWindow(viewLocation)
val metrics = DisplayMetrics()
window.windowManager.defaultDisplay.getMetrics(metrics)
val toastView = this.view
toastView.measure(View.MeasureSpec.makeMeasureSpec(metrics.widthPixels, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(metrics.heightPixels, View.MeasureSpec.UNSPECIFIED))
setGravity(Gravity.START or Gravity.TOP,
viewLocation[0] - rect.left + (view.width - toastView.measuredWidth) / 2 + offsetX,
viewLocation[1] - rect.top + view.height + offsetY)
return this
}
fun Float.dp(): Float = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, this, app.resources.displayMetrics) fun Float.dp(): Float = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, this, app.resources.displayMetrics)
/** /**
......
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