diff options
| author | chaviw <chaviw@google.com> | 2018-11-07 15:52:56 -0800 |
|---|---|---|
| committer | chaviw <chaviw@google.com> | 2018-12-26 17:39:13 -0800 |
| commit | da4c694bffbf14910b34df8370f89751c1aa7ea2 (patch) | |
| tree | 23250d376e17c8325019ac723b25d73ea989d8f6 /core/java/android/app/ActivityView.java | |
| parent | 36d3b7a0777bcfff97902ba36c6d70ac4150972b (diff) | |
Added turn on/off virtual display
VirtualDisplays are considered on if they have a surface and off if they don't.
This causes problems for displays that don't have a surface. Instead,
create a separate API to allow the client to request the surface be on
or off.
To ensure backwards compatibility for VirtualDisplays, set the display
to on or off when the surface is added or removed.
Change-Id: If9d8db94a66d6484ac492a53c1cd8fb7da851b88
Fixes: 119209373
Test: Created surfaceless virtual display that can be manually turned on or off
Diffstat (limited to 'core/java/android/app/ActivityView.java')
| -rw-r--r-- | core/java/android/app/ActivityView.java | 37 |
1 files changed, 14 insertions, 23 deletions
diff --git a/core/java/android/app/ActivityView.java b/core/java/android/app/ActivityView.java index 680fed80d029..d079bddad94d 100644 --- a/core/java/android/app/ActivityView.java +++ b/core/java/android/app/ActivityView.java @@ -16,6 +16,10 @@ package android.app; +import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_DESTROY_CONTENT_ON_REMOVAL; +import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY; +import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC; + import android.annotation.NonNull; import android.annotation.UnsupportedAppUsage; import android.app.ActivityManager.StackInfo; @@ -32,7 +36,6 @@ import android.util.Log; import android.view.IWindowManager; import android.view.InputDevice; import android.view.MotionEvent; -import android.view.Surface; import android.view.SurfaceControl; import android.view.SurfaceHolder; import android.view.SurfaceSession; @@ -81,7 +84,6 @@ public class ActivityView extends ViewGroup { private boolean mOpened; // Protected by mGuard. private final SurfaceControl.Transaction mTmpTransaction = new SurfaceControl.Transaction(); - private Surface mTmpSurface = new Surface(); @UnsupportedAppUsage public ActivityView(Context context) { @@ -309,20 +311,20 @@ public class ActivityView extends ViewGroup { private class SurfaceCallback implements SurfaceHolder.Callback { @Override public void surfaceCreated(SurfaceHolder surfaceHolder) { - mTmpSurface = new Surface(); if (mVirtualDisplay == null) { initVirtualDisplay(new SurfaceSession(surfaceHolder.getSurface())); if (mVirtualDisplay != null && mActivityViewCallback != null) { mActivityViewCallback.onActivityViewReady(ActivityView.this); } } else { - // TODO (b/119209373): DisplayManager determines if a VirtualDisplay is on by - // whether it has a surface. Setting a fake surface here so DisplayManager will - // consider this display on. - mVirtualDisplay.setSurface(mTmpSurface); mTmpTransaction.reparent(mRootSurfaceControl, mSurfaceView.getSurfaceControl().getHandle()).apply(); } + + if (mVirtualDisplay != null) { + mVirtualDisplay.setDisplayState(true); + } + updateLocation(); } @@ -336,10 +338,8 @@ public class ActivityView extends ViewGroup { @Override public void surfaceDestroyed(SurfaceHolder surfaceHolder) { - mTmpSurface.release(); - mTmpSurface = null; if (mVirtualDisplay != null) { - mVirtualDisplay.setSurface(null); + mVirtualDisplay.setDisplayState(false); } cleanTapExcludeRegion(); } @@ -354,15 +354,11 @@ public class ActivityView extends ViewGroup { final int height = mSurfaceView.getHeight(); final DisplayManager displayManager = mContext.getSystemService(DisplayManager.class); - // TODO (b/119209373): DisplayManager determines if a VirtualDisplay is on by - // whether it has a surface. Setting a fake surface here so DisplayManager will consider - // this display on. mVirtualDisplay = displayManager.createVirtualDisplay( - DISPLAY_NAME + "@" + System.identityHashCode(this), - width, height, getBaseDisplayDensity(), mTmpSurface, - DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC - | DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY - | DisplayManager.VIRTUAL_DISPLAY_FLAG_DESTROY_CONTENT_ON_REMOVAL); + DISPLAY_NAME + "@" + System.identityHashCode(this), width, height, + getBaseDisplayDensity(), null, + VIRTUAL_DISPLAY_FLAG_PUBLIC | VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY + | VIRTUAL_DISPLAY_FLAG_DESTROY_CONTENT_ON_REMOVAL); if (mVirtualDisplay == null) { Log.e(TAG, "Failed to initialize ActivityView"); return; @@ -423,11 +419,6 @@ public class ActivityView extends ViewGroup { displayReleased = false; } - if (mTmpSurface != null) { - mTmpSurface.release(); - mTmpSurface = null; - } - if (displayReleased && mActivityViewCallback != null) { mActivityViewCallback.onActivityViewDestroyed(this); } |
