Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cf213992 authored by Nicholas Sauer's avatar Nicholas Sauer Committed by android-build-merger
Browse files

Merge "Return tasks that belong to a profile from getRunningTasks." into qt-qpr1-dev

am: 912c2ae5

Change-Id: I5454db7a14e0e3aca75c3e66c630b95878880de4
parents cb227741 912c2ae5
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -5228,7 +5228,7 @@ class ActivityStack extends ConfigurationContainer {
     */
    void getRunningTasks(List<TaskRecord> tasksOut, @ActivityType int ignoreActivityType,
            @WindowingMode int ignoreWindowingMode, int callingUid, boolean allowed,
            boolean crossUser) {
            boolean crossUser, ArraySet<Integer> profileIds) {
        boolean focusedStack = mRootActivityContainer.getTopDisplayFocusedStack() == this;
        boolean topTask = true;
        int userId = UserHandle.getUserId(callingUid);
@@ -5239,8 +5239,9 @@ class ActivityStack extends ConfigurationContainer {
                continue;
            }
            if (task.effectiveUid != callingUid) {
                if (task.userId != userId && !crossUser) {
                    // Skip if the caller does not have cross user permission
                if (task.userId != userId && !crossUser && !profileIds.contains(task.userId)) {
                    // Skip if the caller does not have cross user permission or cannot access
                    // the task's profile
                    continue;
                }
                if (!allowed && !task.isActivityTypeHome()) {
+8 −1
Original line number Diff line number Diff line
@@ -215,6 +215,7 @@ import android.telecom.TelecomManager;
import android.text.TextUtils;
import android.text.format.Time;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.EventLog;
import android.util.Log;
import android.util.Slog;
@@ -2526,6 +2527,12 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
        final int callingUid = Binder.getCallingUid();
        final int callingPid = Binder.getCallingPid();
        final boolean crossUser = isCrossUserAllowed(callingPid, callingUid);
        final int[] profileIds = getUserManager().getProfileIds(
                UserHandle.getUserId(callingUid), true);
        ArraySet<Integer> callingProfileIds = new ArraySet<>();
        for (int i = 0; i < profileIds.length; i++) {
            callingProfileIds.add(profileIds[i]);
        }
        ArrayList<ActivityManager.RunningTaskInfo> list = new ArrayList<>();

        synchronized (mGlobalLock) {
@@ -2533,7 +2540,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {

            final boolean allowed = isGetTasksAllowed("getTasks", callingPid, callingUid);
            mRootActivityContainer.getRunningTasks(maxNum, list, ignoreActivityType,
                    ignoreWindowingMode, callingUid, allowed, crossUser);
                    ignoreWindowingMode, callingUid, allowed, crossUser, callingProfileIds);
        }

        return list;
+2 −2
Original line number Diff line number Diff line
@@ -2266,9 +2266,9 @@ class RootActivityContainer extends ConfigurationContainer
    void getRunningTasks(int maxNum, List<ActivityManager.RunningTaskInfo> list,
            @WindowConfiguration.ActivityType int ignoreActivityType,
            @WindowConfiguration.WindowingMode int ignoreWindowingMode, int callingUid,
            boolean allowed, boolean crossUser) {
            boolean allowed, boolean crossUser, ArraySet<Integer> profileIds) {
        mStackSupervisor.mRunningTasks.getTasks(maxNum, list, ignoreActivityType,
                ignoreWindowingMode, mActivityDisplays, callingUid, allowed, crossUser);
                ignoreWindowingMode, mActivityDisplays, callingUid, allowed, crossUser, profileIds);
    }

    void sendPowerHintForLaunchStartIfNeeded(boolean forceSend, ActivityRecord targetActivity) {
+3 −2
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.server.wm;
import android.app.ActivityManager.RunningTaskInfo;
import android.app.WindowConfiguration.ActivityType;
import android.app.WindowConfiguration.WindowingMode;
import android.util.ArraySet;

import java.util.ArrayList;
import java.util.Comparator;
@@ -40,7 +41,7 @@ class RunningTasks {

    void getTasks(int maxNum, List<RunningTaskInfo> list, @ActivityType int ignoreActivityType,
            @WindowingMode int ignoreWindowingMode, ArrayList<ActivityDisplay> activityDisplays,
            int callingUid, boolean allowed, boolean crossUser) {
            int callingUid, boolean allowed, boolean crossUser, ArraySet<Integer> profileIds) {
        // Return early if there are no tasks to fetch
        if (maxNum <= 0) {
            return;
@@ -55,7 +56,7 @@ class RunningTasks {
                final ActivityStack stack = display.getChildAt(stackNdx);
                mTmpStackTasks.clear();
                stack.getRunningTasks(mTmpStackTasks, ignoreActivityType, ignoreWindowingMode,
                        callingUid, allowed, crossUser);
                        callingUid, allowed, crossUser, profileIds);
                mTmpSortedSet.addAll(mTmpStackTasks);
            }
        }
+9 −0
Original line number Diff line number Diff line
@@ -40,6 +40,8 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
import static com.android.server.wm.ActivityStack.REMOVE_TASK_MODE_DESTROYING;
import static com.android.server.wm.ActivityStackSupervisor.ON_TOP;

import static org.mockito.ArgumentMatchers.eq;

import android.app.ActivityManagerInternal;
import android.app.ActivityOptions;
import android.app.AppOpsManager;
@@ -72,6 +74,7 @@ import com.android.server.am.ActivityManagerService;
import com.android.server.am.PendingIntentController;
import com.android.server.appop.AppOpsService;
import com.android.server.firewall.IntentFirewall;
import com.android.server.pm.UserManagerService;
import com.android.server.policy.PermissionPolicyInternal;
import com.android.server.uri.UriGrantsManagerInternal;
import com.android.server.wm.TaskRecord.TaskRecordFactory;
@@ -92,6 +95,7 @@ import java.util.function.Consumer;
 */
class ActivityTestsBase {
    private static int sNextDisplayId = DEFAULT_DISPLAY + 1;
    private static final int[] TEST_USER_PROFILE_IDS = {};

    @Rule
    public final DexmakerShareClassLoaderRule mDexmakerShareClassLoaderRule =
@@ -471,6 +475,11 @@ class ActivityTestsBase {
            // allow background activity starts by default
            doReturn(true).when(this).isBackgroundActivityStartsEnabled();
            doNothing().when(this).updateCpuStats();

            // UserManager
            final UserManagerService ums = mock(UserManagerService.class);
            doReturn(ums).when(this).getUserManager();
            doReturn(TEST_USER_PROFILE_IDS).when(ums).getProfileIds(anyInt(), eq(true));
        }

        void setup(IntentFirewall intentFirewall, PendingIntentController intentController,
Loading