summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Taran Singh <tarandeep@google.com> 2023-08-07 20:48:48 +0000
committer Taran Singh <tarandeep@google.com> 2023-08-07 21:50:15 +0000
commit16b6b5109a1b1023d859bf9a46040387f24f3c20 (patch)
tree750acd7487033ebb420df7e6491a2a0a8d4801d4
parente6b31d1c0b109ffe5ae18b6b08160bb9a027c1ef (diff)
Invalidate stylus handwriting availability cache
In [1] we introduced caching of attributes that determines if stylus handwriting is available. The strategy used to invalidate cache on IME unbind. However, a stale value of InputMethodInfo#supportsStylusHandwriting can be cached if IMM#isStylusHandwritingAvailable() previous IME unbinds and the next one isn't yet connected. A better approach would be to cache the value on the new IME service connection. [1]: I6d89d82589e4946e07bfbc4b97811fe4537b1a9b Bug: 288618291 Bug: 294162601 Test: atest InputMethodServiceLifecycleTest Change-Id: I35013b6194a67656aefca004e69cfc64f12c1e88 Merged-In: I35013b6194a67656aefca004e69cfc64f12c1e88
-rw-r--r--services/core/java/com/android/server/inputmethod/InputMethodBindingController.java6
-rw-r--r--services/core/java/com/android/server/inputmethod/InputMethodManagerService.java1
2 files changed, 6 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodBindingController.java b/services/core/java/com/android/server/inputmethod/InputMethodBindingController.java
index ba9e280be49d..53083366b041 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodBindingController.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodBindingController.java
@@ -40,6 +40,7 @@ import android.util.Slog;
import android.view.WindowManager;
import android.view.inputmethod.InputMethod;
import android.view.inputmethod.InputMethodInfo;
+import android.view.inputmethod.InputMethodManager;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
@@ -295,7 +296,12 @@ final class InputMethodBindingController {
}
if (DEBUG) Slog.v(TAG, "Initiating attach with token: " + mCurToken);
final InputMethodInfo info = mMethodMap.get(mSelectedMethodId);
+ boolean supportsStylusHwChanged =
+ mSupportsStylusHw != info.supportsStylusHandwriting();
mSupportsStylusHw = info.supportsStylusHandwriting();
+ if (supportsStylusHwChanged) {
+ InputMethodManager.invalidateLocalStylusHandwritingAvailabilityCaches();
+ }
mService.initializeImeLocked(mCurMethod, mCurToken);
mService.scheduleNotifyImeUidToAudioService(mCurMethodUid);
mService.reRequestCurrentClientSessionLocked();
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
index cfcb4620bf25..771ac9481a75 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
@@ -2369,7 +2369,6 @@ public final class InputMethodManagerService extends IInputMethodManager.Stub
mCurVirtualDisplayToScreenMatrix = null;
ImeTracker.forLogging().onFailed(mCurStatsToken, ImeTracker.PHASE_SERVER_WAIT_IME);
mCurStatsToken = null;
- InputMethodManager.invalidateLocalStylusHandwritingAvailabilityCaches();
mMenuController.hideInputMethodMenuLocked();
}
}