[RESTRICT AUTOMERGE] Disallow PINNED in setLaunchWindowingMode

- Throw security exception if setLaunchWindowingMode is called with
  WINDOWING_MODE_PINNED
- Deprecated also test cases that are irrelevant after this change

Flag: EXEMPT security fix
Bug: 388029380
Test: atest PinnedStackTests \
            SafeActivityOptionsTest \
            TaskLaunchParamsModifierTests
Change-Id: I9d37d41af3d86f785fd5d85503b544552b39cac4
diff --git a/services/core/java/com/android/server/wm/SafeActivityOptions.java b/services/core/java/com/android/server/wm/SafeActivityOptions.java
index 6d1b5fa..e43fe14 100644
--- a/services/core/java/com/android/server/wm/SafeActivityOptions.java
+++ b/services/core/java/com/android/server/wm/SafeActivityOptions.java
@@ -24,6 +24,7 @@
 import static android.app.ActivityTaskManager.INVALID_TASK_ID;
 import static android.app.WindowConfiguration.ACTIVITY_TYPE_ASSISTANT;
 import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
+import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
 import static android.app.WindowConfiguration.activityTypeToString;
 import static android.content.pm.PackageManager.PERMISSION_DENIED;
 import static android.content.pm.PackageManager.PERMISSION_GRANTED;
@@ -371,6 +372,17 @@
             throw new SecurityException(msg);
         }
 
+        // setLaunchWindowingMode(PINNED) is not allowed, use ActivityOptions#makeLaunchIntoPip
+        // instead which is a public API.
+        if (options.getLaunchWindowingMode() == WINDOWING_MODE_PINNED) {
+            final String msg = "Permission Denial: starting " + getIntentString(intent)
+                    + " from " + callerApp + " (pid=" + callingPid
+                    + ", uid=" + callingUid + ") with"
+                    + " setLaunchWindowingMode=PINNED";
+            Slog.w(TAG, msg);
+            throw new SecurityException(msg);
+        }
+
         final int activityType = options.getLaunchActivityType();
         if (activityType != ACTIVITY_TYPE_UNDEFINED
                 && !isSystemOrSystemUI(callingPid, callingUid)) {
diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java
index 1188f49..6f7cd1e 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java
@@ -612,42 +612,6 @@
                 WINDOWING_MODE_FULLSCREEN);
     }
 
-
-    @Test
-    public void testKeepsPictureInPictureLaunchModeInOptions() {
-        final TestDisplayContent freeformDisplay = createNewDisplayContent(
-                WINDOWING_MODE_FREEFORM);
-
-        final ActivityOptions options = ActivityOptions.makeBasic();
-        options.setLaunchWindowingMode(WINDOWING_MODE_PINNED);
-
-        mCurrent.mPreferredTaskDisplayArea = freeformDisplay.getDefaultTaskDisplayArea();
-
-        assertEquals(RESULT_CONTINUE,
-                new CalculateRequestBuilder().setOptions(options).calculate());
-
-        assertEquivalentWindowingMode(WINDOWING_MODE_PINNED, mResult.mWindowingMode,
-                WINDOWING_MODE_FREEFORM);
-    }
-
-    @Test
-    public void testKeepsPictureInPictureLaunchModeWithBoundsInOptions() {
-        final TestDisplayContent freeformDisplay = createNewDisplayContent(
-                WINDOWING_MODE_FREEFORM);
-
-        final ActivityOptions options = ActivityOptions.makeBasic();
-        options.setLaunchWindowingMode(WINDOWING_MODE_PINNED);
-        options.setLaunchBounds(new Rect(0, 0, 100, 100));
-
-        mCurrent.mPreferredTaskDisplayArea = freeformDisplay.getDefaultTaskDisplayArea();
-
-        assertEquals(RESULT_CONTINUE,
-                new CalculateRequestBuilder().setOptions(options).calculate());
-
-        assertEquivalentWindowingMode(WINDOWING_MODE_PINNED, mResult.mWindowingMode,
-                WINDOWING_MODE_FREEFORM);
-    }
-
     @Test
     public void testKeepsFullscreenLaunchModeInOptionsOnNonFreeformDisplay() {
         final ActivityOptions options = ActivityOptions.makeBasic();