Loading data/etc/services.core.protolog.json +6 −6 Original line number Diff line number Diff line Loading @@ -79,12 +79,6 @@ "group": "WM_DEBUG_WINDOW_TRANSITIONS", "at": "com\/android\/server\/wm\/Transition.java" }, "-2029985709": { "message": "setFocusedTask: taskId=%d", "level": "DEBUG", "group": "WM_DEBUG_FOCUS", "at": "com\/android\/server\/wm\/ActivityTaskManagerService.java" }, "-2024464438": { "message": "app-onAnimationFinished(): mOuter=%s", "level": "DEBUG", Loading Loading @@ -1783,6 +1777,12 @@ "group": "WM_DEBUG_STATES", "at": "com\/android\/server\/wm\/TaskFragment.java" }, "-55185509": { "message": "setFocusedTask: taskId=%d touchedActivity=%s", "level": "DEBUG", "group": "WM_DEBUG_FOCUS", "at": "com\/android\/server\/wm\/ActivityTaskManagerService.java" }, "-50336993": { "message": "moveFocusableActivityToTop: activity=%s", "level": "DEBUG", Loading services/core/java/com/android/server/wm/ActivityTaskManagerService.java +27 −10 Original line number Diff line number Diff line Loading @@ -1881,22 +1881,39 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @Override public void setFocusedTask(int taskId) { enforceTaskPermission("setFocusedTask()"); ProtoLog.d(WM_DEBUG_FOCUS, "setFocusedTask: taskId=%d", taskId); final long callingId = Binder.clearCallingIdentity(); try { synchronized (mGlobalLock) { final Task task = mRootWindowContainer.anyTaskForId(taskId, MATCH_ATTACHED_TASK_ONLY); setFocusedTask(taskId, null /* touchedActivity */); } } finally { Binder.restoreCallingIdentity(callingId); } } void setFocusedTask(int taskId, ActivityRecord touchedActivity) { ProtoLog.d(WM_DEBUG_FOCUS, "setFocusedTask: taskId=%d touchedActivity=%s", taskId, touchedActivity); final Task task = mRootWindowContainer.anyTaskForId(taskId, MATCH_ATTACHED_TASK_ONLY); if (task == null) { return; } final ActivityRecord r = task.topRunningActivityLocked(); if (r != null && r.moveFocusableActivityToTop("setFocusedTask")) { mRootWindowContainer.resumeFocusedTasksTopActivities(); } if (r == null) { return; } } finally { Binder.restoreCallingIdentity(callingId); if (r.moveFocusableActivityToTop("setFocusedTask")) { mRootWindowContainer.resumeFocusedTasksTopActivities(); } else if (touchedActivity != null && touchedActivity != r && touchedActivity.getTask() == r.getTask() && touchedActivity.getTaskFragment() != r.getTaskFragment()) { // Set the focused app directly since the focused window is not on the // top-most TaskFragment of the top-most Task final DisplayContent displayContent = touchedActivity.getDisplayContent(); displayContent.setFocusedApp(touchedActivity); mWindowManager.updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL, true /* updateInputWindows */); } } Loading services/core/java/com/android/server/wm/DisplayContent.java +6 −0 Original line number Diff line number Diff line Loading @@ -772,6 +772,12 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp mTmpWindow = null; return true; } if (focusedApp.getTask() == activity.getTask() && focusedApp.getTaskFragment() != activity.getTaskFragment()) { // Do not use the activity window of another TaskFragment in the same leaf Task return false; } } ProtoLog.v(WM_DEBUG_FOCUS_LIGHT, "findFocusedWindow: Found new focus @ %s", w); Loading services/core/java/com/android/server/wm/WindowManagerService.java +3 −3 Original line number Diff line number Diff line Loading @@ -8183,11 +8183,11 @@ public class WindowManagerService extends IWindowManager.Stub displayContent.getParent().positionChildAt(WindowContainer.POSITION_TOP, displayContent, true /* includingParents */); } handleTaskFocusChange(touchedWindow.getTask()); handleTaskFocusChange(touchedWindow.getTask(), touchedWindow.mActivityRecord); } @VisibleForTesting void handleTaskFocusChange(Task task) { void handleTaskFocusChange(Task task, ActivityRecord touchedActivity) { if (task == null) { return; } Loading @@ -8206,7 +8206,7 @@ public class WindowManagerService extends IWindowManager.Stub } } mAtmService.setFocusedTask(task.mTaskId); mAtmService.setFocusedTask(task.mTaskId, touchedActivity); } /** Loading services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java +6 −6 Original line number Diff line number Diff line Loading @@ -107,9 +107,9 @@ public class WindowManagerServiceTests extends WindowTestsBase { Task tappedTask = createTaskInRootTask(tappedRootTask, 0 /* userId */); spyOn(mWm.mAtmService); mWm.handleTaskFocusChange(tappedTask); mWm.handleTaskFocusChange(tappedTask, null /* window */); verify(mWm.mAtmService).setFocusedTask(tappedTask.mTaskId); verify(mWm.mAtmService).setFocusedTask(tappedTask.mTaskId, null); } @Test Loading @@ -128,9 +128,9 @@ public class WindowManagerServiceTests extends WindowTestsBase { Task tappedTask = createTaskInRootTask(tappedRootTask, 0 /* userId */); spyOn(mWm.mAtmService); mWm.handleTaskFocusChange(tappedTask); mWm.handleTaskFocusChange(tappedTask, null /* window */); verify(mWm.mAtmService, never()).setFocusedTask(tappedTask.mTaskId); verify(mWm.mAtmService, never()).setFocusedTask(tappedTask.mTaskId, null); } @Test Loading @@ -151,9 +151,9 @@ public class WindowManagerServiceTests extends WindowTestsBase { Task tappedTask = createTaskInRootTask(tappedRootTask, 0 /* userId */); spyOn(mWm.mAtmService); mWm.handleTaskFocusChange(tappedTask); mWm.handleTaskFocusChange(tappedTask, null /* window */); verify(mWm.mAtmService).setFocusedTask(tappedTask.mTaskId); verify(mWm.mAtmService).setFocusedTask(tappedTask.mTaskId, null); } @Test Loading Loading
data/etc/services.core.protolog.json +6 −6 Original line number Diff line number Diff line Loading @@ -79,12 +79,6 @@ "group": "WM_DEBUG_WINDOW_TRANSITIONS", "at": "com\/android\/server\/wm\/Transition.java" }, "-2029985709": { "message": "setFocusedTask: taskId=%d", "level": "DEBUG", "group": "WM_DEBUG_FOCUS", "at": "com\/android\/server\/wm\/ActivityTaskManagerService.java" }, "-2024464438": { "message": "app-onAnimationFinished(): mOuter=%s", "level": "DEBUG", Loading Loading @@ -1783,6 +1777,12 @@ "group": "WM_DEBUG_STATES", "at": "com\/android\/server\/wm\/TaskFragment.java" }, "-55185509": { "message": "setFocusedTask: taskId=%d touchedActivity=%s", "level": "DEBUG", "group": "WM_DEBUG_FOCUS", "at": "com\/android\/server\/wm\/ActivityTaskManagerService.java" }, "-50336993": { "message": "moveFocusableActivityToTop: activity=%s", "level": "DEBUG", Loading
services/core/java/com/android/server/wm/ActivityTaskManagerService.java +27 −10 Original line number Diff line number Diff line Loading @@ -1881,22 +1881,39 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @Override public void setFocusedTask(int taskId) { enforceTaskPermission("setFocusedTask()"); ProtoLog.d(WM_DEBUG_FOCUS, "setFocusedTask: taskId=%d", taskId); final long callingId = Binder.clearCallingIdentity(); try { synchronized (mGlobalLock) { final Task task = mRootWindowContainer.anyTaskForId(taskId, MATCH_ATTACHED_TASK_ONLY); setFocusedTask(taskId, null /* touchedActivity */); } } finally { Binder.restoreCallingIdentity(callingId); } } void setFocusedTask(int taskId, ActivityRecord touchedActivity) { ProtoLog.d(WM_DEBUG_FOCUS, "setFocusedTask: taskId=%d touchedActivity=%s", taskId, touchedActivity); final Task task = mRootWindowContainer.anyTaskForId(taskId, MATCH_ATTACHED_TASK_ONLY); if (task == null) { return; } final ActivityRecord r = task.topRunningActivityLocked(); if (r != null && r.moveFocusableActivityToTop("setFocusedTask")) { mRootWindowContainer.resumeFocusedTasksTopActivities(); } if (r == null) { return; } } finally { Binder.restoreCallingIdentity(callingId); if (r.moveFocusableActivityToTop("setFocusedTask")) { mRootWindowContainer.resumeFocusedTasksTopActivities(); } else if (touchedActivity != null && touchedActivity != r && touchedActivity.getTask() == r.getTask() && touchedActivity.getTaskFragment() != r.getTaskFragment()) { // Set the focused app directly since the focused window is not on the // top-most TaskFragment of the top-most Task final DisplayContent displayContent = touchedActivity.getDisplayContent(); displayContent.setFocusedApp(touchedActivity); mWindowManager.updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL, true /* updateInputWindows */); } } Loading
services/core/java/com/android/server/wm/DisplayContent.java +6 −0 Original line number Diff line number Diff line Loading @@ -772,6 +772,12 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp mTmpWindow = null; return true; } if (focusedApp.getTask() == activity.getTask() && focusedApp.getTaskFragment() != activity.getTaskFragment()) { // Do not use the activity window of another TaskFragment in the same leaf Task return false; } } ProtoLog.v(WM_DEBUG_FOCUS_LIGHT, "findFocusedWindow: Found new focus @ %s", w); Loading
services/core/java/com/android/server/wm/WindowManagerService.java +3 −3 Original line number Diff line number Diff line Loading @@ -8183,11 +8183,11 @@ public class WindowManagerService extends IWindowManager.Stub displayContent.getParent().positionChildAt(WindowContainer.POSITION_TOP, displayContent, true /* includingParents */); } handleTaskFocusChange(touchedWindow.getTask()); handleTaskFocusChange(touchedWindow.getTask(), touchedWindow.mActivityRecord); } @VisibleForTesting void handleTaskFocusChange(Task task) { void handleTaskFocusChange(Task task, ActivityRecord touchedActivity) { if (task == null) { return; } Loading @@ -8206,7 +8206,7 @@ public class WindowManagerService extends IWindowManager.Stub } } mAtmService.setFocusedTask(task.mTaskId); mAtmService.setFocusedTask(task.mTaskId, touchedActivity); } /** Loading
services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java +6 −6 Original line number Diff line number Diff line Loading @@ -107,9 +107,9 @@ public class WindowManagerServiceTests extends WindowTestsBase { Task tappedTask = createTaskInRootTask(tappedRootTask, 0 /* userId */); spyOn(mWm.mAtmService); mWm.handleTaskFocusChange(tappedTask); mWm.handleTaskFocusChange(tappedTask, null /* window */); verify(mWm.mAtmService).setFocusedTask(tappedTask.mTaskId); verify(mWm.mAtmService).setFocusedTask(tappedTask.mTaskId, null); } @Test Loading @@ -128,9 +128,9 @@ public class WindowManagerServiceTests extends WindowTestsBase { Task tappedTask = createTaskInRootTask(tappedRootTask, 0 /* userId */); spyOn(mWm.mAtmService); mWm.handleTaskFocusChange(tappedTask); mWm.handleTaskFocusChange(tappedTask, null /* window */); verify(mWm.mAtmService, never()).setFocusedTask(tappedTask.mTaskId); verify(mWm.mAtmService, never()).setFocusedTask(tappedTask.mTaskId, null); } @Test Loading @@ -151,9 +151,9 @@ public class WindowManagerServiceTests extends WindowTestsBase { Task tappedTask = createTaskInRootTask(tappedRootTask, 0 /* userId */); spyOn(mWm.mAtmService); mWm.handleTaskFocusChange(tappedTask); mWm.handleTaskFocusChange(tappedTask, null /* window */); verify(mWm.mAtmService).setFocusedTask(tappedTask.mTaskId); verify(mWm.mAtmService).setFocusedTask(tappedTask.mTaskId, null); } @Test Loading