Merge "Do not process root surface control of detached views." into udc-dev

This commit is contained in:
Bryce Lee
2023-03-30 13:46:00 +00:00
committed by Android (Google) Code Review
2 changed files with 11 additions and 4 deletions

View File

@@ -108,13 +108,18 @@ public class TouchInsetManager {
private void updateTouchRegions() {
mExecutor.execute(() -> {
final HashMap<AttachedSurfaceControl, Region> 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());
}

View File

@@ -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