diff --git a/packages/SystemUI/src/com/android/systemui/touch/TouchInsetManager.java b/packages/SystemUI/src/com/android/systemui/touch/TouchInsetManager.java index f09b2f76e38c4..757b4e50c3f8f 100644 --- a/packages/SystemUI/src/com/android/systemui/touch/TouchInsetManager.java +++ b/packages/SystemUI/src/com/android/systemui/touch/TouchInsetManager.java @@ -108,13 +108,18 @@ public class TouchInsetManager { private void updateTouchRegions() { mExecutor.execute(() -> { final HashMap affectedSurfaces = new HashMap<>(); + if (mTrackedViews.isEmpty()) { + return; + } + mTrackedViews.stream().forEach(view -> { - if (!view.isAttachedToWindow()) { + final AttachedSurfaceControl surface = view.getRootSurfaceControl(); + + // Detached views will not have a surface control. + if (surface == null) { return; } - final AttachedSurfaceControl surface = view.getRootSurfaceControl(); - 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()); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/touch/TouchInsetManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/touch/TouchInsetManagerTest.java index 667099718788f..eb932d29bf5bc 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/touch/TouchInsetManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/touch/TouchInsetManagerTest.java @@ -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