Loading services/core/java/com/android/server/clipboard/ClipboardService.java +58 −19 Original line number Diff line number Diff line Loading @@ -193,8 +193,11 @@ public class ClipboardService extends SystemService { if (IS_EMULATOR) { mEmulatorClipboardMonitor = new EmulatorClipboardMonitor((clip) -> { synchronized (mLock) { setPrimaryClipInternalLocked(getClipboardLocked(0, DEVICE_ID_DEFAULT), clip, android.os.Process.SYSTEM_UID, null); Clipboard clipboard = getClipboardLocked(0, DEVICE_ID_DEFAULT); if (clipboard != null) { setPrimaryClipInternalLocked(clipboard, clip, android.os.Process.SYSTEM_UID, null); } } }); } else { Loading Loading @@ -637,6 +640,9 @@ public class ClipboardService extends SystemService { } Clipboard clipboard = getClipboardLocked(intendingUserId, intendingDeviceId); if (clipboard == null) { return null; } showAccessNotificationLocked(pkg, intendingUid, intendingUserId, clipboard); notifyTextClassifierLocked(clipboard, pkg, intendingUid); if (clipboard.primaryClip != null) { Loading Loading @@ -665,7 +671,7 @@ public class ClipboardService extends SystemService { } synchronized (mLock) { Clipboard clipboard = getClipboardLocked(intendingUserId, intendingDeviceId); return clipboard.primaryClip != null return (clipboard != null && clipboard.primaryClip != null) ? clipboard.primaryClip.getDescription() : null; } } Loading @@ -688,7 +694,8 @@ public class ClipboardService extends SystemService { return false; } synchronized (mLock) { return getClipboardLocked(intendingUserId, intendingDeviceId).primaryClip != null; Clipboard clipboard = getClipboardLocked(intendingUserId, intendingDeviceId); return clipboard != null && clipboard.primaryClip != null; } } Loading @@ -709,8 +716,11 @@ public class ClipboardService extends SystemService { return; } synchronized (mLock) { getClipboardLocked(intendingUserId, intendingDeviceId) .primaryClipListeners Clipboard clipboard = getClipboardLocked(intendingUserId, intendingDeviceId); if (clipboard == null) { return; } clipboard.primaryClipListeners .register( listener, new ListenerInfo(intendingUid, callingPackage, attributionTag)); Loading @@ -733,8 +743,11 @@ public class ClipboardService extends SystemService { return; } synchronized (mLock) { getClipboardLocked(intendingUserId, intendingDeviceId).primaryClipListeners.unregister(listener); Clipboard clipboard = getClipboardLocked(intendingUserId, intendingDeviceId); if (clipboard != null) { clipboard.primaryClipListeners.unregister(listener); } } } Loading @@ -757,7 +770,7 @@ public class ClipboardService extends SystemService { } synchronized (mLock) { Clipboard clipboard = getClipboardLocked(intendingUserId, intendingDeviceId); if (clipboard.primaryClip != null) { if (clipboard != null && clipboard.primaryClip != null) { CharSequence text = clipboard.primaryClip.getItemAt(0).getText(); return text != null && text.length() > 0; } Loading Loading @@ -786,7 +799,7 @@ public class ClipboardService extends SystemService { } synchronized (mLock) { Clipboard clipboard = getClipboardLocked(intendingUserId, intendingDeviceId); if (clipboard.primaryClip != null) { if (clipboard != null && clipboard.primaryClip != null) { return clipboard.mPrimaryClipPackage; } return null; Loading @@ -808,7 +821,8 @@ public class ClipboardService extends SystemService { final int intendingUid = msg.arg2; final int intendingDeviceId = ((Pair<Integer, Integer>) msg.obj).second; synchronized (mLock) { if (getClipboardLocked(userId, intendingDeviceId).primaryClip != null) { Clipboard clipboard = getClipboardLocked(userId, intendingDeviceId); if (clipboard != null && clipboard.primaryClip != null) { FrameworkStatsLog.write(FrameworkStatsLog.CLIPBOARD_CLEARED, FrameworkStatsLog.CLIPBOARD_CLEARED__SOURCE__AUTO_CLEAR); setPrimaryClipInternalLocked( Loading @@ -824,9 +838,23 @@ public class ClipboardService extends SystemService { }; @GuardedBy("mLock") private Clipboard getClipboardLocked(@UserIdInt int userId, int deviceId) { private @Nullable Clipboard getClipboardLocked(@UserIdInt int userId, int deviceId) { Clipboard clipboard = mClipboards.get(userId, deviceId); if (clipboard == null) { try { if (!mUm.isUserRunning(userId)) { Slog.w(TAG, "getClipboardLocked called with not running userId " + userId); return null; } } catch (RemoteException e) { Slog.e(TAG, "RemoteException calling UserManager: " + e); return null; } if (deviceId != DEVICE_ID_DEFAULT && !mVdm.isValidVirtualDeviceId(deviceId)) { Slog.w(TAG, "getClipboardLocked called with invalid (possibly released) deviceId " + deviceId); return null; } clipboard = new Clipboard(userId, deviceId); mClipboards.add(userId, deviceId, clipboard); } Loading Loading @@ -876,8 +904,11 @@ public class ClipboardService extends SystemService { final int userId = UserHandle.getUserId(uid); // Update this user setPrimaryClipInternalLocked(getClipboardLocked(userId, deviceId), clip, uid, sourcePackage); Clipboard clipboard = getClipboardLocked(userId, deviceId); if (clipboard == null) { return; } setPrimaryClipInternalLocked(clipboard, clip, uid, sourcePackage); // Update related users List<UserInfo> related = getRelatedProfiles(userId); Loading Loading @@ -911,8 +942,11 @@ public class ClipboardService extends SystemService { final boolean canCopyIntoProfile = !hasRestriction( UserManager.DISALLOW_SHARE_INTO_MANAGED_PROFILE, id); if (canCopyIntoProfile) { setPrimaryClipInternalNoClassifyLocked( getClipboardLocked(id, deviceId), clip, uid, sourcePackage); Clipboard relatedClipboard = getClipboardLocked(id, deviceId); if (relatedClipboard != null) { setPrimaryClipInternalNoClassifyLocked(relatedClipboard, clip, uid, sourcePackage); } } } } Loading Loading @@ -1046,6 +1080,9 @@ public class ClipboardService extends SystemService { synchronized (mLock) { Clipboard clipboard = getClipboardLocked(userId, deviceId); if (clipboard == null) { return; } if (clipboard.primaryClip == clip) { applyClassificationAndSendBroadcastLocked( clipboard, confidences, links, classifier); Loading @@ -1061,7 +1098,8 @@ public class ClipboardService extends SystemService { UserManager.DISALLOW_SHARE_INTO_MANAGED_PROFILE, id); if (canCopyIntoProfile) { Clipboard relatedClipboard = getClipboardLocked(id, deviceId); if (hasTextLocked(relatedClipboard, text)) { if (relatedClipboard != null && hasTextLocked(relatedClipboard, text)) { applyClassificationAndSendBroadcastLocked( relatedClipboard, confidences, links, classifier); } Loading Loading @@ -1184,7 +1222,8 @@ public class ClipboardService extends SystemService { Binder.restoreCallingIdentity(oldIdentity); } Clipboard clipboard = getClipboardLocked(UserHandle.getUserId(uid), deviceId); if (clipboard.primaryClip != null && !clipboard.activePermissionOwners.contains(pkg)) { if (clipboard != null && clipboard.primaryClip != null && !clipboard.activePermissionOwners.contains(pkg)) { final int N = clipboard.primaryClip.getItemCount(); for (int i = 0; i < N; i++) { grantItemPermission(clipboard.primaryClip.getItemAt(i), clipboard.primaryClipUid, Loading Loading
services/core/java/com/android/server/clipboard/ClipboardService.java +58 −19 Original line number Diff line number Diff line Loading @@ -193,8 +193,11 @@ public class ClipboardService extends SystemService { if (IS_EMULATOR) { mEmulatorClipboardMonitor = new EmulatorClipboardMonitor((clip) -> { synchronized (mLock) { setPrimaryClipInternalLocked(getClipboardLocked(0, DEVICE_ID_DEFAULT), clip, android.os.Process.SYSTEM_UID, null); Clipboard clipboard = getClipboardLocked(0, DEVICE_ID_DEFAULT); if (clipboard != null) { setPrimaryClipInternalLocked(clipboard, clip, android.os.Process.SYSTEM_UID, null); } } }); } else { Loading Loading @@ -637,6 +640,9 @@ public class ClipboardService extends SystemService { } Clipboard clipboard = getClipboardLocked(intendingUserId, intendingDeviceId); if (clipboard == null) { return null; } showAccessNotificationLocked(pkg, intendingUid, intendingUserId, clipboard); notifyTextClassifierLocked(clipboard, pkg, intendingUid); if (clipboard.primaryClip != null) { Loading Loading @@ -665,7 +671,7 @@ public class ClipboardService extends SystemService { } synchronized (mLock) { Clipboard clipboard = getClipboardLocked(intendingUserId, intendingDeviceId); return clipboard.primaryClip != null return (clipboard != null && clipboard.primaryClip != null) ? clipboard.primaryClip.getDescription() : null; } } Loading @@ -688,7 +694,8 @@ public class ClipboardService extends SystemService { return false; } synchronized (mLock) { return getClipboardLocked(intendingUserId, intendingDeviceId).primaryClip != null; Clipboard clipboard = getClipboardLocked(intendingUserId, intendingDeviceId); return clipboard != null && clipboard.primaryClip != null; } } Loading @@ -709,8 +716,11 @@ public class ClipboardService extends SystemService { return; } synchronized (mLock) { getClipboardLocked(intendingUserId, intendingDeviceId) .primaryClipListeners Clipboard clipboard = getClipboardLocked(intendingUserId, intendingDeviceId); if (clipboard == null) { return; } clipboard.primaryClipListeners .register( listener, new ListenerInfo(intendingUid, callingPackage, attributionTag)); Loading @@ -733,8 +743,11 @@ public class ClipboardService extends SystemService { return; } synchronized (mLock) { getClipboardLocked(intendingUserId, intendingDeviceId).primaryClipListeners.unregister(listener); Clipboard clipboard = getClipboardLocked(intendingUserId, intendingDeviceId); if (clipboard != null) { clipboard.primaryClipListeners.unregister(listener); } } } Loading @@ -757,7 +770,7 @@ public class ClipboardService extends SystemService { } synchronized (mLock) { Clipboard clipboard = getClipboardLocked(intendingUserId, intendingDeviceId); if (clipboard.primaryClip != null) { if (clipboard != null && clipboard.primaryClip != null) { CharSequence text = clipboard.primaryClip.getItemAt(0).getText(); return text != null && text.length() > 0; } Loading Loading @@ -786,7 +799,7 @@ public class ClipboardService extends SystemService { } synchronized (mLock) { Clipboard clipboard = getClipboardLocked(intendingUserId, intendingDeviceId); if (clipboard.primaryClip != null) { if (clipboard != null && clipboard.primaryClip != null) { return clipboard.mPrimaryClipPackage; } return null; Loading @@ -808,7 +821,8 @@ public class ClipboardService extends SystemService { final int intendingUid = msg.arg2; final int intendingDeviceId = ((Pair<Integer, Integer>) msg.obj).second; synchronized (mLock) { if (getClipboardLocked(userId, intendingDeviceId).primaryClip != null) { Clipboard clipboard = getClipboardLocked(userId, intendingDeviceId); if (clipboard != null && clipboard.primaryClip != null) { FrameworkStatsLog.write(FrameworkStatsLog.CLIPBOARD_CLEARED, FrameworkStatsLog.CLIPBOARD_CLEARED__SOURCE__AUTO_CLEAR); setPrimaryClipInternalLocked( Loading @@ -824,9 +838,23 @@ public class ClipboardService extends SystemService { }; @GuardedBy("mLock") private Clipboard getClipboardLocked(@UserIdInt int userId, int deviceId) { private @Nullable Clipboard getClipboardLocked(@UserIdInt int userId, int deviceId) { Clipboard clipboard = mClipboards.get(userId, deviceId); if (clipboard == null) { try { if (!mUm.isUserRunning(userId)) { Slog.w(TAG, "getClipboardLocked called with not running userId " + userId); return null; } } catch (RemoteException e) { Slog.e(TAG, "RemoteException calling UserManager: " + e); return null; } if (deviceId != DEVICE_ID_DEFAULT && !mVdm.isValidVirtualDeviceId(deviceId)) { Slog.w(TAG, "getClipboardLocked called with invalid (possibly released) deviceId " + deviceId); return null; } clipboard = new Clipboard(userId, deviceId); mClipboards.add(userId, deviceId, clipboard); } Loading Loading @@ -876,8 +904,11 @@ public class ClipboardService extends SystemService { final int userId = UserHandle.getUserId(uid); // Update this user setPrimaryClipInternalLocked(getClipboardLocked(userId, deviceId), clip, uid, sourcePackage); Clipboard clipboard = getClipboardLocked(userId, deviceId); if (clipboard == null) { return; } setPrimaryClipInternalLocked(clipboard, clip, uid, sourcePackage); // Update related users List<UserInfo> related = getRelatedProfiles(userId); Loading Loading @@ -911,8 +942,11 @@ public class ClipboardService extends SystemService { final boolean canCopyIntoProfile = !hasRestriction( UserManager.DISALLOW_SHARE_INTO_MANAGED_PROFILE, id); if (canCopyIntoProfile) { setPrimaryClipInternalNoClassifyLocked( getClipboardLocked(id, deviceId), clip, uid, sourcePackage); Clipboard relatedClipboard = getClipboardLocked(id, deviceId); if (relatedClipboard != null) { setPrimaryClipInternalNoClassifyLocked(relatedClipboard, clip, uid, sourcePackage); } } } } Loading Loading @@ -1046,6 +1080,9 @@ public class ClipboardService extends SystemService { synchronized (mLock) { Clipboard clipboard = getClipboardLocked(userId, deviceId); if (clipboard == null) { return; } if (clipboard.primaryClip == clip) { applyClassificationAndSendBroadcastLocked( clipboard, confidences, links, classifier); Loading @@ -1061,7 +1098,8 @@ public class ClipboardService extends SystemService { UserManager.DISALLOW_SHARE_INTO_MANAGED_PROFILE, id); if (canCopyIntoProfile) { Clipboard relatedClipboard = getClipboardLocked(id, deviceId); if (hasTextLocked(relatedClipboard, text)) { if (relatedClipboard != null && hasTextLocked(relatedClipboard, text)) { applyClassificationAndSendBroadcastLocked( relatedClipboard, confidences, links, classifier); } Loading Loading @@ -1184,7 +1222,8 @@ public class ClipboardService extends SystemService { Binder.restoreCallingIdentity(oldIdentity); } Clipboard clipboard = getClipboardLocked(UserHandle.getUserId(uid), deviceId); if (clipboard.primaryClip != null && !clipboard.activePermissionOwners.contains(pkg)) { if (clipboard != null && clipboard.primaryClip != null && !clipboard.activePermissionOwners.contains(pkg)) { final int N = clipboard.primaryClip.getItemCount(); for (int i = 0; i < N; i++) { grantItemPermission(clipboard.primaryClip.getItemAt(i), clipboard.primaryClipUid, Loading