Replace Toast.position with TooltipCompat

This commit is contained in:
Mygod
2017-12-06 23:57:17 -08:00
parent 9fd86fe8b8
commit d5c1455a00
3 changed files with 9 additions and 45 deletions
@@ -38,11 +38,11 @@ import android.support.v7.app.AlertDialog
import android.support.v7.app.AppCompatActivity
import android.support.v7.content.res.AppCompatResources
import android.support.v7.preference.PreferenceDataStore
import android.support.v7.widget.TooltipCompat
import android.text.TextUtils
import android.util.Log
import android.view.View
import android.widget.TextView
import android.widget.Toast
import com.github.jorgecastilloprz.FABProgressCircle
import com.github.shadowsocks.App.Companion.app
import com.github.shadowsocks.acl.Acl
@@ -57,7 +57,6 @@ import com.github.shadowsocks.database.ProfileManager
import com.github.shadowsocks.preference.DataStore
import com.github.shadowsocks.preference.OnPreferenceDataStoreChangeListener
import com.github.shadowsocks.utils.Key
import com.github.shadowsocks.utils.position
import com.github.shadowsocks.utils.responseLength
import com.github.shadowsocks.utils.thread
import com.mikepenz.crossfader.Crossfader
@@ -165,8 +164,12 @@ class MainActivity : AppCompatActivity(), ShadowsocksConnection.Interface, Drawe
}
}
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
TooltipCompat.setTooltipText(fab, getString(R.string.connect))
updateTraffic(-1, 0, 0, 0, 0)
testCount += 1 // suppress previous test messages
}
@@ -329,13 +332,6 @@ class MainActivity : AppCompatActivity(), ShadowsocksConnection.Interface, Drawe
} 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
app.handler.post { connection.connect() }
@@ -46,7 +46,6 @@ import com.github.shadowsocks.database.ProfileManager
import com.github.shadowsocks.plugin.PluginConfiguration
import com.github.shadowsocks.preference.DataStore
import com.github.shadowsocks.utils.Action
import com.github.shadowsocks.utils.position
import com.github.shadowsocks.widget.UndoSnackbarManager
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.AdSize
@@ -112,7 +111,7 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener {
}
inner class ProfileViewHolder(view: View) : RecyclerView.ViewHolder(view),
View.OnClickListener, View.OnLongClickListener, PopupMenu.OnMenuItemClickListener {
View.OnClickListener, PopupMenu.OnMenuItemClickListener {
internal lateinit var item: Profile
private val text1 = itemView.findViewById<TextView>(android.R.id.text1)
@@ -123,7 +122,7 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener {
init {
edit.setOnClickListener { startConfig(item.id) }
edit.setOnLongClickListener(this)
TooltipCompat.setTooltipText(edit, edit.contentDescription)
itemView.setOnClickListener(this)
val share = itemView.findViewById<View>(R.id.share)
share.setOnClickListener {
@@ -132,7 +131,7 @@ class ProfilesFragment : ToolbarFragment(), Toolbar.OnMenuItemClickListener {
popup.setOnMenuItemClickListener(this)
popup.show()
}
share.setOnLongClickListener(this)
TooltipCompat.setTooltipText(share, share.contentDescription)
}
fun bind(item: Profile) {
@@ -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) {
R.id.action_qr_code_nfc -> {
fragmentManager!!.beginTransaction().add(QRCodeDialog(this.item.toString()), "")
@@ -3,17 +3,11 @@ package com.github.shadowsocks.utils
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.graphics.Rect
import android.os.Build
import android.support.v4.app.Fragment
import android.support.v4.app.FragmentManager
import android.support.v7.util.SortedList
import android.util.DisplayMetrics
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 java.lang.reflect.InvocationTargetException
import java.net.InetAddress
@@ -59,25 +53,6 @@ fun thread(start: Boolean = true, isDaemon: Boolean = false, contextClassLoader:
val URLConnection.responseLength: Long
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)
/**