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

Commit 4371bb50 authored by Yinglei Wang's avatar Yinglei Wang Committed by Automerger Merge Worker
Browse files

Merge "handle dynamically set...

Merge "handle dynamically set AccessibilityServiceInfo.FLAG_INPUT_METHOD_EDITOR" into tm-dev am: 1ce39475

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17130308

Change-Id: If9305e5e935ad0f6a579483cdd01aa23fc69acdf
parents adfd6708 1ce39475
Loading
Loading
Loading
Loading
+16 −11
Original line number Diff line number Diff line
@@ -825,17 +825,7 @@ public abstract class AccessibilityService extends Service {
            for (int i = 0; i < mMagnificationControllers.size(); i++) {
                mMagnificationControllers.valueAt(i).onServiceConnectedLocked();
            }
            AccessibilityServiceInfo info = getServiceInfo();
            if (info != null) {
                boolean requestIme = (info.flags
                        & AccessibilityServiceInfo.FLAG_INPUT_METHOD_EDITOR) != 0;
                if (requestIme && !mInputMethodInitialized) {
                    mInputMethod = onCreateInputMethod();
                    mInputMethodInitialized = true;
                }
            } else {
                Log.e(LOG_TAG, "AccessibilityServiceInfo is null in dispatchServiceConnected");
            }
            updateInputMethod(getServiceInfo());
        }
        if (mSoftKeyboardController != null) {
            mSoftKeyboardController.onServiceConnected();
@@ -846,6 +836,20 @@ public abstract class AccessibilityService extends Service {
        onServiceConnected();
    }

    private void updateInputMethod(AccessibilityServiceInfo info) {
        if (info != null) {
            boolean requestIme = (info.flags
                    & AccessibilityServiceInfo.FLAG_INPUT_METHOD_EDITOR) != 0;
            if (requestIme && !mInputMethodInitialized) {
                mInputMethod = onCreateInputMethod();
                mInputMethodInitialized = true;
            } else if (!requestIme & mInputMethodInitialized) {
                mInputMethod = null;
                mInputMethodInitialized = false;
            }
        }
    }

    /**
     * This method is a part of the {@link AccessibilityService} lifecycle and is
     * called after the system has successfully bound to the service. If is
@@ -2521,6 +2525,7 @@ public abstract class AccessibilityService extends Service {
     */
    public final void setServiceInfo(AccessibilityServiceInfo info) {
        mInfo = info;
        updateInputMethod(info);
        sendServiceInfo();
    }

+8 −3
Original line number Diff line number Diff line
@@ -281,9 +281,9 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ

        void onDoubleTapAndHold(int displayId);

        void requestImeLocked(AccessibilityServiceConnection connection);
        void requestImeLocked(AbstractAccessibilityServiceConnection connection);

        void unbindImeLocked(AccessibilityServiceConnection connection);
        void unbindImeLocked(AbstractAccessibilityServiceConnection connection);
    }

    public AbstractAccessibilityServiceConnection(Context context, ComponentName componentName,
@@ -387,7 +387,6 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
                & AccessibilityServiceInfo.FLAG_REQUEST_FINGERPRINT_GESTURES) != 0;
        mRequestAccessibilityButton = (info.flags
                & AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON) != 0;
        // TODO(b/218193835): request ime when ime flag is set and clean up when ime flag is unset
        mRequestImeApis = (info.flags
                & AccessibilityServiceInfo.FLAG_INPUT_METHOD_EDITOR) != 0;
    }
@@ -439,6 +438,7 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
                // If the XML manifest had data to configure the service its info
                // should be already set. In such a case update only the dynamically
                // configurable properties.
                boolean oldRequestIme = mRequestImeApis;
                AccessibilityServiceInfo oldInfo = mAccessibilityServiceInfo;
                if (oldInfo != null) {
                    oldInfo.updateDynamicallyConfigurableProperties(mIPlatformCompat, info);
@@ -447,6 +447,11 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
                    setDynamicallyConfigurableProperties(info);
                }
                mSystemSupport.onClientChangeLocked(true);
                if (!oldRequestIme && mRequestImeApis) {
                    mSystemSupport.requestImeLocked(this);
                } else if (oldRequestIme && !mRequestImeApis) {
                    mSystemSupport.unbindImeLocked(this);
                }
            }
        } finally {
            Binder.restoreCallingIdentity(identity);
+5 −5
Original line number Diff line number Diff line
@@ -4305,7 +4305,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
    }

    @Override
    public void requestImeLocked(AccessibilityServiceConnection connection) {
    public void requestImeLocked(AbstractAccessibilityServiceConnection connection) {
        mMainHandler.sendMessage(obtainMessage(
                AccessibilityManagerService::createSessionForConnection, this, connection));
        mMainHandler.sendMessage(obtainMessage(
@@ -4313,12 +4313,12 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
    }

    @Override
    public void unbindImeLocked(AccessibilityServiceConnection connection) {
    public void unbindImeLocked(AbstractAccessibilityServiceConnection connection) {
        mMainHandler.sendMessage(obtainMessage(
                AccessibilityManagerService::unbindInputForConnection, this, connection));
    }

    private void createSessionForConnection(AccessibilityServiceConnection connection) {
    private void createSessionForConnection(AbstractAccessibilityServiceConnection connection) {
        synchronized (mLock) {
            if (mInputSessionRequested) {
                connection.createImeSessionLocked();
@@ -4326,7 +4326,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
        }
    }

    private void bindAndStartInputForConnection(AccessibilityServiceConnection connection) {
    private void bindAndStartInputForConnection(AbstractAccessibilityServiceConnection connection) {
        synchronized (mLock) {
            if (mInputBinding != null) {
                connection.bindInputLocked(mInputBinding);
@@ -4336,7 +4336,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
        }
    }

    private void unbindInputForConnection(AccessibilityServiceConnection connection) {
    private void unbindInputForConnection(AbstractAccessibilityServiceConnection connection) {
        InputMethodManagerInternal.get().unbindAccessibilityFromCurrentClient(connection.mId);
        synchronized (mLock) {
            connection.unbindInputLocked();