diff options
| author | 2019-02-21 15:11:05 +0000 | |
|---|---|---|
| committer | 2019-02-21 15:11:05 +0000 | |
| commit | f9aa3044f2b493272fa1a0254dab7d74a1c83cdc (patch) | |
| tree | 7a63c4f7670e0c2cbee48268f9bc56352cd40503 | |
| parent | 5786c4e442e465d0985129f3cdfc7a316b1436c2 (diff) | |
| parent | c808f069f6674e42e5a99c3deff9459b5b6ada62 (diff) | |
Merge "Adds TaskInfo to some TaskChangeListener methods"
14 files changed, 143 insertions, 83 deletions
diff --git a/core/java/android/app/ActivityView.java b/core/java/android/app/ActivityView.java index e0ae4e37765a..93062245a4b0 100644 --- a/core/java/android/app/ActivityView.java +++ b/core/java/android/app/ActivityView.java @@ -524,9 +524,10 @@ public class ActivityView extends ViewGroup { private class TaskStackListenerImpl extends TaskStackListener { @Override - public void onTaskDescriptionChanged(int taskId, ActivityManager.TaskDescription td) + public void onTaskDescriptionChanged(ActivityManager.RunningTaskInfo taskInfo) throws RemoteException { - if (mVirtualDisplay == null) { + if (mVirtualDisplay == null + || taskInfo.displayId != mVirtualDisplay.getDisplay().getDisplayId()) { return; } @@ -536,14 +537,17 @@ public class ActivityView extends ViewGroup { } // Found the topmost stack on target display. Now check if the topmost task's // description changed. - if (taskId == stackInfo.taskIds[stackInfo.taskIds.length - 1]) { - mSurfaceView.setResizeBackgroundColor(td.getBackgroundColor()); + if (taskInfo.taskId == stackInfo.taskIds[stackInfo.taskIds.length - 1]) { + mSurfaceView.setResizeBackgroundColor( + taskInfo.taskDescription.getBackgroundColor()); } } @Override - public void onTaskMovedToFront(int taskId) throws RemoteException { - if (mActivityViewCallback == null) { + public void onTaskMovedToFront(ActivityManager.RunningTaskInfo taskInfo) + throws RemoteException { + if (mActivityViewCallback == null || mVirtualDisplay == null + || taskInfo.displayId != mVirtualDisplay.getDisplay().getDisplayId()) { return; } @@ -551,14 +555,14 @@ public class ActivityView extends ViewGroup { // if StackInfo was null or unrelated to the "move to front" then there's no use // notifying the callback if (stackInfo != null - && taskId == stackInfo.taskIds[stackInfo.taskIds.length - 1]) { + && taskInfo.taskId == stackInfo.taskIds[stackInfo.taskIds.length - 1]) { mActivityViewCallback.onTaskMovedToFront(stackInfo); } } @Override public void onTaskCreated(int taskId, ComponentName componentName) throws RemoteException { - if (mActivityViewCallback == null) { + if (mActivityViewCallback == null || mVirtualDisplay == null) { return; } @@ -572,17 +576,13 @@ public class ActivityView extends ViewGroup { } @Override - public void onTaskRemovalStarted(int taskId) throws RemoteException { - if (mActivityViewCallback == null) { + public void onTaskRemovalStarted(ActivityManager.RunningTaskInfo taskInfo) + throws RemoteException { + if (mActivityViewCallback == null || mVirtualDisplay == null + || taskInfo.displayId != mVirtualDisplay.getDisplay().getDisplayId()) { return; } - StackInfo stackInfo = getTopMostStackInfo(); - // if StackInfo was null or task is on a different display then there's no use - // notifying the callback - if (stackInfo != null - && taskId == stackInfo.taskIds[stackInfo.taskIds.length - 1]) { - mActivityViewCallback.onTaskRemovalStarted(taskId); - } + mActivityViewCallback.onTaskRemovalStarted(taskInfo.taskId); } private StackInfo getTopMostStackInfo() throws RemoteException { diff --git a/core/java/android/app/ITaskStackListener.aidl b/core/java/android/app/ITaskStackListener.aidl index 2e1e9889eadc..8615f00facd9 100644 --- a/core/java/android/app/ITaskStackListener.aidl +++ b/core/java/android/app/ITaskStackListener.aidl @@ -73,8 +73,12 @@ oneway interface ITaskStackListener { /** * Called when an activity was requested to be launched on a secondary display but was not * allowed there. + * + * @param taskInfo info about the Activity's task + * @param requestedDisplayId the id of the requested launch display */ - void onActivityLaunchOnSecondaryDisplayFailed(); + void onActivityLaunchOnSecondaryDisplayFailed(in ActivityManager.RunningTaskInfo taskInfo, + int requestedDisplayId); /** * Called when a task is added. @@ -94,18 +98,17 @@ oneway interface ITaskStackListener { /** * Called when a task is moved to the front of its stack. * - * @param taskId id of the task. + * @param taskInfo info about the task which moved */ - void onTaskMovedToFront(int taskId); + void onTaskMovedToFront(in ActivityManager.RunningTaskInfo taskInfo); /** * Called when a task’s description is changed due to an activity calling * ActivityManagerService.setTaskDescription * - * @param taskId id of the task. - * @param td the new TaskDescription. + * @param taskInfo info about the task which changed, with {@link TaskInfo#taskDescription} */ - void onTaskDescriptionChanged(int taskId, in ActivityManager.TaskDescription td); + void onTaskDescriptionChanged(in ActivityManager.RunningTaskInfo taskInfo); /** * Called when a activity’s orientation is changed due to it calling @@ -120,8 +123,10 @@ oneway interface ITaskStackListener { * Called when the task is about to be finished but before its surfaces are * removed from the window manager. This allows interested parties to * perform relevant animations before the window disappears. + * + * @param taskInfo info about the task being removed */ - void onTaskRemovalStarted(int taskId); + void onTaskRemovalStarted(in ActivityManager.RunningTaskInfo taskInfo); /** * Called when the task has been put in a locked state because one or more of the diff --git a/core/java/android/app/TaskStackListener.java b/core/java/android/app/TaskStackListener.java index e23352a533e3..fcc76ac8bc40 100644 --- a/core/java/android/app/TaskStackListener.java +++ b/core/java/android/app/TaskStackListener.java @@ -70,6 +70,16 @@ public abstract class TaskStackListener extends ITaskStackListener.Stub { } @Override + public void onActivityLaunchOnSecondaryDisplayFailed(ActivityManager.RunningTaskInfo taskInfo, + int requestedDisplayId) throws RemoteException { + onActivityLaunchOnSecondaryDisplayFailed(); + } + + /** + * @deprecated see {@link + * #onActivityLaunchOnSecondaryDisplayFailed(ActivityManager.RunningTaskInfo, int)} + */ + @Deprecated @UnsupportedAppUsage public void onActivityLaunchOnSecondaryDisplayFailed() throws RemoteException { } @@ -84,15 +94,42 @@ public abstract class TaskStackListener extends ITaskStackListener.Stub { } @Override + public void onTaskMovedToFront(ActivityManager.RunningTaskInfo taskInfo) + throws RemoteException { + onTaskMovedToFront(taskInfo.taskId); + } + + /** + * @deprecated see {@link #onTaskMovedToFront(ActivityManager.RunningTaskInfo)} + */ + @Deprecated @UnsupportedAppUsage public void onTaskMovedToFront(int taskId) throws RemoteException { } @Override + public void onTaskRemovalStarted(ActivityManager.RunningTaskInfo taskInfo) + throws RemoteException { + onTaskRemovalStarted(taskInfo.taskId); + } + + /** + * @deprecated see {@link #onTaskRemovalStarted(ActivityManager.RunningTaskInfo)} + */ + @Deprecated public void onTaskRemovalStarted(int taskId) throws RemoteException { } @Override + public void onTaskDescriptionChanged(ActivityManager.RunningTaskInfo taskInfo) + throws RemoteException { + onTaskDescriptionChanged(taskInfo.taskId, taskInfo.taskDescription); + } + + /** + * @deprecated see {@link #onTaskDescriptionChanged(ActivityManager.RunningTaskInfo)} + */ + @Deprecated public void onTaskDescriptionChanged(int taskId, ActivityManager.TaskDescription td) throws RemoteException { } diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListener.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListener.java index f9aa8da5e11e..3d2f61ea027f 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListener.java +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListener.java @@ -16,7 +16,7 @@ package com.android.systemui.shared.system; -import android.app.ActivityManager.TaskSnapshot; +import android.app.ActivityManager.RunningTaskInfo; import android.content.ComponentName; import android.os.UserHandle; import android.util.Log; @@ -43,10 +43,20 @@ public abstract class TaskStackChangeListener { public void onActivityForcedResizable(String packageName, int taskId, int reason) { } public void onActivityDismissingDockedStack() { } public void onActivityLaunchOnSecondaryDisplayFailed() { } + + public void onActivityLaunchOnSecondaryDisplayFailed(RunningTaskInfo taskInfo) { + onActivityLaunchOnSecondaryDisplayFailed(); + } + public void onTaskProfileLocked(int taskId, int userId) { } public void onTaskCreated(int taskId, ComponentName componentName) { } public void onTaskRemoved(int taskId) { } public void onTaskMovedToFront(int taskId) { } + + public void onTaskMovedToFront(RunningTaskInfo taskInfo) { + onTaskMovedToFront(taskInfo.taskId); + } + public void onActivityRequestedOrientationChanged(int taskId, int requestedOrientation) { } /** diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListeners.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListeners.java index 628b3c6e21dc..a9ac42f5be1e 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListeners.java +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListeners.java @@ -16,8 +16,9 @@ package com.android.systemui.shared.system; -import android.app.ActivityTaskManager; +import android.app.ActivityManager.RunningTaskInfo; import android.app.ActivityManager.TaskSnapshot; +import android.app.ActivityTaskManager; import android.app.IActivityManager; import android.app.TaskStackListener; import android.content.ComponentName; @@ -132,8 +133,11 @@ public class TaskStackChangeListeners extends TaskStackListener { } @Override - public void onActivityLaunchOnSecondaryDisplayFailed() throws RemoteException { - mHandler.sendEmptyMessage(H.ON_ACTIVITY_LAUNCH_ON_SECONDARY_DISPLAY_FAILED); + public void onActivityLaunchOnSecondaryDisplayFailed(RunningTaskInfo taskInfo, + int requestedDisplayId) throws RemoteException { + mHandler.obtainMessage(H.ON_ACTIVITY_LAUNCH_ON_SECONDARY_DISPLAY_FAILED, requestedDisplayId, + 0 /* unused */, + taskInfo).sendToTarget(); } @Override @@ -157,8 +161,9 @@ public class TaskStackChangeListeners extends TaskStackListener { } @Override - public void onTaskMovedToFront(int taskId) throws RemoteException { - mHandler.obtainMessage(H.ON_TASK_MOVED_TO_FRONT, taskId, 0).sendToTarget(); + public void onTaskMovedToFront(RunningTaskInfo taskInfo) + throws RemoteException { + mHandler.obtainMessage(H.ON_TASK_MOVED_TO_FRONT, taskInfo).sendToTarget(); } @Override @@ -258,8 +263,10 @@ public class TaskStackChangeListeners extends TaskStackListener { break; } case ON_ACTIVITY_LAUNCH_ON_SECONDARY_DISPLAY_FAILED: { + final RunningTaskInfo info = (RunningTaskInfo) msg.obj; for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) { - mTaskStackListeners.get(i).onActivityLaunchOnSecondaryDisplayFailed(); + mTaskStackListeners.get(i) + .onActivityLaunchOnSecondaryDisplayFailed(info); } break; } @@ -283,15 +290,16 @@ public class TaskStackChangeListeners extends TaskStackListener { break; } case ON_TASK_MOVED_TO_FRONT: { + final RunningTaskInfo info = (RunningTaskInfo) msg.obj; for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) { - mTaskStackListeners.get(i).onTaskMovedToFront(msg.arg1); + mTaskStackListeners.get(i).onTaskMovedToFront(info); } break; } case ON_ACTIVITY_REQUESTED_ORIENTATION_CHANGE: { for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) { - mTaskStackListeners.get(i).onActivityRequestedOrientationChanged( - msg.arg1, msg.arg2); + mTaskStackListeners.get(i) + .onActivityRequestedOrientationChanged(msg.arg1, msg.arg2); } break; } diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java index 0832296b7dab..505fbae14477 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java @@ -25,6 +25,7 @@ import static com.android.systemui.statusbar.notification.NotificationAlertingMa import android.annotation.Nullable; import android.app.ActivityManager; +import android.app.ActivityManager.RunningTaskInfo; import android.app.ActivityTaskManager; import android.app.IActivityTaskManager; import android.app.INotificationManager; @@ -491,15 +492,8 @@ public class BubbleController implements BubbleExpandedView.OnBubbleBlockedListe } @Override - public void onTaskMovedToFront(int taskId) { - ActivityManager.StackInfo stackInfo = null; - try { - stackInfo = findStackInfo(taskId); - } catch (RemoteException e) { - e.rethrowAsRuntimeException(); - } - if (stackInfo != null && stackInfo.displayId == Display.DEFAULT_DISPLAY - && mStackView != null) { + public void onTaskMovedToFront(RunningTaskInfo taskInfo) { + if (mStackView != null && taskInfo.displayId == Display.DEFAULT_DISPLAY) { mStackView.collapseStack(); } } @@ -510,9 +504,9 @@ public class BubbleController implements BubbleExpandedView.OnBubbleBlockedListe * ultimately ended up, displays an error message toast, and calls this method instead of * onTaskMovedToFront. */ - // TODO(b/124058588): add requestedDisplayId to this callback, ignore unless matches @Override - public void onActivityLaunchOnSecondaryDisplayFailed() { + public void onActivityLaunchOnSecondaryDisplayFailed(RunningTaskInfo taskInfo) { + // TODO(b/124058588): move to ActivityView.StateCallback, filter on virtualDisplay ID if (mStackView != null) { mStackView.collapseStack(); } diff --git a/services/core/java/com/android/server/wm/ActivityStack.java b/services/core/java/com/android/server/wm/ActivityStack.java index 932cfd3ae007..a4457e291cc3 100644 --- a/services/core/java/com/android/server/wm/ActivityStack.java +++ b/services/core/java/com/android/server/wm/ActivityStack.java @@ -4019,7 +4019,7 @@ class ActivityStack extends ConfigurationContainer { "Prepare close transition: finishing " + r); if (endTask) { mService.getTaskChangeNotificationController().notifyTaskRemovalStarted( - task.taskId); + task.getTaskInfo()); } getDisplay().mDisplayContent.prepareAppTransition(transit, false); @@ -4924,8 +4924,7 @@ class ActivityStack extends ConfigurationContainer { mRootActivityContainer.resumeFocusedStacksTopActivities(); EventLog.writeEvent(EventLogTags.AM_TASK_TO_FRONT, tr.userId, tr.taskId); - - mService.getTaskChangeNotificationController().notifyTaskMovedToFront(tr.taskId); + mService.getTaskChangeNotificationController().notifyTaskMovedToFront(tr.getTaskInfo()); } finally { getDisplay().continueUpdateImeTarget(); } diff --git a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java index 9823ecc2d858..df760306f12a 100644 --- a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java @@ -2358,7 +2358,8 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks { Slog.w(TAG, "Failed to put " + task + " on display " + preferredDisplayId); // Display a warning toast that we failed to put a task on a secondary display. mService.getTaskChangeNotificationController() - .notifyActivityLaunchOnSecondaryDisplayFailed(); + .notifyActivityLaunchOnSecondaryDisplayFailed(task.getTaskInfo(), + preferredDisplayId); return; } else if (!forceNonResizable && handleForcedResizableTask(task, FORCED_RESIZEABLE_REASON_SECONDARY_DISPLAY)) { diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index 49c020bade49..cb4664f9f683 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -2777,7 +2777,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { r.setTaskDescription(td); final TaskRecord task = r.getTaskRecord(); task.updateTaskDescription(); - mTaskChangeNotificationController.notifyTaskDescriptionChanged(task.taskId, td); + mTaskChangeNotificationController.notifyTaskDescriptionChanged(task.getTaskInfo()); } } } diff --git a/services/core/java/com/android/server/wm/RecentTasks.java b/services/core/java/com/android/server/wm/RecentTasks.java index 15478b49c08e..c6c85fde76b2 100644 --- a/services/core/java/com/android/server/wm/RecentTasks.java +++ b/services/core/java/com/android/server/wm/RecentTasks.java @@ -70,7 +70,6 @@ import android.util.SparseBooleanArray; import com.android.internal.annotations.VisibleForTesting; import com.android.server.am.ActivityManagerService; -import com.android.server.wm.TaskRecord.TaskActivitiesReport; import com.google.android.collect.Sets; @@ -180,7 +179,6 @@ class RecentTasks { private final HashMap<ComponentName, ActivityInfo> mTmpAvailActCache = new HashMap<>(); private final HashMap<String, ApplicationInfo> mTmpAvailAppCache = new HashMap<>(); private final SparseBooleanArray mTmpQuietProfileUserIds = new SparseBooleanArray(); - private final TaskActivitiesReport mTmpReport = new TaskActivitiesReport(); @VisibleForTesting RecentTasks(ActivityTaskManagerService service, TaskPersister taskPersister) { @@ -1587,7 +1585,7 @@ class RecentTasks { */ ActivityManager.RecentTaskInfo createRecentTaskInfo(TaskRecord tr) { ActivityManager.RecentTaskInfo rti = new ActivityManager.RecentTaskInfo(); - tr.fillTaskInfo(rti, mTmpReport); + tr.fillTaskInfo(rti); // Fill in some deprecated values rti.id = rti.isRunning ? rti.taskId : INVALID_TASK_ID; rti.persistentId = rti.taskId; diff --git a/services/core/java/com/android/server/wm/RunningTasks.java b/services/core/java/com/android/server/wm/RunningTasks.java index 34282cdb7ed9..3bf437d38bcc 100644 --- a/services/core/java/com/android/server/wm/RunningTasks.java +++ b/services/core/java/com/android/server/wm/RunningTasks.java @@ -35,8 +35,6 @@ class RunningTasks { private static final Comparator<TaskRecord> LAST_ACTIVE_TIME_COMPARATOR = (o1, o2) -> Long.signum(o2.lastActiveTime - o1.lastActiveTime); - private final TaskRecord.TaskActivitiesReport mTmpReport = - new TaskRecord.TaskActivitiesReport(); private final TreeSet<TaskRecord> mTmpSortedSet = new TreeSet<>(LAST_ACTIVE_TIME_COMPARATOR); private final ArrayList<TaskRecord> mTmpStackTasks = new ArrayList<>(); @@ -80,7 +78,7 @@ class RunningTasks { */ private RunningTaskInfo createRunningTaskInfo(TaskRecord task) { final RunningTaskInfo rti = new RunningTaskInfo(); - task.fillTaskInfo(rti, mTmpReport); + task.fillTaskInfo(rti); // Fill in some deprecated values rti.id = rti.taskId; return rti; diff --git a/services/core/java/com/android/server/wm/TaskChangeNotificationController.java b/services/core/java/com/android/server/wm/TaskChangeNotificationController.java index bb3df02146d7..789f987e3d46 100644 --- a/services/core/java/com/android/server/wm/TaskChangeNotificationController.java +++ b/services/core/java/com/android/server/wm/TaskChangeNotificationController.java @@ -16,9 +16,11 @@ package com.android.server.wm; +import android.app.ActivityManager; +import android.app.ActivityManager.RunningTaskInfo; import android.app.ActivityManager.TaskSnapshot; import android.app.ITaskStackListener; -import android.app.ActivityManager.TaskDescription; +import android.app.TaskInfo; import android.content.ComponentName; import android.os.Binder; import android.os.Handler; @@ -80,11 +82,11 @@ class TaskChangeNotificationController { }; private final TaskStackConsumer mNotifyTaskMovedToFront = (l, m) -> { - l.onTaskMovedToFront(m.arg1); + l.onTaskMovedToFront((RunningTaskInfo) m.obj); }; private final TaskStackConsumer mNotifyTaskDescriptionChanged = (l, m) -> { - l.onTaskDescriptionChanged(m.arg1, (TaskDescription) m.obj); + l.onTaskDescriptionChanged((RunningTaskInfo) m.obj); }; private final TaskStackConsumer mNotifyActivityRequestedOrientationChanged = (l, m) -> { @@ -92,7 +94,7 @@ class TaskChangeNotificationController { }; private final TaskStackConsumer mNotifyTaskRemovalStarted = (l, m) -> { - l.onTaskRemovalStarted(m.arg1); + l.onTaskRemovalStarted((RunningTaskInfo) m.obj); }; private final TaskStackConsumer mNotifyActivityPinned = (l, m) -> { @@ -125,7 +127,7 @@ class TaskChangeNotificationController { }; private final TaskStackConsumer mNotifyActivityLaunchOnSecondaryDisplayFailed = (l, m) -> { - l.onActivityLaunchOnSecondaryDisplayFailed(); + l.onActivityLaunchOnSecondaryDisplayFailed((RunningTaskInfo) m.obj, m.arg1); }; private final TaskStackConsumer mNotifyTaskProfileLocked = (l, m) -> { @@ -344,10 +346,11 @@ class TaskChangeNotificationController { msg.sendToTarget(); } - void notifyActivityLaunchOnSecondaryDisplayFailed() { + void notifyActivityLaunchOnSecondaryDisplayFailed(TaskInfo ti, int requestedDisplayId) { mHandler.removeMessages(NOTIFY_ACTIVITY_LAUNCH_ON_SECONDARY_DISPLAY_FAILED_MSG); final Message msg = mHandler.obtainMessage( - NOTIFY_ACTIVITY_LAUNCH_ON_SECONDARY_DISPLAY_FAILED_MSG); + NOTIFY_ACTIVITY_LAUNCH_ON_SECONDARY_DISPLAY_FAILED_MSG, requestedDisplayId, + 0 /* unused */, ti); forAllLocalListeners(mNotifyActivityLaunchOnSecondaryDisplayFailed, msg); msg.sendToTarget(); } @@ -366,16 +369,15 @@ class TaskChangeNotificationController { msg.sendToTarget(); } - void notifyTaskMovedToFront(int taskId) { - final Message msg = mHandler.obtainMessage(NOTIFY_TASK_MOVED_TO_FRONT_LISTENERS_MSG, - taskId, 0 /* unused */); + void notifyTaskMovedToFront(TaskInfo ti) { + final Message msg = mHandler.obtainMessage(NOTIFY_TASK_MOVED_TO_FRONT_LISTENERS_MSG, ti); forAllLocalListeners(mNotifyTaskMovedToFront, msg); msg.sendToTarget(); } - void notifyTaskDescriptionChanged(int taskId, TaskDescription taskDescription) { + void notifyTaskDescriptionChanged(TaskInfo taskInfo) { final Message msg = mHandler.obtainMessage(NOTIFY_TASK_DESCRIPTION_CHANGED_LISTENERS_MSG, - taskId, 0 /* unused */, taskDescription); + taskInfo); forAllLocalListeners(mNotifyTaskDescriptionChanged, msg); msg.sendToTarget(); @@ -393,12 +395,10 @@ class TaskChangeNotificationController { * the window manager. This allows interested parties to perform relevant animations before * the window disappears. */ - void notifyTaskRemovalStarted(int taskId) { - final Message msg = mHandler.obtainMessage(NOTIFY_TASK_REMOVAL_STARTED_LISTENERS, taskId, - 0 /* unused */); + void notifyTaskRemovalStarted(ActivityManager.RunningTaskInfo taskInfo) { + final Message msg = mHandler.obtainMessage(NOTIFY_TASK_REMOVAL_STARTED_LISTENERS, taskInfo); forAllLocalListeners(mNotifyTaskRemovalStarted, msg); msg.sendToTarget(); - } /** diff --git a/services/core/java/com/android/server/wm/TaskRecord.java b/services/core/java/com/android/server/wm/TaskRecord.java index 9d3112fec0f2..1392762fca66 100644 --- a/services/core/java/com/android/server/wm/TaskRecord.java +++ b/services/core/java/com/android/server/wm/TaskRecord.java @@ -341,6 +341,9 @@ class TaskRecord extends ConfigurationContainer { // TODO: remove after unification Task mTask; + /** Used by fillTaskInfo */ + final TaskActivitiesReport mReuseActivitiesReport = new TaskActivitiesReport(); + /** * Don't use constructor directly. Use {@link #create(ActivityTaskManagerService, int, * ActivityInfo, Intent, TaskDescription)} instead. @@ -2319,26 +2322,24 @@ class TaskRecord extends ConfigurationContainer { /** * Fills in a {@link TaskInfo} with information from this task. * @param info the {@link TaskInfo} to fill in - * @param reuseActivitiesReport a temporary activities report that we can reuse to fetch the - * running activities */ - void fillTaskInfo(TaskInfo info, TaskActivitiesReport reuseActivitiesReport) { - getNumRunningActivities(reuseActivitiesReport); + void fillTaskInfo(TaskInfo info) { + getNumRunningActivities(mReuseActivitiesReport); info.userId = userId; info.stackId = getStackId(); info.taskId = taskId; info.displayId = mStack == null ? Display.INVALID_DISPLAY : mStack.mDisplayId; info.isRunning = getTopActivity() != null; info.baseIntent = new Intent(getBaseIntent()); - info.baseActivity = reuseActivitiesReport.base != null - ? reuseActivitiesReport.base.intent.getComponent() + info.baseActivity = mReuseActivitiesReport.base != null + ? mReuseActivitiesReport.base.intent.getComponent() : null; - info.topActivity = reuseActivitiesReport.top != null - ? reuseActivitiesReport.top.mActivityComponent + info.topActivity = mReuseActivitiesReport.top != null + ? mReuseActivitiesReport.top.mActivityComponent : null; info.origActivity = origActivity; info.realActivity = realActivity; - info.numActivities = reuseActivitiesReport.numActivities; + info.numActivities = mReuseActivitiesReport.numActivities; info.lastActiveTime = lastActiveTime; info.taskDescription = new ActivityManager.TaskDescription(lastTaskDescription); info.supportsSplitScreenMultiWindow = supportsSplitScreenWindowingMode(); @@ -2346,6 +2347,15 @@ class TaskRecord extends ConfigurationContainer { info.configuration.setTo(getConfiguration()); } + /** + * Returns a {@link TaskInfo} with information from this task. + */ + ActivityManager.RunningTaskInfo getTaskInfo() { + ActivityManager.RunningTaskInfo info = new ActivityManager.RunningTaskInfo(); + fillTaskInfo(info); + return info; + } + void dump(PrintWriter pw, String prefix) { pw.print(prefix); pw.print("userId="); pw.print(userId); pw.print(" effectiveUid="); UserHandle.formatUid(pw, effectiveUid); diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java index 388f98ffe4a3..5d0788881704 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java @@ -38,6 +38,7 @@ import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import android.app.ActivityManager; +import android.app.TaskInfo; import android.content.ComponentName; import android.content.Intent; import android.content.pm.ActivityInfo; @@ -109,8 +110,7 @@ public class TaskRecordTests extends ActivityTestsBase { public void testCopyBaseIntentForTaskInfo() { final TaskRecord task = createTaskRecord(1); task.lastTaskDescription = new ActivityManager.TaskDescription(); - final ActivityManager.RecentTaskInfo info = new ActivityManager.RecentTaskInfo(); - task.fillTaskInfo(info, new TaskRecord.TaskActivitiesReport()); + final TaskInfo info = task.getTaskInfo(); // The intent of info should be a copy so assert that they are different instances. assertThat(info.baseIntent, not(sameInstance(task.getBaseIntent()))); |