From e56e021ed426399e9fea3f57e12a8bba126c9d9f Mon Sep 17 00:00:00 2001 From: Oli Lan Date: Fri, 7 Jan 2022 16:13:45 +0000 Subject: [PATCH] Perform text classification when emulator sets clipboard. This fixes an issue where clipboard clips coming from the emulator host do not have text classification performed, resulting in the clip being permanently in the CLAFFICATION_NOT_PERFORMED state. Bug: 204085258 Test: build; use system image in emulator; manual copy and check Test: atest ClipDescriptionTest Test: atest ClipboardManagerTest Change-Id: Ic89d6e87976ec75a7b9a55e2602619aa6e93ddce --- .../android/server/clipboard/ClipboardService.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/clipboard/ClipboardService.java b/services/core/java/com/android/server/clipboard/ClipboardService.java index 093ecd57124f6..3d5abfe833945 100644 --- a/services/core/java/com/android/server/clipboard/ClipboardService.java +++ b/services/core/java/com/android/server/clipboard/ClipboardService.java @@ -535,9 +535,6 @@ public class ClipboardService extends SystemService { mEmulatorClipboardMonitor.accept(clip); final int userId = UserHandle.getUserId(uid); - if (clip != null) { - startClassificationLocked(clip, userId); - } // Update this user setPrimaryClipInternalLocked(getClipboardLocked(userId), clip, uid, sourcePackage); @@ -593,6 +590,17 @@ public class ClipboardService extends SystemService { @GuardedBy("mLock") private void setPrimaryClipInternalLocked(PerUserClipboard clipboard, @Nullable ClipData clip, int uid, @Nullable String sourcePackage) { + final int userId = UserHandle.getUserId(uid); + if (clip != null) { + startClassificationLocked(clip, userId); + } + + setPrimaryClipInternalNoClassifyLocked(clipboard, clip, uid, sourcePackage); + } + + @GuardedBy("mLock") + private void setPrimaryClipInternalNoClassifyLocked(PerUserClipboard clipboard, + @Nullable ClipData clip, int uid, @Nullable String sourcePackage) { revokeUris(clipboard); clipboard.activePermissionOwners.clear(); if (clip == null && clipboard.primaryClip == null) {