Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c6483d04 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Intercept intents before applying GWPC policy." into main

parents 42d146b4 e063c261
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -116,3 +116,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
+23 −8
Original line number Diff line number Diff line
@@ -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,7 +299,20 @@ 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)) {
        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;
            }
@@ -307,6 +321,7 @@ public class GenericWindowPolicyController extends DisplayWindowPolicyController
                Slog.d(TAG, "Virtual device intercepting intent");
                return false;
            }
        }
        return true;
    }