Merge "ScrollCapture: Ignore canReceiveKeys when given a specific task ID" into sc-dev

This commit is contained in:
Matt Casey
2021-03-16 17:53:06 +00:00
committed by Android (Google) Code Review
2 changed files with 35 additions and 5 deletions

View File

@@ -5661,16 +5661,18 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
}
return false; /* continue */
}
if (taskId != INVALID_TASK_ID) {
if (taskId == INVALID_TASK_ID) {
if (!nextWindow.canReceiveKeys()) {
return false; /* continue */
}
} else {
Task task = nextWindow.getTask();
if (task == null || !task.isTaskId(taskId)) {
return false; /* continue */
}
}
if (!nextWindow.canReceiveKeys()) {
return false; /* continue */
}
return true; /* stop */
return true; /* stop, match found */
}
});
}

View File

@@ -117,6 +117,7 @@ import android.view.MotionEvent;
import android.view.Surface;
import android.view.SurfaceControl;
import android.view.SurfaceControl.Transaction;
import android.view.View;
import android.view.WindowManager;
import androidx.test.filters.SmallTest;
@@ -1698,6 +1699,20 @@ public class DisplayContentTests extends WindowTestsBase {
assertEquals(activityWindow, result);
}
@Test
public void testFindScrollCaptureTargetWindow_cantReceiveKeys() {
DisplayContent display = createNewDisplay();
Task stack = createTaskStackOnDisplay(display);
Task task = createTaskInStack(stack, 0 /* userId */);
WindowState activityWindow = createAppWindow(task, TYPE_APPLICATION, "App Window");
WindowState invisible = createWindow(null, TYPE_APPLICATION, "invisible");
invisible.mViewVisibility = View.INVISIBLE; // make canReceiveKeys return false
WindowState result = display.findScrollCaptureTargetWindow(null,
ActivityTaskManager.INVALID_TASK_ID);
assertEquals(activityWindow, result);
}
@Test
public void testFindScrollCaptureTargetWindow_taskId() {
DisplayContent display = createNewDisplay();
@@ -1710,6 +1725,19 @@ public class DisplayContentTests extends WindowTestsBase {
assertEquals(window, result);
}
@Test
public void testFindScrollCaptureTargetWindow_taskIdCantReceiveKeys() {
DisplayContent display = createNewDisplay();
Task stack = createTaskStackOnDisplay(display);
Task task = createTaskInStack(stack, 0 /* userId */);
WindowState window = createAppWindow(task, TYPE_APPLICATION, "App Window");
window.mViewVisibility = View.INVISIBLE; // make canReceiveKeys return false
WindowState behindWindow = createWindow(null, TYPE_SCREENSHOT, display, "Screenshot");
WindowState result = display.findScrollCaptureTargetWindow(null, task.mTaskId);
assertEquals(window, result);
}
@Test
public void testEnsureActivitiesVisibleNotRecursive() {
final TaskDisplayArea mockTda = mock(TaskDisplayArea.class);