Merge "Fix regression in unfreezing the recent task list" into tm-qpr-dev

This commit is contained in:
Winson Chung
2023-02-09 23:28:19 +00:00
committed by Android (Google) Code Review
2 changed files with 10 additions and 23 deletions

View File

@@ -3098,27 +3098,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
});
}
/**
* Returns true if the input point is within an app window.
*/
boolean pointWithinAppWindow(int x, int y) {
final int[] targetWindowType = {-1};
final PooledConsumer fn = PooledLambda.obtainConsumer((w, nonArg) -> {
if (targetWindowType[0] != -1) {
return;
}
if (w.isOnScreen() && w.isVisible() && w.getFrame().contains(x, y)) {
targetWindowType[0] = w.mAttrs.type;
return;
}
}, PooledLambda.__(WindowState.class), mTmpRect);
forAllWindows(fn, true /* traverseTopToBottom */);
fn.recycle();
return FIRST_APPLICATION_WINDOW <= targetWindowType[0]
&& targetWindowType[0] <= LAST_APPLICATION_WINDOW;
}
/**
* Find the task whose outside touch area (for resizing) (x, y) falls within.
* Returns null if the touch doesn't fall into a resizing area.

View File

@@ -33,6 +33,8 @@ import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK;
import static android.content.Intent.FLAG_ACTIVITY_NEW_DOCUMENT;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
import static android.os.Process.SYSTEM_UID;
import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW;
import static android.view.WindowManager.LayoutParams.LAST_APPLICATION_WINDOW;
import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_TASKS;
import static com.android.server.wm.ActivityTaskManagerDebugConfig.DEBUG_RECENTS;
@@ -215,10 +217,16 @@ class RecentTasks {
int y = (int) ev.getY();
mService.mH.post(PooledLambda.obtainRunnable((nonArg) -> {
synchronized (mService.mGlobalLock) {
// Unfreeze the task list once we touch down in a task
final RootWindowContainer rac = mService.mRootWindowContainer;
final DisplayContent dc = rac.getDisplayContent(displayId).mDisplayContent;
if (dc.pointWithinAppWindow(x, y)) {
final WindowState win = dc.getTouchableWinAtPointLocked((float) x, (float) y);
if (win == null) {
return;
}
// Unfreeze the task list once we touch down in a task
final boolean isAppWindowTouch = FIRST_APPLICATION_WINDOW <= win.mAttrs.type
&& win.mAttrs.type <= LAST_APPLICATION_WINDOW;
if (isAppWindowTouch) {
final Task stack = mService.getTopDisplayFocusedRootTask();
final Task topTask = stack != null ? stack.getTopMostTask() : null;
resetFreezeTaskListReordering(topTask);