fix: 修复当剪贴板存在贴吧链接时重复弹窗

This commit is contained in:
HuanCheng65 2022-06-03 19:15:33 +08:00
parent 542f053a1f
commit 91873eac34
2 changed files with 46 additions and 19 deletions

View File

@ -4,7 +4,6 @@ import android.app.Activity
import android.app.ActivityManager
import android.app.Application
import android.app.Dialog
import android.content.ClipboardManager
import android.content.Context
import android.content.Intent
import android.content.res.ColorStateList
@ -87,30 +86,20 @@ class BaseApplication : Application(), IApp {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
LitePal.initialize(this)
registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks {
private var clipBoardHash: Int = 0
private var clipBoardHash: String? = null
private fun updateClipBoardHashCode() {
clipBoardHash = getClipBoardHash()
}
private fun getClipBoardHash(): Int {
val cm = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val data = cm.primaryClip
if (data != null) {
val item = data.getItemAt(0)
return item.hashCode()
}
return 0
private fun getClipBoardHash(): String? {
return "$clipBoard $clipBoardTimestamp"
}
private val clipBoard: String
get() {
val cm = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val data = cm.primaryClip ?: return ""
val item = data.getItemAt(0)
return if (item == null || item.text == null) {
""
} else item.text.toString()
}
private val clipBoard: String?
get() = getClipBoardText()
private val clipBoardTimestamp: Long
get() = getClipBoardTimestamp()
private fun isTiebaDomain(host: String?): Boolean {
return host != null && (host.equals("wapp.baidu.com", ignoreCase = true) ||

View File

@ -0,0 +1,38 @@
package com.huanchengfly.tieba.post.utils
import android.content.ClipboardManager
import android.content.Context
import android.os.Build
private val Context.clipBoardManager
get() = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
fun Context.getClipBoardHtmlText(): String? {
val data = clipBoardManager.primaryClip ?: return null
val item = data.getItemAt(0)
return item?.coerceToHtmlText(this)
}
fun Context.getClipBoardText(): String? {
val data = clipBoardManager.primaryClip ?: return null
val item = data.getItemAt(0)
return item?.coerceToText(this)?.toString()
}
fun Context.getClipBoardTimestamp(): Long {
val clipDescription = clipBoardManager.primaryClipDescription ?: return 0
var timestamp = 0L
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
timestamp = clipDescription.timestamp
} else {
try {
val clazz = clipDescription.javaClass
val timestampField = clazz.getDeclaredField("mTimestamp")
timestampField.isAccessible = true
timestamp = timestampField.getLong(clipDescription)
} catch (e: NoSuchFieldException) {
} catch (e: IllegalAccessException) {
}
}
return timestamp
}