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

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

Merge "Support WIC.show(IME) from Activity#onCreate" into rvc-dev am:...

Merge "Support WIC.show(IME) from Activity#onCreate" into rvc-dev am: 10491942 am: 6fcb2228 am: d7c9b37e am: f1a1496b

Change-Id: Ia5f4143e56ad8aaa35969f87e0da2be2a9aa2306
parents eb4a1a04 f1a1496b
Loading
Loading
Loading
Loading
+16 −13
Original line number Diff line number Diff line
@@ -49,7 +49,7 @@ public final class ImeInsetsSourceConsumer extends InsetsSourceConsumer {
     * Tracks whether we have an outstanding request from the IME to show, but weren't able to
     * execute it because we didn't have control yet.
     */
    private boolean mImeRequestedShow;
    private boolean mIsRequestedVisibleAwaitingControl;

    public ImeInsetsSourceConsumer(
            InsetsState state, Supplier<Transaction> transactionSupplier,
@@ -88,15 +88,7 @@ public final class ImeInsetsSourceConsumer extends InsetsSourceConsumer {
    public void onWindowFocusLost() {
        super.onWindowFocusLost();
        getImm().unregisterImeConsumer(this);
        mImeRequestedShow = false;
    }

    @Override
    public void show(boolean fromIme) {
        super.show(fromIme);
        if (fromIme) {
            mImeRequestedShow = true;
        }
        mIsRequestedVisibleAwaitingControl = false;
    }

    @Override
@@ -119,11 +111,14 @@ public final class ImeInsetsSourceConsumer extends InsetsSourceConsumer {
        // TODO: ResultReceiver for IME.
        // TODO: Set mShowOnNextImeRender to automatically show IME and guard it with a flag.

        if (getControl() == null) {
            // If control is null, schedule to show IME when control is available.
            mIsRequestedVisibleAwaitingControl = true;
        }
        // If we had a request before to show from IME (tracked with mImeRequestedShow), reaching
        // this code here means that we now got control, so we can start the animation immediately.
        // If client window is trying to control IME and IME is already visible, it is immediate.
        if (fromIme || mImeRequestedShow || mState.getSource(getType()).isVisible()) {
            mImeRequestedShow = false;
        if (fromIme || mState.getSource(getType()).isVisible()) {
            return ShowResult.SHOW_IMMEDIATELY;
        }

@@ -148,11 +143,19 @@ public final class ImeInsetsSourceConsumer extends InsetsSourceConsumer {
    public void setControl(@Nullable InsetsSourceControl control, int[] showTypes,
            int[] hideTypes) {
        super.setControl(control, showTypes, hideTypes);
        if (control == null) {
        if (control == getControl()) {
            return;
        }
        if (control == null && !mIsRequestedVisibleAwaitingControl) {
            hide();
        }
    }

    @Override
    protected boolean isRequestedVisibleAwaitingControl() {
        return mIsRequestedVisibleAwaitingControl;
    }

    private boolean isDummyOrEmptyEditor(EditorInfo info) {
        // TODO(b/123044812): Handle dummy input gracefully in IME Insets API
        return info == null || (info.fieldId <= 0 && info.inputType <= 0);
+13 −3
Original line number Diff line number Diff line
@@ -107,8 +107,8 @@ public class InsetsSourceConsumer {
        } else {
            // We are gaining control, and need to run an animation since previous state
            // didn't match
            if (mRequestedVisible != mState.getSource(mType).isVisible()) {
                if (mRequestedVisible) {
            if (isRequestedVisibleAwaitingControl() != mState.getSource(mType).isVisible()) {
                if (isRequestedVisibleAwaitingControl()) {
                    showTypes[0] |= toPublicType(getType());
                } else {
                    hideTypes[0] |= toPublicType(getType());
@@ -138,6 +138,16 @@ public class InsetsSourceConsumer {
        return mSourceControl;
    }

    /**
     * Determines if the consumer will be shown after control is available.
     * Note: for system bars this method is same as {@link #isRequestedVisible()}.
     *
     * @return {@code true} if consumer has a pending show.
     */
    protected boolean isRequestedVisibleAwaitingControl() {
        return isRequestedVisible();
    }

    int getType() {
        return mType;
    }
@@ -263,7 +273,7 @@ public class InsetsSourceConsumer {
     * Sets requested visibility from the client, regardless of whether we are able to control it at
     * the moment.
     */
    private void setRequestedVisible(boolean requestedVisible) {
    protected void setRequestedVisible(boolean requestedVisible) {
        mRequestedVisible = requestedVisible;
        if (applyLocalVisibilityOverride()) {
            mController.notifyVisibilityChanged();