Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1e459740 authored by Riddle Hsu's avatar Riddle Hsu
Browse files

Do not use surface crop as touchable region in standard task

This fixes a refactoring error introduced by commit 3213c965.
This change restores the original logic that if a window is in a
task which should crop touchable region by root task, then just
set the root task surface but not replace the region directly.
Otherwise the touchable region of a sub window may occupy the
entire screen.

Bug: 172522375
Test: WindowStateTests#testUpdateInputWindowHandle
      LoginActivityTest#testAutofillTapOutside
Change-Id: I771b44515c6f70ae3713d3b69658497782dde92c
parent 355c78fc
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -326,11 +326,12 @@ final class InputMonitor {
                // the surface hierarchy.
                // TODO(b/168252846): we have some issues with modal-windows, so we need to cross
                // that bridge now that we organize full-screen Tasks.
                inputWindowHandle.replaceTouchableRegionWithCrop(null /* Use this surfaces crop */);
                inputWindowHandle.setTouchableRegionCrop(null /* Use this surfaces crop */);
                inputWindowHandle.setReplaceTouchableRegionWithCrop(true);
                useSurfaceCrop = true;
            } else if (task.cropWindowsToStackBounds() && !w.inFreeformWindowingMode()) {
                inputWindowHandle.replaceTouchableRegionWithCrop(
                        task.getRootTask().getSurfaceControl());
                inputWindowHandle.setTouchableRegionCrop(task.getRootTask().getSurfaceControl());
                inputWindowHandle.setReplaceTouchableRegionWithCrop(false);
                useSurfaceCrop = true;
            }
        }
+0 −5
Original line number Diff line number Diff line
@@ -255,11 +255,6 @@ class InputWindowHandleWrapper {
        mChanged = true;
    }

    void replaceTouchableRegionWithCrop(@Nullable SurfaceControl bounds) {
        setTouchableRegionCrop(bounds);
        setReplaceTouchableRegionWithCrop(true);
    }

    void setTouchableRegionCrop(@Nullable SurfaceControl bounds) {
        if (mHandle.touchableRegionSurfaceControl.get() == bounds) {
            return;
+2 −0
Original line number Diff line number Diff line
@@ -694,6 +694,8 @@ public class WindowStateTests extends WindowTestsBase {
        mDisplayContent.getInputMonitor().populateInputWindowHandle(handleWrapper, win);

        assertTrue(handleWrapper.isChanged());
        // The window of standard resizable task should not use surface crop as touchable region.
        assertFalse(handle.replaceTouchableRegionWithCrop);
        assertEquals(inputChannelToken, handle.token);
        assertEquals(win.mActivityRecord.getInputApplicationHandle(false /* update */),
                handle.inputApplicationHandle);