Get the URL in Chrome
This commit is contained in:
parent
ebd565ec37
commit
cdf27fc24d
2 changed files with 29 additions and 4 deletions
|
@ -17,7 +17,6 @@ import android.preference.PreferenceManager;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.support.v7.app.AlertDialog;
|
import android.support.v7.app.AlertDialog;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.TypedValue;
|
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
import android.view.accessibility.AccessibilityEvent;
|
import android.view.accessibility.AccessibilityEvent;
|
||||||
import android.view.accessibility.AccessibilityNodeInfo;
|
import android.view.accessibility.AccessibilityNodeInfo;
|
||||||
|
@ -38,7 +37,10 @@ import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.UnsupportedEncodingException;
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URL;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class AutofillService extends AccessibilityService {
|
public class AutofillService extends AccessibilityService {
|
||||||
|
@ -53,6 +55,7 @@ public class AutofillService extends AccessibilityService {
|
||||||
private CharSequence packageName;
|
private CharSequence packageName;
|
||||||
private boolean ignoreActionFocus = false;
|
private boolean ignoreActionFocus = false;
|
||||||
private String webViewTitle = null;
|
private String webViewTitle = null;
|
||||||
|
private String webViewURL = null;
|
||||||
|
|
||||||
public final class Constants {
|
public final class Constants {
|
||||||
public static final String TAG = "Keychain";
|
public static final String TAG = "Keychain";
|
||||||
|
@ -84,6 +87,28 @@ public class AutofillService extends AccessibilityService {
|
||||||
&& event.getSource().getPackageName().equals("com.android.chrome")))
|
&& event.getSource().getPackageName().equals("com.android.chrome")))
|
||||||
&& Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
|
&& Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
|
||||||
webViewTitle = searchWebView(getRootInActiveWindow());
|
webViewTitle = searchWebView(getRootInActiveWindow());
|
||||||
|
webViewURL = null;
|
||||||
|
if (webViewTitle != null) {
|
||||||
|
List<AccessibilityNodeInfo> nodes = getRootInActiveWindow()
|
||||||
|
.findAccessibilityNodeInfosByViewId("com.android.chrome:id/url_bar");
|
||||||
|
for (AccessibilityNodeInfo node : nodes)
|
||||||
|
if (node.getText() != null) {
|
||||||
|
try {
|
||||||
|
webViewURL = new URL(node.getText().toString()).getHost();
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
if (e.toString().contains("Protocol not found")) {
|
||||||
|
try {
|
||||||
|
webViewURL = new URL("http://" + node.getText().toString()).getHost();
|
||||||
|
} catch (MalformedURLException ignored) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (webViewTitle != null)
|
||||||
|
Log.d("Title", webViewTitle);
|
||||||
|
if (webViewURL != null)
|
||||||
|
Log.d("URL", webViewURL);
|
||||||
}
|
}
|
||||||
|
|
||||||
// nothing to do if not password field focus, android version, or field is keychain app
|
// nothing to do if not password field focus, android version, or field is keychain app
|
||||||
|
@ -166,10 +191,10 @@ public class AutofillService extends AccessibilityService {
|
||||||
if (u == null) {
|
if (u == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// this is not likely to always work
|
|
||||||
if (u.getClassName() != null && u.getClassName().equals("android.webkit.WebView")) {
|
if (u.getClassName() != null && u.getClassName().equals("android.webkit.WebView")) {
|
||||||
if (u.getContentDescription() != null)
|
if (u.getContentDescription() != null) {
|
||||||
return u.getContentDescription().toString();
|
return u.getContentDescription().toString();
|
||||||
|
}
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
if (searchWebView(u) != null) {
|
if (searchWebView(u) != null) {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
|
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:description="@string/autofill_description"
|
android:description="@string/autofill_description"
|
||||||
android:accessibilityEventTypes="typeViewFocused|typeViewClicked|typeWindowStateChanged|typeWindowContentChanged"
|
android:accessibilityEventTypes="typeViewFocused|typeViewClicked|typeWindowStateChanged|typeWindowContentChanged"
|
||||||
android:accessibilityFlags="flagDefault|flagRetrieveInteractiveWindows"
|
android:accessibilityFlags="flagDefault|flagRetrieveInteractiveWindows|flagReportViewIds"
|
||||||
android:accessibilityFeedbackType="feedbackGeneric"
|
android:accessibilityFeedbackType="feedbackGeneric"
|
||||||
android:notificationTimeout="100"
|
android:notificationTimeout="100"
|
||||||
android:canRetrieveWindowContent="true"
|
android:canRetrieveWindowContent="true"
|
||||||
|
|
Loading…
Reference in a new issue