summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Mark Renouf <mrenouf@google.com> 2019-02-21 15:11:05 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2019-02-21 15:11:05 +0000
commitf9aa3044f2b493272fa1a0254dab7d74a1c83cdc (patch)
tree7a63c4f7670e0c2cbee48268f9bc56352cd40503
parent5786c4e442e465d0985129f3cdfc7a316b1436c2 (diff)
parentc808f069f6674e42e5a99c3deff9459b5b6ada62 (diff)
Merge "Adds TaskInfo to some TaskChangeListener methods"
-rw-r--r--core/java/android/app/ActivityView.java34
-rw-r--r--core/java/android/app/ITaskStackListener.aidl19
-rw-r--r--core/java/android/app/TaskStackListener.java37
-rw-r--r--packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListener.java12
-rw-r--r--packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListeners.java26
-rw-r--r--packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java16
-rw-r--r--services/core/java/com/android/server/wm/ActivityStack.java5
-rw-r--r--services/core/java/com/android/server/wm/ActivityStackSupervisor.java3
-rw-r--r--services/core/java/com/android/server/wm/ActivityTaskManagerService.java2
-rw-r--r--services/core/java/com/android/server/wm/RecentTasks.java4
-rw-r--r--services/core/java/com/android/server/wm/RunningTasks.java4
-rw-r--r--services/core/java/com/android/server/wm/TaskChangeNotificationController.java32
-rw-r--r--services/core/java/com/android/server/wm/TaskRecord.java28
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/TaskRecordTests.java4
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())));