Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0c2806f2 authored by Yohei Yukawa's avatar Yohei Yukawa Committed by android-build-merger
Browse files

Merge changes I6de5ac05,I5f8c112d into oc-mr1-dev am: 8c009ebf

am: f23a2f95

Change-Id: I74d11c6178449fa7463508c73f554e261d02ec03
parents 49f0aa41 f23a2f95
Loading
Loading
Loading
Loading
+38 −35
Original line number Diff line number Diff line
@@ -365,7 +365,7 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {

    private void unbindServiceLocked() {
        for (SpellCheckerBindGroup scbg : mSpellCheckerBindGroups.values()) {
            scbg.removeAll();
            scbg.removeAllLocked();
        }
        mSpellCheckerBindGroups.clear();
    }
@@ -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) {
@@ -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));
@@ -859,7 +870,6 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {
            mOnGoingSessionRequests.clear();
            cleanLocked();
        }
        }

        public void getISpellCheckerSessionOrQueueLocked(@NonNull SessionRequest request) {
            if (mUnbindCalled) {
@@ -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,
@@ -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();
        }
@@ -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);
            }
        }

@@ -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();
            }
        }
    }