diff --git a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java index 312d8219f..6c3e5d16d 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java @@ -458,7 +458,7 @@ public final class MainActivity extends StageActivity } private void checkClipboardUrlInternal() { - String text = ClipboardUtil.getTextFromClipboard(); + String text = ClipboardUtil.getUrlFromClipboard(); int hashCode = text != null ? text.hashCode() : 0; if (text != null && hashCode != 0 && Settings.getClipboardTextHashCode() != hashCode) { diff --git a/app/src/main/java/com/hippo/util/ClipboardUtil.java b/app/src/main/java/com/hippo/util/ClipboardUtil.java index d66592868..e978e292a 100644 --- a/app/src/main/java/com/hippo/util/ClipboardUtil.java +++ b/app/src/main/java/com/hippo/util/ClipboardUtil.java @@ -2,10 +2,13 @@ package com.hippo.util; import android.annotation.SuppressLint; import android.content.ClipData; +import android.content.ClipDescription; import android.content.ClipboardManager; import android.content.Context; +import android.os.Build; import android.text.TextUtils; import android.util.Log; +import android.view.textclassifier.TextClassifier; import androidx.annotation.Nullable; @@ -63,4 +66,43 @@ public class ClipboardUtil { return null; } } + + public static String getUrlFromClipboard() { + if (clipboardManager != null) { + try { + if (!clipboardManager.hasPrimaryClip()) { + return null; + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + ClipDescription primaryClipDescription = clipboardManager.getPrimaryClipDescription(); + if (primaryClipDescription != null) { + if (primaryClipDescription.getClassificationStatus() == ClipDescription.CLASSIFICATION_COMPLETE) { + if (primaryClipDescription.getConfidenceScore(TextClassifier.TYPE_URL) <= 0) { + return null; + } + } + } + } + ClipData primaryClip = clipboardManager.getPrimaryClip(); + if (primaryClip == null) { + return null; + } + ClipData.Item item = primaryClip.getItemAt(0); + if (item == null) { + return null; + } + String string = String.valueOf(item.coerceToText(sContext)); + if (!TextUtils.isEmpty(string)) { + return string; + } else { + return null; + } + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } else { + return null; + } + } }