Merge "handle dynamically set AccessibilityServiceInfo.FLAG_INPUT_METHOD_EDITOR"

This commit is contained in:
Yinglei Wang
2022-02-25 06:00:26 +00:00
committed by Android (Google) Code Review
3 changed files with 29 additions and 19 deletions

View File

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

View File

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

View File

@@ -4302,7 +4302,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(
@@ -4310,12 +4310,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();
@@ -4323,7 +4323,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);
@@ -4333,7 +4333,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();