From a7c57d5811e5eb1c30db6c0fa2dbbb4aeb8a63b4 Mon Sep 17 00:00:00 2001 From: "QliQ.dev" Date: Fri, 16 Oct 2026 13:40:06 +0600 Subject: [PATCH] fix(clipboard): avoid NullPointerException in read() on Android when the clip or its description is null --- .../capacitorjs/plugins/clipboard/Clipboard.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/clipboard/android/src/main/java/com/capacitorjs/plugins/clipboard/Clipboard.java b/clipboard/android/src/main/java/com/capacitorjs/plugins/clipboard/Clipboard.java index a485a05000..27cb137001 100644 --- a/clipboard/android/src/main/java/com/capacitorjs/plugins/clipboard/Clipboard.java +++ b/clipboard/android/src/main/java/com/capacitorjs/plugins/clipboard/Clipboard.java @@ -52,15 +52,19 @@ public ClipboardData read() { if (clipboard != null) { CharSequence value = null; - if (clipboard.hasPrimaryClip()) { - if (clipboard.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)) { + // hasPrimaryClip() can be true while getPrimaryClip() and + // getPrimaryClipDescription() still return null, e.g. while the app + // is not focused yet, so read the clip once and check it. + ClipData clip = clipboard.getPrimaryClip(); + if (clip != null && clip.getItemCount() > 0) { + ClipDescription description = clip.getDescription(); + ClipData.Item item = clip.getItemAt(0); + if (description != null && description.hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)) { Logger.debug(TAG, "Got plaintxt"); - ClipData.Item item = clipboard.getPrimaryClip().getItemAt(0); value = item.getText(); } else { Logger.debug(TAG, "Not plaintext!"); - ClipData.Item item = clipboard.getPrimaryClip().getItemAt(0); - value = item.coerceToText(context).toString(); + value = item.coerceToText(context); } }