pref: 优化剪贴板链接检测

This commit is contained in:
HuanCheng65 2022-06-10 10:39:01 +08:00 committed by HuanCheng65
parent 37aab60ddc
commit 14285ab63e
No known key found for this signature in database
GPG Key ID: E9031EF91A805148
3 changed files with 78 additions and 72 deletions

View File

@ -15,6 +15,7 @@ import android.net.Uri
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.os.Process import android.os.Process
import android.util.Log
import android.view.View import android.view.View
import android.webkit.WebView import android.webkit.WebView
import android.widget.FrameLayout import android.widget.FrameLayout
@ -125,7 +126,7 @@ class BaseApplication : Application(), IApp {
iconView.setImageResource(data.icon!!.res) iconView.setImageResource(data.icon!!.res)
val iconLayoutParams = iconView.layoutParams as FrameLayout.LayoutParams val iconLayoutParams = iconView.layoutParams as FrameLayout.LayoutParams
run { run {
iconLayoutParams.height = 24f.pxToDp() iconLayoutParams.height = 24f.dpToPx()
iconLayoutParams.width = iconLayoutParams.height iconLayoutParams.width = iconLayoutParams.height
} }
iconView.layoutParams = iconLayoutParams iconView.layoutParams = iconLayoutParams
@ -135,7 +136,7 @@ class BaseApplication : Application(), IApp {
ImageUtil.load(iconView, ImageUtil.LOAD_TYPE_AVATAR, data.icon!!.url) ImageUtil.load(iconView, ImageUtil.LOAD_TYPE_AVATAR, data.icon!!.url)
val avatarLayoutParams = iconView.layoutParams as FrameLayout.LayoutParams val avatarLayoutParams = iconView.layoutParams as FrameLayout.LayoutParams
run { run {
avatarLayoutParams.height = 40f.pxToDp() avatarLayoutParams.height = 24f.dpToPx()
avatarLayoutParams.width = avatarLayoutParams.height avatarLayoutParams.width = avatarLayoutParams.height
} }
iconView.layoutParams = avatarLayoutParams iconView.layoutParams = avatarLayoutParams
@ -145,7 +146,15 @@ class BaseApplication : Application(), IApp {
} }
override fun onActivityResumed(activity: Activity) { override fun onActivityResumed(activity: Activity) {
activity.window.decorView.post { checkClipBoard(activity) }
}
private fun checkClipBoard(activity: Activity) {
val clipBoardText = clipBoard val clipBoardText = clipBoard
Log.i(
TAG,
"checkClipBoard: ${activity.clipBoardManager.hasPrimaryClip()} $clipBoardText $clipBoardHash ${getClipBoardHash()}"
)
if (clipBoardHash != getClipBoardHash() && clipBoardText != null) { if (clipBoardHash != getClipBoardHash() && clipBoardText != null) {
@RegExp val regex = @RegExp val regex =
"((http|https)://)(([a-zA-Z0-9._-]+\\.[a-zA-Z]{2,6})|([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}))(:[0-9]{1,4})*(/[a-zA-Z0-9&%_./-~-]*)?" "((http|https)://)(([a-zA-Z0-9._-]+\\.[a-zA-Z]{2,6})|([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}))(:[0-9]{1,4})*(/[a-zA-Z0-9&%_./-~-]*)?"
@ -164,11 +173,13 @@ class BaseApplication : Application(), IApp {
.setSubtitle(activity.getString(R.string.text_loading)) .setSubtitle(activity.getString(R.string.text_loading))
.setUrl(url)) .setUrl(url))
} else if (isThreadUrl(uri)) { } else if (isThreadUrl(uri)) {
updatePreviewView(activity, previewView, PreviewInfo() updatePreviewView(
activity, previewView, PreviewInfo()
.setIconRes(R.drawable.ic_round_mode_comment) .setIconRes(R.drawable.ic_round_mode_comment)
.setTitle(url) .setTitle(url)
.setSubtitle(activity.getString(R.string.text_loading)) .setSubtitle(activity.getString(R.string.text_loading))
.setUrl(url)) .setUrl(url)
)
} }
getPreviewInfo(activity, url, object : CommonCallback<PreviewInfo> { getPreviewInfo(activity, url, object : CommonCallback<PreviewInfo> {
override fun onSuccess(data: PreviewInfo) { override fun onSuccess(data: PreviewInfo) {
@ -176,19 +187,23 @@ class BaseApplication : Application(), IApp {
} }
override fun onFailure(code: Int, error: String) { override fun onFailure(code: Int, error: String) {
updatePreviewView(activity, previewView, PreviewInfo() updatePreviewView(
activity, previewView, PreviewInfo()
.setUrl(url) .setUrl(url)
.setTitle(url) .setTitle(url)
.setSubtitle(activity.getString(R.string.subtitle_link)) .setSubtitle(activity.getString(R.string.subtitle_link))
.setIconRes(R.drawable.ic_link)) .setIconRes(R.drawable.ic_link)
)
} }
}) })
DialogUtil.build(activity) DialogUtil.build(activity)
.setTitle(R.string.title_dialog_clip_board_tieba_url) .setTitle(R.string.title_dialog_clip_board_tieba_url)
.setPositiveButton(R.string.button_yes) { _, _ -> .setPositiveButton(R.string.button_yes) { _, _ ->
startActivity(Intent("com.huanchengfly.tieba.post.ACTION_JUMP", uri) startActivity(
Intent("com.huanchengfly.tieba.post.ACTION_JUMP", uri)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.addCategory(Intent.CATEGORY_DEFAULT)) .addCategory(Intent.CATEGORY_DEFAULT)
)
} }
.setView(previewView) .setView(previewView)
.setNegativeButton(R.string.button_no, null) .setNegativeButton(R.string.button_no, null)

View File

@ -4,7 +4,7 @@ import android.content.ClipboardManager
import android.content.Context import android.content.Context
import android.os.Build import android.os.Build
private val Context.clipBoardManager val Context.clipBoardManager
get() = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager get() = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
fun Context.getClipBoardHtmlText(): String? { fun Context.getClipBoardHtmlText(): String? {
@ -16,7 +16,7 @@ fun Context.getClipBoardHtmlText(): String? {
fun Context.getClipBoardText(): String? { fun Context.getClipBoardText(): String? {
val data = clipBoardManager.primaryClip ?: return null val data = clipBoardManager.primaryClip ?: return null
val item = data.getItemAt(0) val item = data.getItemAt(0)
return item?.coerceToText(this)?.toString() return item?.text?.toString()
} }
fun Context.getClipBoardTimestamp(): Long { fun Context.getClipBoardTimestamp(): Long {

View File

@ -1,22 +1,14 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<com.huanchengfly.tieba.post.widgets.ShadowLayout xmlns:android="http://schemas.android.com/apk/res/android" <com.huanchengfly.tieba.post.widgets.theme.TintMaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:visibility="gone"
app:shadow_layout_blur="8dp"
app:shadow_layout_color="?attr/shadow_color"
app:shadow_layout_offsetY="4dp"
app:shadow_layout_radius="8dp">
<com.huanchengfly.tieba.post.widgets.theme.TintMaterialCardView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:cardCornerRadius="8dp" app:cardCornerRadius="8dp"
app:cardElevation="0dp" app:cardElevation="0dp"
app:contentPadding="16dp" app:contentPaddingBottom="16dp"
app:contentPaddingLeft="32dp"
app:contentPaddingRight="32dp"
app:contentPaddingTop="16dp"
app:strokeWidth="0dp"> app:strokeWidth="0dp">
<RelativeLayout <RelativeLayout
@ -63,5 +55,4 @@
app:tint="@color/default_color_text_secondary" /> app:tint="@color/default_color_text_secondary" />
</LinearLayout> </LinearLayout>
</RelativeLayout> </RelativeLayout>
</com.huanchengfly.tieba.post.widgets.theme.TintMaterialCardView> </com.huanchengfly.tieba.post.widgets.theme.TintMaterialCardView>
</com.huanchengfly.tieba.post.widgets.ShadowLayout>