Merge "Change Rounded corner overlay to be in Overlay layer" into tm-dev

This commit is contained in:
Vaibhav Devmurari
2022-06-09 07:59:00 +00:00
committed by Android (Google) Code Review
8 changed files with 31 additions and 6 deletions

View File

@@ -27,6 +27,8 @@ import android.view.InputWindowHandle;
import android.view.SurfaceControl;
import android.view.WindowManager;
import com.android.server.policy.WindowManagerPolicy;
/**
* An internal implementation of an {@link InputMonitor} that uses a spy window.
*
@@ -67,7 +69,9 @@ class GestureMonitorSpyWindow {
final SurfaceControl.Transaction t = new SurfaceControl.Transaction();
t.setInputWindowInfo(mInputSurface, mWindowHandle);
t.setLayer(mInputSurface, Integer.MAX_VALUE);
// Gesture monitor should be above handwriting event surface, hence setting it to
// WindowManagerPolicy.INPUT_DISPLAY_OVERLAY_LAYER + 1
t.setLayer(mInputSurface, WindowManagerPolicy.INPUT_DISPLAY_OVERLAY_LAYER + 1);
t.setPosition(mInputSurface, 0, 0);
t.setCrop(mInputSurface, null /* crop to parent surface */);
t.show(mInputSurface);

View File

@@ -27,6 +27,8 @@ import android.view.InputWindowHandle;
import android.view.SurfaceControl;
import android.view.WindowManager;
import com.android.server.policy.WindowManagerPolicy;
final class HandwritingEventReceiverSurface {
public static final String TAG = HandwritingEventReceiverSurface.class.getSimpleName();
@@ -36,7 +38,8 @@ final class HandwritingEventReceiverSurface {
// is above gesture monitors, then edge-back and swipe-up gestures won't work when this surface
// is intercepting.
// TODO(b/217538817): Specify the ordering in WM by usage.
private static final int HANDWRITING_SURFACE_LAYER = Integer.MAX_VALUE - 1;
private static final int HANDWRITING_SURFACE_LAYER =
WindowManagerPolicy.INPUT_DISPLAY_OVERLAY_LAYER;
private final InputWindowHandle mWindowHandle;
private final InputChannel mClientChannel;

View File

@@ -156,6 +156,10 @@ public interface WindowManagerPolicy extends WindowManagerPolicyConstants {
int FINISH_LAYOUT_REDO_ANIM = 0x0008;
/** Layer for the screen off animation */
int COLOR_FADE_LAYER = 0x40000001;
/** Layer for Input overlays for capturing inputs for gesture detection, etc. */
int INPUT_DISPLAY_OVERLAY_LAYER = 0x7f000000;
/** Layer for Screen Decoration: The top most visible layer just below input overlay layers */
int SCREEN_DECOR_DISPLAY_OVERLAY_LAYER = INPUT_DISPLAY_OVERLAY_LAYER - 1;
/**
* Register shortcuts for window manager to dispatch.

View File

@@ -5392,6 +5392,16 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
return mOverlayLayer;
}
SurfaceControl[] findRoundedCornerOverlays() {
List<SurfaceControl> roundedCornerOverlays = new ArrayList<>();
for (WindowToken token : mTokenMap.values()) {
if (token.mRoundedCornerOverlay) {
roundedCornerOverlays.add(token.mSurfaceControl);
}
}
return roundedCornerOverlays.toArray(new SurfaceControl[0]);
}
/**
* Updates the display's system gesture exclusion.
*

View File

@@ -265,7 +265,7 @@ final class InputManagerCallback implements InputManagerService.WindowManagerCal
.setContainerLayer()
.setName(name)
.setCallsite("createSurfaceForGestureMonitor")
.setParent(dc.getSurfaceControl())
.setParent(dc.getOverlayLayer())
.build();
}
}

View File

@@ -164,6 +164,10 @@ class ScreenRotationAnimation {
.setCaptureSecureLayers(true)
.setAllowProtected(true)
.setSourceCrop(new Rect(0, 0, width, height))
// Exclude rounded corner overlay from screenshot buffer. Rounded
// corner overlay windows are un-rotated during rotation animation
// for a seamless transition.
.setExcludeLayers(displayContent.findRoundedCornerOverlays())
.build();
SurfaceControl.ScreenshotHardwareBuffer screenshotBuffer =
SurfaceControl.captureLayers(args);

View File

@@ -8215,7 +8215,7 @@ public class WindowManagerService extends IWindowManager.Stub
.setContainerLayer()
.setName("IME Handwriting Surface")
.setCallsite("getHandwritingSurfaceForDisplay")
.setParent(dc.getSurfaceControl())
.setParent(dc.getOverlayLayer())
.build();
}
}

View File

@@ -368,7 +368,7 @@ class WindowToken extends WindowContainer<WindowState> {
super.assignRelativeLayer(t,
mDisplayContent.getDefaultTaskDisplayArea().getSplitScreenDividerAnchor(), 1);
} else if (mRoundedCornerOverlay) {
super.assignLayer(t, WindowManagerPolicy.COLOR_FADE_LAYER + 1);
super.assignLayer(t, WindowManagerPolicy.SCREEN_DECOR_DISPLAY_OVERLAY_LAYER);
} else {
super.assignLayer(t, layer);
}
@@ -378,7 +378,7 @@ class WindowToken extends WindowContainer<WindowState> {
SurfaceControl.Builder makeSurface() {
final SurfaceControl.Builder builder = super.makeSurface();
if (mRoundedCornerOverlay) {
builder.setParent(null);
builder.setParent(getDisplayContent().getOverlayLayer());
}
return builder;
}