Loading services/core/java/com/android/server/clipboard/ArcClipboardMonitor.java 0 → 100644 +64 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.server.clipboard; import android.annotation.Nullable; import android.content.ClipData; import com.android.server.LocalServices; import java.util.function.BiConsumer; import java.util.function.Consumer; public class ArcClipboardMonitor implements Consumer<ClipData> { private static final String TAG = "ArcClipboardMonitor"; public interface ArcClipboardBridge { /** * Called when a clipboard content is updated. */ void onPrimaryClipChanged(ClipData data); /** * Passes the callback to set a new clipboard content with a uid. */ void setHandler(BiConsumer<ClipData, Integer> setAndroidClipboard); } private ArcClipboardBridge mBridge; private BiConsumer<ClipData, Integer> mAndroidClipboardSetter; ArcClipboardMonitor(final BiConsumer<ClipData, Integer> setAndroidClipboard) { mAndroidClipboardSetter = setAndroidClipboard; LocalServices.addService(ArcClipboardMonitor.class, this); } @Override public void accept(final @Nullable ClipData clip) { if (mBridge != null) { mBridge.onPrimaryClipChanged(clip); } } /** * Sets the other end of the clipboard bridge. */ public void setClipboardBridge(ArcClipboardBridge bridge) { mBridge = bridge; mBridge.setHandler(mAndroidClipboardSetter); } } services/core/java/com/android/server/clipboard/ClipboardService.java +8 −4 Original line number Diff line number Diff line Loading @@ -151,7 +151,7 @@ public class ClipboardService extends SystemService { private final ContentCaptureManagerInternal mContentCaptureInternal; private final AutofillManagerInternal mAutofillInternal; private final IBinder mPermissionOwner; private final Consumer<ClipData> mEmulatorClipboardMonitor; private final Consumer<ClipData> mClipboardMonitor; private final Handler mWorkerHandler; @GuardedBy("mLock") Loading Loading @@ -192,7 +192,7 @@ public class ClipboardService extends SystemService { final IBinder permOwner = mUgmInternal.newUriPermissionOwner("clipboard"); mPermissionOwner = permOwner; if (Build.IS_EMULATOR) { mEmulatorClipboardMonitor = new EmulatorClipboardMonitor((clip) -> { mClipboardMonitor = new EmulatorClipboardMonitor((clip) -> { synchronized (mLock) { Clipboard clipboard = getClipboardLocked(0, DEVICE_ID_DEFAULT); if (clipboard != null) { Loading @@ -201,8 +201,12 @@ public class ClipboardService extends SystemService { } } }); } else if (Build.IS_ARC) { mClipboardMonitor = new ArcClipboardMonitor((clip, uid) -> { setPrimaryClipInternal(clip, uid); }); } else { mEmulatorClipboardMonitor = (clip) -> {}; mClipboardMonitor = (clip) -> {}; } updateConfig(); Loading Loading @@ -937,7 +941,7 @@ public class ClipboardService extends SystemService { private void setPrimaryClipInternalLocked( @Nullable ClipData clip, int uid, int deviceId, @Nullable String sourcePackage) { if (deviceId == DEVICE_ID_DEFAULT) { mEmulatorClipboardMonitor.accept(clip); mClipboardMonitor.accept(clip); } final int userId = UserHandle.getUserId(uid); Loading Loading
services/core/java/com/android/server/clipboard/ArcClipboardMonitor.java 0 → 100644 +64 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.server.clipboard; import android.annotation.Nullable; import android.content.ClipData; import com.android.server.LocalServices; import java.util.function.BiConsumer; import java.util.function.Consumer; public class ArcClipboardMonitor implements Consumer<ClipData> { private static final String TAG = "ArcClipboardMonitor"; public interface ArcClipboardBridge { /** * Called when a clipboard content is updated. */ void onPrimaryClipChanged(ClipData data); /** * Passes the callback to set a new clipboard content with a uid. */ void setHandler(BiConsumer<ClipData, Integer> setAndroidClipboard); } private ArcClipboardBridge mBridge; private BiConsumer<ClipData, Integer> mAndroidClipboardSetter; ArcClipboardMonitor(final BiConsumer<ClipData, Integer> setAndroidClipboard) { mAndroidClipboardSetter = setAndroidClipboard; LocalServices.addService(ArcClipboardMonitor.class, this); } @Override public void accept(final @Nullable ClipData clip) { if (mBridge != null) { mBridge.onPrimaryClipChanged(clip); } } /** * Sets the other end of the clipboard bridge. */ public void setClipboardBridge(ArcClipboardBridge bridge) { mBridge = bridge; mBridge.setHandler(mAndroidClipboardSetter); } }
services/core/java/com/android/server/clipboard/ClipboardService.java +8 −4 Original line number Diff line number Diff line Loading @@ -151,7 +151,7 @@ public class ClipboardService extends SystemService { private final ContentCaptureManagerInternal mContentCaptureInternal; private final AutofillManagerInternal mAutofillInternal; private final IBinder mPermissionOwner; private final Consumer<ClipData> mEmulatorClipboardMonitor; private final Consumer<ClipData> mClipboardMonitor; private final Handler mWorkerHandler; @GuardedBy("mLock") Loading Loading @@ -192,7 +192,7 @@ public class ClipboardService extends SystemService { final IBinder permOwner = mUgmInternal.newUriPermissionOwner("clipboard"); mPermissionOwner = permOwner; if (Build.IS_EMULATOR) { mEmulatorClipboardMonitor = new EmulatorClipboardMonitor((clip) -> { mClipboardMonitor = new EmulatorClipboardMonitor((clip) -> { synchronized (mLock) { Clipboard clipboard = getClipboardLocked(0, DEVICE_ID_DEFAULT); if (clipboard != null) { Loading @@ -201,8 +201,12 @@ public class ClipboardService extends SystemService { } } }); } else if (Build.IS_ARC) { mClipboardMonitor = new ArcClipboardMonitor((clip, uid) -> { setPrimaryClipInternal(clip, uid); }); } else { mEmulatorClipboardMonitor = (clip) -> {}; mClipboardMonitor = (clip) -> {}; } updateConfig(); Loading Loading @@ -937,7 +941,7 @@ public class ClipboardService extends SystemService { private void setPrimaryClipInternalLocked( @Nullable ClipData clip, int uid, int deviceId, @Nullable String sourcePackage) { if (deviceId == DEVICE_ID_DEFAULT) { mEmulatorClipboardMonitor.accept(clip); mClipboardMonitor.accept(clip); } final int userId = UserHandle.getUserId(uid); Loading