Loading services/core/java/com/android/server/TextServicesManagerService.java +38 −35 Original line number Diff line number Diff line Loading @@ -365,7 +365,7 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { private void unbindServiceLocked() { for (SpellCheckerBindGroup scbg : mSpellCheckerBindGroups.values()) { scbg.removeAll(); scbg.removeAllLocked(); } mSpellCheckerBindGroups.clear(); } Loading Loading @@ -783,30 +783,42 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { mListeners = new InternalDeathRecipients(this); } public void onServiceConnected(ISpellCheckerService spellChecker) { public void onServiceConnectedLocked(ISpellCheckerService spellChecker) { if (DBG) { Slog.d(TAG, "onServiceConnected"); Slog.d(TAG, "onServiceConnectedLocked"); } synchronized (mLock) { if (mUnbindCalled) { return; } mSpellChecker = spellChecker; mConnected = true; // Dispatch pending getISpellCheckerSession requests. mPendingSessionRequests.forEach(this::getISpellCheckerSessionLocked); try { final int size = mPendingSessionRequests.size(); for (int i = 0; i < size; ++i) { final SessionRequest request = mPendingSessionRequests.get(i); mSpellChecker.getISpellCheckerSession( request.mLocale, request.mScListener, request.mBundle, new ISpellCheckerServiceCallbackBinder(this, request)); mOnGoingSessionRequests.add(request); } mPendingSessionRequests.clear(); } catch(RemoteException e) { // The target spell checker service is not available. Better to reset the state. removeAllLocked(); } cleanLocked(); } public void onServiceDisconnected() { public void onServiceDisconnectedLocked() { if (DBG) { Slog.d(TAG, "onServiceDisconnected"); Slog.d(TAG, "onServiceDisconnectedLocked"); } synchronized (mLock) { mSpellChecker = null; mConnected = false; } } public void removeListener(ISpellCheckerSessionListener listener) { if (DBG) { Loading Loading @@ -848,9 +860,8 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { mUnbindCalled = true; } public void removeAll() { public void removeAllLocked() { Slog.e(TAG, "Remove the spell checker bind unexpectedly."); synchronized (mLock) { final int size = mListeners.getRegisteredCallbackCount(); for (int i = size - 1; i >= 0; --i) { mListeners.unregister(mListeners.getRegisteredCallbackItem(i)); Loading @@ -859,7 +870,6 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { mOnGoingSessionRequests.clear(); cleanLocked(); } } public void getISpellCheckerSessionOrQueueLocked(@NonNull SessionRequest request) { if (mUnbindCalled) { Loading @@ -869,13 +879,6 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { mPendingSessionRequests.add(request); return; } getISpellCheckerSessionLocked(request); } private void getISpellCheckerSessionLocked(@NonNull SessionRequest request) { if (mUnbindCalled) { return; } try { mSpellChecker.getISpellCheckerSession( request.mLocale, request.mScListener, request.mBundle, Loading @@ -883,7 +886,7 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { mOnGoingSessionRequests.add(request); } catch(RemoteException e) { // The target spell checker service is not available. Better to reset the state. removeAll(); removeAllLocked(); } cleanLocked(); } Loading Loading @@ -925,13 +928,13 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { private void onServiceConnectedInnerLocked(ComponentName name, IBinder service) { if (DBG) { Slog.w(TAG, "onServiceConnected: " + name); Slog.w(TAG, "onServiceConnectedInnerLocked: " + name); } final ISpellCheckerService spellChecker = ISpellCheckerService.Stub.asInterface(service); final SpellCheckerBindGroup group = mSpellCheckerBindGroups.get(mSciId); if (group != null && this == group.mInternalConnection) { group.onServiceConnected(spellChecker); group.onServiceConnectedLocked(spellChecker); } } Loading @@ -944,11 +947,11 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { private void onServiceDisconnectedInnerLocked(ComponentName name) { if (DBG) { Slog.w(TAG, "onServiceDisconnected: " + name); Slog.w(TAG, "onServiceDisconnectedInnerLocked: " + name); } final SpellCheckerBindGroup group = mSpellCheckerBindGroups.get(mSciId); if (group != null && this == group.mInternalConnection) { group.onServiceDisconnected(); group.onServiceDisconnectedLocked(); } } } Loading Loading
services/core/java/com/android/server/TextServicesManagerService.java +38 −35 Original line number Diff line number Diff line Loading @@ -365,7 +365,7 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { private void unbindServiceLocked() { for (SpellCheckerBindGroup scbg : mSpellCheckerBindGroups.values()) { scbg.removeAll(); scbg.removeAllLocked(); } mSpellCheckerBindGroups.clear(); } Loading Loading @@ -783,30 +783,42 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { mListeners = new InternalDeathRecipients(this); } public void onServiceConnected(ISpellCheckerService spellChecker) { public void onServiceConnectedLocked(ISpellCheckerService spellChecker) { if (DBG) { Slog.d(TAG, "onServiceConnected"); Slog.d(TAG, "onServiceConnectedLocked"); } synchronized (mLock) { if (mUnbindCalled) { return; } mSpellChecker = spellChecker; mConnected = true; // Dispatch pending getISpellCheckerSession requests. mPendingSessionRequests.forEach(this::getISpellCheckerSessionLocked); try { final int size = mPendingSessionRequests.size(); for (int i = 0; i < size; ++i) { final SessionRequest request = mPendingSessionRequests.get(i); mSpellChecker.getISpellCheckerSession( request.mLocale, request.mScListener, request.mBundle, new ISpellCheckerServiceCallbackBinder(this, request)); mOnGoingSessionRequests.add(request); } mPendingSessionRequests.clear(); } catch(RemoteException e) { // The target spell checker service is not available. Better to reset the state. removeAllLocked(); } cleanLocked(); } public void onServiceDisconnected() { public void onServiceDisconnectedLocked() { if (DBG) { Slog.d(TAG, "onServiceDisconnected"); Slog.d(TAG, "onServiceDisconnectedLocked"); } synchronized (mLock) { mSpellChecker = null; mConnected = false; } } public void removeListener(ISpellCheckerSessionListener listener) { if (DBG) { Loading Loading @@ -848,9 +860,8 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { mUnbindCalled = true; } public void removeAll() { public void removeAllLocked() { Slog.e(TAG, "Remove the spell checker bind unexpectedly."); synchronized (mLock) { final int size = mListeners.getRegisteredCallbackCount(); for (int i = size - 1; i >= 0; --i) { mListeners.unregister(mListeners.getRegisteredCallbackItem(i)); Loading @@ -859,7 +870,6 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { mOnGoingSessionRequests.clear(); cleanLocked(); } } public void getISpellCheckerSessionOrQueueLocked(@NonNull SessionRequest request) { if (mUnbindCalled) { Loading @@ -869,13 +879,6 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { mPendingSessionRequests.add(request); return; } getISpellCheckerSessionLocked(request); } private void getISpellCheckerSessionLocked(@NonNull SessionRequest request) { if (mUnbindCalled) { return; } try { mSpellChecker.getISpellCheckerSession( request.mLocale, request.mScListener, request.mBundle, Loading @@ -883,7 +886,7 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { mOnGoingSessionRequests.add(request); } catch(RemoteException e) { // The target spell checker service is not available. Better to reset the state. removeAll(); removeAllLocked(); } cleanLocked(); } Loading Loading @@ -925,13 +928,13 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { private void onServiceConnectedInnerLocked(ComponentName name, IBinder service) { if (DBG) { Slog.w(TAG, "onServiceConnected: " + name); Slog.w(TAG, "onServiceConnectedInnerLocked: " + name); } final ISpellCheckerService spellChecker = ISpellCheckerService.Stub.asInterface(service); final SpellCheckerBindGroup group = mSpellCheckerBindGroups.get(mSciId); if (group != null && this == group.mInternalConnection) { group.onServiceConnected(spellChecker); group.onServiceConnectedLocked(spellChecker); } } Loading @@ -944,11 +947,11 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { private void onServiceDisconnectedInnerLocked(ComponentName name) { if (DBG) { Slog.w(TAG, "onServiceDisconnected: " + name); Slog.w(TAG, "onServiceDisconnectedInnerLocked: " + name); } final SpellCheckerBindGroup group = mSpellCheckerBindGroups.get(mSciId); if (group != null && this == group.mInternalConnection) { group.onServiceDisconnected(); group.onServiceDisconnectedLocked(); } } } Loading