Do activity blocking only on the display associated with the window
change event
Bug: 241589812
Test: manual on gcar_md emulator
Test: atest CarPackageManagerServiceTest
Change-Id: I55045e32961067073ab8897a28d3b8eb7e526b48
diff --git a/service/src/com/android/car/pm/CarPackageManagerService.java b/service/src/com/android/car/pm/CarPackageManagerService.java
index 3511a49..e2b0c4a 100644
--- a/service/src/com/android/car/pm/CarPackageManagerService.java
+++ b/service/src/com/android/car/pm/CarPackageManagerService.java
@@ -1901,7 +1901,18 @@
&& mActivityBlockingActivity.getClassName().contentEquals(
event.getClassName());
if (!receivedFromActivityBlockingActivity) {
- mHandler.post(() -> blockTopActivitiesOnAllDisplaysIfNecessary());
+ int displayId = event.getDisplayId();
+ if (isUxRestrictedOnDisplay(displayId)) {
+ if (DEBUG) {
+ Slogf.d(TAG, "onWindowChange event from package %s on Ux restricted display %d,"
+ + " checking activity blocking", event.getPackageName(), displayId);
+ }
+ // Schedule activity blocking with mHandler to ensure there is no concurrent
+ // activity blocking.
+ mHandler.post(() ->
+ blockTopActivitiesOnDisplayIfNecessary(
+ mActivityService.getVisibleTasks(), displayId));
+ }
} else {
Slogf.d(TAG, "Discarded onWindowChangeEvent received from "
+ "ActivityBlockingActivity");