Merge "Make ActivityViews backing virtual display private" into rvc-dev am: 3bfec32633
Change-Id: Ieb031f9be5e1813a1196a7d91d344543355ec0da
This commit is contained in:
@@ -151,6 +151,7 @@ package android.app {
|
|||||||
ctor public ActivityView(android.content.Context, android.util.AttributeSet);
|
ctor public ActivityView(android.content.Context, android.util.AttributeSet);
|
||||||
ctor public ActivityView(android.content.Context, android.util.AttributeSet, int);
|
ctor public ActivityView(android.content.Context, android.util.AttributeSet, int);
|
||||||
ctor public ActivityView(android.content.Context, android.util.AttributeSet, int, boolean);
|
ctor public ActivityView(android.content.Context, android.util.AttributeSet, int, boolean);
|
||||||
|
ctor public ActivityView(@NonNull android.content.Context, @NonNull android.util.AttributeSet, int, boolean, boolean);
|
||||||
method public int getVirtualDisplayId();
|
method public int getVirtualDisplayId();
|
||||||
method public void onLayout(boolean, int, int, int, int);
|
method public void onLayout(boolean, int, int, int, int);
|
||||||
method public void onLocationChanged();
|
method public void onLocationChanged();
|
||||||
|
|||||||
@@ -90,11 +90,23 @@ public class ActivityView extends ViewGroup implements android.window.TaskEmbedd
|
|||||||
|
|
||||||
public ActivityView(Context context, AttributeSet attrs, int defStyle,
|
public ActivityView(Context context, AttributeSet attrs, int defStyle,
|
||||||
boolean singleTaskInstance) {
|
boolean singleTaskInstance) {
|
||||||
|
this(context, attrs, defStyle, singleTaskInstance, false /* usePublicVirtualDisplay */);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This constructor let's the caller explicitly request a public virtual display as the backing
|
||||||
|
* display. Using a public display is not recommended as it exposes it to other applications,
|
||||||
|
* but it might be needed for backwards compatibility.
|
||||||
|
*/
|
||||||
|
public ActivityView(
|
||||||
|
@NonNull Context context, @NonNull AttributeSet attrs, int defStyle,
|
||||||
|
boolean singleTaskInstance, boolean usePublicVirtualDisplay) {
|
||||||
super(context, attrs, defStyle);
|
super(context, attrs, defStyle);
|
||||||
if (useTaskOrganizer()) {
|
if (useTaskOrganizer()) {
|
||||||
mTaskEmbedder = new TaskOrganizerTaskEmbedder(context, this);
|
mTaskEmbedder = new TaskOrganizerTaskEmbedder(context, this);
|
||||||
} else {
|
} else {
|
||||||
mTaskEmbedder = new VirtualDisplayTaskEmbedder(context, this, singleTaskInstance);
|
mTaskEmbedder = new VirtualDisplayTaskEmbedder(context, this, singleTaskInstance,
|
||||||
|
usePublicVirtualDisplay);
|
||||||
}
|
}
|
||||||
mSurfaceView = new SurfaceView(context);
|
mSurfaceView = new SurfaceView(context);
|
||||||
// Since ActivityView#getAlpha has been overridden, we should use parent class's alpha
|
// Since ActivityView#getAlpha has been overridden, we should use parent class's alpha
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ public class VirtualDisplayTaskEmbedder extends TaskEmbedder {
|
|||||||
// For Virtual Displays
|
// For Virtual Displays
|
||||||
private int mDisplayDensityDpi;
|
private int mDisplayDensityDpi;
|
||||||
private final boolean mSingleTaskInstance;
|
private final boolean mSingleTaskInstance;
|
||||||
|
private final boolean mUsePublicVirtualDisplay;
|
||||||
private VirtualDisplay mVirtualDisplay;
|
private VirtualDisplay mVirtualDisplay;
|
||||||
private Insets mForwardedInsets;
|
private Insets mForwardedInsets;
|
||||||
private DisplayMetrics mTmpDisplayMetrics;
|
private DisplayMetrics mTmpDisplayMetrics;
|
||||||
@@ -78,9 +79,10 @@ public class VirtualDisplayTaskEmbedder extends TaskEmbedder {
|
|||||||
* only applicable if virtual displays are used
|
* only applicable if virtual displays are used
|
||||||
*/
|
*/
|
||||||
public VirtualDisplayTaskEmbedder(Context context, VirtualDisplayTaskEmbedder.Host host,
|
public VirtualDisplayTaskEmbedder(Context context, VirtualDisplayTaskEmbedder.Host host,
|
||||||
boolean singleTaskInstance) {
|
boolean singleTaskInstance, boolean usePublicVirtualDisplay) {
|
||||||
super(context, host);
|
super(context, host);
|
||||||
mSingleTaskInstance = singleTaskInstance;
|
mSingleTaskInstance = singleTaskInstance;
|
||||||
|
mUsePublicVirtualDisplay = usePublicVirtualDisplay;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -97,11 +99,16 @@ public class VirtualDisplayTaskEmbedder extends TaskEmbedder {
|
|||||||
public boolean onInitialize() {
|
public boolean onInitialize() {
|
||||||
final DisplayManager displayManager = mContext.getSystemService(DisplayManager.class);
|
final DisplayManager displayManager = mContext.getSystemService(DisplayManager.class);
|
||||||
mDisplayDensityDpi = getBaseDisplayDensity();
|
mDisplayDensityDpi = getBaseDisplayDensity();
|
||||||
|
|
||||||
|
int virtualDisplayFlags = VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY
|
||||||
|
| VIRTUAL_DISPLAY_FLAG_DESTROY_CONTENT_ON_REMOVAL;
|
||||||
|
if (mUsePublicVirtualDisplay) {
|
||||||
|
virtualDisplayFlags |= VIRTUAL_DISPLAY_FLAG_PUBLIC;
|
||||||
|
}
|
||||||
|
|
||||||
mVirtualDisplay = displayManager.createVirtualDisplay(
|
mVirtualDisplay = displayManager.createVirtualDisplay(
|
||||||
DISPLAY_NAME + "@" + System.identityHashCode(this), mHost.getWidth(),
|
DISPLAY_NAME + "@" + System.identityHashCode(this), mHost.getWidth(),
|
||||||
mHost.getHeight(), mDisplayDensityDpi, null,
|
mHost.getHeight(), mDisplayDensityDpi, null, virtualDisplayFlags);
|
||||||
VIRTUAL_DISPLAY_FLAG_PUBLIC | VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY
|
|
||||||
| VIRTUAL_DISPLAY_FLAG_DESTROY_CONTENT_ON_REMOVAL);
|
|
||||||
|
|
||||||
if (mVirtualDisplay == null) {
|
if (mVirtualDisplay == null) {
|
||||||
Log.e(TAG, "Failed to initialize TaskEmbedder");
|
Log.e(TAG, "Failed to initialize TaskEmbedder");
|
||||||
|
|||||||
Reference in New Issue
Block a user