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

Commit bf10ca87 authored by Yohei Yukawa's avatar Yohei Yukawa Committed by Android (Google) Code Review
Browse files

Merge "Remove IMM#reportVirtualDisplayGeometry() again" into main

parents 6927452e 1ef6ad32
Loading
Loading
Loading
Loading
+0 −14
Original line number Diff line number Diff line
@@ -452,20 +452,6 @@ final class IInputMethodManagerGlobalInvoker {
        }
    }

    @AnyThread
    static void reportVirtualDisplayGeometryAsync(@NonNull IInputMethodClient client,
            int childDisplayId, @Nullable float[] matrixValues) {
        final IInputMethodManager service = getService();
        if (service == null) {
            return;
        }
        try {
            service.reportVirtualDisplayGeometryAsync(client, childDisplayId, matrixValues);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    @AnyThread
    static void reportPerceptibleAsync(@NonNull IBinder windowToken, boolean perceptible) {
        final IInputMethodManager service = getService();
+1 −101
Original line number Diff line number Diff line
@@ -60,7 +60,6 @@ import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Matrix;
import android.graphics.Rect;
import android.hardware.display.DisplayManager;
import android.inputmethodservice.InputMethodService;
@@ -572,18 +571,6 @@ public final class InputMethodManager {
    @GuardedBy("mH")
    private CursorAnchorInfo mCursorAnchorInfo = null;

    /**
     * A special {@link Matrix} that can be provided by the system when this instance is running
     * inside a virtual display.
     *
     * <p>If this is non-{@code null}, {@link #updateCursorAnchorInfo(View, CursorAnchorInfo)}
     * should be adjusted with this {@link Matrix}.</p>
     *
     * <p>{@code null} when not used.</p>
     */
    @GuardedBy("mH")
    private Matrix mVirtualDisplayToScreenMatrix = null;

    // -----------------------------------------------------------

    /**
@@ -670,7 +657,6 @@ public final class InputMethodManager {
    private static final int MSG_BIND_ACCESSIBILITY_SERVICE = 11;
    private static final int MSG_UNBIND_ACCESSIBILITY_SERVICE = 12;
    private static final int MSG_SET_INTERACTIVE = 13;
    private static final int MSG_UPDATE_VIRTUAL_DISPLAY_TO_SCREEN_MATRIX = 30;
    private static final int MSG_ON_SHOW_REQUESTED = 31;

    /**
@@ -1037,7 +1023,6 @@ public final class InputMethodManager {
                        mCurMethod = res.method; // for @UnsupportedAppUsage
                        mCurBindState = new BindState(res);
                        mCurId = res.id; // for @UnsupportedAppUsage
                        mVirtualDisplayToScreenMatrix = res.getVirtualDisplayToScreenMatrix();
                    }
                    startInputInner(StartInputReason.BOUND_TO_IMMS, null, 0, 0, 0);
                    return;
@@ -1245,43 +1230,6 @@ public final class InputMethodManager {
                    }
                    return;
                }
                case MSG_UPDATE_VIRTUAL_DISPLAY_TO_SCREEN_MATRIX: {
                    final float[] matrixValues = (float[]) msg.obj;
                    final int bindSequence = msg.arg1;
                    synchronized (mH) {
                        if (getBindSequenceLocked() != bindSequence) {
                            return;
                        }
                        if (matrixValues == null || mVirtualDisplayToScreenMatrix == null) {
                            // Either InputBoundResult#mVirtualDisplayToScreenMatrixValues is null
                            // OR this app is unbound from the parent VirtualDisplay. In this case,
                            // calling updateCursorAnchorInfo() isn't safe. Only clear the matrix.
                            mVirtualDisplayToScreenMatrix = null;
                            return;
                        }

                        final float[] currentValues = new float[9];
                        mVirtualDisplayToScreenMatrix.getValues(currentValues);
                        if (Arrays.equals(currentValues, matrixValues)) {
                            return;
                        }
                        mVirtualDisplayToScreenMatrix.setValues(matrixValues);

                        if (mCursorAnchorInfo == null || !isImeSessionAvailableLocked()
                                || mServedInputConnection == null) {
                            return;
                        }
                        if (!mServedInputConnection.isCursorAnchorInfoMonitoring()) {
                            return;
                        }
                        // Since the host VirtualDisplay is moved, we need to issue
                        // IMS#updateCursorAnchorInfo() again.
                        mCurBindState.mImeSession.updateCursorAnchorInfo(
                                CursorAnchorInfo.createForAdditionalParentMatrix(
                                        mCursorAnchorInfo, mVirtualDisplayToScreenMatrix));
                    }
                    return;
                }
                case MSG_ON_SHOW_REQUESTED: {
                    synchronized (mH) {
                        if (mImeInsetsConsumer != null) {
@@ -1359,12 +1307,6 @@ public final class InputMethodManager {
                    .sendToTarget();
        }

        @Override
        public void updateVirtualDisplayToScreenMatrix(int bindSequence, float[] matrixValues) {
            mH.obtainMessage(MSG_UPDATE_VIRTUAL_DISPLAY_TO_SCREEN_MATRIX, bindSequence, 0,
                    matrixValues).sendToTarget();
        }

        @Override
        public void setImeTraceEnabled(boolean enabled) {
            ImeTracing.getInstance().setEnabled(enabled);
@@ -1958,7 +1900,6 @@ public final class InputMethodManager {
    @UnsupportedAppUsage
    @GuardedBy("mH")
    void finishInputLocked() {
        mVirtualDisplayToScreenMatrix = null;
        View clearedView = null;
        mNextServedView = null;
        if (mServedView != null) {
@@ -2839,7 +2780,6 @@ public final class InputMethodManager {
                        + InputMethodDebug.startInputFlagsToString(startInputFlags));
                return false;
            }
            mVirtualDisplayToScreenMatrix = res.getVirtualDisplayToScreenMatrix();
            if (res.id != null) {
                updateInputChannelLocked(res.channel);
                mCurMethod = res.method; // for @UnsupportedAppUsage
@@ -3400,13 +3340,7 @@ public final class InputMethodManager {
                return;
            }
            if (DEBUG) Log.v(TAG, "updateCursorAnchorInfo: " + cursorAnchorInfo);
            if (mVirtualDisplayToScreenMatrix != null) {
                mCurBindState.mImeSession.updateCursorAnchorInfo(
                        CursorAnchorInfo.createForAdditionalParentMatrix(
                                cursorAnchorInfo, mVirtualDisplayToScreenMatrix));
            } else {
            mCurBindState.mImeSession.updateCursorAnchorInfo(cursorAnchorInfo);
            }
            mCursorAnchorInfo = cursorAnchorInfo;
        }
    }
@@ -4019,40 +3953,6 @@ public final class InputMethodManager {
        mRequestCursorUpdateDisplayIdCheck.set(enabled);
    }

    /**
     * An internal API for {@link android.hardware.display.VirtualDisplay} to report where its
     * embedded virtual display is placed.
     *
     * @param childDisplayId Display ID of the embedded virtual display.
     * @param matrix         {@link Matrix} to convert virtual display screen coordinates to
     *                       the host screen coordinates. {@code null} to clear the relationship.
     * @hide
     */
    public void reportVirtualDisplayGeometry(int childDisplayId, @Nullable Matrix matrix) {
        final float[] matrixValues;
        if (matrix == null) {
            matrixValues = null;
        } else {
            matrixValues = new float[9];
            matrix.getValues(matrixValues);
        }
        IInputMethodManagerGlobalInvoker.reportVirtualDisplayGeometryAsync(mClient, childDisplayId,
                matrixValues);
    }

    /**
     * An internal API that returns if the current display has a transformation matrix to apply.
     *
     * @return {@code true} if {@link Matrix} to convert virtual display screen coordinates to
     * the host screen coordinates is set.
     * @hide
     */
    public boolean hasVirtualDisplayToScreenMatrix() {
        synchronized (mH) {
            return mVirtualDisplayToScreenMatrix != null;
        }
    }

    /**
     * Force switch to the last used input method and subtype. If the last input method didn't have
     * any subtypes, the framework will simply switch to the last input method with no subtype
+1 −2
Original line number Diff line number Diff line
@@ -1107,8 +1107,7 @@ final class RemoteInputConnectionImpl extends IRemoteInputConnection.Stub {
            return false;
        }
        if (mParentInputMethodManager.mRequestCursorUpdateDisplayIdCheck.get()
                && mParentInputMethodManager.getDisplayId() != imeDisplayId
                && !mParentInputMethodManager.hasVirtualDisplayToScreenMatrix()) {
                && mParentInputMethodManager.getDisplayId() != imeDisplayId) {
            // requestCursorUpdates() is not currently supported across displays.
            return false;
        }
+0 −1
Original line number Diff line number Diff line
@@ -31,7 +31,6 @@ oneway interface IInputMethodClient {
    void setInteractive(boolean active, boolean fullscreen);
    void scheduleStartInputIfNecessary(boolean fullscreen);
    void reportFullscreenMode(boolean fullscreen);
    void updateVirtualDisplayToScreenMatrix(int bindSequence, in float[] matrixValues);
    void setImeTraceEnabled(boolean enabled);
    void throwExceptionFromSystem(String message);
}
+1 −30
Original line number Diff line number Diff line
@@ -19,11 +19,9 @@ package com.android.internal.inputmethod;
import static java.lang.annotation.RetentionPolicy.SOURCE;

import android.annotation.IntDef;
import android.annotation.Nullable;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.graphics.Matrix;
import android.os.IBinder;
import android.os.Parcel;
import android.os.Parcelable;
@@ -205,28 +203,11 @@ public final class InputBindResult implements Parcelable {
     */
    public final int sequence;

    @Nullable
    private final float[] mVirtualDisplayToScreenMatrixValues;

    /**
     * {@code true} if the IME explicitly specifies {@code suppressesSpellChecker="true"}.
     */
    public final boolean isInputMethodSuppressingSpellChecker;

    /**
     * @return {@link Matrix} that corresponds to {@link #mVirtualDisplayToScreenMatrixValues}.
     *         {@code null} if {@link #mVirtualDisplayToScreenMatrixValues} is {@code null}.
     */
    @Nullable
    public Matrix getVirtualDisplayToScreenMatrix() {
        if (mVirtualDisplayToScreenMatrixValues == null) {
            return null;
        }
        final Matrix matrix = new Matrix();
        matrix.setValues(mVirtualDisplayToScreenMatrixValues);
        return matrix;
    }

    /**
     * Creates a new instance of {@link InputBindResult}.
     *
@@ -246,7 +227,6 @@ public final class InputBindResult implements Parcelable {
            IInputMethodSession method,
            SparseArray<IAccessibilityInputMethodSession> accessibilitySessions,
            InputChannel channel, String id, int sequence,
            @Nullable Matrix virtualDisplayToScreenMatrix,
            boolean isInputMethodSuppressingSpellChecker) {
        this.result = result;
        this.method = method;
@@ -254,12 +234,6 @@ public final class InputBindResult implements Parcelable {
        this.channel = channel;
        this.id = id;
        this.sequence = sequence;
        if (virtualDisplayToScreenMatrix == null) {
            mVirtualDisplayToScreenMatrixValues = null;
        } else {
            mVirtualDisplayToScreenMatrixValues = new float[9];
            virtualDisplayToScreenMatrix.getValues(mVirtualDisplayToScreenMatrixValues);
        }
        this.isInputMethodSuppressingSpellChecker = isInputMethodSuppressingSpellChecker;
    }

@@ -287,7 +261,6 @@ public final class InputBindResult implements Parcelable {
        }
        id = source.readString();
        sequence = source.readInt();
        mVirtualDisplayToScreenMatrixValues = source.createFloatArray();
        isInputMethodSuppressingSpellChecker = source.readBoolean();
    }

@@ -298,7 +271,6 @@ public final class InputBindResult implements Parcelable {
    public String toString() {
        return "InputBindResult{result=" + getResultString() + " method=" + method + " id=" + id
                + " sequence=" + sequence
                + " virtualDisplayToScreenMatrix=" + getVirtualDisplayToScreenMatrix()
                + " isInputMethodSuppressingSpellChecker=" + isInputMethodSuppressingSpellChecker
                + "}";
    }
@@ -330,7 +302,6 @@ public final class InputBindResult implements Parcelable {
        }
        dest.writeString(id);
        dest.writeInt(sequence);
        dest.writeFloatArray(mVirtualDisplayToScreenMatrixValues);
        dest.writeBoolean(isInputMethodSuppressingSpellChecker);
    }

@@ -400,7 +371,7 @@ public final class InputBindResult implements Parcelable {
    }

    private static InputBindResult error(@ResultCode int result) {
        return new InputBindResult(result, null, null, null, null, -1, null, false);
        return new InputBindResult(result, null, null, null, null, -1, false);
    }

    /**
Loading