Merge "Update top resumed activity and focused app while adding a task on top" into tm-qpr-dev am: cc159e9abd am: 77e5530a83
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19599364 Change-Id: I8e2d7211c8006578302f9e52e8f42f4e95a0b530 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -3245,7 +3245,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
|
||||
rootTask.moveToFront(reason, task);
|
||||
// Report top activity change to tracking services and WM
|
||||
if (mRootWindowContainer.getTopResumedActivity() == this) {
|
||||
mAtmService.setResumedActivityUncheckLocked(this, reason);
|
||||
mAtmService.setLastResumedActivityUncheckLocked(this, reason);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -4624,7 +4624,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
|
||||
}
|
||||
|
||||
/** Update AMS states when an activity is resumed. */
|
||||
void setResumedActivityUncheckLocked(ActivityRecord r, String reason) {
|
||||
void setLastResumedActivityUncheckLocked(ActivityRecord r, String reason) {
|
||||
final Task task = r.getTask();
|
||||
if (task.isActivityTypeStandard()) {
|
||||
if (mCurAppTimeTracker != r.appTimeTracker) {
|
||||
|
||||
@@ -2083,7 +2083,7 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
|
||||
* activity releases the top state and reports back, message about acquiring top state will be
|
||||
* sent to the new top resumed activity.
|
||||
*/
|
||||
void updateTopResumedActivityIfNeeded() {
|
||||
void updateTopResumedActivityIfNeeded(String reason) {
|
||||
final ActivityRecord prevTopActivity = mTopResumedActivity;
|
||||
final Task topRootTask = mRootWindowContainer.getTopDisplayFocusedRootTask();
|
||||
if (topRootTask == null || topRootTask.getTopResumedActivity() == prevTopActivity) {
|
||||
@@ -2119,6 +2119,12 @@ public class ActivityTaskSupervisor implements RecentTasks.Callbacks {
|
||||
}
|
||||
mService.updateOomAdj();
|
||||
}
|
||||
// Update the last resumed activity and focused app when the top resumed activity changed
|
||||
// because the new top resumed activity might be already resumed and thus won't have
|
||||
// activity state change to update the records to AMS.
|
||||
if (mTopResumedActivity != null) {
|
||||
mService.setLastResumedActivityUncheckLocked(mTopResumedActivity, reason);
|
||||
}
|
||||
scheduleTopResumedActivityStateIfNeeded();
|
||||
|
||||
mService.updateTopApp(mTopResumedActivity);
|
||||
|
||||
@@ -512,7 +512,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
|
||||
void onChildPositionChanged(WindowContainer child) {
|
||||
mWmService.updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL,
|
||||
!mWmService.mPerDisplayFocusEnabled /* updateInputWindows */);
|
||||
mTaskSupervisor.updateTopResumedActivityIfNeeded();
|
||||
mTaskSupervisor.updateTopResumedActivityIfNeeded("onChildPositionChanged");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -920,7 +920,7 @@ class Task extends TaskFragment {
|
||||
// If the original state is resumed, there is no state change to update focused app.
|
||||
// So here makes sure the activity focus is set if it is the top.
|
||||
if (r.isState(RESUMED) && r == mRootWindowContainer.getTopResumedActivity()) {
|
||||
mAtmService.setResumedActivityUncheckLocked(r, reason);
|
||||
mAtmService.setLastResumedActivityUncheckLocked(r, reason);
|
||||
}
|
||||
}
|
||||
if (!animate) {
|
||||
@@ -2433,11 +2433,7 @@ class Task extends TaskFragment {
|
||||
focusableTask.moveToFront(myReason);
|
||||
// Top display focused root task is changed, update top resumed activity if needed.
|
||||
if (rootTask.getTopResumedActivity() != null) {
|
||||
mTaskSupervisor.updateTopResumedActivityIfNeeded();
|
||||
// Set focused app directly because if the next focused activity is already resumed
|
||||
// (e.g. the next top activity is on a different display), there won't have activity
|
||||
// state change to update it.
|
||||
mAtmService.setResumedActivityUncheckLocked(rootTask.getTopResumedActivity(), reason);
|
||||
mTaskSupervisor.updateTopResumedActivityIfNeeded(reason);
|
||||
}
|
||||
return rootTask;
|
||||
}
|
||||
|
||||
@@ -323,6 +323,10 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> {
|
||||
// Clear preferred top because the adding focusable task has a higher z-order.
|
||||
mPreferredTopFocusableRootTask = null;
|
||||
}
|
||||
|
||||
// Update the top resumed activity because the preferred top focusable task may be changed.
|
||||
mAtmService.mTaskSupervisor.updateTopResumedActivityIfNeeded("addChildTask");
|
||||
|
||||
mAtmService.updateSleepIfNeededLocked();
|
||||
onRootTaskOrderChanged(task);
|
||||
}
|
||||
@@ -416,12 +420,7 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> {
|
||||
}
|
||||
|
||||
// Update the top resumed activity because the preferred top focusable task may be changed.
|
||||
mAtmService.mTaskSupervisor.updateTopResumedActivityIfNeeded();
|
||||
|
||||
final ActivityRecord r = child.getTopResumedActivity();
|
||||
if (r != null && r == mRootWindowContainer.getTopResumedActivity()) {
|
||||
mAtmService.setResumedActivityUncheckLocked(r, "positionChildAt");
|
||||
}
|
||||
mAtmService.mTaskSupervisor.updateTopResumedActivityIfNeeded("positionChildTaskAt");
|
||||
|
||||
if (mChildren.indexOf(child) != oldPosition) {
|
||||
onRootTaskOrderChanged(child);
|
||||
|
||||
@@ -460,7 +460,7 @@ class TaskFragment extends WindowContainer<WindowContainer> {
|
||||
|
||||
final ActivityRecord prevR = mResumedActivity;
|
||||
mResumedActivity = r;
|
||||
mTaskSupervisor.updateTopResumedActivityIfNeeded();
|
||||
mTaskSupervisor.updateTopResumedActivityIfNeeded(reason);
|
||||
if (r == null && prevR.mDisplayContent != null
|
||||
&& prevR.mDisplayContent.getFocusedRootTask() == null) {
|
||||
// Only need to notify DWPC when no activity will resume.
|
||||
@@ -773,9 +773,6 @@ class TaskFragment extends WindowContainer<WindowContainer> {
|
||||
Slog.v(TAG, "set resumed activity to:" + record + " reason:" + reason);
|
||||
}
|
||||
setResumedActivity(record, reason + " - onActivityStateChanged");
|
||||
if (record == mRootWindowContainer.getTopResumedActivity()) {
|
||||
mAtmService.setResumedActivityUncheckLocked(record, reason);
|
||||
}
|
||||
mTaskSupervisor.mRecentTasks.add(record.getTask());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -228,7 +228,7 @@ public class ActivityTaskSupervisorTests extends WindowTestsBase {
|
||||
mAtm.getTaskChangeNotificationController();
|
||||
spyOn(taskChangeNotifier);
|
||||
|
||||
mAtm.setResumedActivityUncheckLocked(fullScreenActivityA, "resumeA");
|
||||
mAtm.setLastResumedActivityUncheckLocked(fullScreenActivityA, "resumeA");
|
||||
verify(taskChangeNotifier).notifyTaskFocusChanged(eq(taskA.mTaskId) /* taskId */,
|
||||
eq(true) /* focused */);
|
||||
reset(taskChangeNotifier);
|
||||
@@ -237,7 +237,7 @@ public class ActivityTaskSupervisorTests extends WindowTestsBase {
|
||||
.build();
|
||||
final Task taskB = fullScreenActivityB.getTask();
|
||||
|
||||
mAtm.setResumedActivityUncheckLocked(fullScreenActivityB, "resumeB");
|
||||
mAtm.setLastResumedActivityUncheckLocked(fullScreenActivityB, "resumeB");
|
||||
verify(taskChangeNotifier).notifyTaskFocusChanged(eq(taskA.mTaskId) /* taskId */,
|
||||
eq(false) /* focused */);
|
||||
verify(taskChangeNotifier).notifyTaskFocusChanged(eq(taskB.mTaskId) /* taskId */,
|
||||
@@ -295,6 +295,7 @@ public class ActivityTaskSupervisorTests extends WindowTestsBase {
|
||||
activity1.moveFocusableActivityToTop("test");
|
||||
assertEquals(activity1.getUid(), pendingTopUid[0]);
|
||||
verify(mAtm).updateOomAdj();
|
||||
verify(mAtm).setLastResumedActivityUncheckLocked(any(), eq("test"));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user