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

Commit c02a5ac5 authored by Yunfan Chen's avatar Yunfan Chen
Browse files

Revert "Revert "Remove IME surface when occured in multi-window mode""

This reverts commit 2a38a356.

Reason for revert: The original CL was reverted for b/158836294 and it turned out to be innocent. Re-land the CL.

Bug: b/155660756

Change-Id: Iada83e80059e7cb9566bb7ad4e4c9909b4ed794a
parent 2a38a356
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -71,4 +71,6 @@ interface IInputMethodManager {

    void reportActivityView(in IInputMethodClient parentClient, int childDisplayId,
            in float[] matrixValues);

    void removeImeSurface();
}
+21 −3
Original line number Diff line number Diff line
@@ -19,11 +19,13 @@ package com.android.systemui.wm;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Point;
import android.graphics.Rect;
import android.os.Handler;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.util.Slog;
import android.util.SparseArray;
import android.view.IDisplayWindowInsetsController;
@@ -36,6 +38,7 @@ import android.view.WindowInsets;
import android.view.animation.Interpolator;
import android.view.animation.PathInterpolator;

import com.android.internal.view.IInputMethodManager;
import com.android.systemui.TransactionPool;
import com.android.systemui.dagger.qualifiers.Main;

@@ -352,6 +355,16 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged
                    dispatchEndPositioning(mDisplayId, mCancelled, t);
                    if (mAnimationDirection == DIRECTION_HIDE && !mCancelled) {
                        t.hide(mImeSourceControl.getLeash());
                        final IInputMethodManager imms = getImms();
                        if (imms != null) {
                            try {
                                // Remove the IME surface to make the insets invisible for
                                // non-client controlled insets.
                                imms.removeImeSurface();
                            } catch (RemoteException e) {
                                Slog.e(TAG, "Failed to remove IME surface.", e);
                            }
                        }
                    }
                    t.apply();
                    mTransactionPool.release(t);
@@ -406,4 +419,9 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged
        default void onImeEndPositioning(int displayId, boolean cancel,
                SurfaceControl.Transaction t) {}
    }

    public IInputMethodManager getImms() {
        return IInputMethodManager.Stub.asInterface(
                ServiceManager.getService(Context.INPUT_METHOD_SERVICE));
    }
}
+16 −0
Original line number Diff line number Diff line
@@ -207,6 +207,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
    static final int MSG_HIDE_CURRENT_INPUT_METHOD = 1035;
    static final int MSG_INITIALIZE_IME = 1040;
    static final int MSG_CREATE_SESSION = 1050;
    static final int MSG_REMOVE_IME_SURFACE = 1060;

    static final int MSG_START_INPUT = 2000;

@@ -3936,6 +3937,12 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
        }
    }

    @Override
    public void removeImeSurface() {
        mContext.enforceCallingPermission(Manifest.permission.INTERNAL_SYSTEM_WINDOW, null);
        mHandler.sendMessage(mHandler.obtainMessage(MSG_REMOVE_IME_SURFACE));
    }

    @BinderThread
    private void notifyUserAction(@NonNull IBinder token) {
        if (DEBUG) {
@@ -4206,6 +4213,15 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
                args.recycle();
                return true;
            }
            case MSG_REMOVE_IME_SURFACE: {
                try {
                    if (mEnabledSession != null && mEnabledSession.session != null) {
                        mEnabledSession.session.removeImeSurface();
                    }
                } catch (RemoteException e) {
                }
                return true;
            }
            // ---------------------------------------------------------

            case MSG_START_INPUT: {
+6 −0
Original line number Diff line number Diff line
@@ -1460,6 +1460,12 @@ public final class MultiClientInputMethodManagerService {
            return null;
        }

        @BinderThread
        @Override
        public void removeImeSurface() {
            reportNotSupported();
        }

        @BinderThread
        @Override
        public boolean showSoftInput(