Merge "Skip moving the focused Task to top if it is already on top" into tm-qpr-dev

This commit is contained in:
Louis Chang
2022-06-28 01:17:30 +00:00
committed by Android (Google) Code Review
3 changed files with 42 additions and 11 deletions

View File

@@ -2605,6 +2605,12 @@
"group": "WM_DEBUG_STATES", "group": "WM_DEBUG_STATES",
"at": "com\/android\/server\/wm\/TaskFragment.java" "at": "com\/android\/server\/wm\/TaskFragment.java"
}, },
"385237117": {
"message": "moveFocusableActivityToTop: already on top and focused, activity=%s",
"level": "DEBUG",
"group": "WM_DEBUG_FOCUS",
"at": "com\/android\/server\/wm\/ActivityRecord.java"
},
"385595355": { "385595355": {
"message": "Starting animation on %s: type=%d, anim=%s", "message": "Starting animation on %s: type=%d, anim=%s",
"level": "VERBOSE", "level": "VERBOSE",
@@ -3409,6 +3415,12 @@
"group": "WM_DEBUG_BOOT", "group": "WM_DEBUG_BOOT",
"at": "com\/android\/server\/wm\/WindowManagerService.java" "at": "com\/android\/server\/wm\/WindowManagerService.java"
}, },
"1239439010": {
"message": "moveFocusableActivityToTop: set focused, activity=%s",
"level": "DEBUG",
"group": "WM_DEBUG_FOCUS",
"at": "com\/android\/server\/wm\/ActivityRecord.java"
},
"1252594551": { "1252594551": {
"message": "Window types in WindowContext and LayoutParams.type should match! Type from LayoutParams is %d, but type from WindowContext is %d", "message": "Window types in WindowContext and LayoutParams.type should match! Type from LayoutParams is %d, but type from WindowContext is %d",
"level": "WARN", "level": "WARN",
@@ -3991,12 +4003,6 @@
"group": "WM_DEBUG_STARTING_WINDOW", "group": "WM_DEBUG_STARTING_WINDOW",
"at": "com\/android\/server\/wm\/ActivityRecord.java" "at": "com\/android\/server\/wm\/ActivityRecord.java"
}, },
"1856211951": {
"message": "moveFocusableActivityToTop: already on top, activity=%s",
"level": "DEBUG",
"group": "WM_DEBUG_FOCUS",
"at": "com\/android\/server\/wm\/ActivityRecord.java"
},
"1856783490": { "1856783490": {
"message": "resumeTopActivity: Restarting %s", "message": "resumeTopActivity: Restarting %s",
"level": "DEBUG", "level": "DEBUG",

View File

@@ -3215,12 +3215,29 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
return false; return false;
} }
if (mRootWindowContainer.getTopResumedActivity() == this // If this activity already positions on the top focused task, moving the task to front
&& getDisplayContent().mFocusedApp == this) { // is not needed. But we still need to ensure this activity is focused because the
ProtoLog.d(WM_DEBUG_FOCUS, "moveFocusableActivityToTop: already on top, " // current focused activity could be another activity in the same Task if activities are
+ "activity=%s", this); // displayed on adjacent TaskFragments.
return !isState(RESUMED); final ActivityRecord currentFocusedApp = mDisplayContent.mFocusedApp;
if (currentFocusedApp != null && currentFocusedApp.task == task) {
final Task topFocusableTask = mDisplayContent.getTask(
(t) -> t.isLeafTask() && t.isFocusable(), true /* traverseTopToBottom */);
if (task == topFocusableTask) {
if (currentFocusedApp == this) {
ProtoLog.d(WM_DEBUG_FOCUS, "moveFocusableActivityToTop: already on top "
+ "and focused, activity=%s", this);
} else {
ProtoLog.d(WM_DEBUG_FOCUS, "moveFocusableActivityToTop: set focused, "
+ "activity=%s", this);
mDisplayContent.setFocusedApp(this);
mAtmService.mWindowManager.updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL,
true /* updateInputWindows */);
}
return !isState(RESUMED);
}
} }
ProtoLog.d(WM_DEBUG_FOCUS, "moveFocusableActivityToTop: activity=%s", this); ProtoLog.d(WM_DEBUG_FOCUS, "moveFocusableActivityToTop: activity=%s", this);
rootTask.moveToFront(reason, task); rootTask.moveToFront(reason, task);

View File

@@ -475,5 +475,13 @@ public class TaskFragmentTest extends WindowTestsBase {
assertFalse(activity0.isLetterboxedForFixedOrientationAndAspectRatio()); assertFalse(activity0.isLetterboxedForFixedOrientationAndAspectRatio());
assertFalse(activity1.isLetterboxedForFixedOrientationAndAspectRatio()); assertFalse(activity1.isLetterboxedForFixedOrientationAndAspectRatio());
assertEquals(SCREEN_ORIENTATION_UNSET, task.getOrientation()); assertEquals(SCREEN_ORIENTATION_UNSET, task.getOrientation());
tf0.setResumedActivity(activity0, "test");
tf1.setResumedActivity(activity1, "test");
mDisplayContent.mFocusedApp = activity1;
// Making the activity0 be the focused activity and ensure the focused app is updated.
activity0.moveFocusableActivityToTop("test");
assertEquals(activity0, mDisplayContent.mFocusedApp);
} }
} }