summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author yuanjiahsu <yuanjiahsu@google.com> 2022-03-09 12:07:50 +0800
committer Yuanjia Hsu <yuanjiahsu@google.com> 2022-03-24 16:39:58 +0000
commitab63d0671cef557fa5b79b6c10c6fca6cad1459b (patch)
tree017e37859f07913794ae0061c03ba99a24318380
parent95387ac862c4c4f4a0eae942cdd95120cf1ebba6 (diff)
Don't send callback with null topActivity
The topActivity defined in ActivityListener#onTopActivityChanged is @NonNull, so GenericWindowPolicyController should not send the callback when topActivity is null. Bug: 222771130 Test: manual testing Change-Id: I227d1d83e0e191975ab45b110909938022bb1d0c
-rw-r--r--core/java/android/companion/virtual/VirtualDeviceManager.java4
-rw-r--r--services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java5
2 files changed, 8 insertions, 1 deletions
diff --git a/core/java/android/companion/virtual/VirtualDeviceManager.java b/core/java/android/companion/virtual/VirtualDeviceManager.java
index a1983ca9ee96..914b321b7506 100644
--- a/core/java/android/companion/virtual/VirtualDeviceManager.java
+++ b/core/java/android/companion/virtual/VirtualDeviceManager.java
@@ -469,6 +469,10 @@ public final class VirtualDeviceManager {
/**
* Called when the top activity is changed.
*
+ * <p>Note: When there are no activities running on the virtual display, the
+ * {@link #onDisplayEmpty(int)} will be called. If the value topActivity is cached, it
+ * should be cleared when {@link #onDisplayEmpty(int)} is called.
+ *
* @param displayId The display ID on which the activity change happened.
* @param topActivity The component name of the top activity.
*/
diff --git a/services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java b/services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java
index 3a26c4611629..f4c24a82ae13 100644
--- a/services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java
+++ b/services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java
@@ -165,7 +165,10 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController
@Override
public void onTopActivityChanged(ComponentName topActivity, int uid) {
- if (mActivityListener != null) {
+ // Don't send onTopActivityChanged() callback when topActivity is null because it's defined
+ // as @NonNull in ActivityListener interface. Sends onDisplayEmpty() callback instead when
+ // there is no activity running on virtual display.
+ if (mActivityListener != null && topActivity != null) {
// Post callback on the main thread so it doesn't block activity launching
mHandler.post(() ->
mActivityListener.onTopActivityChanged(Display.INVALID_DISPLAY, topActivity));