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

Commit 871cd8fc authored by Bryce Lee's avatar Bryce Lee
Browse files

Do not process root surface control of detached views.

This changelist ensures that TouchInsetManager does not attempt to
process the root surface control of detached views, which will be
null.

Test: TouchInsetManagerTest#testViewOnDetachedHandling
Fixes: 276012096
Change-Id: I8d2953263925a6068100305272f9ea7be7c5c49d
parent d5678fa6
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -108,13 +108,18 @@ public class TouchInsetManager {
        private void updateTouchRegions() {
            mExecutor.execute(() -> {
                final HashMap<AttachedSurfaceControl, Region> affectedSurfaces = new HashMap<>();
                mTrackedViews.stream().forEach(view -> {
                    if (!view.isAttachedToWindow()) {
                if (mTrackedViews.isEmpty()) {
                    return;
                }

                mTrackedViews.stream().forEach(view -> {
                    final AttachedSurfaceControl surface = view.getRootSurfaceControl();

                    // Detached views will not have a surface control.
                    if (surface == null) {
                        return;
                    }

                    if (!affectedSurfaces.containsKey(surface)) {
                        affectedSurfaces.put(surface, Region.obtain());
                    }
@@ -179,6 +184,7 @@ public class TouchInsetManager {
        mSessionRegions.values().stream().forEach(regionMapping -> {
            regionMapping.entrySet().stream().forEach(entry -> {
                final AttachedSurfaceControl surface = entry.getKey();

                if (!affectedSurfaces.containsKey(surface)) {
                    affectedSurfaces.put(surface, Region.obtain());
                }
+2 −1
Original line number Diff line number Diff line
@@ -110,13 +110,14 @@ public class TouchInsetManagerTest extends SysuiTestCase {

        clearInvocations(mAttachedSurfaceControl);
        when(view.isAttachedToWindow()).thenReturn(false);
        when(view.getRootSurfaceControl()).thenReturn(null);

        // Trigger detachment and verify touchable region is set.
        listener.getValue().onViewDetachedFromWindow(view);

        mFakeExecutor.runAllReady();

        verify(mAttachedSurfaceControl).setTouchableRegion(any());
        verify(mAttachedSurfaceControl).setTouchableRegion(eq(null));
    }

    @Test