diff options
Diffstat (limited to 'services/surfaceflinger/Layer.cpp')
| -rw-r--r-- | services/surfaceflinger/Layer.cpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index 38662bdaff..0c4b012fe8 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -81,6 +81,7 @@ namespace android { namespace { constexpr int kDumpTableRowLength = 159; +const ui::Transform kIdentityTransform; } // namespace using namespace ftl::flag_operators; @@ -2164,7 +2165,8 @@ void Layer::writeToProtoCommonState(LayerProto* layerInfo, LayerVector::StateSet if ((traceFlags & LayerTracing::TRACE_INPUT) && needsInputInfo()) { WindowInfo info; if (useDrawing) { - info = fillInputInfo(ui::Transform(), /* displayIsSecure */ true); + info = fillInputInfo( + InputDisplayArgs{.transform = &kIdentityTransform, .isSecure = true}); } else { info = state.inputInfo; } @@ -2371,7 +2373,7 @@ void Layer::handleDropInputMode(gui::WindowInfo& info) const { } } -WindowInfo Layer::fillInputInfo(const ui::Transform& displayTransform, bool displayIsSecure) { +WindowInfo Layer::fillInputInfo(const InputDisplayArgs& displayArgs) { if (!hasInputInfo()) { mDrawingState.inputInfo.name = getName(); mDrawingState.inputInfo.ownerUid = mOwnerUid; @@ -2380,12 +2382,21 @@ WindowInfo Layer::fillInputInfo(const ui::Transform& displayTransform, bool disp mDrawingState.inputInfo.displayId = getLayerStack().id; } + const ui::Transform& displayTransform = + displayArgs.transform != nullptr ? *displayArgs.transform : kIdentityTransform; + WindowInfo info = mDrawingState.inputInfo; info.id = sequence; info.displayId = getLayerStack().id; fillInputFrameInfo(info, displayTransform); + if (displayArgs.transform == nullptr) { + // Do not let the window receive touches if it is not associated with a valid display + // transform. We still allow the window to receive keys and prevent ANRs. + info.inputConfig |= WindowInfo::InputConfig::NOT_TOUCHABLE; + } + // For compatibility reasons we let layers which can receive input // receive input before they have actually submitted a buffer. Because // of this we use canReceiveInput instead of isVisible to check the @@ -2403,7 +2414,7 @@ WindowInfo Layer::fillInputInfo(const ui::Transform& displayTransform, bool disp // If the window will be blacked out on a display because the display does not have the secure // flag and the layer has the secure flag set, then drop input. - if (!displayIsSecure && isSecure()) { + if (!displayArgs.isSecure && isSecure()) { info.inputConfig |= WindowInfo::InputConfig::DROP_INPUT; } |