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

Commit cf51769e authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Small cleanups to VirtualDeviceParams recents API" into udc-dev am: 1d6c317f

parents eb96cb6b 1d6c317f
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -3247,7 +3247,6 @@ package android.companion.virtual {
    method @NonNull public java.util.Set<android.content.ComponentName> getBlockedCrossTaskNavigations();
    method public int getDefaultActivityPolicy();
    method public int getDefaultNavigationPolicy();
    method public int getDefaultRecentsPolicy();
    method public int getDevicePolicy(int);
    method public int getLockState();
    method @Nullable public String getName();
@@ -3264,8 +3263,8 @@ package android.companion.virtual {
    field public static final int NAVIGATION_POLICY_DEFAULT_ALLOWED = 0; // 0x0
    field public static final int NAVIGATION_POLICY_DEFAULT_BLOCKED = 1; // 0x1
    field public static final int POLICY_TYPE_AUDIO = 1; // 0x1
    field public static final int POLICY_TYPE_RECENTS = 2; // 0x2
    field public static final int POLICY_TYPE_SENSORS = 0; // 0x0
    field public static final int RECENTS_POLICY_ALLOW_IN_HOST_DEVICE_RECENTS = 1; // 0x1
  }
  public static final class VirtualDeviceParams.Builder {
@@ -3278,7 +3277,6 @@ package android.companion.virtual {
    method @NonNull public android.companion.virtual.VirtualDeviceParams.Builder setAudioRecordingSessionId(int);
    method @NonNull public android.companion.virtual.VirtualDeviceParams.Builder setBlockedActivities(@NonNull java.util.Set<android.content.ComponentName>);
    method @NonNull public android.companion.virtual.VirtualDeviceParams.Builder setBlockedCrossTaskNavigations(@NonNull java.util.Set<android.content.ComponentName>);
    method @NonNull public android.companion.virtual.VirtualDeviceParams.Builder setDefaultRecentsPolicy(int);
    method @NonNull public android.companion.virtual.VirtualDeviceParams.Builder setDevicePolicy(int, int);
    method @NonNull @RequiresPermission(value=android.Manifest.permission.ADD_ALWAYS_UNLOCKED_DISPLAY, conditional=true) public android.companion.virtual.VirtualDeviceParams.Builder setLockState(int);
    method @NonNull public android.companion.virtual.VirtualDeviceParams.Builder setName(@NonNull String);
+13 −45
Original line number Diff line number Diff line
@@ -140,7 +140,8 @@ public final class VirtualDeviceParams implements Parcelable {
     * a given policy type.
     * @hide
     */
    @IntDef(prefix = "POLICY_TYPE_",  value = {POLICY_TYPE_SENSORS, POLICY_TYPE_AUDIO})
    @IntDef(prefix = "POLICY_TYPE_", value = {POLICY_TYPE_SENSORS, POLICY_TYPE_AUDIO,
            POLICY_TYPE_RECENTS})
    @Retention(RetentionPolicy.SOURCE)
    @Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE})
    public @interface PolicyType {}
@@ -169,22 +170,21 @@ public final class VirtualDeviceParams implements Parcelable {
     *     <li>{@link #DEVICE_POLICY_CUSTOM}: audio framework will assign device specific session
     *     ids to players and recorders constructed within device context. The session ids are
     *     used to re-route corresponding audio streams to VirtualAudioDevice.
     * <ul/>
     * </ul>
     */
    public static final int POLICY_TYPE_AUDIO = 1;

    /** @hide */
    @IntDef(flag = true, prefix = "RECENTS_POLICY_",
            value = {RECENTS_POLICY_ALLOW_IN_HOST_DEVICE_RECENTS})
    @Retention(RetentionPolicy.SOURCE)
    @Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE})
    public @interface RecentsPolicy {}

    /**
     * If set, activities launched on this virtual device are allowed to appear in the host device
     * of the recently launched activities list.
     * Tells the activity manager how to handle recents entries for activities run on this device.
     *
     * <ul>
     *     <li>{@link #DEVICE_POLICY_DEFAULT}: Activities launched on VirtualDisplays owned by this
     *     device will appear in the host device recents.
     *     <li>{@link #DEVICE_POLICY_CUSTOM}: Activities launched on VirtualDisplays owned by this
     *      *     device will not appear in recents.
     * </ul>
     */
    public static final int RECENTS_POLICY_ALLOW_IN_HOST_DEVICE_RECENTS = 1 << 0;
    public static final int POLICY_TYPE_RECENTS = 2;

    private final int mLockState;
    @NonNull private final ArraySet<UserHandle> mUsersWithMatchingAccounts;
@@ -201,8 +201,6 @@ public final class VirtualDeviceParams implements Parcelable {
    @NonNull private final SparseIntArray mDevicePolicies;
    @NonNull private final List<VirtualSensorConfig> mVirtualSensorConfigs;
    @Nullable private final IVirtualSensorCallback mVirtualSensorCallback;
    @RecentsPolicy
    private final int mDefaultRecentsPolicy;
    private final int mAudioPlaybackSessionId;
    private final int mAudioRecordingSessionId;

@@ -219,7 +217,6 @@ public final class VirtualDeviceParams implements Parcelable {
            @NonNull SparseIntArray devicePolicies,
            @NonNull List<VirtualSensorConfig> virtualSensorConfigs,
            @Nullable IVirtualSensorCallback virtualSensorCallback,
            @RecentsPolicy int defaultRecentsPolicy,
            int audioPlaybackSessionId,
            int audioRecordingSessionId) {
        mLockState = lockState;
@@ -237,10 +234,8 @@ public final class VirtualDeviceParams implements Parcelable {
        mDevicePolicies = Objects.requireNonNull(devicePolicies);
        mVirtualSensorConfigs = Objects.requireNonNull(virtualSensorConfigs);
        mVirtualSensorCallback = virtualSensorCallback;
        mDefaultRecentsPolicy = defaultRecentsPolicy;
        mAudioPlaybackSessionId = audioPlaybackSessionId;
        mAudioRecordingSessionId = audioRecordingSessionId;

    }

    @SuppressWarnings("unchecked")
@@ -259,7 +254,6 @@ public final class VirtualDeviceParams implements Parcelable {
        parcel.readTypedList(mVirtualSensorConfigs, VirtualSensorConfig.CREATOR);
        mVirtualSensorCallback =
                IVirtualSensorCallback.Stub.asInterface(parcel.readStrongBinder());
        mDefaultRecentsPolicy = parcel.readInt();
        mAudioPlaybackSessionId = parcel.readInt();
        mAudioRecordingSessionId = parcel.readInt();
    }
@@ -395,16 +389,6 @@ public final class VirtualDeviceParams implements Parcelable {
        return mVirtualSensorCallback;
    }

    /**
     * Returns the policy of how to handle activities in recents.
     *
     * @see RecentsPolicy
     */
    @RecentsPolicy
    public int getDefaultRecentsPolicy() {
        return mDefaultRecentsPolicy;
    }

    /**
     * Returns device-specific audio session id for playback.
     *
@@ -443,7 +427,6 @@ public final class VirtualDeviceParams implements Parcelable {
        dest.writeTypedList(mVirtualSensorConfigs);
        dest.writeStrongBinder(
                mVirtualSensorCallback != null ? mVirtualSensorCallback.asBinder() : null);
        dest.writeInt(mDefaultRecentsPolicy);
        dest.writeInt(mAudioPlaybackSessionId);
        dest.writeInt(mAudioRecordingSessionId);
    }
@@ -478,7 +461,6 @@ public final class VirtualDeviceParams implements Parcelable {
                && Objects.equals(mBlockedActivities, that.mBlockedActivities)
                && mDefaultActivityPolicy == that.mDefaultActivityPolicy
                && Objects.equals(mName, that.mName)
                && mDefaultRecentsPolicy == that.mDefaultRecentsPolicy
                && mAudioPlaybackSessionId == that.mAudioPlaybackSessionId
                && mAudioRecordingSessionId == that.mAudioRecordingSessionId;
    }
@@ -489,7 +471,7 @@ public final class VirtualDeviceParams implements Parcelable {
                mLockState, mUsersWithMatchingAccounts, mAllowedCrossTaskNavigations,
                mBlockedCrossTaskNavigations, mDefaultNavigationPolicy, mAllowedActivities,
                mBlockedActivities, mDefaultActivityPolicy, mName, mDevicePolicies,
                mDefaultRecentsPolicy, mAudioPlaybackSessionId, mAudioRecordingSessionId);
                mAudioPlaybackSessionId, mAudioRecordingSessionId);
        for (int i = 0; i < mDevicePolicies.size(); i++) {
            hashCode = 31 * hashCode + mDevicePolicies.keyAt(i);
            hashCode = 31 * hashCode + mDevicePolicies.valueAt(i);
@@ -511,7 +493,6 @@ public final class VirtualDeviceParams implements Parcelable {
                + " mDefaultActivityPolicy=" + mDefaultActivityPolicy
                + " mName=" + mName
                + " mDevicePolicies=" + mDevicePolicies
                + " mDefaultRecentsPolicy=" + mDefaultRecentsPolicy
                + " mAudioPlaybackSessionId=" + mAudioPlaybackSessionId
                + " mAudioRecordingSessionId=" + mAudioRecordingSessionId
                + ")";
@@ -548,7 +529,6 @@ public final class VirtualDeviceParams implements Parcelable {
        private boolean mDefaultActivityPolicyConfigured = false;
        @Nullable private String mName;
        @NonNull private SparseIntArray mDevicePolicies = new SparseIntArray();
        private int mDefaultRecentsPolicy;
        private int mAudioPlaybackSessionId = AUDIO_SESSION_ID_GENERATE;
        private int mAudioRecordingSessionId = AUDIO_SESSION_ID_GENERATE;

@@ -820,17 +800,6 @@ public final class VirtualDeviceParams implements Parcelable {
            return this;
        }

        /**
         * Sets the policy to indicate how activities are handled in recents.
         *
         * @param defaultRecentsPolicy A policy specifying how to handle activities in recents.
         */
        @NonNull
        public Builder setDefaultRecentsPolicy(@RecentsPolicy int defaultRecentsPolicy) {
            mDefaultRecentsPolicy = defaultRecentsPolicy;
            return this;
        }

        /**
         * Sets audio playback session id specific for this virtual device.
         *
@@ -933,7 +902,6 @@ public final class VirtualDeviceParams implements Parcelable {
                    mDevicePolicies,
                    mVirtualSensorConfigs,
                    mVirtualSensorCallback,
                    mDefaultRecentsPolicy,
                    mAudioPlaybackSessionId,
                    mAudioRecordingSessionId);
        }
+6 −8
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@

package com.android.server.companion.virtual;

import static android.companion.virtual.VirtualDeviceParams.RECENTS_POLICY_ALLOW_IN_HOST_DEVICE_RECENTS;
import static android.content.pm.ActivityInfo.FLAG_CAN_DISPLAY_ON_REMOTE_DEVICES;
import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
@@ -29,7 +28,6 @@ import android.app.compat.CompatChanges;
import android.companion.virtual.VirtualDeviceManager.ActivityListener;
import android.companion.virtual.VirtualDeviceParams;
import android.companion.virtual.VirtualDeviceParams.ActivityPolicy;
import android.companion.virtual.VirtualDeviceParams.RecentsPolicy;
import android.compat.annotation.ChangeId;
import android.compat.annotation.EnabledSince;
import android.content.ComponentName;
@@ -137,8 +135,8 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController
            new ArraySet<>();
    @Nullable private final SecureWindowCallback mSecureWindowCallback;
    @Nullable private final List<String> mDisplayCategories;
    @RecentsPolicy
    private final int mDefaultRecentsPolicy;

    private final boolean mShowTasksInHostDeviceRecents;

    /**
     * Creates a window policy controller that is generic to the different use cases of virtual
@@ -166,7 +164,7 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController
     *   virtual display.
     * @param intentListenerCallback Callback that is called to intercept intents when matching
     *   passed in filters.
     * @param defaultRecentsPolicy a policy to indicate how to handle activities in recents.
     * @param showTasksInHostDeviceRecents whether to show activities in recents on the host device.
     */
    public GenericWindowPolicyController(int windowFlags, int systemWindowFlags,
            @NonNull ArraySet<UserHandle> allowedUsers,
@@ -181,7 +179,7 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController
            @NonNull SecureWindowCallback secureWindowCallback,
            @NonNull IntentListenerCallback intentListenerCallback,
            @NonNull List<String> displayCategories,
            @RecentsPolicy int defaultRecentsPolicy) {
            boolean showTasksInHostDeviceRecents) {
        super();
        mAllowedUsers = allowedUsers;
        mAllowedCrossTaskNavigations = new ArraySet<>(allowedCrossTaskNavigations);
@@ -196,7 +194,7 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController
        mSecureWindowCallback = secureWindowCallback;
        mIntentListenerCallback = intentListenerCallback;
        mDisplayCategories = displayCategories;
        mDefaultRecentsPolicy = defaultRecentsPolicy;
        mShowTasksInHostDeviceRecents = showTasksInHostDeviceRecents;
    }

    /**
@@ -337,7 +335,7 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController

    @Override
    public boolean canShowTasksInHostDeviceRecents() {
        return (mDefaultRecentsPolicy & RECENTS_POLICY_ALLOW_IN_HOST_DEVICE_RECENTS) != 0;
        return mShowTasksInHostDeviceRecents;
    }

    @Override
+3 −1
Original line number Diff line number Diff line
@@ -846,7 +846,9 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub
                        this::onSecureWindowShown,
                        this::shouldInterceptIntent,
                        displayCategories,
                        mParams.getDefaultRecentsPolicy());
                        mParams.getDevicePolicy(
                                VirtualDeviceParams.POLICY_TYPE_RECENTS)
                                == VirtualDeviceParams.DEVICE_POLICY_DEFAULT);
        gwpc.registerRunningAppsChangedListener(/* listener= */ this);
        return gwpc;
    }
+38 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.server.companion.virtual;

import static android.companion.virtual.VirtualDeviceParams.DEVICE_POLICY_CUSTOM;
import static android.companion.virtual.VirtualDeviceParams.DEVICE_POLICY_DEFAULT;
import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_RECENTS;
import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_SENSORS;
import static android.content.Context.DEVICE_ID_DEFAULT;
import static android.content.Context.DEVICE_ID_INVALID;
@@ -117,6 +118,7 @@ import com.android.server.sensors.SensorManagerInternal;

import com.google.android.collect.Sets;

import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -372,6 +374,11 @@ public class VirtualDeviceManagerServiceTest {
        mDeviceImpl = createVirtualDevice(VIRTUAL_DEVICE_ID_1, DEVICE_OWNER_UID_1);
    }

    @After
    public void tearDown() {
        mDeviceImpl.close();
    }

    @Test
    public void getDeviceIdForDisplayId_invalidDisplayId_returnsDefault() {
        assertThat(mVdm.getDeviceIdForDisplayId(Display.INVALID_DISPLAY))
@@ -444,12 +451,42 @@ public class VirtualDeviceManagerServiceTest {
                .setBlockedActivities(getBlockedActivities())
                .setDevicePolicy(POLICY_TYPE_SENSORS, DEVICE_POLICY_CUSTOM)
                .build();
        mDeviceImpl.close();
        mDeviceImpl = createVirtualDevice(VIRTUAL_DEVICE_ID_1, DEVICE_OWNER_UID_1, params);

        assertThat(mVdm.getDevicePolicy(mDeviceImpl.getDeviceId(), POLICY_TYPE_SENSORS))
                .isEqualTo(DEVICE_POLICY_CUSTOM);
    }

    @Test
    public void getDevicePolicy_defaultRecentsPolicy_gwpcCanShowRecentsOnHostDevice() {
        VirtualDeviceParams params = new VirtualDeviceParams
                .Builder()
                .build();
        mDeviceImpl.close();
        mDeviceImpl = createVirtualDevice(VIRTUAL_DEVICE_ID_1, DEVICE_OWNER_UID_1, params);
        addVirtualDisplay(mDeviceImpl, DISPLAY_ID_1);

        GenericWindowPolicyController gwpc =
                mDeviceImpl.getDisplayWindowPolicyControllerForTest(DISPLAY_ID_1);
        assertThat(gwpc.canShowTasksInHostDeviceRecents()).isTrue();
    }

    @Test
    public void getDevicePolicy_customRecentsPolicy_gwpcCannotShowRecentsOnHostDevice() {
        VirtualDeviceParams params = new VirtualDeviceParams
                .Builder()
                .setDevicePolicy(POLICY_TYPE_RECENTS, DEVICE_POLICY_CUSTOM)
                .build();
        mDeviceImpl.close();
        mDeviceImpl = createVirtualDevice(VIRTUAL_DEVICE_ID_1, DEVICE_OWNER_UID_1, params);
        addVirtualDisplay(mDeviceImpl, DISPLAY_ID_1);

        GenericWindowPolicyController gwpc =
                mDeviceImpl.getDisplayWindowPolicyControllerForTest(DISPLAY_ID_1);
        assertThat(gwpc.canShowTasksInHostDeviceRecents()).isFalse();
    }

    @Test
    public void getDeviceOwnerUid_oneDevice_returnsCorrectId() {
        int ownerUid = mLocalService.getDeviceOwnerUid(mDeviceImpl.getDeviceId());
@@ -501,6 +538,7 @@ public class VirtualDeviceManagerServiceTest {

        doReturn(SENSOR_HANDLE).when(mSensorManagerInternalMock).createRuntimeSensor(
                anyInt(), anyInt(), anyString(), anyString(), anyInt(), any());
        mDeviceImpl.close();
        mDeviceImpl = createVirtualDevice(VIRTUAL_DEVICE_ID_1, DEVICE_OWNER_UID_1, params);

        VirtualSensor sensor = mLocalService.getVirtualSensor(VIRTUAL_DEVICE_ID_1, SENSOR_HANDLE);
Loading