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

Commit 5f549afe authored by Taran Singh's avatar Taran Singh Committed by Automerger Merge Worker
Browse files

Merge "Let system control IME for ineligible display" into rvc-dev am:...

Merge "Let system control IME for ineligible display" into rvc-dev am: fcb77e88 am: c5dbcab5 am: e99bc17e

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

Change-Id: I89f60c105c1250b3ca4d0087adf1400a1456a432
parents 8c3f1065 e99bc17e
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -3538,9 +3538,9 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
    InsetsControlTarget getImeFallback() {
        // host is in non-default display that doesn't support system decor, default to
        // default display's StatusBar to control IME (when available), else let system control it.
        WindowState statusBar = 
                mWmService.getDefaultDisplayContentLocked().getDisplayPolicy().getStatusBar();
        return statusBar != null ? statusBar : mRemoteInsetsControlTarget;
        final DisplayContent defaultDc = mWmService.getDefaultDisplayContentLocked();
        WindowState statusBar = defaultDc.getDisplayPolicy().getStatusBar();
        return statusBar != null ? statusBar : defaultDc.mRemoteInsetsControlTarget;
    }

    boolean canShowIme() {
@@ -3600,7 +3600,10 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
     */
    @VisibleForTesting
    InsetsControlTarget computeImeControlTarget() {
        if (!isImeControlledByApp() && mRemoteInsetsControlTarget != null) {
        if (!isImeControlledByApp() && mRemoteInsetsControlTarget != null
                || (mInputMethodInputTarget != null
                        && getImeHostOrFallback(mInputMethodInputTarget.getWindow())
                                == mRemoteInsetsControlTarget)) {
            return mRemoteInsetsControlTarget;
        } else {
            // Now, a special case -- if the last target's window is in the process of exiting, but
+15 −8
Original line number Diff line number Diff line
@@ -32,7 +32,7 @@ import java.io.PrintWriter;
 */
class ImeInsetsSourceProvider extends InsetsSourceProvider {

    private WindowState mImeTargetFromIme;
    private InsetsControlTarget mImeTargetFromIme;
    private Runnable mShowImeRunner;
    private boolean mIsImeLayoutDrawn;

@@ -47,10 +47,12 @@ class ImeInsetsSourceProvider extends InsetsSourceProvider {
     *
     * @param imeTarget imeTarget on which IME request is coming from.
     */
    void scheduleShowImePostLayout(WindowState imeTarget) {
    void scheduleShowImePostLayout(InsetsControlTarget imeTarget) {
        boolean targetChanged = mImeTargetFromIme != imeTarget
                && mImeTargetFromIme != null && imeTarget != null && mShowImeRunner != null
                && mImeTargetFromIme.mActivityRecord == imeTarget.mActivityRecord;
                && imeTarget.getWindow() != null && mImeTargetFromIme.getWindow() != null
                && mImeTargetFromIme.getWindow().mActivityRecord
                        == imeTarget.getWindow().mActivityRecord;
        mImeTargetFromIme = imeTarget;
        if (targetChanged) {
            // target changed, check if new target can show IME.
@@ -62,7 +64,8 @@ class ImeInsetsSourceProvider extends InsetsSourceProvider {
            return;
        }

        ProtoLog.d(WM_DEBUG_IME, "Schedule IME show for %s", mImeTargetFromIme.getName());
        ProtoLog.d(WM_DEBUG_IME, "Schedule IME show for %s", mImeTargetFromIme.getWindow() == null
                ? mImeTargetFromIme : mImeTargetFromIme.getWindow().getName());
        mShowImeRunner = () -> {
            ProtoLog.d(WM_DEBUG_IME, "Run showImeRunner");
            // Target should still be the same.
@@ -127,13 +130,17 @@ class ImeInsetsSourceProvider extends InsetsSourceProvider {
            return false;
        }
        ProtoLog.d(WM_DEBUG_IME, "dcTarget: %s mImeTargetFromIme: %s",
                dcTarget.getName(), mImeTargetFromIme.getName());
                dcTarget.getName(), mImeTargetFromIme.getWindow() == null
                        ? mImeTargetFromIme : mImeTargetFromIme.getWindow().getName());

        return (!dcTarget.isClosing() && mImeTargetFromIme == dcTarget)
                || (mImeTargetFromIme != null && dcTarget.getParentWindow() == mImeTargetFromIme
                        && dcTarget.mSubLayer > mImeTargetFromIme.mSubLayer)
                || (mImeTargetFromIme != null && mImeTargetFromIme.getWindow() != null
                        && dcTarget.getParentWindow() == mImeTargetFromIme
                        && dcTarget.mSubLayer > mImeTargetFromIme.getWindow().mSubLayer)
                || mImeTargetFromIme == mDisplayContent.getImeFallback()
                || (!mImeTargetFromIme.isClosing() && controlTarget == mImeTargetFromIme);
                || controlTarget == mImeTargetFromIme
                        && (mImeTargetFromIme.getWindow() == null 
                                || !mImeTargetFromIme.getWindow().isClosing());
    }

    @Override
+3 −2
Original line number Diff line number Diff line
@@ -7585,13 +7585,14 @@ public class WindowManagerService extends IWindowManager.Stub
                if (imeTarget == null) {
                    return;
                }
                imeTarget = imeTarget.getImeControlTarget().getWindow();
                final InsetsControlTarget controlTarget = imeTarget.getImeControlTarget();
                imeTarget = controlTarget.getWindow();
                // If InsetsControlTarget doesn't have a window, its using remoteControlTarget which
                // is controlled by default display
                final DisplayContent dc = imeTarget != null
                        ? imeTarget.getDisplayContent() : getDefaultDisplayContentLocked();
                dc.getInsetsStateController().getImeSourceProvider()
                        .scheduleShowImePostLayout(imeTarget);
                        .scheduleShowImePostLayout(controlTarget);
            }
        }