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

Commit f23a2f95 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

Change-Id: I4e2385729f8cfe475531d36bdc6b3f13914f022a
parents dae011cc 8c009ebf
Loading
Loading
Loading
Loading
+38 −35
Original line number Diff line number Diff line
@@ -370,7 +370,7 @@ public class TextServicesManagerService extends ITextServicesManager.Stub {

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

        public void getISpellCheckerSessionOrQueueLocked(@NonNull SessionRequest request) {
            if (mUnbindCalled) {
@@ -874,13 +884,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,
@@ -888,7 +891,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();
        }
@@ -930,13 +933,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);
            }
        }

@@ -949,11 +952,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();
            }
        }
    }