diff options
Diffstat (limited to 'services')
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(); |