summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/inputmethod/InputMethodManagerService.java35
1 files changed, 14 insertions, 21 deletions
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
index f8bddcafdd4a..c57408099c3e 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
@@ -583,16 +583,6 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
private final WeakHashMap<IBinder, Boolean> mFocusedWindowPerceptible = new WeakHashMap<>();
/**
- * Set to true if our ServiceConnection is currently actively bound to
- * a service (whether or not we have gotten its IBinder back yet).
- */
- @GuardedBy("ImfLock.class")
- private boolean hasConnectionLocked() {
- final var userData = mUserDataRepository.getOrCreate(mCurrentUserId);
- return userData.mBindingController.hasMainConnection();
- }
-
- /**
* The token tracking the current IME show request that is waiting for a connection to an IME,
* otherwise {@code null}.
*/
@@ -2147,7 +2137,8 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
@NonNull EditorInfo editorInfo, @StartInputFlags int startInputFlags,
@StartInputReason int startInputReason,
int unverifiedTargetSdkVersion,
- @NonNull ImeOnBackInvokedDispatcher imeDispatcher) {
+ @NonNull ImeOnBackInvokedDispatcher imeDispatcher,
+ @NonNull UserDataRepository.UserData userData) {
// Compute the final shown display ID with validated cs.selfReportedDisplayId for this
// session & other conditions.
@@ -2210,7 +2201,6 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
if (connectionIsActive != connectionWasActive) {
mInputManagerInternal.notifyInputMethodConnectionActive(connectionIsActive);
}
- final var userData = mUserDataRepository.getOrCreate(mCurrentUserId);
final var bindingController = userData.mBindingController;
// If configured, we want to avoid starting up the IME if it is not supposed to be showing
@@ -2248,7 +2238,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
(startInputFlags & StartInputFlags.INITIAL_CONNECTION) != 0);
}
- InputBindResult bindResult = tryReuseConnectionLocked(cs);
+ InputBindResult bindResult = tryReuseConnectionLocked(userData, cs);
if (bindResult != null) {
return bindResult;
}
@@ -2360,8 +2350,9 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
@GuardedBy("ImfLock.class")
@Nullable
- private InputBindResult tryReuseConnectionLocked(@NonNull ClientState cs) {
- if (hasConnectionLocked()) {
+ private InputBindResult tryReuseConnectionLocked(@NonNull UserDataRepository.UserData userData,
+ @NonNull ClientState cs) {
+ if (userData.mBindingController.hasMainConnection()) {
if (getCurMethodLocked() != null) {
// Return to client, and we will get back with it when
// we have had a session made for it.
@@ -3751,6 +3742,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
startInputByWinGainedFocus, toolType);
mVisibilityStateComputer.setWindowState(windowToken, windowState);
+ final var userData = mUserDataRepository.getOrCreate(userId);
if (sameWindowFocused && isTextEditor) {
if (DEBUG) {
Slog.w(TAG, "Window already focused, ignoring focus gain of: " + client
@@ -3761,7 +3753,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
if (editorInfo != null) {
return startInputUncheckedLocked(cs, inputContext,
remoteAccessibilityInputConnection, editorInfo, startInputFlags,
- startInputReason, unverifiedTargetSdkVersion, imeDispatcher);
+ startInputReason, unverifiedTargetSdkVersion, imeDispatcher, userData);
}
return new InputBindResult(
InputBindResult.ResultCode.SUCCESS_REPORT_WINDOW_FOCUS_ONLY,
@@ -3793,7 +3785,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
res = startInputUncheckedLocked(cs, inputContext,
remoteAccessibilityInputConnection, editorInfo, startInputFlags,
startInputReason, unverifiedTargetSdkVersion,
- imeDispatcher);
+ imeDispatcher, userData);
didStart = true;
}
break;
@@ -3808,7 +3800,6 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
// Note that we can trust client's display ID as long as it matches
// to the display ID obtained from the window.
if (cs.mSelfReportedDisplayId != mCurTokenDisplayId) {
- final var userData = mUserDataRepository.getOrCreate(userId);
userData.mBindingController.unbindCurrentMethod();
}
}
@@ -3818,7 +3809,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
res = startInputUncheckedLocked(cs, inputContext,
remoteAccessibilityInputConnection, editorInfo, startInputFlags,
startInputReason, unverifiedTargetSdkVersion,
- imeDispatcher);
+ imeDispatcher, userData);
} else {
res = InputBindResult.NULL_EDITOR_INFO;
}
@@ -4453,6 +4444,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
private void dumpDebug(ProtoOutputStream proto, long fieldId) {
synchronized (ImfLock.class) {
+ final var userData = mUserDataRepository.getOrCreate(mCurrentUserId);
final long token = proto.start(fieldId);
proto.write(CUR_METHOD_ID, getSelectedMethodIdLocked());
proto.write(CUR_SEQ, getSequenceNumberLocked());
@@ -4471,7 +4463,7 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
proto.write(CUR_TOKEN, Objects.toString(getCurTokenLocked()));
proto.write(CUR_TOKEN_DISPLAY_ID, mCurTokenDisplayId);
proto.write(SYSTEM_READY, mSystemReady);
- proto.write(HAVE_CONNECTION, hasConnectionLocked());
+ proto.write(HAVE_CONNECTION, userData.mBindingController.hasMainConnection());
proto.write(BOUND_TO_METHOD, mBoundToMethod);
proto.write(IS_INTERACTIVE, mIsInteractive);
proto.write(BACK_DISPOSITION, mBackDisposition);
@@ -5924,7 +5916,8 @@ public final class InputMethodManagerService implements IInputMethodManagerImpl.
p.println(" mFocusedWindowPerceptible=" + mFocusedWindowPerceptible);
mImeBindingState.dump(" ", p);
final var userData = mUserDataRepository.getOrCreate(mCurrentUserId);
- p.println(" mCurId=" + getCurIdLocked() + " mHaveConnection=" + hasConnectionLocked()
+ p.println(" mCurId=" + getCurIdLocked()
+ + " mHaveConnection=" + userData.mBindingController.hasMainConnection()
+ " mBoundToMethod=" + mBoundToMethod + " mVisibleBound="
+ userData.mBindingController.isVisibleBound());
p.println(" mCurToken=" + getCurTokenLocked());