summaryrefslogtreecommitdiff
path: root/services
diff options
context:
space:
mode:
Diffstat (limited to 'services')
-rw-r--r--services/core/java/com/android/server/wm/SafeActivityOptions.java12
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/SafeActivityOptionsTest.java5
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java36
3 files changed, 17 insertions, 36 deletions
diff --git a/services/core/java/com/android/server/wm/SafeActivityOptions.java b/services/core/java/com/android/server/wm/SafeActivityOptions.java
index 88e534351e2e..73c1357c4a24 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.Manifest.permission.STATUS_BAR_SERVICE;
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;
@@ -372,6 +373,17 @@ public class SafeActivityOptions {
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/SafeActivityOptionsTest.java b/services/tests/wmtests/src/com/android/server/wm/SafeActivityOptionsTest.java
index a92fe3afbd78..76be76f85c39 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SafeActivityOptionsTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SafeActivityOptionsTest.java
@@ -17,6 +17,7 @@
package com.android.server.wm;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
+import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
import static android.content.pm.PackageManager.PERMISSION_DENIED;
import static android.view.Display.DEFAULT_DISPLAY;
@@ -197,6 +198,10 @@ public class SafeActivityOptionsTest {
activityOptions.setRemoteTransition(remoteTransition);
verifySecureExceptionThrown(activityOptions, taskSupervisor);
+ activityOptions = ActivityOptions.makeBasic();
+ activityOptions.setLaunchWindowingMode(WINDOWING_MODE_PINNED);
+ verifySecureExceptionThrown(activityOptions, taskSupervisor);
+
verifySecureExceptionThrown(activityOptions, taskSupervisor,
mock(TaskDisplayArea.class));
} finally {
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 4568c77204a5..24ca929dd2cd 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java
@@ -714,42 +714,6 @@ public class TaskLaunchParamsModifierTests extends
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();