From f1a34e47c03e54f752988ccc01c8e771426339fe Mon Sep 17 00:00:00 2001 From: Oli Lan Date: Fri, 5 Mar 2021 18:17:13 +0000 Subject: [PATCH] Only notify about clipboard access once per clip per app. This limits the toast notification " pasted from " to be shown only once per clip per app/user. Bug: 171640049 Test: Manual, copy from one app then paste multiple times in another. Check that other apps still display message the first time when pasting. Change-Id: Ida66bce0301116e0236e0acced6550cafa13ac39 --- .../com/android/server/clipboard/ClipboardService.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/services/core/java/com/android/server/clipboard/ClipboardService.java b/services/core/java/com/android/server/clipboard/ClipboardService.java index 7dfecd56eaf50..150a76373ce06 100644 --- a/services/core/java/com/android/server/clipboard/ClipboardService.java +++ b/services/core/java/com/android/server/clipboard/ClipboardService.java @@ -57,6 +57,7 @@ import android.provider.Settings; import android.text.TextUtils; import android.util.Slog; import android.util.SparseArray; +import android.util.SparseBooleanArray; import android.view.autofill.AutofillManagerInternal; import android.widget.Toast; @@ -273,6 +274,9 @@ public class ClipboardService extends SystemService { /** Package of the app that set {@link #primaryClip}. */ String mPrimaryClipPackage; + /** Uids that have already triggered a toast notification for {@link #primaryClip} */ + final SparseBooleanArray mNotifiedUids = new SparseBooleanArray(); + final HashSet activePermissionOwners = new HashSet(); @@ -648,6 +652,7 @@ public class ClipboardService extends SystemService { return; } clipboard.primaryClip = clip; + clipboard.mNotifiedUids.clear(); if (clip != null) { clipboard.primaryClipUid = uid; clipboard.mPrimaryClipPackage = sourcePackage; @@ -938,6 +943,11 @@ public class ClipboardService extends SystemService { && mAutofillInternal.isAugmentedAutofillServiceForUser(uid, userId)) { return; } + // Don't notify if already notified for this uid and clip. + if (clipboard.mNotifiedUids.get(uid)) { + return; + } + clipboard.mNotifiedUids.put(uid, true); // Retrieve the app label of the source of the clip data CharSequence sourceAppLabel = null;