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

Commit 976f3a2c authored by Iris Yang's avatar Iris Yang Committed by Android (Google) Code Review
Browse files

Merge "Specify the tasks should be exculded from Recents or not"

parents d2c5e956 111c9923
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -3010,6 +3010,7 @@ 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();
@@ -3026,6 +3027,7 @@ 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_SENSORS = 0; // 0x0
    field public static final int RECENTS_POLICY_ALLOW_IN_HOST_DEVICE_RECENTS = 1; // 0x1
  }
  public static final class VirtualDeviceParams.Builder {
@@ -3036,6 +3038,7 @@ package android.companion.virtual {
    method @NonNull public android.companion.virtual.VirtualDeviceParams.Builder setAllowedCrossTaskNavigations(@NonNull java.util.Set<android.content.ComponentName>);
    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);
+50 −5
Original line number Diff line number Diff line
@@ -147,6 +147,19 @@ public final class VirtualDeviceParams implements Parcelable {
     */
    public static final int POLICY_TYPE_SENSORS = 0;

    /** @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.
     */
    public static final int RECENTS_POLICY_ALLOW_IN_HOST_DEVICE_RECENTS = 1 << 0;

    private final int mLockState;
    @NonNull private final ArraySet<UserHandle> mUsersWithMatchingAccounts;
    @NonNull private final ArraySet<ComponentName> mAllowedCrossTaskNavigations;
@@ -161,6 +174,8 @@ public final class VirtualDeviceParams implements Parcelable {
    // Mapping of @PolicyType to @DevicePolicy
    @NonNull private final SparseIntArray mDevicePolicies;
    @NonNull private final List<VirtualSensorConfig> mVirtualSensorConfigs;
    @RecentsPolicy
    private final int mDefaultRecentsPolicy;

    private VirtualDeviceParams(
            @LockState int lockState,
@@ -173,7 +188,8 @@ public final class VirtualDeviceParams implements Parcelable {
            @ActivityPolicy int defaultActivityPolicy,
            @Nullable String name,
            @NonNull SparseIntArray devicePolicies,
            @NonNull List<VirtualSensorConfig> virtualSensorConfigs) {
            @NonNull List<VirtualSensorConfig> virtualSensorConfigs,
            @RecentsPolicy int defaultRecentsPolicy) {
        mLockState = lockState;
        mUsersWithMatchingAccounts =
                new ArraySet<>(Objects.requireNonNull(usersWithMatchingAccounts));
@@ -188,6 +204,7 @@ public final class VirtualDeviceParams implements Parcelable {
        mName = name;
        mDevicePolicies = Objects.requireNonNull(devicePolicies);
        mVirtualSensorConfigs = Objects.requireNonNull(virtualSensorConfigs);
        mDefaultRecentsPolicy = defaultRecentsPolicy;
    }

    @SuppressWarnings("unchecked")
@@ -204,6 +221,7 @@ public final class VirtualDeviceParams implements Parcelable {
        mDevicePolicies = parcel.readSparseIntArray();
        mVirtualSensorConfigs = new ArrayList<>();
        parcel.readTypedList(mVirtualSensorConfigs, VirtualSensorConfig.CREATOR);
        mDefaultRecentsPolicy = parcel.readInt();
    }

    /**
@@ -328,6 +346,16 @@ public final class VirtualDeviceParams implements Parcelable {
        return mVirtualSensorConfigs;
    }

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

    @Override
    public int describeContents() {
        return 0;
@@ -346,6 +374,7 @@ public final class VirtualDeviceParams implements Parcelable {
        dest.writeString8(mName);
        dest.writeSparseIntArray(mDevicePolicies);
        dest.writeTypedList(mVirtualSensorConfigs);
        dest.writeInt(mDefaultRecentsPolicy);
    }

    @Override
@@ -377,7 +406,8 @@ public final class VirtualDeviceParams implements Parcelable {
                && Objects.equals(mAllowedActivities, that.mAllowedActivities)
                && Objects.equals(mBlockedActivities, that.mBlockedActivities)
                && mDefaultActivityPolicy == that.mDefaultActivityPolicy
                && Objects.equals(mName, that.mName);
                && Objects.equals(mName, that.mName)
                && mDefaultRecentsPolicy == that.mDefaultRecentsPolicy;
    }

    @Override
@@ -385,7 +415,8 @@ public final class VirtualDeviceParams implements Parcelable {
        int hashCode = Objects.hash(
                mLockState, mUsersWithMatchingAccounts, mAllowedCrossTaskNavigations,
                mBlockedCrossTaskNavigations, mDefaultNavigationPolicy, mAllowedActivities,
                mBlockedActivities, mDefaultActivityPolicy, mName, mDevicePolicies);
                mBlockedActivities, mDefaultActivityPolicy, mName, mDevicePolicies,
                mDefaultRecentsPolicy);
        for (int i = 0; i < mDevicePolicies.size(); i++) {
            hashCode = 31 * hashCode + mDevicePolicies.keyAt(i);
            hashCode = 31 * hashCode + mDevicePolicies.valueAt(i);
@@ -407,6 +438,7 @@ public final class VirtualDeviceParams implements Parcelable {
                + " mDefaultActivityPolicy=" + mDefaultActivityPolicy
                + " mName=" + mName
                + " mDevicePolicies=" + mDevicePolicies
                + " mDefaultRecentsPolicy=" + mDefaultRecentsPolicy
                + ")";
    }

@@ -442,6 +474,7 @@ public final class VirtualDeviceParams implements Parcelable {
        @Nullable private String mName;
        @NonNull private SparseIntArray mDevicePolicies = new SparseIntArray();
        @NonNull private List<VirtualSensorConfig> mVirtualSensorConfigs = new ArrayList<>();
        private int mDefaultRecentsPolicy;

        /**
         * Sets the lock state of the device. The permission {@code ADD_ALWAYS_UNLOCKED_DISPLAY}
@@ -646,6 +679,17 @@ 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;
        }

        /**
         * Builds the {@link VirtualDeviceParams} instance.
         *
@@ -684,7 +728,8 @@ public final class VirtualDeviceParams implements Parcelable {
                    mDefaultActivityPolicy,
                    mName,
                    mDevicePolicies,
                    mVirtualSensorConfigs);
                    mVirtualSensorConfigs,
                    mDefaultRecentsPolicy);
        }
    }
}
+3 −2
Original line number Diff line number Diff line
@@ -128,9 +128,10 @@ public abstract class DisplayWindowPolicyController {
            ActivityInfo activityInfo, int windowFlags, int systemWindowFlags);

    /**
     * Returns {@code true} if the tasks which is on this virtual display can be showed on Recents.
     * Returns {@code true} if the tasks which is on this virtual display can be showed in the
     * host device of the recently launched activities list.
     */
    public abstract boolean canShowTasksInRecents();
    public abstract boolean canShowTasksInHostDeviceRecents();

    /**
     * This is called when the top activity of the display is changed.
+10 −21
Original line number Diff line number Diff line
@@ -16,8 +16,7 @@

package com.android.server.companion.virtual;

import static android.companion.AssociationRequest.DEVICE_PROFILE_APP_STREAMING;
import static android.companion.AssociationRequest.DEVICE_PROFILE_AUTOMOTIVE_PROJECTION;
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;
@@ -26,10 +25,10 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.WindowConfiguration;
import android.app.compat.CompatChanges;
import android.companion.AssociationRequest;
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;
@@ -127,10 +126,10 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController
    @GuardedBy("mGenericWindowPolicyControllerLock")
    private final ArraySet<RunningAppsChangedListener> mRunningAppsChangedListeners =
            new ArraySet<>();
    @Nullable
    private final @AssociationRequest.DeviceProfile String mDeviceProfile;
    @Nullable private final SecureWindowCallback mSecureWindowCallback;
    @Nullable private final List<String> mDisplayCategories;
    @RecentsPolicy
    private final int mDefaultRecentsPolicy;

    /**
     * Creates a window policy controller that is generic to the different use cases of virtual
@@ -156,7 +155,7 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController
     *   launching.
     * @param secureWindowCallback Callback that is called when a secure window shows on the
     *   virtual display.
     * @param deviceProfile The {@link AssociationRequest.DeviceProfile} of this virtual device.
     * @param defaultRecentsPolicy a policy to indicate how to handle activities in recents.
     */
    public GenericWindowPolicyController(int windowFlags, int systemWindowFlags,
            @NonNull ArraySet<UserHandle> allowedUsers,
@@ -169,8 +168,8 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController
            @NonNull PipBlockedCallback pipBlockedCallback,
            @NonNull ActivityBlockedCallback activityBlockedCallback,
            @NonNull SecureWindowCallback secureWindowCallback,
            @AssociationRequest.DeviceProfile String deviceProfile,
            @NonNull List<String> displayCategories) {
            @NonNull List<String> displayCategories,
            @RecentsPolicy int defaultRecentsPolicy) {
        super();
        mAllowedUsers = allowedUsers;
        mAllowedCrossTaskNavigations = new ArraySet<>(allowedCrossTaskNavigations);
@@ -181,10 +180,10 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController
        mActivityBlockedCallback = activityBlockedCallback;
        setInterestedWindowFlags(windowFlags, systemWindowFlags);
        mActivityListener = activityListener;
        mDeviceProfile = deviceProfile;
        mPipBlockedCallback = pipBlockedCallback;
        mSecureWindowCallback = secureWindowCallback;
        mDisplayCategories = displayCategories;
        mDefaultRecentsPolicy = defaultRecentsPolicy;
    }

    /**
@@ -318,18 +317,8 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController
    }

    @Override
    public boolean canShowTasksInRecents() {
        if (mDeviceProfile == null) {
            return true;
        }
        // TODO(b/234075973) : Remove this once proper API is ready.
        switch (mDeviceProfile) {
            case DEVICE_PROFILE_AUTOMOTIVE_PROJECTION:
                return false;
            case DEVICE_PROFILE_APP_STREAMING:
            default:
                return true;
        }
    public boolean canShowTasksInHostDeviceRecents() {
        return (mDefaultRecentsPolicy & RECENTS_POLICY_ALLOW_IN_HOST_DEVICE_RECENTS) != 0;
    }

    @Override
+2 −2
Original line number Diff line number Diff line
@@ -679,8 +679,8 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub
                            this::onEnteringPipBlocked,
                            this::onActivityBlocked,
                            this::onSecureWindowShown,
                            mAssociationInfo.getDeviceProfile(),
                            displayCategories);
                            displayCategories,
                            mParams.getDefaultRecentsPolicy());
            gwpc.registerRunningAppsChangedListener(/* listener= */ this);
            return gwpc;
        }
Loading