I have created an AccessibilityService
which is working correctly and onAccessibilityEvent()
is called on each event. What I want to do is populate an EditText
in the browser from my Service. I can get this working in ordinary apps using AccessibilityNodeInfo.ACTION_PASTE
. However this does not work with EditText
s from within a browser such as Chrome, even though they appear to be detected just the same.
Here is how I set up the service:
protected void onServiceConnected() {
super.onServiceConnected();
Log.v(TAG, "onServiceConnected");
_("CONNECTED");
toast("service connected");
AccessibilityServiceInfo info = new AccessibilityServiceInfo();
info.flags = AccessibilityServiceInfo.DEFAULT |
AccessibilityServiceInfo.FLAG_RETRIEVE_INTERACTIVE_WINDOWS |
AccessibilityServiceInfo.FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY |
AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS |
AccessibilityServiceInfo.FLAG_REPORT_VIEW_IDS;
info.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
setServiceInfo(info);
}
And how I deal with events:
@Override
public void onAccessibilityEvent(final AccessibilityEvent event) {
_("//////////////////onAccessibilityEvent");
final AccessibilityNodeInfo source = event.getSource();
if (source == null) {
return;
}
AccessibilityNodeInfo source = event.getSource();
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", "MyData");
clipboard.setPrimaryClip(clip);
source.performAction(AccessibilityNodeInfo.ACTION_PASTE);
}
I have defined further options in an xml file from the manifest using:
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data android:name="android.accessibilityservice" android:resource="@xml/access" />
This all seems to work apart from on an EditText
in say Chrome.. nothing appears, any other options? LastPass seem to do it somehow :-)