summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/TextServicesManagerService.java8
1 files changed, 7 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/TextServicesManagerService.java b/services/core/java/com/android/server/TextServicesManagerService.java
index 26a8cf74d245..58d53403ed06 100644
--- a/services/core/java/com/android/server/TextServicesManagerService.java
+++ b/services/core/java/com/android/server/TextServicesManagerService.java
@@ -71,6 +71,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
+import java.util.function.Predicate;
public class TextServicesManagerService extends ITextServicesManager.Stub {
private static final String TAG = TextServicesManagerService.class.getSimpleName();
@@ -885,6 +886,11 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
}
synchronized (mLock) {
mListeners.unregister(listener);
+ final IBinder scListenerBinder = listener.asBinder();
+ final Predicate<SessionRequest> removeCondition =
+ request -> request.mScListener.asBinder() == scListenerBinder;
+ mPendingSessionRequests.removeIf(removeCondition);
+ mOnGoingSessionRequests.removeIf(removeCondition);
cleanLocked();
}
}
@@ -934,6 +940,7 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
if (mUnbindCalled) {
return;
}
+ mListeners.register(request.mScListener);
if (!mConnected) {
mPendingSessionRequests.add(request);
return;
@@ -959,7 +966,6 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
if (mOnGoingSessionRequests.remove(request)) {
try {
request.mTsListener.onServiceConnected(newSession);
- mListeners.register(request.mScListener);
} catch (RemoteException e) {
// Technically this can happen if the spell checker client app is already
// dead. We can just forget about this request; the request is already