diff options
| author | 2022-03-09 12:07:50 +0800 | |
|---|---|---|
| committer | 2022-03-24 16:39:58 +0000 | |
| commit | ab63d0671cef557fa5b79b6c10c6fca6cad1459b (patch) | |
| tree | 017e37859f07913794ae0061c03ba99a24318380 | |
| parent | 95387ac862c4c4f4a0eae942cdd95120cf1ebba6 (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.java | 4 | ||||
| -rw-r--r-- | services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java | 5 |
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)); |