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

Commit e94ced55 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: I1f1a4556e906cb742198895277be6c6d565fc3b3
parents d577a69b 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);