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