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

Commit cca40706 authored by Vladimir Komsiyski's avatar Vladimir Komsiyski
Browse files

Address new activity control API feedback

 - replace @UserId int with @NonNull UserHandle in the new
   onActivityLaunchBlocked callback
 - rename the new policy POLICY_TYPE_BLOCKED_ACTIVITY_BEHAVIOR to
   POLICY_TYPE_BLOCKED_ACTIVITY

Fix: 357686109
Test: presubmit, CTS
Flag: android.companion.virtualdevice.flags.activity_control_api
Change-Id: I7086d4c09b691d9047541b370c696fd8c5206d5c
parent 753160d9
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -3448,7 +3448,7 @@ package android.companion.virtual {
  }
  public static interface VirtualDeviceManager.ActivityListener {
    method @FlaggedApi("android.companion.virtualdevice.flags.activity_control_api") public default void onActivityLaunchBlocked(int, @NonNull android.content.ComponentName, int, @Nullable android.content.IntentSender);
    method @FlaggedApi("android.companion.virtualdevice.flags.activity_control_api") public default void onActivityLaunchBlocked(int, @NonNull android.content.ComponentName, @NonNull android.os.UserHandle, @Nullable android.content.IntentSender);
    method public void onDisplayEmpty(int);
    method @Deprecated public void onTopActivityChanged(int, @NonNull android.content.ComponentName);
    method public default void onTopActivityChanged(int, @NonNull android.content.ComponentName, int);
@@ -3528,7 +3528,7 @@ package android.companion.virtual {
    field @Deprecated public static final int NAVIGATION_POLICY_DEFAULT_BLOCKED = 1; // 0x1
    field @FlaggedApi("android.companion.virtual.flags.dynamic_policy") public static final int POLICY_TYPE_ACTIVITY = 3; // 0x3
    field public static final int POLICY_TYPE_AUDIO = 1; // 0x1
    field @FlaggedApi("android.companion.virtualdevice.flags.activity_control_api") public static final int POLICY_TYPE_BLOCKED_ACTIVITY_BEHAVIOR = 6; // 0x6
    field @FlaggedApi("android.companion.virtualdevice.flags.activity_control_api") public static final int POLICY_TYPE_BLOCKED_ACTIVITY = 6; // 0x6
    field @FlaggedApi("android.companion.virtual.flags.virtual_camera") public static final int POLICY_TYPE_CAMERA = 5; // 0x5
    field @FlaggedApi("android.companion.virtual.flags.cross_device_clipboard") public static final int POLICY_TYPE_CLIPBOARD = 4; // 0x4
    field public static final int POLICY_TYPE_RECENTS = 2; // 0x2
+3 −2
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android.companion.virtual;

import android.content.ComponentName;
import android.content.IntentSender;
import android.os.UserHandle;

/**
 * Interface to listen for activity changes in a virtual device.
@@ -48,9 +49,9 @@ oneway interface IVirtualDeviceActivityListener {
     *
     * @param displayId The display ID on which the activity tried to launch.
     * @param componentName The component name of the blocked activity.
     * @param userId The user ID associated with the blocked activity.
     * @param user The user associated with the blocked activity.
     * @param intentSender The original sender of the intent.
     */
    void onActivityLaunchBlocked(int displayId, in ComponentName componentName, int userId,
    void onActivityLaunchBlocked(int displayId, in ComponentName componentName, in UserHandle user,
            in IntentSender intentSender);
}
+7 −6
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@ package android.companion.virtual;
import static android.companion.virtual.VirtualDeviceParams.DEVICE_POLICY_CUSTOM;
import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_ACTIVITY;
import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_AUDIO;
import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_BLOCKED_ACTIVITY_BEHAVIOR;
import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_BLOCKED_ACTIVITY;
import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_CLIPBOARD;
import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_RECENTS;

@@ -65,6 +65,7 @@ import android.os.IBinder;
import android.os.Looper;
import android.os.RemoteException;
import android.os.ResultReceiver;
import android.os.UserHandle;
import android.util.ArrayMap;
import android.view.WindowManager;

@@ -136,14 +137,14 @@ public class VirtualDeviceInternal {

                @Override
                public void onActivityLaunchBlocked(int displayId, ComponentName componentName,
                        @UserIdInt int userId, IntentSender intentSender) {
                        UserHandle user, IntentSender intentSender) {
                    final long token = Binder.clearCallingIdentity();
                    try {
                        synchronized (mActivityListenersLock) {
                            for (int i = 0; i < mActivityListeners.size(); i++) {
                                mActivityListeners.valueAt(i)
                                        .onActivityLaunchBlocked(
                                                displayId, componentName, userId, intentSender);
                                                displayId, componentName, user, intentSender);
                            }
                        }
                    } finally {
@@ -292,7 +293,7 @@ public class VirtualDeviceInternal {
            case POLICY_TYPE_RECENTS:
            case POLICY_TYPE_CLIPBOARD:
            case POLICY_TYPE_ACTIVITY:
            case POLICY_TYPE_BLOCKED_ACTIVITY_BEHAVIOR:
            case POLICY_TYPE_BLOCKED_ACTIVITY:
                break;
            default:
                throw new IllegalArgumentException("Device policy " + policyType
@@ -595,10 +596,10 @@ public class VirtualDeviceInternal {
        }

        public void onActivityLaunchBlocked(int displayId, ComponentName componentName,
                @UserIdInt int userId, IntentSender intentSender) {
                UserHandle user, IntentSender intentSender) {
            mExecutor.execute(() ->
                    mActivityListener.onActivityLaunchBlocked(
                            displayId, componentName, userId, intentSender));
                            displayId, componentName, user, intentSender));
        }
    }

+3 −2
Original line number Diff line number Diff line
@@ -67,6 +67,7 @@ import android.media.AudioManager;
import android.os.Binder;
import android.os.Looper;
import android.os.RemoteException;
import android.os.UserHandle;
import android.util.ArraySet;
import android.util.Log;
import android.view.Display;
@@ -1264,7 +1265,7 @@ public final class VirtualDeviceManager {
         *
         * @param displayId The display ID on which the activity tried to launch.
         * @param componentName The component name of the blocked activity.
         * @param userId The user ID associated with the blocked activity.
         * @param user The user associated with the blocked activity.
         * @param intentSender The original sender of the intent. May be {@code null} if the sender
         *   expects an activity result to be reported. In that case
         *   {@link android.app.Activity#RESULT_CANCELED} was already reported back because the
@@ -1276,7 +1277,7 @@ public final class VirtualDeviceManager {
         */
        @FlaggedApi(android.companion.virtualdevice.flags.Flags.FLAG_ACTIVITY_CONTROL_API)
        default void onActivityLaunchBlocked(int displayId, @NonNull ComponentName componentName,
                @UserIdInt int userId, @Nullable IntentSender intentSender) {}
                @NonNull UserHandle user, @Nullable IntentSender intentSender) {}
    }

    /**
+5 −5
Original line number Diff line number Diff line
@@ -160,7 +160,7 @@ public final class VirtualDeviceParams implements Parcelable {
     */
    @IntDef(prefix = "POLICY_TYPE_", value = {POLICY_TYPE_SENSORS, POLICY_TYPE_AUDIO,
            POLICY_TYPE_RECENTS, POLICY_TYPE_ACTIVITY, POLICY_TYPE_CAMERA,
            POLICY_TYPE_BLOCKED_ACTIVITY_BEHAVIOR})
            POLICY_TYPE_BLOCKED_ACTIVITY})
    @Retention(RetentionPolicy.SOURCE)
    @Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE})
    public @interface PolicyType {}
@@ -172,7 +172,7 @@ public final class VirtualDeviceParams implements Parcelable {
     * @hide
     */
    @IntDef(prefix = "POLICY_TYPE_", value = {POLICY_TYPE_RECENTS, POLICY_TYPE_ACTIVITY,
            POLICY_TYPE_CLIPBOARD, POLICY_TYPE_BLOCKED_ACTIVITY_BEHAVIOR})
            POLICY_TYPE_CLIPBOARD, POLICY_TYPE_BLOCKED_ACTIVITY})
    @Retention(RetentionPolicy.SOURCE)
    @Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE})
    public @interface DynamicPolicyType {}
@@ -242,7 +242,7 @@ public final class VirtualDeviceParams implements Parcelable {
     * @see VirtualDeviceManager.VirtualDevice#removeActivityPolicyExemption
     */
    // TODO(b/333443509): Update the documentation of custom policy and link to the new policy
    // POLICY_TYPE_BLOCKED_ACTIVITY_BEHAVIOR
    // POLICY_TYPE_BLOCKED_ACTIVITY
    @FlaggedApi(Flags.FLAG_DYNAMIC_POLICY)
    public static final int POLICY_TYPE_ACTIVITY = 3;

@@ -292,7 +292,7 @@ public final class VirtualDeviceParams implements Parcelable {
     */
    // TODO(b/333443509): Link to POLICY_TYPE_ACTIVITY
    @FlaggedApi(android.companion.virtualdevice.flags.Flags.FLAG_ACTIVITY_CONTROL_API)
    public static final int POLICY_TYPE_BLOCKED_ACTIVITY_BEHAVIOR = 6;
    public static final int POLICY_TYPE_BLOCKED_ACTIVITY = 6;

    private final int mLockState;
    @NonNull private final ArraySet<UserHandle> mUsersWithMatchingAccounts;
@@ -1206,7 +1206,7 @@ public final class VirtualDeviceParams implements Parcelable {
            }

            if (!android.companion.virtualdevice.flags.Flags.activityControlApi()) {
                mDevicePolicies.delete(POLICY_TYPE_BLOCKED_ACTIVITY_BEHAVIOR);
                mDevicePolicies.delete(POLICY_TYPE_BLOCKED_ACTIVITY);
            }

            if ((mAudioPlaybackSessionId != AUDIO_SESSION_ID_GENERATE
Loading