Add a listener when task snapshots change
Since we start recents before we take the snapshot, we need to add
a mechanism to inform recents about task snapshots changes.
We add a new method to TaskStackChangedListener,
onTaskSnapshotChanged, which gets called whenever a task snapshot
changes. Then, SystemUI registers such a listener and updates the
task thumbnail view for the specific task.
Test: Open app, press recents, make sure thumbnail is up-to-date
Bug: 31339431
Change-Id: I01e81b9cd11886da734da671c68d5732aa51009f
diff --git a/services/core/java/com/android/server/am/TaskChangeNotificationController.java b/services/core/java/com/android/server/am/TaskChangeNotificationController.java
index cb20eac..d035fa9 100644
--- a/services/core/java/com/android/server/am/TaskChangeNotificationController.java
+++ b/services/core/java/com/android/server/am/TaskChangeNotificationController.java
@@ -16,6 +16,8 @@
package com.android.server.am;
+import android.app.ActivityManager;
+import android.app.ActivityManager.TaskSnapshot;
import android.app.ITaskStackListener;
import android.app.ActivityManager.TaskDescription;
import android.content.ComponentName;
@@ -43,6 +45,7 @@
static final int NOTIFY_ACTIVITY_REQUESTED_ORIENTATION_CHANGED_LISTENERS = 12;
static final int NOTIFY_TASK_REMOVAL_STARTED_LISTENERS = 13;
static final int NOTIFY_TASK_PROFILE_LOCKED_LISTENERS_MSG = 14;
+ static final int NOTIFY_TASK_SNAPSHOT_CHANGED_LISTENERS_MSG = 15;
// Delay in notifying task stack change listeners (in millis)
static final int NOTIFY_TASK_STACK_CHANGE_LISTENERS_DELAY = 100;
@@ -113,6 +116,10 @@
l.onTaskProfileLocked(m.arg1, m.arg2);
};
+ private final TaskStackConsumer mNotifyTaskSnapshotChanged = (l, m) -> {
+ l.onTaskSnapshotChanged(m.arg1, (TaskSnapshot) m.obj);
+ };
+
@FunctionalInterface
public interface TaskStackConsumer {
void accept(ITaskStackListener t, Message m) throws RemoteException;
@@ -170,7 +177,9 @@
break;
case NOTIFY_TASK_PROFILE_LOCKED_LISTENERS_MSG:
forAllRemoteListeners(mNotifyTaskProfileLocked, msg);
-
+ break;
+ case NOTIFY_TASK_SNAPSHOT_CHANGED_LISTENERS_MSG:
+ forAllRemoteListeners(mNotifyTaskSnapshotChanged, msg);
break;
}
}
@@ -348,4 +357,14 @@
forAllLocalListeners(mNotifyTaskProfileLocked, msg);
msg.sendToTarget();
}
+
+ /**
+ * Notify listeners that the snapshot of a task has changed.
+ */
+ void notifyTaskSnapshotChanged(int taskId, TaskSnapshot snapshot) {
+ final Message msg = mHandler.obtainMessage(NOTIFY_TASK_SNAPSHOT_CHANGED_LISTENERS_MSG,
+ taskId, 0, snapshot);
+ forAllLocalListeners(mNotifyTaskSnapshotChanged, msg);
+ msg.sendToTarget();
+ }
}