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

Commit e063c261 authored by Vladimir Komsiyski's avatar Vladimir Komsiyski
Browse files

Intercept intents before applying GWPC policy.

Fix: 333444131
Test: presubmit
Change-Id: Ica3d2db17a963edbb8ac88b71d6a51bd9a97c2d2
parent af1f2973
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -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
+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;
    }