From c32410068dc23b1eee87bc370525a46ffc7a936d Mon Sep 17 00:00:00 2001 From: Felipe Leme Date: Wed, 15 Feb 2017 12:55:11 -0800 Subject: [PATCH] Add URL on ViewStructure. The URL will be typically used by views rendering HTML pages (like WebView), and used in 2 cases - Root node (containing the URL of the HTML page) - Child nodes that represent hyperlinks (contains the hyperlink URL). Fixes: 20902429 Test: manual verification Test: android.assist.cts.WebViewTest verifies it Change-Id: Ic49472f1fca89047369b7187176f54efd277e204 --- api/current.txt | 2 + api/system-current.txt | 2 + api/test-current.txt | 2 + .../android/app/assist/AssistStructure.java | 38 ++++++++++++++++++- core/java/android/view/ViewStructure.java | 13 +++++++ 5 files changed, 55 insertions(+), 2 deletions(-) diff --git a/api/current.txt b/api/current.txt index 5ecef52dee272..b00628d1566fb 100644 --- a/api/current.txt +++ b/api/current.txt @@ -6568,6 +6568,7 @@ package android.app.assist { method public int getTextStyle(); method public int getTop(); method public android.graphics.Matrix getTransformation(); + method public java.lang.String getUrl(); method public int getVisibility(); method public int getWidth(); method public boolean isAccessibilityFocused(); @@ -45657,6 +45658,7 @@ package android.view { method public abstract void setTextLines(int[], int[]); method public abstract void setTextStyle(float, int, int, int); method public abstract void setTransformation(android.graphics.Matrix); + method public abstract void setUrl(java.lang.String); method public abstract void setVisibility(int); field public static final int AUTO_FILL_FLAG_SANITIZED = 1; // 0x1 } diff --git a/api/system-current.txt b/api/system-current.txt index e89c25cb48d14..2a3327ee16cc2 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -6805,6 +6805,7 @@ package android.app.assist { method public int getTextStyle(); method public int getTop(); method public android.graphics.Matrix getTransformation(); + method public java.lang.String getUrl(); method public int getVisibility(); method public int getWidth(); method public boolean isAccessibilityFocused(); @@ -49095,6 +49096,7 @@ package android.view { method public abstract void setTextLines(int[], int[]); method public abstract void setTextStyle(float, int, int, int); method public abstract void setTransformation(android.graphics.Matrix); + method public abstract void setUrl(java.lang.String); method public abstract void setVisibility(int); field public static final int AUTO_FILL_FLAG_SANITIZED = 1; // 0x1 } diff --git a/api/test-current.txt b/api/test-current.txt index b38e2b2069f5f..5bf2f6bf6daca 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -6591,6 +6591,7 @@ package android.app.assist { method public int getTextStyle(); method public int getTop(); method public android.graphics.Matrix getTransformation(); + method public java.lang.String getUrl(); method public int getVisibility(); method public int getWidth(); method public boolean isAccessibilityFocused(); @@ -45969,6 +45970,7 @@ package android.view { method public abstract void setTextLines(int[], int[]); method public abstract void setTextStyle(float, int, int, int); method public abstract void setTransformation(android.graphics.Matrix); + method public abstract void setUrl(java.lang.String); method public abstract void setVisibility(int); field public static final int AUTO_FILL_FLAG_SANITIZED = 1; // 0x1 } diff --git a/core/java/android/app/assist/AssistStructure.java b/core/java/android/app/assist/AssistStructure.java index 6591fc9671f51..8d385db263df0 100644 --- a/core/java/android/app/assist/AssistStructure.java +++ b/core/java/android/app/assist/AssistStructure.java @@ -17,13 +17,13 @@ import android.os.SystemClock; import android.text.TextUtils; import android.util.Log; import android.view.View; -import android.view.ViewStructure; import android.view.ViewRootImpl; +import android.view.ViewStructure; import android.view.WindowManager; import android.view.WindowManagerGlobal; +import android.view.autofill.AutoFillId; import android.view.autofill.AutoFillType; import android.view.autofill.AutoFillValue; -import android.view.autofill.AutoFillId; import java.util.ArrayList; @@ -579,6 +579,7 @@ public class AssistStructure implements Parcelable { static final int FLAGS_HAS_EXTRAS = 0x00400000; static final int FLAGS_HAS_ID = 0x00200000; static final int FLAGS_HAS_CHILDREN = 0x00100000; + static final int FLAGS_HAS_URL = 0x00080000; static final int FLAGS_ALL_CONTROL = 0xfff00000; int mFlags; @@ -587,6 +588,7 @@ public class AssistStructure implements Parcelable { CharSequence mContentDescription; ViewNodeText mText; + String mUrl; Bundle mExtras; ViewNode[] mChildren; @@ -651,6 +653,9 @@ public class AssistStructure implements Parcelable { if ((flags&FLAGS_HAS_TEXT) != 0) { mText = new ViewNodeText(in, (flags&FLAGS_HAS_COMPLEX_TEXT) == 0); } + if ((flags&FLAGS_HAS_URL) != 0) { + mUrl = in.readString(); + } if ((flags&FLAGS_HAS_EXTRAS) != 0) { mExtras = in.readBundle(); } @@ -704,6 +709,9 @@ public class AssistStructure implements Parcelable { flags |= FLAGS_HAS_COMPLEX_TEXT; } } + if (mUrl != null) { + flags |= FLAGS_HAS_URL; + } if (mExtras != null) { flags |= FLAGS_HAS_EXTRAS; } @@ -760,6 +768,9 @@ public class AssistStructure implements Parcelable { if ((flags&FLAGS_HAS_TEXT) != 0) { mText.writeToParcel(out, (flags&FLAGS_HAS_COMPLEX_TEXT) == 0, writeSensitive); } + if ((flags&FLAGS_HAS_URL) != 0) { + out.writeString(mUrl); + } if ((flags&FLAGS_HAS_EXTRAS) != 0) { out.writeBundle(mExtras); } @@ -1039,6 +1050,20 @@ public class AssistStructure implements Parcelable { return mContentDescription; } + /** + * Returns the URL represented by this node. + * + *

Typically used in 2 categories of nodes: + * + *

    + *
  1. Root node (containing the URL of the HTML page) + *
  2. Child nodes that represent hyperlinks (contains the hyperlink URL). + *
+ */ + public String getUrl() { + return mUrl; + } + /** * Returns any text associated with the node that is displayed to the user, or null * if there is none. @@ -1486,6 +1511,11 @@ public class AssistStructure implements Parcelable { public void setSanitized(boolean sanitized) { mNode.mSanitized = sanitized; } + + @Override + public void setUrl(String url) { + mNode.mUrl = url; + } } /** @hide */ @@ -1583,6 +1613,10 @@ public class AssistStructure implements Parcelable { Log.i(TAG, prefix + " Text color fg: #" + Integer.toHexString(node.getTextColor()) + ", bg: #" + Integer.toHexString(node.getTextBackgroundColor())); } + CharSequence url = node.getUrl(); + if (url != null) { + Log.i(TAG, prefix + " URL: " + url); + } String hint = node.getHint(); if (hint != null) { Log.i(TAG, prefix + " Hint: " + hint); diff --git a/core/java/android/view/ViewStructure.java b/core/java/android/view/ViewStructure.java index cc19539b0e51c..d195c885dc6f5 100644 --- a/core/java/android/view/ViewStructure.java +++ b/core/java/android/view/ViewStructure.java @@ -335,4 +335,17 @@ public abstract class ViewStructure { /** @hide */ public abstract AutoFillId getAutoFillId(); + + /** + * Sets the URL represented by this node. + * + *

Typically used in the following situations: + * + *

    + *
  1. In a {@link android.app.assist.AssistStructure.WindowNode#getRootViewNode()}, to set up + * the main URL of an HTML page. + *
  2. On child nodes represening hyperlinks. + *
+ */ + public abstract void setUrl(String url); }