diff options
| author | 2024-04-04 09:03:29 +0200 | |
|---|---|---|
| committer | 2024-04-09 11:49:01 +0200 | |
| commit | e063c26164b7e4603db57cb2adb84b1e7ff67c26 (patch) | |
| tree | 84023be1c8ba97e5d6a33b7dac356aa1bcbcabe0 | |
| parent | af1f2973bd623ec7024a762188909a3166a31121 (diff) | |
Intercept intents before applying GWPC policy.
Fix: 333444131
Test: presubmit
Change-Id: Ica3d2db17a963edbb8ac88b71d6a51bd9a97c2d2
| -rw-r--r-- | core/java/android/companion/virtual/flags.aconfig | 11 | ||||
| -rw-r--r-- | services/companion/java/com/android/server/companion/virtual/GenericWindowPolicyController.java | 31 |
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; } |