Merge "handle dynamically set AccessibilityServiceInfo.FLAG_INPUT_METHOD_EDITOR"
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user