Non-priv apps are not allowed to use always/never lock task mode

It worked oppositely since 2bf2832.

Bug: 162808850
Bug: 158833495
Test: atest ActivityRecordTests
Change-Id: Ic5f1b1531816a90ff341597e6d012a6c62c04480
Merged-In: Ic5f1b1531816a90ff341597e6d012a6c62c04480
(cherry picked from commit 3d494aad99)
This commit is contained in:
Louis Chang
2020-08-04 16:48:49 +08:00
parent 5c344f7431
commit b1dca9a89b
2 changed files with 33 additions and 1 deletions

View File

@@ -1671,7 +1671,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
static int getLockTaskLaunchMode(ActivityInfo aInfo, @Nullable ActivityOptions options) {
int lockTaskLaunchMode = aInfo.lockTaskLaunchMode;
if (aInfo.applicationInfo.isPrivilegedApp()
// Non-priv apps are not allowed to use always or never, fall back to default
if (!aInfo.applicationInfo.isPrivilegedApp()
&& (lockTaskLaunchMode == LOCK_TASK_LAUNCH_MODE_ALWAYS
|| lockTaskLaunchMode == LOCK_TASK_LAUNCH_MODE_NEVER)) {
lockTaskLaunchMode = LOCK_TASK_LAUNCH_MODE_DEFAULT;

View File

@@ -20,6 +20,10 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
import static android.content.pm.ActivityInfo.CONFIG_ORIENTATION;
import static android.content.pm.ActivityInfo.CONFIG_SCREEN_LAYOUT;
import static android.content.pm.ActivityInfo.LOCK_TASK_LAUNCH_MODE_ALWAYS;
import static android.content.pm.ActivityInfo.LOCK_TASK_LAUNCH_MODE_DEFAULT;
import static android.content.pm.ActivityInfo.LOCK_TASK_LAUNCH_MODE_IF_WHITELISTED;
import static android.content.pm.ActivityInfo.LOCK_TASK_LAUNCH_MODE_NEVER;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
@@ -79,6 +83,7 @@ import android.app.servertransaction.PauseActivityItem;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Rect;
@@ -1685,6 +1690,32 @@ public class ActivityRecordTests extends ActivityTestsBase {
.diff(wpc.getRequestedOverrideConfiguration()));
}
@Test
public void testGetLockTaskLaunchMode() {
final ActivityOptions options = ActivityOptions.makeBasic().setLockTaskEnabled(true);
mActivity.info.lockTaskLaunchMode = LOCK_TASK_LAUNCH_MODE_DEFAULT;
assertEquals(LOCK_TASK_LAUNCH_MODE_IF_WHITELISTED,
ActivityRecord.getLockTaskLaunchMode(mActivity.info, options));
mActivity.info.lockTaskLaunchMode = LOCK_TASK_LAUNCH_MODE_ALWAYS;
assertEquals(LOCK_TASK_LAUNCH_MODE_DEFAULT,
ActivityRecord.getLockTaskLaunchMode(mActivity.info, null /*options*/));
mActivity.info.lockTaskLaunchMode = LOCK_TASK_LAUNCH_MODE_NEVER;
assertEquals(LOCK_TASK_LAUNCH_MODE_DEFAULT,
ActivityRecord.getLockTaskLaunchMode(mActivity.info, null /*options*/));
mActivity.info.applicationInfo.privateFlags |= ApplicationInfo.PRIVATE_FLAG_PRIVILEGED;
mActivity.info.lockTaskLaunchMode = LOCK_TASK_LAUNCH_MODE_ALWAYS;
assertEquals(LOCK_TASK_LAUNCH_MODE_ALWAYS,
ActivityRecord.getLockTaskLaunchMode(mActivity.info, null /*options*/));
mActivity.info.lockTaskLaunchMode = LOCK_TASK_LAUNCH_MODE_NEVER;
assertEquals(LOCK_TASK_LAUNCH_MODE_NEVER,
ActivityRecord.getLockTaskLaunchMode(mActivity.info, null /*options*/));
}
/**
* Creates an activity on display. For non-default display request it will also create a new
* display with custom DisplayInfo.