From f0379de259d77659af0ba40362d870fe74358745 Mon Sep 17 00:00:00 2001 From: Andrii Kulian Date: Wed, 14 Mar 2018 16:24:07 -0700 Subject: [PATCH] Don't set override display info for ActivityView ActivityView content should never be letter- or pillar-boxed and it doesn't have overscan areas, so we can skip setting display override info for a virtual display that backs it. Bug: 72220802 Test: Manually resize with ActivityView demo app Change-Id: I211449eaea50ec5d3214d63e7eb93a1d2ed2c0fd --- core/java/android/app/ActivityView.java | 11 +++- core/java/android/view/IWindowManager.aidl | 10 ++++ .../com/android/server/wm/DisplayContent.java | 13 ++++- .../server/wm/WindowManagerService.java | 56 +++++++++++++++---- .../server/wm/DisplayContentTests.java | 15 +++++ 5 files changed, 91 insertions(+), 14 deletions(-) diff --git a/core/java/android/app/ActivityView.java b/core/java/android/app/ActivityView.java index 5d0143a505f32..7032a2fe21cf0 100644 --- a/core/java/android/app/ActivityView.java +++ b/core/java/android/app/ActivityView.java @@ -27,6 +27,7 @@ import android.os.RemoteException; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.Log; +import android.view.IWindowManager; import android.view.InputDevice; import android.view.InputEvent; import android.view.MotionEvent; @@ -308,8 +309,14 @@ public class ActivityView extends ViewGroup { return; } - mInputForwarder = InputManager.getInstance().createInputForwarder( - mVirtualDisplay.getDisplay().getDisplayId()); + final int displayId = mVirtualDisplay.getDisplay().getDisplayId(); + final IWindowManager wm = WindowManagerGlobal.getWindowManagerService(); + try { + wm.dontOverrideDisplayInfo(displayId); + } catch (RemoteException e) { + e.rethrowAsRuntimeException(); + } + mInputForwarder = InputManager.getInstance().createInputForwarder(displayId); mTaskStackListener = new TaskBackgroundChangeListener(); try { mActivityManager.registerTaskStackListener(mTaskStackListener); diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl index 613e6d8c6b14a..6486230f8e3a8 100644 --- a/core/java/android/view/IWindowManager.aidl +++ b/core/java/android/view/IWindowManager.aidl @@ -428,4 +428,14 @@ interface IWindowManager * on the next user activity. */ void requestUserActivityNotification(); + + /** + * Notify WindowManager that it should not override the info in DisplayManager for the specified + * display. This can disable letter- or pillar-boxing applied in DisplayManager when the metrics + * of the logical display reported from WindowManager do not correspond to the metrics of the + * physical display it is based on. + * + * @param displayId The id of the display. + */ + void dontOverrideDisplayInfo(int displayId); } diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index c35c05dc72124..e2e1690039135 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -305,6 +305,11 @@ class DisplayContent extends WindowContainer mExitingTokens = new ArrayList<>(); @@ -1177,8 +1182,14 @@ class DisplayContent extends WindowContainer