Loading services/core/java/com/android/server/wm/SafeActivityOptions.java +12 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -373,6 +374,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)) { Loading services/tests/wmtests/src/com/android/server/wm/SafeActivityOptionsTest.java +5 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 { Loading services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java +0 −36 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading
services/core/java/com/android/server/wm/SafeActivityOptions.java +12 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -373,6 +374,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)) { Loading
services/tests/wmtests/src/com/android/server/wm/SafeActivityOptionsTest.java +5 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 { Loading
services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java +0 −36 Original line number Diff line number Diff line Loading @@ -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(); Loading