Also check for default browser webview

This commit is contained in:
Matthew Wong 2015-12-31 06:51:47 -05:00
parent ba1ef7a38e
commit c3b87f5b18

View file

@ -90,6 +90,11 @@ public class AutofillService extends AccessibilityService {
@Override @Override
public void onAccessibilityEvent(AccessibilityEvent event) { public void onAccessibilityEvent(AccessibilityEvent event) {
// TODO there should be a better way of disabling service
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) {
return;
}
// if returning to the source app from a successful AutofillActivity // if returning to the source app from a successful AutofillActivity
if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED
&& event.getPackageName().equals(packageName) && resultData != null) { && event.getPackageName().equals(packageName) && resultData != null) {
@ -98,15 +103,20 @@ public class AutofillService extends AccessibilityService {
// look for webView and trigger accessibility events if window changes // look for webView and trigger accessibility events if window changes
// or if page changes in chrome // or if page changes in chrome
if ((event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED
|| (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED || (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED
&& event.getSource().getPackageName().equals("com.android.chrome"))) && (event.getSource().getPackageName().equals("com.android.chrome")
&& Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { || event.getSource().getPackageName().equals("com.android.browser")))) {
webViewTitle = searchWebView(getRootInActiveWindow()); webViewTitle = searchWebView(getRootInActiveWindow());
webViewURL = null; webViewURL = null;
if (webViewTitle != null && getRootInActiveWindow() != null) { if (webViewTitle != null) {
List<AccessibilityNodeInfo> nodes = getRootInActiveWindow() List<AccessibilityNodeInfo> nodes = new ArrayList<>();
.findAccessibilityNodeInfosByViewId("com.android.chrome:id/url_bar"); if (event.getSource().getPackageName().equals("com.android.chrome")) {
nodes = getRootInActiveWindow().findAccessibilityNodeInfosByViewId("com.android.chrome:id/url_bar");
} else if (event.getSource().getPackageName().equals("com.android.browser")) {
nodes = getRootInActiveWindow().findAccessibilityNodeInfosByViewId("com.android.browser:id/url");
}
for (AccessibilityNodeInfo node : nodes) for (AccessibilityNodeInfo node : nodes)
if (node.getText() != null) { if (node.getText() != null) {
try { try {
@ -123,10 +133,9 @@ public class AutofillService extends AccessibilityService {
} }
} }
// nothing to do if not password field focus, android version, or field is keychain app // nothing to do if not password field focus, field is keychain app
if (!event.isPassword() if (!event.isPassword()
|| event.getEventType() == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED || event.getEventType() == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED
|| Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2
|| event.getPackageName().equals("org.sufficientlysecure.keychain")) { || event.getPackageName().equals("org.sufficientlysecure.keychain")) {
dismissDialog(event); dismissDialog(event);
return; return;