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

Commit 13ae849d authored by Jerry Chang's avatar Jerry Chang Committed by Automerger Merge Worker
Browse files

Merge "Support to get the exact task which IME is attached to" into tm-dev am: 4ab407e5

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16983292

Change-Id: Ic17fba0d06b2a97f1afb8b154b108b8771864ecb
parents d7df1cb3 4ab407e5
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -52,7 +52,7 @@ interface ITaskOrganizerController {
    /** Gets all root tasks on a display (ordered from top-to-bottom) */
    List<ActivityManager.RunningTaskInfo> getRootTasks(int displayId, in int[] activityTypes);

    /** Get the root task which contains the current ime target */
    /** Get the {@link WindowContainerToken} of the task which contains the current ime target */
    WindowContainerToken getImeTarget(int display);

    /**
+1 −1
Original line number Diff line number Diff line
@@ -199,7 +199,7 @@ public class TaskOrganizer extends WindowOrganizer {
        }
    }

    /** Get the root task which contains the current ime target */
    /** Get the {@link WindowContainerToken} of the task which contains the current ime target */
    @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS)
    @Nullable
    public WindowContainerToken getImeTarget(int display) {
+2 −2
Original line number Diff line number Diff line
@@ -1117,9 +1117,9 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
            return SPLIT_POSITION_UNDEFINED;
        }

        if (token.equals(mMainStage.mRootTaskInfo.getToken())) {
        if (mMainStage.containsToken(token)) {
            return getMainStagePosition();
        } else if (token.equals(mSideStage.mRootTaskInfo.getToken())) {
        } else if (mSideStage.containsToken(token)) {
            return getSideStagePosition();
        }

+14 −0
Original line number Diff line number Diff line
@@ -124,6 +124,20 @@ class StageTaskListener implements ShellTaskOrganizer.TaskListener {
        return mChildrenTaskInfo.contains(taskId);
    }

    boolean containsToken(WindowContainerToken token) {
        if (token.equals(mRootTaskInfo.token)) {
            return true;
        }

        for (int i = mChildrenTaskInfo.size() - 1; i >= 0; --i) {
            if (token.equals(mChildrenTaskInfo.valueAt(i).token)) {
                return true;
            }
        }

        return false;
    }

    /**
     * Returns the top visible child task's id.
     */
+11 −4
Original line number Diff line number Diff line
@@ -800,17 +800,24 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub {
        final long origId = Binder.clearCallingIdentity();
        try {
            synchronized (mGlobalLock) {
                DisplayContent dc = mService.mWindowManager.mRoot
                final DisplayContent dc = mService.mWindowManager.mRoot
                        .getDisplayContent(displayId);
                if (dc == null || dc.getImeTarget(IME_TARGET_LAYERING) == null) {
                if (dc == null) {
                    return null;
                }

                final InsetsControlTarget imeLayeringTarget = dc.getImeTarget(IME_TARGET_LAYERING);
                if (imeLayeringTarget == null || imeLayeringTarget.getWindow() == null) {
                    return null;
                }

                // Avoid WindowState#getRootTask() so we don't attribute system windows to a task.
                final Task task = dc.getImeTarget(IME_TARGET_LAYERING).getWindow().getTask();
                final Task task = imeLayeringTarget.getWindow().asTask();
                if (task == null) {
                    return null;
                }
                return task.getRootTask().mRemoteToken.toWindowContainerToken();

                return task.mRemoteToken.toWindowContainerToken();
            }
        } finally {
            Binder.restoreCallingIdentity(origId);