diff --git a/app/src/main/java/com/huanchengfly/tieba/post/BaseApplication.kt b/app/src/main/java/com/huanchengfly/tieba/post/BaseApplication.kt index 107c3435..9336095e 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/BaseApplication.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/BaseApplication.kt @@ -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) || diff --git a/app/src/main/java/com/huanchengfly/tieba/post/utils/ClipBoardUtils.kt b/app/src/main/java/com/huanchengfly/tieba/post/utils/ClipBoardUtils.kt new file mode 100644 index 00000000..71f66cf5 --- /dev/null +++ b/app/src/main/java/com/huanchengfly/tieba/post/utils/ClipBoardUtils.kt @@ -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 +} \ No newline at end of file