diff options
| author | Chavi Weingarten <chaviw@google.com> | 2019-01-15 23:53:08 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2019-01-15 23:53:08 +0000 |
| commit | f9d106211850390c6ff162ccd1467e6c3ffce219 (patch) | |
| tree | 5b441355dafdae4f0c3bdba9c15e6a637c5b3ab9 /core/java/android | |
| parent | 17e339ca88ed1c2e461088557fcb8bfecd733529 (diff) | |
| parent | da4c694bffbf14910b34df8370f89751c1aa7ea2 (diff) | |
Merge "Added turn on/off virtual display"
Diffstat (limited to 'core/java/android')
4 files changed, 38 insertions, 23 deletions
diff --git a/core/java/android/app/ActivityView.java b/core/java/android/app/ActivityView.java index 57132a72700d..ab8f234766d6 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; @@ -82,7 +85,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(); /** The ActivityView is only allowed to contain one task. */ private final boolean mSingleTaskInstance; @@ -319,20 +321,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()); 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(); } @@ -346,10 +348,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(); } @@ -370,15 +370,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; @@ -443,11 +439,6 @@ public class ActivityView extends ViewGroup { displayReleased = false; } - if (mTmpSurface != null) { - mTmpSurface.release(); - mTmpSurface = null; - } - if (displayReleased && mActivityViewCallback != null) { mActivityViewCallback.onActivityViewDestroyed(this); } diff --git a/core/java/android/hardware/display/DisplayManagerGlobal.java b/core/java/android/hardware/display/DisplayManagerGlobal.java index cda8498c4f01..7e45441c804a 100644 --- a/core/java/android/hardware/display/DisplayManagerGlobal.java +++ b/core/java/android/hardware/display/DisplayManagerGlobal.java @@ -436,6 +436,7 @@ public final class DisplayManagerGlobal { public void setVirtualDisplaySurface(IVirtualDisplayCallback token, Surface surface) { try { mDm.setVirtualDisplaySurface(token, surface); + setVirtualDisplayState(token, surface != null); } catch (RemoteException ex) { throw ex.rethrowFromSystemServer(); } @@ -458,6 +459,14 @@ public final class DisplayManagerGlobal { } } + void setVirtualDisplayState(IVirtualDisplayCallback token, boolean isOn) { + try { + mDm.setVirtualDisplayState(token, isOn); + } catch (RemoteException ex) { + throw ex.rethrowFromSystemServer(); + } + } + /** * Gets the stable device display size, in pixels. */ diff --git a/core/java/android/hardware/display/IDisplayManager.aidl b/core/java/android/hardware/display/IDisplayManager.aidl index 2d81cdfec179..aae8afbcad49 100644 --- a/core/java/android/hardware/display/IDisplayManager.aidl +++ b/core/java/android/hardware/display/IDisplayManager.aidl @@ -82,6 +82,9 @@ interface IDisplayManager { // No permissions required but must be same Uid as the creator. void releaseVirtualDisplay(in IVirtualDisplayCallback token); + // No permissions required but must be same Uid as the creator. + void setVirtualDisplayState(in IVirtualDisplayCallback token, boolean isOn); + // Get a stable metric for the device's display size. No permissions required. Point getStableDisplaySize(); diff --git a/core/java/android/hardware/display/VirtualDisplay.java b/core/java/android/hardware/display/VirtualDisplay.java index d35466605162..bf62c95cf6db 100644 --- a/core/java/android/hardware/display/VirtualDisplay.java +++ b/core/java/android/hardware/display/VirtualDisplay.java @@ -104,6 +104,18 @@ public final class VirtualDisplay { } } + /** + * Sets the on/off state for a virtual display. + * + * @param isOn Whether the display should be on or off. + * @hide + */ + public void setDisplayState(boolean isOn) { + if (mToken != null) { + mGlobal.setVirtualDisplayState(mToken, isOn); + } + } + @Override public String toString() { return "VirtualDisplay{display=" + mDisplay + ", token=" + mToken |
