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

Commit de887b35 authored by Evan Rosky's avatar Evan Rosky Committed by Android (Google) Code Review
Browse files

Merge "Make stack queries multi-display aware"

parents b4391346 fd43969c
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -270,6 +270,9 @@ interface IActivityTaskManager {

    List<ActivityManager.StackInfo> getAllStackInfos();
    ActivityManager.StackInfo getStackInfo(int windowingMode, int activityType);
    List<ActivityManager.StackInfo> getAllStackInfosOnDisplay(int displayId);
    ActivityManager.StackInfo getStackInfoOnDisplay(int windowingMode, int activityType,
            int displayId);

    /**
     * Informs ActivityTaskManagerService that the keyguard is showing.
+4 −13
Original line number Diff line number Diff line
@@ -655,20 +655,11 @@ public class TaskEmbedder {
            // color of the surface view during resizing.
            final int displayId = getDisplayId();
            final List<ActivityManager.StackInfo> stackInfoList =
                    mActivityTaskManager.getAllStackInfos();

            // Iterate through stacks from top to bottom.
            final int stackCount = stackInfoList.size();
            for (int i = 0; i < stackCount; i++) {
                final ActivityManager.StackInfo stackInfo = stackInfoList.get(i);
                // Only look for stacks on our virtual display.
                if (stackInfo.displayId != displayId) {
                    continue;
                }
                // Found the topmost stack on target display.
                return stackInfo;
            }
                    mActivityTaskManager.getAllStackInfosOnDisplay(displayId);
            if (stackInfoList.isEmpty()) {
                return null;
            }
            return stackInfoList.get(0);
        }
    }
}
+28 −1
Original line number Diff line number Diff line
@@ -2773,7 +2773,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
        long ident = Binder.clearCallingIdentity();
        try {
            synchronized (mGlobalLock) {
                return mRootActivityContainer.getAllStackInfos();
                return mRootActivityContainer.getAllStackInfos(INVALID_DISPLAY);
            }
        } finally {
            Binder.restoreCallingIdentity(ident);
@@ -2793,6 +2793,33 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
        }
    }

    @Override
    public List<ActivityManager.StackInfo> getAllStackInfosOnDisplay(int displayId) {
        enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, "getAllStackInfos()");
        long ident = Binder.clearCallingIdentity();
        try {
            synchronized (mGlobalLock) {
                return mRootActivityContainer.getAllStackInfos(displayId);
            }
        } finally {
            Binder.restoreCallingIdentity(ident);
        }
    }

    @Override
    public ActivityManager.StackInfo getStackInfoOnDisplay(int windowingMode, int activityType,
            int displayId) {
        enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, "getStackInfo()");
        long ident = Binder.clearCallingIdentity();
        try {
            synchronized (mGlobalLock) {
                return mRootActivityContainer.getStackInfo(windowingMode, activityType, displayId);
            }
        } finally {
            Binder.restoreCallingIdentity(ident);
        }
    }

    @Override
    public void cancelRecentsAnimation(boolean restoreHomeStackPosition) {
        enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, "cancelRecentsAnimation()");
+32 −6
Original line number Diff line number Diff line
@@ -1243,6 +1243,15 @@ class RootActivityContainer extends ConfigurationContainer
        return null;
    }

    private <T extends ActivityStack> T getStack(int windowingMode, int activityType,
            int displayId) {
        ActivityDisplay display = getActivityDisplay(displayId);
        if (display == null) {
            return null;
        }
        return display.getStack(windowingMode, activityType);
    }

    private ActivityManager.StackInfo getStackInfo(ActivityStack stack) {
        final int displayId = stack.mDisplayId;
        final ActivityDisplay display = getActivityDisplay(displayId);
@@ -1296,8 +1305,15 @@ class RootActivityContainer extends ConfigurationContainer
        return (stack != null) ? getStackInfo(stack) : null;
    }

    ArrayList<ActivityManager.StackInfo> getAllStackInfos() {
    ActivityManager.StackInfo getStackInfo(int windowingMode, int activityType, int displayId) {
        final ActivityStack stack = getStack(windowingMode, activityType, displayId);
        return (stack != null) ? getStackInfo(stack) : null;
    }

    /** If displayId == INVALID_DISPLAY, this will get stack infos on all displays */
    ArrayList<ActivityManager.StackInfo> getAllStackInfos(int displayId) {
        ArrayList<ActivityManager.StackInfo> list = new ArrayList<>();
        if (displayId == INVALID_DISPLAY) {
            for (int displayNdx = 0; displayNdx < mActivityDisplays.size(); ++displayNdx) {
                final ActivityDisplay display = mActivityDisplays.get(displayNdx);
                for (int stackNdx = display.getChildCount() - 1; stackNdx >= 0; --stackNdx) {
@@ -1307,6 +1323,16 @@ class RootActivityContainer extends ConfigurationContainer
            }
            return list;
        }
        final ActivityDisplay display = getActivityDisplay(displayId);
        if (display == null) {
            return list;
        }
        for (int stackNdx = display.getChildCount() - 1; stackNdx >= 0; --stackNdx) {
            final ActivityStack stack = display.getChildAt(stackNdx);
            list.add(getStackInfo(stack));
        }
        return list;
    }

    void deferUpdateBounds(int activityType) {
        final ActivityStack stack = getStack(WINDOWING_MODE_UNDEFINED, activityType);