summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Vladimir Komsiyski <vladokom@google.com> 2024-04-04 09:03:29 +0200
committer Vladimir Komsiyski <vladokom@google.com> 2024-04-09 11:49:01 +0200
commite063c26164b7e4603db57cb2adb84b1e7ff67c26 (patch)
tree84023be1c8ba97e5d6a33b7dac356aa1bcbcabe0
parentaf1f2973bd623ec7024a762188909a3166a31121 (diff)
Intercept intents before applying GWPC policy.
Fix: 333444131 Test: presubmit Change-Id: Ica3d2db17a963edbb8ac88b71d6a51bd9a97c2d2
-rw-r--r--core/java/android/companion/virtual/flags.aconfig11
-rw-r--r--services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java31
2 files changed, 34 insertions, 8 deletions
diff --git a/core/java/android/companion/virtual/flags.aconfig b/core/java/android/companion/virtual/flags.aconfig
index 18c81a2fe8f7..3e23762a4f70 100644
--- a/core/java/android/companion/virtual/flags.aconfig
+++ b/core/java/android/companion/virtual/flags.aconfig
@@ -117,3 +117,14 @@ flag {
description: "Enable virtual stylus input"
bug: "304829446"
}
+
+flag {
+ name: "intercept_intents_before_applying_policy"
+ is_exported: true
+ namespace: "virtual_devices"
+ description: "Apply intent interception before applying activity policy"
+ bug: "333444131"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+} \ No newline at end of file
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 f38d772b56c4..23373f1df63c 100644
--- a/services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java
+++ b/services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java
@@ -28,6 +28,7 @@ import android.annotation.UserIdInt;
import android.app.WindowConfiguration;
import android.app.compat.CompatChanges;
import android.companion.virtual.VirtualDeviceManager.ActivityListener;
+import android.companion.virtual.flags.Flags;
import android.compat.annotation.ChangeId;
import android.compat.annotation.EnabledSince;
import android.content.AttributionSource;
@@ -298,14 +299,28 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController
public boolean canActivityBeLaunched(@NonNull ActivityInfo activityInfo,
@Nullable Intent intent, @WindowConfiguration.WindowingMode int windowingMode,
int launchingFromDisplayId, boolean isNewTask) {
- if (!canContainActivity(activityInfo, windowingMode, launchingFromDisplayId, isNewTask)) {
- notifyActivityBlocked(activityInfo);
- return false;
- }
- if (mIntentListenerCallback != null && intent != null
- && mIntentListenerCallback.shouldInterceptIntent(intent)) {
- Slog.d(TAG, "Virtual device intercepting intent");
- return false;
+ if (Flags.interceptIntentsBeforeApplyingPolicy()) {
+ if (mIntentListenerCallback != null && intent != null
+ && mIntentListenerCallback.shouldInterceptIntent(intent)) {
+ Slog.d(TAG, "Virtual device intercepting intent");
+ return false;
+ }
+ if (!canContainActivity(activityInfo, windowingMode, launchingFromDisplayId,
+ isNewTask)) {
+ notifyActivityBlocked(activityInfo);
+ return false;
+ }
+ } else {
+ if (!canContainActivity(activityInfo, windowingMode, launchingFromDisplayId,
+ isNewTask)) {
+ notifyActivityBlocked(activityInfo);
+ return false;
+ }
+ if (mIntentListenerCallback != null && intent != null
+ && mIntentListenerCallback.shouldInterceptIntent(intent)) {
+ Slog.d(TAG, "Virtual device intercepting intent");
+ return false;
+ }
}
return true;
}