Input: Let WM compute touchable region 1/2

- For modal windows let WM define the touchable region. This fixes a regression introduced by
  ag/5700485 where input was sent to background windows.
- When calculating input surface position, ignore the transparent region so that we do not
  incorrectly offset the input. This fixes and issue with input offset in AutoDesk drawing app.

Bug: 120615996, 120612739, 120585467, 120604247
Test: Manual testing with apps listed in bugs. Automated tests to follow
Change-Id: I906f1396ccc0c76f602a9903e696eedfc026f7c2
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index d628995..91be71e 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -293,8 +293,10 @@
     return Region(Rect{win}).subtract(exclude).getBounds().toFloatRect();
 }
 
-Rect Layer::computeScreenBounds() const {
-    FloatRect bounds = computeBounds();
+Rect Layer::computeScreenBounds(bool reduceTransparentRegion) const {
+    const State& s(getDrawingState());
+    Region transparentRegion = reduceTransparentRegion ? getActiveTransparentRegion(s) : Region();
+    FloatRect bounds = computeBounds(transparentRegion);
     ui::Transform t = getTransform();
     // Transform to screen space.
     bounds = t.transform(bounds);
@@ -2155,7 +2157,6 @@
     // Position the touchable region relative to frame screen location and restrict it to frame
     // bounds.
     info.touchableRegion = info.touchableRegion.translate(info.frameLeft, info.frameTop);
-    info.touchableRegion = info.touchableRegion.intersect(frame);
     info.visible = isVisible();
     return info;
 }