summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Yohei Yukawa <yukawa@google.com> 2021-05-21 21:33:16 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2021-05-21 21:33:16 +0000
commite738cfc8980239cc9a1b5447e5ec3d71f8dfdd6d (patch)
treec9c7cbd70074cc321d45ab3f9ce06c6103d930f2
parentb7cc3ac465a44b76bc2171cdbac379b6721a211c (diff)
parent44c499d853e3fd2619b05d21f9fbdd50802e9b6f (diff)
Merge "Remove InputMethodManager#reportActivityView()" into sc-dev
-rw-r--r--core/java/android/view/inputmethod/InputMethodManager.java93
-rw-r--r--core/java/com/android/internal/view/IInputMethodClient.aidl1
-rw-r--r--core/java/com/android/internal/view/IInputMethodManager.aidl3
-rw-r--r--core/java/com/android/internal/view/InputBindResult.java31
-rw-r--r--services/core/java/com/android/server/inputmethod/InputMethodManagerService.java186
-rw-r--r--services/core/java/com/android/server/inputmethod/MultiClientInputMethodManagerService.java11
6 files changed, 11 insertions, 314 deletions
diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java
index 7eb840047c9f..b572d0871f12 100644
--- a/core/java/android/view/inputmethod/InputMethodManager.java
+++ b/core/java/android/view/inputmethod/InputMethodManager.java
@@ -49,7 +49,6 @@ import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.pm.PackageManager;
-import android.graphics.Matrix;
import android.graphics.Rect;
import android.inputmethodservice.InputMethodService;
import android.os.Binder;
@@ -443,17 +442,6 @@ public final class InputMethodManager {
private CursorAnchorInfo mCursorAnchorInfo = null;
/**
- * A special {@link Matrix} that can be provided by the system when this instance is running
- * inside a virtual display that is managed by {@link android.app.ActivityView}.
- *
- * <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>
- */
- private Matrix mActivityViewToScreenMatrix = null;
-
- /**
* As reported by {@link InputBindResult}. This value is determined by
* {@link com.android.internal.R.styleable#InputMethod_suppressesSpellChecking}.
*/
@@ -520,7 +508,6 @@ public final class InputMethodManager {
static final int MSG_TIMEOUT_INPUT_EVENT = 6;
static final int MSG_FLUSH_INPUT_EVENT = 7;
static final int MSG_REPORT_FULLSCREEN_MODE = 10;
- static final int MSG_UPDATE_ACTIVITY_VIEW_TO_SCREEN_MATRIX = 30;
private static boolean isAutofillUIShowing(View servedView) {
AutofillManager afm = servedView.getContext().getSystemService(AutofillManager.class);
@@ -895,7 +882,6 @@ public final class InputMethodManager {
InputMethodSessionWrapper.createOrNull(res.method);
mCurId = res.id;
mBindSequence = res.sequence;
- mActivityViewToScreenMatrix = res.getActivityViewToScreenMatrix();
mIsInputMethodSuppressingSpellChecker =
res.isInputMethodSuppressingSpellChecker;
}
@@ -1002,45 +988,6 @@ public final class InputMethodManager {
}
return;
}
- case MSG_UPDATE_ACTIVITY_VIEW_TO_SCREEN_MATRIX: {
- final float[] matrixValues = (float[]) msg.obj;
- final int bindSequence = msg.arg1;
- synchronized (mH) {
- if (mBindSequence != bindSequence) {
- return;
- }
- if (matrixValues == null || mActivityViewToScreenMatrix == null) {
- // Either InputBoundResult#mActivityViewToScreenMatrixValues is null
- // OR this app is unbound from the parent ActivityView. In this case,
- // calling updateCursorAnchorInfo() isn't safe. Only clear the matrix.
- mActivityViewToScreenMatrix = null;
- return;
- }
-
- final float[] currentValues = new float[9];
- mActivityViewToScreenMatrix.getValues(currentValues);
- if (Arrays.equals(currentValues, matrixValues)) {
- return;
- }
- mActivityViewToScreenMatrix.setValues(matrixValues);
-
- if (mCursorAnchorInfo == null || mCurrentInputMethodSession == null
- || mServedInputConnectionWrapper == null) {
- return;
- }
- final boolean isMonitoring = (mRequestUpdateCursorAnchorInfoMonitorMode
- & InputConnection.CURSOR_UPDATE_MONITOR) != 0;
- if (!isMonitoring) {
- return;
- }
- // Since the host ActivityView is moved, we need to issue
- // IMS#updateCursorAnchorInfo() again.
- mCurrentInputMethodSession.updateCursorAnchorInfo(
- CursorAnchorInfo.createForAdditionalParentMatrix(
- mCursorAnchorInfo, mActivityViewToScreenMatrix));
- }
- return;
- }
}
}
}
@@ -1096,12 +1043,6 @@ public final class InputMethodManager {
}
@Override
- public void updateActivityViewToScreenMatrix(int bindSequence, float[] matrixValues) {
- mH.obtainMessage(MSG_UPDATE_ACTIVITY_VIEW_TO_SCREEN_MATRIX, bindSequence, 0,
- matrixValues).sendToTarget();
- }
-
- @Override
public void setImeTraceEnabled(boolean enabled) {
ImeTracing.getInstance().setEnabled(enabled);
}
@@ -1557,7 +1498,6 @@ public final class InputMethodManager {
*/
@UnsupportedAppUsage
void finishInputLocked() {
- mActivityViewToScreenMatrix = null;
mIsInputMethodSuppressingSpellChecker = false;
setNextServedViewLocked(null);
if (getServedViewLocked() != null) {
@@ -2110,7 +2050,6 @@ public final class InputMethodManager {
+ InputMethodDebug.startInputFlagsToString(startInputFlags));
return false;
}
- mActivityViewToScreenMatrix = res.getActivityViewToScreenMatrix();
mIsInputMethodSuppressingSpellChecker = res.isInputMethodSuppressingSpellChecker;
if (res.id != null) {
setInputChannelLocked(res.channel);
@@ -2499,13 +2438,7 @@ public final class InputMethodManager {
return;
}
if (DEBUG) Log.v(TAG, "updateCursorAnchorInfo: " + cursorAnchorInfo);
- if (mActivityViewToScreenMatrix != null) {
- mCurrentInputMethodSession.updateCursorAnchorInfo(
- CursorAnchorInfo.createForAdditionalParentMatrix(
- cursorAnchorInfo, mActivityViewToScreenMatrix));
- } else {
- mCurrentInputMethodSession.updateCursorAnchorInfo(cursorAnchorInfo);
- }
+ mCurrentInputMethodSession.updateCursorAnchorInfo(cursorAnchorInfo);
mCursorAnchorInfo = cursorAnchorInfo;
// Clear immediate bit (if any).
mRequestUpdateCursorAnchorInfoMonitorMode &= ~InputConnection.CURSOR_UPDATE_IMMEDIATE;
@@ -3097,30 +3030,6 @@ public final class InputMethodManager {
}
/**
- * An internal API for {@link android.app.ActivityView} 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 reportActivityView(int childDisplayId, @Nullable Matrix matrix) {
- try {
- final float[] matrixValues;
- if (matrix == null) {
- matrixValues = null;
- } else {
- matrixValues = new float[9];
- matrix.getValues(matrixValues);
- }
- mService.reportActivityViewAsync(mClient, childDisplayId, matrixValues);
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
- }
-
- /**
* 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
* specified.
diff --git a/core/java/com/android/internal/view/IInputMethodClient.aidl b/core/java/com/android/internal/view/IInputMethodClient.aidl
index a61e86bcf2a6..f5c2a2a5aad8 100644
--- a/core/java/com/android/internal/view/IInputMethodClient.aidl
+++ b/core/java/com/android/internal/view/IInputMethodClient.aidl
@@ -28,7 +28,6 @@ oneway interface IInputMethodClient {
void setActive(boolean active, boolean fullscreen, boolean reportToImeController);
void scheduleStartInputIfNecessary(boolean fullscreen);
void reportFullscreenMode(boolean fullscreen);
- void updateActivityViewToScreenMatrix(int bindSequence, in float[] matrixValues);
void setImeTraceEnabled(boolean enabled);
void throwExceptionFromSystem(String message);
}
diff --git a/core/java/com/android/internal/view/IInputMethodManager.aidl b/core/java/com/android/internal/view/IInputMethodManager.aidl
index e9efca37e707..4891ce97f05d 100644
--- a/core/java/com/android/internal/view/IInputMethodManager.aidl
+++ b/core/java/com/android/internal/view/IInputMethodManager.aidl
@@ -88,9 +88,6 @@ interface IInputMethodManager {
// TODO(Bug 113914148): Consider removing this.
oneway void getInputMethodWindowVisibleHeight(IIntResultCallback resultCallback);
- oneway void reportActivityViewAsync(in IInputMethodClient parentClient, int childDisplayId,
- in float[] matrixValues);
-
oneway void reportPerceptibleAsync(in IBinder windowToken, boolean perceptible);
/** Remove the IME surface. Requires INTERNAL_SYSTEM_WINDOW permission. */
oneway void removeImeSurface(in IVoidResultCallback resultCallback);
diff --git a/core/java/com/android/internal/view/InputBindResult.java b/core/java/com/android/internal/view/InputBindResult.java
index c9755a3dcedc..df371ce11954 100644
--- a/core/java/com/android/internal/view/InputBindResult.java
+++ b/core/java/com/android/internal/view/InputBindResult.java
@@ -19,12 +19,10 @@ package com.android.internal.view;
import static java.lang.annotation.RetentionPolicy.SOURCE;
import android.annotation.IntDef;
-import android.annotation.Nullable;
import android.compat.annotation.UnsupportedAppUsage;
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;
@@ -201,40 +199,16 @@ public final class InputBindResult implements Parcelable {
*/
public final int sequence;
- @Nullable
- private final float[] mActivityViewToScreenMatrixValues;
-
public final boolean isInputMethodSuppressingSpellChecker;
- /**
- * @return {@link Matrix} that corresponds to {@link #mActivityViewToScreenMatrixValues}.
- * {@code null} if {@link #mActivityViewToScreenMatrixValues} is {@code null}.
- */
- @Nullable
- public Matrix getActivityViewToScreenMatrix() {
- if (mActivityViewToScreenMatrixValues == null) {
- return null;
- }
- final Matrix matrix = new Matrix();
- matrix.setValues(mActivityViewToScreenMatrixValues);
- return matrix;
- }
-
public InputBindResult(@ResultCode int _result,
IInputMethodSession _method, InputChannel _channel, String _id, int _sequence,
- @Nullable Matrix activityViewToScreenMatrix,
boolean isInputMethodSuppressingSpellChecker) {
result = _result;
method = _method;
channel = _channel;
id = _id;
sequence = _sequence;
- if (activityViewToScreenMatrix == null) {
- mActivityViewToScreenMatrixValues = null;
- } else {
- mActivityViewToScreenMatrixValues = new float[9];
- activityViewToScreenMatrix.getValues(mActivityViewToScreenMatrixValues);
- }
this.isInputMethodSuppressingSpellChecker = isInputMethodSuppressingSpellChecker;
}
@@ -248,7 +222,6 @@ public final class InputBindResult implements Parcelable {
}
id = source.readString();
sequence = source.readInt();
- mActivityViewToScreenMatrixValues = source.createFloatArray();
isInputMethodSuppressingSpellChecker = source.readBoolean();
}
@@ -256,7 +229,6 @@ public final class InputBindResult implements Parcelable {
public String toString() {
return "InputBindResult{result=" + getResultString() + " method="+ method + " id=" + id
+ " sequence=" + sequence
- + " activityViewToScreenMatrix=" + getActivityViewToScreenMatrix()
+ " isInputMethodSuppressingSpellChecker=" + isInputMethodSuppressingSpellChecker
+ "}";
}
@@ -279,7 +251,6 @@ public final class InputBindResult implements Parcelable {
}
dest.writeString(id);
dest.writeInt(sequence);
- dest.writeFloatArray(mActivityViewToScreenMatrixValues);
dest.writeBoolean(isInputMethodSuppressingSpellChecker);
}
@@ -347,7 +318,7 @@ public final class InputBindResult implements Parcelable {
}
private static InputBindResult error(@ResultCode int result) {
- return new InputBindResult(result, null, null, null, -1, null, false);
+ return new InputBindResult(result, null, null, null, -1, false);
}
/**
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
index 94e669a5eed2..a0004a075cb7 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
@@ -89,8 +89,6 @@ import android.content.pm.ServiceInfo;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.database.ContentObserver;
-import android.graphics.Matrix;
-import android.hardware.display.DisplayManagerInternal;
import android.hardware.input.InputManagerInternal;
import android.inputmethodservice.InputMethodService;
import android.media.AudioManagerInternal;
@@ -126,10 +124,8 @@ import android.util.Pair;
import android.util.PrintWriterPrinter;
import android.util.Printer;
import android.util.Slog;
-import android.util.SparseArray;
import android.util.imetracing.ImeTracing;
import android.util.proto.ProtoOutputStream;
-import android.view.DisplayInfo;
import android.view.IWindowManager;
import android.view.InputChannel;
import android.view.View;
@@ -313,7 +309,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
final WindowManagerInternal mWindowManagerInternal;
final PackageManagerInternal mPackageManagerInternal;
final InputManagerInternal mInputManagerInternal;
- private final DisplayManagerInternal mDisplayManagerInternal;
final HandlerCaller mCaller;
final boolean mHasFeature;
private final ArrayMap<String, List<InputMethodSubtype>> mAdditionalSubtypeMap =
@@ -453,32 +448,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
@GuardedBy("mMethodMap")
final ArrayMap<IBinder, ClientState> mClients = new ArrayMap<>();
- private static final class ActivityViewInfo {
- /**
- * {@link ClientState} where {@link android.app.ActivityView} is running.
- */
- private final ClientState mParentClient;
- /**
- * {@link Matrix} to convert screen coordinates in the embedded virtual display to
- * screen coordinates where {@link #mParentClient} exists.
- */
- private final Matrix mMatrix;
-
- ActivityViewInfo(ClientState parentClient, Matrix matrix) {
- mParentClient = parentClient;
- mMatrix = matrix;
- }
- }
-
- /**
- * A mapping table from virtual display IDs created for {@link android.app.ActivityView}
- * to its parent IME client where {@link android.app.ActivityView} is running.
- *
- * <p>Note: this can be used only for virtual display IDs created by
- * {@link android.app.ActivityView}.</p>
- */
- private SparseArray<ActivityViewInfo> mActivityViewDisplayIdToParentMap = new SparseArray<>();
-
/**
* Set once the system is ready to run third party code.
*/
@@ -564,16 +533,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
EditorInfo mCurAttribute;
/**
- * A special {@link Matrix} to convert virtual screen coordinates to the IME target display
- * coordinates.
- *
- * <p>Used only while the IME client is running in a virtual display inside
- * {@link android.app.ActivityView}. {@code null} otherwise.</p>
- */
- @Nullable
- private Matrix mCurActivityViewToScreenMatrix = null;
-
- /**
* Id obtained with {@link InputMethodInfo#getId()} for the input method that we are currently
* connected to or in the process of connecting to.
*
@@ -1648,7 +1607,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
mWindowManagerInternal = LocalServices.getService(WindowManagerInternal.class);
mPackageManagerInternal = LocalServices.getService(PackageManagerInternal.class);
mInputManagerInternal = LocalServices.getService(InputManagerInternal.class);
- mDisplayManagerInternal = LocalServices.getService(DisplayManagerInternal.class);
mImeDisplayValidator = displayId -> mWindowManagerInternal.getDisplayImePolicy(displayId);
mCaller = new HandlerCaller(context, null, new HandlerCaller.Callback() {
@Override
@@ -2262,15 +2220,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
if (cs != null) {
client.asBinder().unlinkToDeath(cs.clientDeathRecipient, 0);
clearClientSessionLocked(cs);
-
- final int numItems = mActivityViewDisplayIdToParentMap.size();
- for (int i = numItems - 1; i >= 0; --i) {
- final ActivityViewInfo info = mActivityViewDisplayIdToParentMap.valueAt(i);
- if (info.mParentClient == cs) {
- mActivityViewDisplayIdToParentMap.removeAt(i);
- }
- }
-
if (mCurClient == cs) {
hideCurrentInputLocked(
mCurFocusedWindow, 0, null, SoftInputShowHideReason.HIDE_REMOVE_CLIENT);
@@ -2282,7 +2231,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
}
}
mCurClient = null;
- mCurActivityViewToScreenMatrix = null;
}
if (mCurFocusedWindowClient == cs) {
mCurFocusedWindowClient = null;
@@ -2318,7 +2266,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
MSG_UNBIND_CLIENT, mCurSeq, unbindClientReason, mCurClient.client));
mCurClient.sessionRequested = false;
mCurClient = null;
- mCurActivityViewToScreenMatrix = null;
mMenuController.hideInputMethodMenuLocked();
}
@@ -2386,31 +2333,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
curInputMethodInfo != null && curInputMethodInfo.suppressesSpellChecker();
return new InputBindResult(InputBindResult.ResultCode.SUCCESS_WITH_IME_SESSION,
session.session, (session.channel != null ? session.channel.dup() : null),
- mCurId, mCurSeq, mCurActivityViewToScreenMatrix, suppressesSpellChecker);
- }
-
- @Nullable
- private Matrix getActivityViewToScreenMatrixLocked(int clientDisplayId, int imeDisplayId) {
- if (clientDisplayId == imeDisplayId) {
- return null;
- }
- int displayId = clientDisplayId;
- Matrix matrix = null;
- while (true) {
- final ActivityViewInfo info = mActivityViewDisplayIdToParentMap.get(displayId);
- if (info == null) {
- return null;
- }
- if (matrix == null) {
- matrix = new Matrix(info.mMatrix);
- } else {
- matrix.postConcat(info.mMatrix);
- }
- if (info.mParentClient.selfReportedDisplayId == imeDisplayId) {
- return matrix;
- }
- displayId = info.mParentClient.selfReportedDisplayId;
- }
+ mCurId, mCurSeq, suppressesSpellChecker);
}
@GuardedBy("mMethodMap")
@@ -2428,7 +2351,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
// party code.
return new InputBindResult(
InputBindResult.ResultCode.ERROR_SYSTEM_NOT_READY,
- null, null, mCurMethodId, mCurSeq, null, false);
+ null, null, mCurMethodId, mCurSeq, false);
}
if (!InputMethodUtils.checkIfPackageBelongsToUid(mAppOpsManager, cs.uid,
@@ -2474,10 +2397,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
if (mCurSeq <= 0) mCurSeq = 1;
mCurClient = cs;
mCurInputContext = inputContext;
- mCurActivityViewToScreenMatrix =
- getActivityViewToScreenMatrixLocked(cs.selfReportedDisplayId, displayIdToShowIme);
- if (cs.selfReportedDisplayId != displayIdToShowIme
- && mCurActivityViewToScreenMatrix == null) {
+ if (cs.selfReportedDisplayId != displayIdToShowIme) {
// CursorAnchorInfo API does not work as-is for cross-display scenario. Pretend that
// InputConnection#requestCursorUpdates() is not implemented in the application so that
// IMEs will always receive false from this API.
@@ -2504,7 +2424,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
requestClientSessionLocked(cs);
return new InputBindResult(
InputBindResult.ResultCode.SUCCESS_WAITING_IME_SESSION,
- null, null, mCurId, mCurSeq, null, false);
+ null, null, mCurId, mCurSeq, false);
} else if (SystemClock.uptimeMillis()
< (mLastBindTime+TIME_TO_RECONNECT)) {
// In this case we have connected to the service, but
@@ -2516,7 +2436,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
// to see if we can get back in touch with the service.
return new InputBindResult(
InputBindResult.ResultCode.SUCCESS_WAITING_IME_BINDING,
- null, null, mCurId, mCurSeq, null, false);
+ null, null, mCurId, mCurSeq, false);
} else {
EventLog.writeEvent(EventLogTags.IMF_FORCE_RECONNECT_IME,
mCurMethodId, SystemClock.uptimeMillis()-mLastBindTime, 0);
@@ -2556,7 +2476,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
}
return new InputBindResult(
InputBindResult.ResultCode.SUCCESS_WAITING_IME_BINDING,
- null, null, mCurId, mCurSeq, null, false);
+ null, null, mCurId, mCurSeq, false);
}
mCurIntent = null;
Slog.w(TAG, "Failure connecting to input method service: " + mCurIntent);
@@ -3550,7 +3470,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
}
return new InputBindResult(
InputBindResult.ResultCode.SUCCESS_REPORT_WINDOW_FOCUS_ONLY,
- null, null, null, -1, null, false);
+ null, null, null, -1, false);
}
mCurFocusedWindow = windowToken;
@@ -4046,98 +3966,6 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
}
@Override
- public void reportActivityViewAsync(IInputMethodClient parentClient, int childDisplayId,
- float[] matrixValues) {
- try {
- final DisplayInfo displayInfo = mDisplayManagerInternal.getDisplayInfo(childDisplayId);
- if (displayInfo == null) {
- throw new IllegalArgumentException(
- "Cannot find display for non-existent displayId: " + childDisplayId);
- }
- final int callingUid = Binder.getCallingUid();
- if (callingUid != displayInfo.ownerUid) {
- throw new SecurityException("The caller doesn't own the display.");
- }
-
- synchronized (mMethodMap) {
- final ClientState cs = mClients.get(parentClient.asBinder());
- if (cs == null) {
- return;
- }
-
- // null matrixValues means that the entry needs to be removed.
- if (matrixValues == null) {
- final ActivityViewInfo info =
- mActivityViewDisplayIdToParentMap.get(childDisplayId);
- if (info == null) {
- return;
- }
- if (info.mParentClient != cs) {
- throw new SecurityException("Only the owner client can clear"
- + " ActivityViewGeometry for display #" + childDisplayId);
- }
- mActivityViewDisplayIdToParentMap.remove(childDisplayId);
- return;
- }
-
- ActivityViewInfo info = mActivityViewDisplayIdToParentMap.get(childDisplayId);
- if (info != null && info.mParentClient != cs) {
- throw new InvalidParameterException("Display #" + childDisplayId
- + " is already registered by " + info.mParentClient);
- }
- if (info == null) {
- if (!mWindowManagerInternal.isUidAllowedOnDisplay(childDisplayId, cs.uid)) {
- throw new SecurityException(cs + " cannot access to display #"
- + childDisplayId);
- }
- info = new ActivityViewInfo(cs, new Matrix());
- mActivityViewDisplayIdToParentMap.put(childDisplayId, info);
- }
- info.mMatrix.setValues(matrixValues);
-
- if (mCurClient == null || mCurClient.curSession == null) {
- return;
- }
-
- Matrix matrix = null;
- int displayId = mCurClient.selfReportedDisplayId;
- boolean needToNotify = false;
- while (true) {
- needToNotify |= (displayId == childDisplayId);
- final ActivityViewInfo next = mActivityViewDisplayIdToParentMap.get(displayId);
- if (next == null) {
- break;
- }
- if (matrix == null) {
- matrix = new Matrix(next.mMatrix);
- } else {
- matrix.postConcat(next.mMatrix);
- }
- if (next.mParentClient.selfReportedDisplayId == mCurTokenDisplayId) {
- if (needToNotify) {
- final float[] values = new float[9];
- matrix.getValues(values);
- try {
- mCurClient.client.updateActivityViewToScreenMatrix(mCurSeq, values);
- } catch (RemoteException e) {
- }
- }
- break;
- }
- displayId = info.mParentClient.selfReportedDisplayId;
- }
- }
- } catch (Throwable t) {
- if (parentClient != null) {
- try {
- parentClient.throwExceptionFromSystem(t.toString());
- } catch (RemoteException e) {
- }
- }
- }
- }
-
- @Override
public void removeImeSurface(IVoidResultCallback resultCallback) {
CallbackUtils.onResult(resultCallback, () -> {
mContext.enforceCallingPermission(Manifest.permission.INTERNAL_SYSTEM_WINDOW, null);
diff --git a/services/core/java/com/android/server/inputmethod/MultiClientInputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/MultiClientInputMethodManagerService.java
index bbf4b718414d..9275c563401a 100644
--- a/services/core/java/com/android/server/inputmethod/MultiClientInputMethodManagerService.java
+++ b/services/core/java/com/android/server/inputmethod/MultiClientInputMethodManagerService.java
@@ -1778,7 +1778,7 @@ public final class MultiClientInputMethodManagerService {
return new InputBindResult(
InputBindResult.ResultCode.SUCCESS_WAITING_IME_SESSION,
null, null, data.mCurrentInputMethodInfo.getId(),
- clientInfo.mBindingSequence, null, false);
+ clientInfo.mBindingSequence, false);
case InputMethodClientState.READY_TO_SEND_FIRST_BIND_RESULT:
case InputMethodClientState.ALREADY_SENT_BIND_RESULT:
clientInfo.mBindingSequence++;
@@ -1800,7 +1800,7 @@ public final class MultiClientInputMethodManagerService {
clientInfo.mInputMethodSession,
clientInfo.mWriteChannel.dup(),
data.mCurrentInputMethodInfo.getId(),
- clientInfo.mBindingSequence, null, false);
+ clientInfo.mBindingSequence, false);
case InputMethodClientState.UNREGISTERED:
Slog.e(TAG, "The client is already unregistered.");
return InputBindResult.INVALID_CLIENT;
@@ -1864,13 +1864,6 @@ public final class MultiClientInputMethodManagerService {
@BinderThread
@Override
- public void reportActivityViewAsync(IInputMethodClient parentClient, int childDisplayId,
- float[] matrixValues) {
- reportNotSupported();
- }
-
- @BinderThread
- @Override
public void reportPerceptibleAsync(IBinder windowClient, boolean perceptible) {
reportNotSupported();
}