Replace Toast.position with TooltipCompat
This commit is contained in:
@@ -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)
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user