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/wm/TaskWindowContainerController.java b/services/core/java/com/android/server/wm/TaskWindowContainerController.java
index 0e4d048..75b3f3e 100644
--- a/services/core/java/com/android/server/wm/TaskWindowContainerController.java
+++ b/services/core/java/com/android/server/wm/TaskWindowContainerController.java
@@ -18,8 +18,10 @@
import android.app.ActivityManager.TaskSnapshot;
import android.content.res.Configuration;
-import android.graphics.GraphicBuffer;
import android.graphics.Rect;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
import android.util.EventLog;
import android.util.Slog;
@@ -37,14 +39,28 @@
* Test class: {@link TaskWindowContainerControllerTests}
*/
public class TaskWindowContainerController
- extends WindowContainerController<Task, WindowContainerListener> {
+ extends WindowContainerController<Task, TaskWindowContainerListener> {
+
+ private static final int REPORT_SNAPSHOT_CHANGED = 0;
private final int mTaskId;
- public TaskWindowContainerController(int taskId, int stackId, int userId, Rect bounds,
- Configuration overrideConfig, int resizeMode, boolean homeTask, boolean isOnTopLauncher,
- boolean toTop, boolean showForAllUsers) {
- super(null, WindowManagerService.getInstance());
+ private final Handler mHandler = new Handler(Looper.getMainLooper()) {
+
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case REPORT_SNAPSHOT_CHANGED:
+ mListener.onSnapshotChanged((TaskSnapshot) msg.obj);
+ break;
+ }
+ }
+ };
+
+ public TaskWindowContainerController(int taskId, TaskWindowContainerListener listener,
+ int stackId, int userId, Rect bounds, Configuration overrideConfig, int resizeMode,
+ boolean homeTask, boolean isOnTopLauncher, boolean toTop, boolean showForAllUsers) {
+ super(listener, WindowManagerService.getInstance());
mTaskId = taskId;
synchronized(mWindowMap) {
@@ -253,6 +269,10 @@
}
}
+ void reportSnapshotChanged(TaskSnapshot snapshot) {
+ mHandler.obtainMessage(REPORT_SNAPSHOT_CHANGED, snapshot).sendToTarget();
+ }
+
@Override
public String toString() {
return "{TaskWindowContainerController taskId=" + mTaskId + "}";