Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 500c7dd5 authored by Antony Sargent's avatar Antony Sargent Committed by Android (Google) Code Review
Browse files

Merge "VirtualDevice clipboard support"

parents 22bb48ed 152e9397
Loading
Loading
Loading
Loading
+36 −9
Original line number Diff line number Diff line
@@ -70,6 +70,23 @@ public class ClipboardManager extends android.text.ClipboardManager {
     */
    public static final boolean DEVICE_CONFIG_DEFAULT_SHOW_ACCESS_NOTIFICATIONS = true;

    /**
     * DeviceConfig property, within the clipboard namespace, that determines whether VirtualDevices
     * are allowed to have siloed Clipboards for the apps running on them. If false, then clipboard
     * access is blocked entirely for apps running on VirtualDevices.
     *
     * @hide
     */
    public static final String DEVICE_CONFIG_ALLOW_VIRTUALDEVICE_SILOS =
            "allow_virtualdevice_silos";

    /**
     * Default value for the DEVICE_CONFIG_ALLOW_VIRTUALDEVICE_SILOS property.
     *
     * @hide
     */
    public static final boolean DEVICE_CONFIG_DEFAULT_ALLOW_VIRTUALDEVICE_SILOS = false;

    private final Context mContext;
    private final Handler mHandler;
    private final IClipboard mService;
@@ -133,7 +150,8 @@ public class ClipboardManager extends android.text.ClipboardManager {
                    clip,
                    mContext.getOpPackageName(),
                    mContext.getAttributionTag(),
                    mContext.getUserId());
                    mContext.getUserId(),
                    mContext.getDeviceId());
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
@@ -162,6 +180,7 @@ public class ClipboardManager extends android.text.ClipboardManager {
                    mContext.getOpPackageName(),
                    mContext.getAttributionTag(),
                    mContext.getUserId(),
                    mContext.getDeviceId(),
                    sourcePackage);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
@@ -178,7 +197,8 @@ public class ClipboardManager extends android.text.ClipboardManager {
            mService.clearPrimaryClip(
                    mContext.getOpPackageName(),
                    mContext.getAttributionTag(),
                    mContext.getUserId());
                    mContext.getUserId(),
                    mContext.getDeviceId());
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
@@ -197,7 +217,8 @@ public class ClipboardManager extends android.text.ClipboardManager {
            return mService.getPrimaryClip(
                    mContext.getOpPackageName(),
                    mContext.getAttributionTag(),
                    mContext.getUserId());
                    mContext.getUserId(),
                    mContext.getDeviceId());
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
@@ -217,7 +238,8 @@ public class ClipboardManager extends android.text.ClipboardManager {
            return mService.getPrimaryClipDescription(
                    mContext.getOpPackageName(),
                    mContext.getAttributionTag(),
                    mContext.getUserId());
                    mContext.getUserId(),
                    mContext.getDeviceId());
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
@@ -234,7 +256,8 @@ public class ClipboardManager extends android.text.ClipboardManager {
            return mService.hasPrimaryClip(
                    mContext.getOpPackageName(),
                    mContext.getAttributionTag(),
                    mContext.getUserId());
                    mContext.getUserId(),
                    mContext.getDeviceId());
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
@@ -248,7 +271,8 @@ public class ClipboardManager extends android.text.ClipboardManager {
                            mPrimaryClipChangedServiceListener,
                            mContext.getOpPackageName(),
                            mContext.getAttributionTag(),
                            mContext.getUserId());
                            mContext.getUserId(),
                            mContext.getDeviceId());
                } catch (RemoteException e) {
                    throw e.rethrowFromSystemServer();
                }
@@ -266,7 +290,8 @@ public class ClipboardManager extends android.text.ClipboardManager {
                            mPrimaryClipChangedServiceListener,
                            mContext.getOpPackageName(),
                            mContext.getAttributionTag(),
                            mContext.getUserId());
                            mContext.getUserId(),
                            mContext.getDeviceId());
                } catch (RemoteException e) {
                    throw e.rethrowFromSystemServer();
                }
@@ -306,7 +331,8 @@ public class ClipboardManager extends android.text.ClipboardManager {
            return mService.hasClipboardText(
                    mContext.getOpPackageName(),
                    mContext.getAttributionTag(),
                    mContext.getUserId());
                    mContext.getUserId(),
                    mContext.getDeviceId());
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
@@ -326,7 +352,8 @@ public class ClipboardManager extends android.text.ClipboardManager {
            return mService.getPrimaryClipSource(
                    mContext.getOpPackageName(),
                    mContext.getAttributionTag(),
                    mContext.getUserId());
                    mContext.getUserId(),
                    mContext.getDeviceId());
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
+15 −11
Original line number Diff line number Diff line
@@ -26,22 +26,26 @@ import android.content.IOnPrimaryClipChangedListener;
 * {@hide}
 */
interface IClipboard {
    void setPrimaryClip(in ClipData clip, String callingPackage, String attributionTag, int userId);
    void setPrimaryClipAsPackage(in ClipData clip, String callingPackage, String attributionTag, int userId,
            String sourcePackage);
    void clearPrimaryClip(String callingPackage, String attributionTag, int userId);
    ClipData getPrimaryClip(String pkg, String attributionTag, int userId);
    ClipDescription getPrimaryClipDescription(String callingPackage, String attributionTag, int userId);
    boolean hasPrimaryClip(String callingPackage, String attributionTag, int userId);
    void setPrimaryClip(in ClipData clip, String callingPackage, String attributionTag, int userId,
            int deviceId);
    void setPrimaryClipAsPackage(in ClipData clip, String callingPackage, String attributionTag,
            int userId, int deviceId, String sourcePackage);
    void clearPrimaryClip(String callingPackage, String attributionTag, int userId, int deviceId);
    ClipData getPrimaryClip(String pkg, String attributionTag, int userId, int deviceId);
    ClipDescription getPrimaryClipDescription(String callingPackage, String attributionTag,
            int userId, int deviceId);
    boolean hasPrimaryClip(String callingPackage, String attributionTag, int userId, int deviceId);
    void addPrimaryClipChangedListener(in IOnPrimaryClipChangedListener listener,
            String callingPackage, String attributionTag, int userId);
            String callingPackage, String attributionTag, int userId, int deviceId);
    void removePrimaryClipChangedListener(in IOnPrimaryClipChangedListener listener,
            String callingPackage, String attributionTag, int userId);
            String callingPackage, String attributionTag, int userId, int deviceId);

    /**
     * Returns true if the clipboard contains text; false otherwise.
     */
    boolean hasClipboardText(String callingPackage, String attributionTag, int userId);
    boolean hasClipboardText(String callingPackage, String attributionTag, int userId,
            int deviceId);

    String getPrimaryClipSource(String callingPackage, String attributionTag, int userId);
    String getPrimaryClipSource(String callingPackage, String attributionTag, int userId,
            int deviceId);
}
+1 −2
Original line number Diff line number Diff line
@@ -88,7 +88,6 @@ import java.io.PrintWriter;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.function.Consumer;


@@ -114,7 +113,7 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub
    private final CameraAccessController mCameraAccessController;
    private VirtualAudioController mVirtualAudioController;
    @VisibleForTesting
    final Set<Integer> mVirtualDisplayIds = new ArraySet<>();
    final ArraySet<Integer> mVirtualDisplayIds = new ArraySet<>();
    private final OnDeviceCloseListener mOnDeviceCloseListener;
    private final IBinder mAppToken;
    private final VirtualDeviceParams mParams;
+15 −2
Original line number Diff line number Diff line
@@ -67,7 +67,6 @@ import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer;
@@ -471,7 +470,7 @@ public class VirtualDeviceManagerService extends SystemService {
        }

        @Override
        public @NonNull Set<Integer> getDeviceIdsForUid(int uid) {
        public @NonNull ArraySet<Integer> getDeviceIdsForUid(int uid) {
            ArraySet<Integer> result = new ArraySet<>();
            synchronized (mVirtualDeviceManagerLock) {
                int size = mVirtualDevices.size();
@@ -586,6 +585,20 @@ public class VirtualDeviceManagerService extends SystemService {
            return false;
        }

        @Override
        public @NonNull ArraySet<Integer> getDisplayIdsForDevice(int deviceId) {
            synchronized (mVirtualDeviceManagerLock) {
                int size = mVirtualDevices.size();
                for (int i = 0; i < size; i++) {
                    VirtualDeviceImpl device = mVirtualDevices.valueAt(i);
                    if (device.getDeviceId() == deviceId) {
                        return new ArraySet<>(device.mVirtualDisplayIds);
                    }
                }
            }
            return new ArraySet<>();
        }

        @Override
        public void registerVirtualDisplayListener(
                @NonNull VirtualDisplayListener listener) {
+310 −89

File changed.

Preview size limit exceeded, changes collapsed.

Loading