Merge "Address VirtualDisplayConfig API feedback." into udc-dev am: 8d087bfc90

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21698561

Change-Id: I87d7235125b82168e4fac14f8f9777c970feaa90
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
TreeHugger Robot
2023-03-06 16:31:34 +00:00
committed by Automerger Merge Worker
10 changed files with 45 additions and 45 deletions

View File

@@ -19593,7 +19593,7 @@ package android.hardware.display {
public final class VirtualDisplayConfig implements android.os.Parcelable { public final class VirtualDisplayConfig implements android.os.Parcelable {
method public int describeContents(); method public int describeContents();
method public int getDensityDpi(); method public int getDensityDpi();
method @NonNull public java.util.List<java.lang.String> getDisplayCategories(); method @NonNull public java.util.Set<java.lang.String> getDisplayCategories();
method public int getFlags(); method public int getFlags();
method public int getHeight(); method public int getHeight();
method @NonNull public String getName(); method @NonNull public String getName();
@@ -19608,7 +19608,7 @@ package android.hardware.display {
ctor public VirtualDisplayConfig.Builder(@NonNull String, @IntRange(from=1) int, @IntRange(from=1) int, @IntRange(from=1) int); ctor public VirtualDisplayConfig.Builder(@NonNull String, @IntRange(from=1) int, @IntRange(from=1) int, @IntRange(from=1) int);
method @NonNull public android.hardware.display.VirtualDisplayConfig.Builder addDisplayCategory(@NonNull String); method @NonNull public android.hardware.display.VirtualDisplayConfig.Builder addDisplayCategory(@NonNull String);
method @NonNull public android.hardware.display.VirtualDisplayConfig build(); method @NonNull public android.hardware.display.VirtualDisplayConfig build();
method @NonNull public android.hardware.display.VirtualDisplayConfig.Builder setDisplayCategories(@NonNull java.util.List<java.lang.String>); method @NonNull public android.hardware.display.VirtualDisplayConfig.Builder setDisplayCategories(@NonNull java.util.Set<java.lang.String>);
method @NonNull public android.hardware.display.VirtualDisplayConfig.Builder setFlags(int); method @NonNull public android.hardware.display.VirtualDisplayConfig.Builder setFlags(int);
method @NonNull public android.hardware.display.VirtualDisplayConfig.Builder setRequestedRefreshRate(@FloatRange(from=0.0f) float); method @NonNull public android.hardware.display.VirtualDisplayConfig.Builder setRequestedRefreshRate(@FloatRange(from=0.0f) float);
method @NonNull public android.hardware.display.VirtualDisplayConfig.Builder setSurface(@Nullable android.view.Surface); method @NonNull public android.hardware.display.VirtualDisplayConfig.Builder setSurface(@Nullable android.view.Surface);

View File

@@ -545,12 +545,13 @@ public final class VirtualDeviceManager {
@VirtualDisplayFlag int flags, @VirtualDisplayFlag int flags,
@Nullable @CallbackExecutor Executor executor, @Nullable @CallbackExecutor Executor executor,
@Nullable VirtualDisplay.Callback callback) { @Nullable VirtualDisplay.Callback callback) {
VirtualDisplayConfig config = new VirtualDisplayConfig.Builder( VirtualDisplayConfig.Builder builder = new VirtualDisplayConfig.Builder(
getVirtualDisplayName(), width, height, densityDpi) getVirtualDisplayName(), width, height, densityDpi)
.setSurface(surface) .setFlags(flags);
.setFlags(flags) if (surface != null) {
.build(); builder.setSurface(surface);
return createVirtualDisplay(config, executor, callback); }
return createVirtualDisplay(builder.build(), executor, callback);
} }
/** /**

View File

@@ -27,13 +27,13 @@ import android.media.projection.MediaProjection;
import android.os.Handler; import android.os.Handler;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import android.util.ArraySet;
import android.view.Display; import android.view.Display;
import android.view.Surface; import android.view.Surface;
import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Set;
/** /**
* Holds configuration used to create {@link VirtualDisplay} instances. * Holds configuration used to create {@link VirtualDisplay} instances.
@@ -51,8 +51,8 @@ public final class VirtualDisplayConfig implements Parcelable {
private final Surface mSurface; private final Surface mSurface;
private final String mUniqueId; private final String mUniqueId;
private final int mDisplayIdToMirror; private final int mDisplayIdToMirror;
private final boolean mWindowManagerMirroring; private final boolean mWindowManagerMirroringEnabled;
private ArrayList<String> mDisplayCategories = null; private ArraySet<String> mDisplayCategories = null;
private final float mRequestedRefreshRate; private final float mRequestedRefreshRate;
private VirtualDisplayConfig( private VirtualDisplayConfig(
@@ -64,8 +64,8 @@ public final class VirtualDisplayConfig implements Parcelable {
@Nullable Surface surface, @Nullable Surface surface,
@Nullable String uniqueId, @Nullable String uniqueId,
int displayIdToMirror, int displayIdToMirror,
boolean windowManagerMirroring, boolean windowManagerMirroringEnabled,
@NonNull ArrayList<String> displayCategories, @NonNull ArraySet<String> displayCategories,
float requestedRefreshRate) { float requestedRefreshRate) {
mName = name; mName = name;
mWidth = width; mWidth = width;
@@ -75,7 +75,7 @@ public final class VirtualDisplayConfig implements Parcelable {
mSurface = surface; mSurface = surface;
mUniqueId = uniqueId; mUniqueId = uniqueId;
mDisplayIdToMirror = displayIdToMirror; mDisplayIdToMirror = displayIdToMirror;
mWindowManagerMirroring = windowManagerMirroring; mWindowManagerMirroringEnabled = windowManagerMirroringEnabled;
mDisplayCategories = displayCategories; mDisplayCategories = displayCategories;
mRequestedRefreshRate = requestedRefreshRate; mRequestedRefreshRate = requestedRefreshRate;
} }
@@ -151,8 +151,8 @@ public final class VirtualDisplayConfig implements Parcelable {
* if DisplayManager should record contents instead. * if DisplayManager should record contents instead.
* @hide * @hide
*/ */
public boolean isWindowManagerMirroring() { public boolean isWindowManagerMirroringEnabled() {
return mWindowManagerMirroring; return mWindowManagerMirroringEnabled;
} }
/** /**
@@ -161,8 +161,8 @@ public final class VirtualDisplayConfig implements Parcelable {
* @see Builder#setDisplayCategories * @see Builder#setDisplayCategories
*/ */
@NonNull @NonNull
public List<String> getDisplayCategories() { public Set<String> getDisplayCategories() {
return Collections.unmodifiableList(mDisplayCategories); return Collections.unmodifiableSet(mDisplayCategories);
} }
/** /**
@@ -185,8 +185,8 @@ public final class VirtualDisplayConfig implements Parcelable {
dest.writeTypedObject(mSurface, flags); dest.writeTypedObject(mSurface, flags);
dest.writeString8(mUniqueId); dest.writeString8(mUniqueId);
dest.writeInt(mDisplayIdToMirror); dest.writeInt(mDisplayIdToMirror);
dest.writeBoolean(mWindowManagerMirroring); dest.writeBoolean(mWindowManagerMirroringEnabled);
dest.writeStringList(mDisplayCategories); dest.writeArraySet(mDisplayCategories);
dest.writeFloat(mRequestedRefreshRate); dest.writeFloat(mRequestedRefreshRate);
} }
@@ -210,7 +210,7 @@ public final class VirtualDisplayConfig implements Parcelable {
&& Objects.equals(mSurface, that.mSurface) && Objects.equals(mSurface, that.mSurface)
&& Objects.equals(mUniqueId, that.mUniqueId) && Objects.equals(mUniqueId, that.mUniqueId)
&& mDisplayIdToMirror == that.mDisplayIdToMirror && mDisplayIdToMirror == that.mDisplayIdToMirror
&& mWindowManagerMirroring == that.mWindowManagerMirroring && mWindowManagerMirroringEnabled == that.mWindowManagerMirroringEnabled
&& Objects.equals(mDisplayCategories, that.mDisplayCategories) && Objects.equals(mDisplayCategories, that.mDisplayCategories)
&& mRequestedRefreshRate == that.mRequestedRefreshRate; && mRequestedRefreshRate == that.mRequestedRefreshRate;
} }
@@ -219,7 +219,7 @@ public final class VirtualDisplayConfig implements Parcelable {
public int hashCode() { public int hashCode() {
int hashCode = Objects.hash( int hashCode = Objects.hash(
mName, mWidth, mHeight, mDensityDpi, mFlags, mSurface, mUniqueId, mName, mWidth, mHeight, mDensityDpi, mFlags, mSurface, mUniqueId,
mDisplayIdToMirror, mWindowManagerMirroring, mDisplayCategories, mDisplayIdToMirror, mWindowManagerMirroringEnabled, mDisplayCategories,
mRequestedRefreshRate); mRequestedRefreshRate);
return hashCode; return hashCode;
} }
@@ -236,7 +236,7 @@ public final class VirtualDisplayConfig implements Parcelable {
+ " mSurface=" + mSurface + " mSurface=" + mSurface
+ " mUniqueId=" + mUniqueId + " mUniqueId=" + mUniqueId
+ " mDisplayIdToMirror=" + mDisplayIdToMirror + " mDisplayIdToMirror=" + mDisplayIdToMirror
+ " mWindowManagerMirroring=" + mWindowManagerMirroring + " mWindowManagerMirroringEnabled=" + mWindowManagerMirroringEnabled
+ " mDisplayCategories=" + mDisplayCategories + " mDisplayCategories=" + mDisplayCategories
+ " mRequestedRefreshRate=" + mRequestedRefreshRate + " mRequestedRefreshRate=" + mRequestedRefreshRate
+ ")"; + ")";
@@ -251,9 +251,8 @@ public final class VirtualDisplayConfig implements Parcelable {
mSurface = in.readTypedObject(Surface.CREATOR); mSurface = in.readTypedObject(Surface.CREATOR);
mUniqueId = in.readString8(); mUniqueId = in.readString8();
mDisplayIdToMirror = in.readInt(); mDisplayIdToMirror = in.readInt();
mWindowManagerMirroring = in.readBoolean(); mWindowManagerMirroringEnabled = in.readBoolean();
mDisplayCategories = new ArrayList<>(); mDisplayCategories = (ArraySet<String>) in.readArraySet(null);
in.readStringList(mDisplayCategories);
mRequestedRefreshRate = in.readFloat(); mRequestedRefreshRate = in.readFloat();
} }
@@ -283,8 +282,8 @@ public final class VirtualDisplayConfig implements Parcelable {
private Surface mSurface = null; private Surface mSurface = null;
private String mUniqueId = null; private String mUniqueId = null;
private int mDisplayIdToMirror = DEFAULT_DISPLAY; private int mDisplayIdToMirror = DEFAULT_DISPLAY;
private boolean mWindowManagerMirroring = false; private boolean mWindowManagerMirroringEnabled = false;
private ArrayList<String> mDisplayCategories = new ArrayList<>(); private ArraySet<String> mDisplayCategories = new ArraySet<>();
private float mRequestedRefreshRate = 0.0f; private float mRequestedRefreshRate = 0.0f;
/** /**
@@ -370,8 +369,8 @@ public final class VirtualDisplayConfig implements Parcelable {
* @hide * @hide
*/ */
@NonNull @NonNull
public Builder setWindowManagerMirroring(boolean windowManagerMirroring) { public Builder setWindowManagerMirroringEnabled(boolean windowManagerMirroringEnabled) {
mWindowManagerMirroring = windowManagerMirroring; mWindowManagerMirroringEnabled = windowManagerMirroringEnabled;
return this; return this;
} }
@@ -383,7 +382,7 @@ public final class VirtualDisplayConfig implements Parcelable {
* {@link android.content.pm.ActivityInfo#requiredDisplayCategory}. * {@link android.content.pm.ActivityInfo#requiredDisplayCategory}.
*/ */
@NonNull @NonNull
public Builder setDisplayCategories(@NonNull List<String> displayCategories) { public Builder setDisplayCategories(@NonNull Set<String> displayCategories) {
mDisplayCategories.clear(); mDisplayCategories.clear();
mDisplayCategories.addAll(Objects.requireNonNull(displayCategories)); mDisplayCategories.addAll(Objects.requireNonNull(displayCategories));
return this; return this;
@@ -435,7 +434,7 @@ public final class VirtualDisplayConfig implements Parcelable {
mSurface, mSurface,
mUniqueId, mUniqueId,
mDisplayIdToMirror, mDisplayIdToMirror,
mWindowManagerMirroring, mWindowManagerMirroringEnabled,
mDisplayCategories, mDisplayCategories,
mRequestedRefreshRate); mRequestedRefreshRate);
} }

View File

@@ -191,7 +191,7 @@ public final class MediaProjection {
} else { } else {
session = ContentRecordingSession.createTaskSession(launchCookie); session = ContentRecordingSession.createTaskSession(launchCookie);
} }
virtualDisplayConfig.setWindowManagerMirroring(true); virtualDisplayConfig.setWindowManagerMirroringEnabled(true);
final DisplayManager dm = mContext.getSystemService(DisplayManager.class); final DisplayManager dm = mContext.getSystemService(DisplayManager.class);
final VirtualDisplay virtualDisplay = dm.createVirtualDisplay(this, final VirtualDisplay virtualDisplay = dm.createVirtualDisplay(this,
virtualDisplayConfig.build(), callback, handler, windowContext); virtualDisplayConfig.build(), callback, handler, windowContext);

View File

@@ -134,7 +134,7 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController
private final ArraySet<RunningAppsChangedListener> mRunningAppsChangedListeners = private final ArraySet<RunningAppsChangedListener> mRunningAppsChangedListeners =
new ArraySet<>(); new ArraySet<>();
@Nullable private final SecureWindowCallback mSecureWindowCallback; @Nullable private final SecureWindowCallback mSecureWindowCallback;
@Nullable private final List<String> mDisplayCategories; @Nullable private final Set<String> mDisplayCategories;
private final boolean mShowTasksInHostDeviceRecents; private final boolean mShowTasksInHostDeviceRecents;
@@ -178,7 +178,7 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController
@NonNull ActivityBlockedCallback activityBlockedCallback, @NonNull ActivityBlockedCallback activityBlockedCallback,
@NonNull SecureWindowCallback secureWindowCallback, @NonNull SecureWindowCallback secureWindowCallback,
@NonNull IntentListenerCallback intentListenerCallback, @NonNull IntentListenerCallback intentListenerCallback,
@NonNull List<String> displayCategories, @NonNull Set<String> displayCategories,
boolean showTasksInHostDeviceRecents) { boolean showTasksInHostDeviceRecents) {
super(); super();
mAllowedUsers = allowedUsers; mAllowedUsers = allowedUsers;

View File

@@ -97,6 +97,7 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Set;
import java.util.function.Consumer; import java.util.function.Consumer;
@@ -830,7 +831,7 @@ final class VirtualDeviceImpl extends IVirtualDevice.Stub
} }
private GenericWindowPolicyController createWindowPolicyController( private GenericWindowPolicyController createWindowPolicyController(
@NonNull List<String> displayCategories) { @NonNull Set<String> displayCategories) {
final GenericWindowPolicyController gwpc = final GenericWindowPolicyController gwpc =
new GenericWindowPolicyController(FLAG_SECURE, new GenericWindowPolicyController(FLAG_SECURE,
SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS, SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS,

View File

@@ -285,7 +285,7 @@ public class VirtualDisplayAdapter extends DisplayAdapter {
mUniqueIndex = uniqueIndex; mUniqueIndex = uniqueIndex;
mIsDisplayOn = surface != null; mIsDisplayOn = surface != null;
mDisplayIdToMirror = virtualDisplayConfig.getDisplayIdToMirror(); mDisplayIdToMirror = virtualDisplayConfig.getDisplayIdToMirror();
mIsWindowManagerMirroring = virtualDisplayConfig.isWindowManagerMirroring(); mIsWindowManagerMirroring = virtualDisplayConfig.isWindowManagerMirroringEnabled();
} }
@Override @Override

View File

@@ -130,7 +130,6 @@ import org.mockito.MockitoAnnotations;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.function.Consumer; import java.util.function.Consumer;
@@ -283,7 +282,7 @@ public class VirtualDeviceManagerServiceTest {
return blockedActivities; return blockedActivities;
} }
private Intent createRestrictedActivityBlockedIntent(List displayCategories, private Intent createRestrictedActivityBlockedIntent(Set<String> displayCategories,
String targetDisplayCategory) { String targetDisplayCategory) {
when(mDisplayManagerInternalMock.createVirtualDisplay(any(), any(), any(), any(), when(mDisplayManagerInternalMock.createVirtualDisplay(any(), any(), any(), any(),
eq(NONBLOCKED_APP_PACKAGE_NAME))).thenReturn(DISPLAY_ID_1); eq(NONBLOCKED_APP_PACKAGE_NAME))).thenReturn(DISPLAY_ID_1);
@@ -1634,7 +1633,7 @@ public class VirtualDeviceManagerServiceTest {
@Test @Test
public void nonRestrictedActivityOnRestrictedVirtualDisplay_startBlockedAlertActivity() { public void nonRestrictedActivityOnRestrictedVirtualDisplay_startBlockedAlertActivity() {
Intent blockedAppIntent = createRestrictedActivityBlockedIntent(List.of("abc"), Intent blockedAppIntent = createRestrictedActivityBlockedIntent(Set.of("abc"),
/* targetDisplayCategory= */ null); /* targetDisplayCategory= */ null);
verify(mContext).startActivityAsUser(argThat(intent -> verify(mContext).startActivityAsUser(argThat(intent ->
intent.filterEquals(blockedAppIntent)), any(), any()); intent.filterEquals(blockedAppIntent)), any(), any());
@@ -1642,7 +1641,7 @@ public class VirtualDeviceManagerServiceTest {
@Test @Test
public void restrictedActivityOnRestrictedVirtualDisplay_doesNotStartBlockedAlertActivity() { public void restrictedActivityOnRestrictedVirtualDisplay_doesNotStartBlockedAlertActivity() {
Intent blockedAppIntent = createRestrictedActivityBlockedIntent(List.of("abc"), "abc"); Intent blockedAppIntent = createRestrictedActivityBlockedIntent(Set.of("abc"), "abc");
verify(mContext, never()).startActivityAsUser(argThat(intent -> verify(mContext, never()).startActivityAsUser(argThat(intent ->
intent.filterEquals(blockedAppIntent)), any(), any()); intent.filterEquals(blockedAppIntent)), any(), any());
} }
@@ -1650,14 +1649,14 @@ public class VirtualDeviceManagerServiceTest {
@Test @Test
public void restrictedActivityOnNonRestrictedVirtualDisplay_startBlockedAlertActivity() { public void restrictedActivityOnNonRestrictedVirtualDisplay_startBlockedAlertActivity() {
Intent blockedAppIntent = createRestrictedActivityBlockedIntent( Intent blockedAppIntent = createRestrictedActivityBlockedIntent(
/* displayCategories= */ List.of(), "abc"); /* displayCategories= */ Set.of(), "abc");
verify(mContext).startActivityAsUser(argThat(intent -> verify(mContext).startActivityAsUser(argThat(intent ->
intent.filterEquals(blockedAppIntent)), any(), any()); intent.filterEquals(blockedAppIntent)), any(), any());
} }
@Test @Test
public void restrictedActivityNonMatchingRestrictedVirtualDisplay_startBlockedAlertActivity() { public void restrictedActivityNonMatchingRestrictedVirtualDisplay_startBlockedAlertActivity() {
Intent blockedAppIntent = createRestrictedActivityBlockedIntent(List.of("abc"), "def"); Intent blockedAppIntent = createRestrictedActivityBlockedIntent(Set.of("abc"), "def");
verify(mContext).startActivityAsUser(argThat(intent -> verify(mContext).startActivityAsUser(argThat(intent ->
intent.filterEquals(blockedAppIntent)), any(), any()); intent.filterEquals(blockedAppIntent)), any(), any());
} }

View File

@@ -89,7 +89,7 @@ public class VirtualAudioControllerTest {
/* activityBlockedCallback= */ null, /* activityBlockedCallback= */ null,
/* secureWindowCallback= */ null, /* secureWindowCallback= */ null,
/* intentListenerCallback= */ null, /* intentListenerCallback= */ null,
/* displayCategories= */ new ArrayList<>(), /* displayCategories= */ new ArraySet<>(),
/* showTasksInHostDeviceRecents= */ true); /* showTasksInHostDeviceRecents= */ true);
} }

View File

@@ -967,7 +967,7 @@ public class DisplayManagerServiceTest {
final VirtualDisplayConfig.Builder builder2 = new VirtualDisplayConfig.Builder( final VirtualDisplayConfig.Builder builder2 = new VirtualDisplayConfig.Builder(
VIRTUAL_DISPLAY_NAME, width, height, dpi) VIRTUAL_DISPLAY_NAME, width, height, dpi)
.setUniqueId(uniqueId2) .setUniqueId(uniqueId2)
.setWindowManagerMirroring(true); .setWindowManagerMirroringEnabled(true);
final int secondDisplayId = binderService.createVirtualDisplay(builder2.build(), final int secondDisplayId = binderService.createVirtualDisplay(builder2.build(),
mMockAppToken2 /* callback */, null /* projection */, mMockAppToken2 /* callback */, null /* projection */,
PACKAGE_NAME); PACKAGE_NAME);