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

Commit 82ea6cb9 authored by David Stevens's avatar David Stevens
Browse files

Switch display uid whitelist from task to activity

Tasks can contain activities from multiple UIDs, so the uid whitelists
for private displays need to be based on activities instead of tasks.

This change also stops keeping track of uids on public displays, since
the uid list is not used for those displays.

Test: android.server.cts.ActivityManagerDisplayTests
Test: #testPermissionLaunchMultiUidTask
Change-Id: I38f1434f581af64f0db40221431994fd5a99bab3
parent ecf0582e
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -2391,6 +2391,10 @@ final class ActivityRecord implements AppWindowContainerListener {
        return (config.uiMode & Configuration.UI_MODE_TYPE_MASK) == UI_MODE_TYPE_VR_HEADSET;
    }

    int getUid() {
        return info.applicationInfo.uid;
    }

    @Override
    public String toString() {
        if (stringName != null) {
+7 −3
Original line number Diff line number Diff line
@@ -741,17 +741,21 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
    /** Checks if there are tasks with specific UID in the stack. */
    boolean isUidPresent(int uid) {
        for (TaskRecord task : mTaskHistory) {
            if (task.effectiveUid == uid) {
            for (ActivityRecord r : task.mActivities) {
                if (r.getUid() == uid) {
                    return true;
                }
            }
        }
        return false;
    }

    /** Get all UIDs that are present in the stack. */
    void getPresentUIDs(IntArray presentUIDs) {
        for (TaskRecord task : mTaskHistory) {
            presentUIDs.add(task.effectiveUid);
            for (ActivityRecord r : task.mActivities) {
                presentUIDs.add(r.getUid());
            }
        }
    }

+5 −1
Original line number Diff line number Diff line
@@ -1632,7 +1632,11 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D
        mDisplayAccessUIDs.clear();
        for (int displayNdx = mActivityDisplays.size() - 1; displayNdx >= 0; --displayNdx) {
            final ActivityDisplay activityDisplay = mActivityDisplays.valueAt(displayNdx);
            mDisplayAccessUIDs.append(activityDisplay.mDisplayId, activityDisplay.getPresentUIDs());
            // Only bother calculating the whitelist for private displays
            if (activityDisplay.isPrivate()) {
                mDisplayAccessUIDs.append(
                        activityDisplay.mDisplayId, activityDisplay.getPresentUIDs());
            }
        }
        // Store updated lists in DisplayManager. Callers from outside of AM should get them there.
        mDisplayManagerInternal.setDisplayAccessUIDs(mDisplayAccessUIDs);
+4 −0
Original line number Diff line number Diff line
@@ -1236,6 +1236,10 @@ final class TaskRecord extends ConfigurationContainer implements TaskWindowConta
            mWindowContainerController.positionChildAt(appController, index);
        }
        r.onOverrideConfigurationSent();

        // Make sure the list of display UID whitelists is updated
        // now that this record is in a new task.
        mService.mStackSupervisor.updateUIDsPresentOnDisplay();
    }

    /**