Loading core/java/android/view/inputmethod/InputMethodManager.java +1 −0 Original line number Diff line number Diff line Loading @@ -532,6 +532,7 @@ public final class InputMethodManager { final H mH; // Our generic input connection if the current target does not have its own. @NonNull private final RemoteInputConnectionImpl mFallbackInputConnection; private final int mDisplayId; Loading services/core/java/com/android/server/inputmethod/ClientController.java +14 −12 Original line number Diff line number Diff line Loading @@ -43,21 +43,23 @@ final class ClientController { @GuardedBy("ImfLock.class") private final List<ClientControllerCallback> mCallbacks = new ArrayList<>(); @NonNull private final PackageManagerInternal mPackageManagerInternal; interface ClientControllerCallback { void onClientRemoved(ClientState client); void onClientRemoved(@NonNull ClientState client); } ClientController(PackageManagerInternal packageManagerInternal) { ClientController(@NonNull PackageManagerInternal packageManagerInternal) { mPackageManagerInternal = packageManagerInternal; } @GuardedBy("ImfLock.class") ClientState addClient(IInputMethodClientInvoker clientInvoker, IRemoteInputConnection inputConnection, int selfReportedDisplayId, int callerUid, int callerPid) { @NonNull ClientState addClient(@NonNull IInputMethodClientInvoker clientInvoker, @NonNull IRemoteInputConnection fallbackInputConnection, int selfReportedDisplayId, int callerUid, int callerPid) { final IBinder.DeathRecipient deathRecipient = () -> { // Exceptionally holding ImfLock here since this is a internal lambda expression. synchronized (ImfLock.class) { Loading Loading @@ -90,15 +92,15 @@ final class ClientController { // have the client crash. Thus we do not verify the display ID at all here. Instead we // later check the display ID every time the client needs to interact with the specified // display. final ClientState cs = new ClientState(clientInvoker, inputConnection, callerUid, callerPid, selfReportedDisplayId, deathRecipient); final var cs = new ClientState(clientInvoker, fallbackInputConnection, callerUid, callerPid, selfReportedDisplayId, deathRecipient); mClients.put(clientInvoker.asBinder(), cs); return cs; } @VisibleForTesting @GuardedBy("ImfLock.class") boolean removeClient(IInputMethodClient client) { boolean removeClient(@NonNull IInputMethodClient client) { return removeClientAsBinder(client.asBinder()); } Loading @@ -116,7 +118,7 @@ final class ClientController { } @GuardedBy("ImfLock.class") void addClientControllerCallback(ClientControllerCallback callback) { void addClientControllerCallback(@NonNull ClientControllerCallback callback) { mCallbacks.add(callback); } Loading @@ -127,15 +129,15 @@ final class ClientController { } @GuardedBy("ImfLock.class") void forAllClients(Consumer<ClientState> consumer) { void forAllClients(@NonNull Consumer<ClientState> consumer) { for (int i = 0; i < mClients.size(); i++) { consumer.accept(mClients.valueAt(i)); } } @GuardedBy("ImfLock.class") boolean verifyClientAndPackageMatch( @NonNull IInputMethodClient client, @NonNull String packageName) { boolean verifyClientAndPackageMatch(@NonNull IInputMethodClient client, @NonNull String packageName) { final ClientState cs = mClients.get(client.asBinder()); if (cs == null) { throw new IllegalArgumentException("unknown client " + client.asBinder()); Loading services/core/java/com/android/server/inputmethod/ClientState.java +21 −13 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.server.inputmethod; import android.annotation.NonNull; import android.annotation.Nullable; import android.os.IBinder; import android.util.SparseArray; import android.view.inputmethod.InputBinding; Loading @@ -24,12 +26,17 @@ import com.android.internal.annotations.GuardedBy; import com.android.internal.inputmethod.IRemoteInputConnection; final class ClientState { @NonNull final IInputMethodClientInvoker mClient; @NonNull final IRemoteInputConnection mFallbackInputConnection; final int mUid; final int mPid; final int mSelfReportedDisplayId; @NonNull final InputBinding mBinding; @NonNull final IBinder.DeathRecipient mClientDeathRecipient; @GuardedBy("ImfLock.class") Loading @@ -39,30 +46,31 @@ final class ClientState { boolean mSessionRequestedForAccessibility; @GuardedBy("ImfLock.class") @Nullable InputMethodManagerService.SessionState mCurSession; @GuardedBy("ImfLock.class") SparseArray<InputMethodManagerService.AccessibilitySessionState> mAccessibilitySessions = @NonNull final SparseArray<InputMethodManagerService.AccessibilitySessionState> mAccessibilitySessions = new SparseArray<>(); @Override public String toString() { return "ClientState{" + Integer.toHexString( System.identityHashCode(this)) + " mUid=" + mUid + " mPid=" + mPid + " mSelfReportedDisplayId=" + mSelfReportedDisplayId + "}"; } ClientState(IInputMethodClientInvoker client, IRemoteInputConnection fallbackInputConnection, int uid, int pid, int selfReportedDisplayId, IBinder.DeathRecipient clientDeathRecipient) { ClientState(@NonNull IInputMethodClientInvoker client, @NonNull IRemoteInputConnection fallbackInputConnection, int uid, int pid, int selfReportedDisplayId, @NonNull IBinder.DeathRecipient clientDeathRecipient) { mClient = client; mFallbackInputConnection = fallbackInputConnection; mUid = uid; mPid = pid; mSelfReportedDisplayId = selfReportedDisplayId; mBinding = new InputBinding(null /*conn*/, mFallbackInputConnection.asBinder(), mUid, mBinding = new InputBinding(null /* conn */, fallbackInputConnection.asBinder(), mUid, mPid); mClientDeathRecipient = clientDeathRecipient; } @Override public String toString() { return "ClientState{" + Integer.toHexString(System.identityHashCode(this)) + " mUid=" + mUid + " mPid=" + mPid + " mSelfReportedDisplayId=" + mSelfReportedDisplayId + "}"; } } services/core/java/com/android/server/inputmethod/IInputMethodClientInvoker.java +5 −11 Original line number Diff line number Diff line Loading @@ -58,23 +58,17 @@ final class IInputMethodClientInvoker { private final Handler mHandler; @AnyThread @Nullable static IInputMethodClientInvoker create(@Nullable IInputMethodClient inputMethodClient, @NonNull static IInputMethodClientInvoker create(@NonNull IInputMethodClient inputMethodClient, @NonNull Handler handler) { if (inputMethodClient == null) { return null; } final boolean isProxy = Binder.isProxy(inputMethodClient); return new IInputMethodClientInvoker(inputMethodClient, isProxy, isProxy ? null : handler); } @AnyThread @Nullable static IInputMethodClientInvoker create$ravenwood( @Nullable IInputMethodClient inputMethodClient, @NonNull Handler handler) { if (inputMethodClient == null) { return null; } @NonNull static IInputMethodClientInvoker create$ravenwood(@NonNull IInputMethodClient inputMethodClient, @NonNull Handler handler) { return new IInputMethodClientInvoker(inputMethodClient, true, null); } Loading services/core/java/com/android/server/inputmethod/IInputMethodManagerImpl.java +6 −6 Original line number Diff line number Diff line Loading @@ -89,8 +89,8 @@ final class IInputMethodManagerImpl extends IInputMethodManager.Stub { @BinderThread interface Callback { void addClient(IInputMethodClient client, IRemoteInputConnection inputConnection, int selfReportedDisplayId); void addClient(@NonNull IInputMethodClient client, @NonNull IRemoteInputConnection inputConnection, int selfReportedDisplayId); InputMethodInfo getCurrentInputMethodInfoAsUser(@UserIdInt int userId); Loading Loading @@ -242,9 +242,9 @@ final class IInputMethodManagerImpl extends IInputMethodManager.Stub { } @Override public void addClient(IInputMethodClient client, IRemoteInputConnection inputmethod, int untrustedDisplayId) { mCallback.addClient(client, inputmethod, untrustedDisplayId); public void addClient(@NonNull IInputMethodClient client, @NonNull IRemoteInputConnection fallbackInputConnection, int untrustedDisplayId) { mCallback.addClient(client, fallbackInputConnection, untrustedDisplayId); } @Override Loading Loading @@ -414,7 +414,7 @@ final class IInputMethodManagerImpl extends IInputMethodManager.Stub { } @Override public void reportPerceptibleAsync(IBinder windowToken, boolean perceptible) { public void reportPerceptibleAsync(@NonNull IBinder windowToken, boolean perceptible) { mCallback.reportPerceptibleAsync(windowToken, perceptible); } Loading Loading
core/java/android/view/inputmethod/InputMethodManager.java +1 −0 Original line number Diff line number Diff line Loading @@ -532,6 +532,7 @@ public final class InputMethodManager { final H mH; // Our generic input connection if the current target does not have its own. @NonNull private final RemoteInputConnectionImpl mFallbackInputConnection; private final int mDisplayId; Loading
services/core/java/com/android/server/inputmethod/ClientController.java +14 −12 Original line number Diff line number Diff line Loading @@ -43,21 +43,23 @@ final class ClientController { @GuardedBy("ImfLock.class") private final List<ClientControllerCallback> mCallbacks = new ArrayList<>(); @NonNull private final PackageManagerInternal mPackageManagerInternal; interface ClientControllerCallback { void onClientRemoved(ClientState client); void onClientRemoved(@NonNull ClientState client); } ClientController(PackageManagerInternal packageManagerInternal) { ClientController(@NonNull PackageManagerInternal packageManagerInternal) { mPackageManagerInternal = packageManagerInternal; } @GuardedBy("ImfLock.class") ClientState addClient(IInputMethodClientInvoker clientInvoker, IRemoteInputConnection inputConnection, int selfReportedDisplayId, int callerUid, int callerPid) { @NonNull ClientState addClient(@NonNull IInputMethodClientInvoker clientInvoker, @NonNull IRemoteInputConnection fallbackInputConnection, int selfReportedDisplayId, int callerUid, int callerPid) { final IBinder.DeathRecipient deathRecipient = () -> { // Exceptionally holding ImfLock here since this is a internal lambda expression. synchronized (ImfLock.class) { Loading Loading @@ -90,15 +92,15 @@ final class ClientController { // have the client crash. Thus we do not verify the display ID at all here. Instead we // later check the display ID every time the client needs to interact with the specified // display. final ClientState cs = new ClientState(clientInvoker, inputConnection, callerUid, callerPid, selfReportedDisplayId, deathRecipient); final var cs = new ClientState(clientInvoker, fallbackInputConnection, callerUid, callerPid, selfReportedDisplayId, deathRecipient); mClients.put(clientInvoker.asBinder(), cs); return cs; } @VisibleForTesting @GuardedBy("ImfLock.class") boolean removeClient(IInputMethodClient client) { boolean removeClient(@NonNull IInputMethodClient client) { return removeClientAsBinder(client.asBinder()); } Loading @@ -116,7 +118,7 @@ final class ClientController { } @GuardedBy("ImfLock.class") void addClientControllerCallback(ClientControllerCallback callback) { void addClientControllerCallback(@NonNull ClientControllerCallback callback) { mCallbacks.add(callback); } Loading @@ -127,15 +129,15 @@ final class ClientController { } @GuardedBy("ImfLock.class") void forAllClients(Consumer<ClientState> consumer) { void forAllClients(@NonNull Consumer<ClientState> consumer) { for (int i = 0; i < mClients.size(); i++) { consumer.accept(mClients.valueAt(i)); } } @GuardedBy("ImfLock.class") boolean verifyClientAndPackageMatch( @NonNull IInputMethodClient client, @NonNull String packageName) { boolean verifyClientAndPackageMatch(@NonNull IInputMethodClient client, @NonNull String packageName) { final ClientState cs = mClients.get(client.asBinder()); if (cs == null) { throw new IllegalArgumentException("unknown client " + client.asBinder()); Loading
services/core/java/com/android/server/inputmethod/ClientState.java +21 −13 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.server.inputmethod; import android.annotation.NonNull; import android.annotation.Nullable; import android.os.IBinder; import android.util.SparseArray; import android.view.inputmethod.InputBinding; Loading @@ -24,12 +26,17 @@ import com.android.internal.annotations.GuardedBy; import com.android.internal.inputmethod.IRemoteInputConnection; final class ClientState { @NonNull final IInputMethodClientInvoker mClient; @NonNull final IRemoteInputConnection mFallbackInputConnection; final int mUid; final int mPid; final int mSelfReportedDisplayId; @NonNull final InputBinding mBinding; @NonNull final IBinder.DeathRecipient mClientDeathRecipient; @GuardedBy("ImfLock.class") Loading @@ -39,30 +46,31 @@ final class ClientState { boolean mSessionRequestedForAccessibility; @GuardedBy("ImfLock.class") @Nullable InputMethodManagerService.SessionState mCurSession; @GuardedBy("ImfLock.class") SparseArray<InputMethodManagerService.AccessibilitySessionState> mAccessibilitySessions = @NonNull final SparseArray<InputMethodManagerService.AccessibilitySessionState> mAccessibilitySessions = new SparseArray<>(); @Override public String toString() { return "ClientState{" + Integer.toHexString( System.identityHashCode(this)) + " mUid=" + mUid + " mPid=" + mPid + " mSelfReportedDisplayId=" + mSelfReportedDisplayId + "}"; } ClientState(IInputMethodClientInvoker client, IRemoteInputConnection fallbackInputConnection, int uid, int pid, int selfReportedDisplayId, IBinder.DeathRecipient clientDeathRecipient) { ClientState(@NonNull IInputMethodClientInvoker client, @NonNull IRemoteInputConnection fallbackInputConnection, int uid, int pid, int selfReportedDisplayId, @NonNull IBinder.DeathRecipient clientDeathRecipient) { mClient = client; mFallbackInputConnection = fallbackInputConnection; mUid = uid; mPid = pid; mSelfReportedDisplayId = selfReportedDisplayId; mBinding = new InputBinding(null /*conn*/, mFallbackInputConnection.asBinder(), mUid, mBinding = new InputBinding(null /* conn */, fallbackInputConnection.asBinder(), mUid, mPid); mClientDeathRecipient = clientDeathRecipient; } @Override public String toString() { return "ClientState{" + Integer.toHexString(System.identityHashCode(this)) + " mUid=" + mUid + " mPid=" + mPid + " mSelfReportedDisplayId=" + mSelfReportedDisplayId + "}"; } }
services/core/java/com/android/server/inputmethod/IInputMethodClientInvoker.java +5 −11 Original line number Diff line number Diff line Loading @@ -58,23 +58,17 @@ final class IInputMethodClientInvoker { private final Handler mHandler; @AnyThread @Nullable static IInputMethodClientInvoker create(@Nullable IInputMethodClient inputMethodClient, @NonNull static IInputMethodClientInvoker create(@NonNull IInputMethodClient inputMethodClient, @NonNull Handler handler) { if (inputMethodClient == null) { return null; } final boolean isProxy = Binder.isProxy(inputMethodClient); return new IInputMethodClientInvoker(inputMethodClient, isProxy, isProxy ? null : handler); } @AnyThread @Nullable static IInputMethodClientInvoker create$ravenwood( @Nullable IInputMethodClient inputMethodClient, @NonNull Handler handler) { if (inputMethodClient == null) { return null; } @NonNull static IInputMethodClientInvoker create$ravenwood(@NonNull IInputMethodClient inputMethodClient, @NonNull Handler handler) { return new IInputMethodClientInvoker(inputMethodClient, true, null); } Loading
services/core/java/com/android/server/inputmethod/IInputMethodManagerImpl.java +6 −6 Original line number Diff line number Diff line Loading @@ -89,8 +89,8 @@ final class IInputMethodManagerImpl extends IInputMethodManager.Stub { @BinderThread interface Callback { void addClient(IInputMethodClient client, IRemoteInputConnection inputConnection, int selfReportedDisplayId); void addClient(@NonNull IInputMethodClient client, @NonNull IRemoteInputConnection inputConnection, int selfReportedDisplayId); InputMethodInfo getCurrentInputMethodInfoAsUser(@UserIdInt int userId); Loading Loading @@ -242,9 +242,9 @@ final class IInputMethodManagerImpl extends IInputMethodManager.Stub { } @Override public void addClient(IInputMethodClient client, IRemoteInputConnection inputmethod, int untrustedDisplayId) { mCallback.addClient(client, inputmethod, untrustedDisplayId); public void addClient(@NonNull IInputMethodClient client, @NonNull IRemoteInputConnection fallbackInputConnection, int untrustedDisplayId) { mCallback.addClient(client, fallbackInputConnection, untrustedDisplayId); } @Override Loading Loading @@ -414,7 +414,7 @@ final class IInputMethodManagerImpl extends IInputMethodManager.Stub { } @Override public void reportPerceptibleAsync(IBinder windowToken, boolean perceptible) { public void reportPerceptibleAsync(@NonNull IBinder windowToken, boolean perceptible) { mCallback.reportPerceptibleAsync(windowToken, perceptible); } Loading