Merge "Fix issue #20655182: API Review: ViewAssistStructure" into mnc-dev
diff --git a/api/current.txt b/api/current.txt
index 5320b7b..c38c0e7 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -217,6 +217,7 @@
 
   public static final class R.attr {
     ctor public R.attr();
+    field public static final int __reserved0 = 16844020; // 0x10104f4
     field public static final int absListViewStyle = 16842858; // 0x101006a
     field public static final int accessibilityEventTypes = 16843648; // 0x1010380
     field public static final int accessibilityFeedbackType = 16843650; // 0x1010382
@@ -300,7 +301,6 @@
     field public static final int anyDensity = 16843372; // 0x101026c
     field public static final int apduServiceBanner = 16843757; // 0x10103ed
     field public static final int apiKey = 16843281; // 0x1010211
-    field public static final int assistBlocked = 16844020; // 0x10104f4
     field public static final int author = 16843444; // 0x10102b4
     field public static final int authorities = 16842776; // 0x1010018
     field public static final int autoAdvanceViewId = 16843535; // 0x101030f
@@ -35901,7 +35901,7 @@
     method public boolean dispatchNestedPreScroll(int, int, int[], int[]);
     method public boolean dispatchNestedScroll(int, int, int, int, int[]);
     method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
-    method public void dispatchProvideAssistStructure(android.view.ViewAssistStructure);
+    method public void dispatchProvideStructure(android.view.ViewStructure);
     method protected void dispatchRestoreInstanceState(android.util.SparseArray<android.os.Parcelable>);
     method protected void dispatchSaveInstanceState(android.util.SparseArray<android.os.Parcelable>);
     method protected void dispatchSetActivated(boolean);
@@ -36081,7 +36081,6 @@
     method public void invalidateOutline();
     method public boolean isAccessibilityFocused();
     method public boolean isActivated();
-    method public boolean isAssistBlocked();
     method public boolean isAttachedToWindow();
     method public boolean isClickable();
     method public boolean isDirty();
@@ -36163,8 +36162,8 @@
     method protected void onMeasure(int, int);
     method protected void onOverScrolled(int, int, boolean, boolean);
     method public void onPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
-    method public void onProvideAssistStructure(android.view.ViewAssistStructure);
-    method public void onProvideVirtualAssistStructure(android.view.ViewAssistStructure);
+    method public void onProvideStructure(android.view.ViewStructure);
+    method public void onProvideVirtualStructure(android.view.ViewStructure);
     method protected void onRestoreInstanceState(android.os.Parcelable);
     method public void onRtlPropertiesChanged(int);
     method protected android.os.Parcelable onSaveInstanceState();
@@ -36227,7 +36226,6 @@
     method public void setActivated(boolean);
     method public void setAlpha(float);
     method public void setAnimation(android.view.animation.Animation);
-    method public void setAssistBlocked(boolean);
     method public void setBackground(android.graphics.drawable.Drawable);
     method public void setBackgroundColor(int);
     method public deprecated void setBackgroundDrawable(android.graphics.drawable.Drawable);
@@ -36590,40 +36588,8 @@
     method public static android.animation.Animator createCircularReveal(android.view.View, int, int, float, float);
   }
 
-  public abstract class ViewAssistStructure {
+  public abstract deprecated class ViewAssistStructure extends android.view.ViewStructure {
     ctor public ViewAssistStructure();
-    method public abstract void asyncCommit();
-    method public abstract android.view.ViewAssistStructure asyncNewChild(int);
-    method public abstract void clearExtras();
-    method public abstract android.os.Bundle editExtras();
-    method public abstract int getChildCount();
-    method public abstract java.lang.CharSequence getHint();
-    method public abstract java.lang.CharSequence getText();
-    method public abstract int getTextSelectionEnd();
-    method public abstract int getTextSelectionStart();
-    method public abstract android.view.ViewAssistStructure newChild(int);
-    method public abstract void setAccessibilityFocused(boolean);
-    method public abstract void setActivated(boolean);
-    method public abstract void setAssistBlocked(boolean);
-    method public abstract void setCheckable(boolean);
-    method public abstract void setChecked(boolean);
-    method public abstract void setChildCount(int);
-    method public abstract void setClassName(java.lang.String);
-    method public abstract void setClickable(boolean);
-    method public abstract void setContentDescription(java.lang.CharSequence);
-    method public abstract void setDimens(int, int, int, int, int, int);
-    method public abstract void setEnabled(boolean);
-    method public abstract void setFocusable(boolean);
-    method public abstract void setFocused(boolean);
-    method public abstract void setHint(java.lang.CharSequence);
-    method public abstract void setId(int, java.lang.String, java.lang.String, java.lang.String);
-    method public abstract void setLongClickable(boolean);
-    method public abstract void setSelected(boolean);
-    method public abstract void setStylusButtonPressable(boolean);
-    method public abstract void setText(java.lang.CharSequence);
-    method public abstract void setText(java.lang.CharSequence, int, int);
-    method public abstract void setTextPaint(android.text.TextPaint);
-    method public abstract void setVisibility(int);
   }
 
   public class ViewConfiguration {
@@ -37000,6 +36966,41 @@
     method public android.view.ViewPropertyAnimator zBy(float);
   }
 
+  public abstract class ViewStructure {
+    ctor public ViewStructure();
+    method public abstract void asyncCommit();
+    method public abstract android.view.ViewAssistStructure asyncNewChild(int);
+    method public abstract int getChildCount();
+    method public abstract android.os.Bundle getExtras();
+    method public abstract java.lang.CharSequence getHint();
+    method public abstract java.lang.CharSequence getText();
+    method public abstract int getTextSelectionEnd();
+    method public abstract int getTextSelectionStart();
+    method public abstract boolean hasExtras();
+    method public abstract android.view.ViewAssistStructure newChild(int);
+    method public abstract void setAccessibilityFocused(boolean);
+    method public abstract void setActivated(boolean);
+    method public abstract void setCheckable(boolean);
+    method public abstract void setChecked(boolean);
+    method public abstract void setChildCount(int);
+    method public abstract void setClassName(java.lang.String);
+    method public abstract void setClickable(boolean);
+    method public abstract void setContentDescription(java.lang.CharSequence);
+    method public abstract void setDimens(int, int, int, int, int, int);
+    method public abstract void setEnabled(boolean);
+    method public abstract void setFocusable(boolean);
+    method public abstract void setFocused(boolean);
+    method public abstract void setHint(java.lang.CharSequence);
+    method public abstract void setId(int, java.lang.String, java.lang.String, java.lang.String);
+    method public abstract void setLongClickable(boolean);
+    method public abstract void setSelected(boolean);
+    method public abstract void setStylusButtonPressable(boolean);
+    method public abstract void setText(java.lang.CharSequence);
+    method public abstract void setText(java.lang.CharSequence, int, int);
+    method public abstract void setTextPaint(android.text.TextPaint);
+    method public abstract void setVisibility(int);
+  }
+
   public final class ViewStub extends android.view.View {
     ctor public ViewStub(android.content.Context);
     ctor public ViewStub(android.content.Context, int);
diff --git a/api/system-current.txt b/api/system-current.txt
index da2faf6..0c57b5a 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -289,6 +289,7 @@
 
   public static final class R.attr {
     ctor public R.attr();
+    field public static final int __reserved0 = 16844020; // 0x10104f4
     field public static final int absListViewStyle = 16842858; // 0x101006a
     field public static final int accessibilityEventTypes = 16843648; // 0x1010380
     field public static final int accessibilityFeedbackType = 16843650; // 0x1010382
@@ -372,7 +373,6 @@
     field public static final int anyDensity = 16843372; // 0x101026c
     field public static final int apduServiceBanner = 16843757; // 0x10103ed
     field public static final int apiKey = 16843281; // 0x1010211
-    field public static final int assistBlocked = 16844020; // 0x10104f4
     field public static final int author = 16843444; // 0x10102b4
     field public static final int authorities = 16842776; // 0x1010018
     field public static final int autoAdvanceViewId = 16843535; // 0x101030f
@@ -38112,7 +38112,7 @@
     method public boolean dispatchNestedPreScroll(int, int, int[], int[]);
     method public boolean dispatchNestedScroll(int, int, int, int, int[]);
     method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
-    method public void dispatchProvideAssistStructure(android.view.ViewAssistStructure);
+    method public void dispatchProvideStructure(android.view.ViewStructure);
     method protected void dispatchRestoreInstanceState(android.util.SparseArray<android.os.Parcelable>);
     method protected void dispatchSaveInstanceState(android.util.SparseArray<android.os.Parcelable>);
     method protected void dispatchSetActivated(boolean);
@@ -38292,7 +38292,6 @@
     method public void invalidateOutline();
     method public boolean isAccessibilityFocused();
     method public boolean isActivated();
-    method public boolean isAssistBlocked();
     method public boolean isAttachedToWindow();
     method public boolean isClickable();
     method public boolean isDirty();
@@ -38374,8 +38373,8 @@
     method protected void onMeasure(int, int);
     method protected void onOverScrolled(int, int, boolean, boolean);
     method public void onPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
-    method public void onProvideAssistStructure(android.view.ViewAssistStructure);
-    method public void onProvideVirtualAssistStructure(android.view.ViewAssistStructure);
+    method public void onProvideStructure(android.view.ViewStructure);
+    method public void onProvideVirtualStructure(android.view.ViewStructure);
     method protected void onRestoreInstanceState(android.os.Parcelable);
     method public void onRtlPropertiesChanged(int);
     method protected android.os.Parcelable onSaveInstanceState();
@@ -38438,7 +38437,6 @@
     method public void setActivated(boolean);
     method public void setAlpha(float);
     method public void setAnimation(android.view.animation.Animation);
-    method public void setAssistBlocked(boolean);
     method public void setBackground(android.graphics.drawable.Drawable);
     method public void setBackgroundColor(int);
     method public deprecated void setBackgroundDrawable(android.graphics.drawable.Drawable);
@@ -38801,40 +38799,8 @@
     method public static android.animation.Animator createCircularReveal(android.view.View, int, int, float, float);
   }
 
-  public abstract class ViewAssistStructure {
+  public abstract deprecated class ViewAssistStructure extends android.view.ViewStructure {
     ctor public ViewAssistStructure();
-    method public abstract void asyncCommit();
-    method public abstract android.view.ViewAssistStructure asyncNewChild(int);
-    method public abstract void clearExtras();
-    method public abstract android.os.Bundle editExtras();
-    method public abstract int getChildCount();
-    method public abstract java.lang.CharSequence getHint();
-    method public abstract java.lang.CharSequence getText();
-    method public abstract int getTextSelectionEnd();
-    method public abstract int getTextSelectionStart();
-    method public abstract android.view.ViewAssistStructure newChild(int);
-    method public abstract void setAccessibilityFocused(boolean);
-    method public abstract void setActivated(boolean);
-    method public abstract void setAssistBlocked(boolean);
-    method public abstract void setCheckable(boolean);
-    method public abstract void setChecked(boolean);
-    method public abstract void setChildCount(int);
-    method public abstract void setClassName(java.lang.String);
-    method public abstract void setClickable(boolean);
-    method public abstract void setContentDescription(java.lang.CharSequence);
-    method public abstract void setDimens(int, int, int, int, int, int);
-    method public abstract void setEnabled(boolean);
-    method public abstract void setFocusable(boolean);
-    method public abstract void setFocused(boolean);
-    method public abstract void setHint(java.lang.CharSequence);
-    method public abstract void setId(int, java.lang.String, java.lang.String, java.lang.String);
-    method public abstract void setLongClickable(boolean);
-    method public abstract void setSelected(boolean);
-    method public abstract void setStylusButtonPressable(boolean);
-    method public abstract void setText(java.lang.CharSequence);
-    method public abstract void setText(java.lang.CharSequence, int, int);
-    method public abstract void setTextPaint(android.text.TextPaint);
-    method public abstract void setVisibility(int);
   }
 
   public class ViewConfiguration {
@@ -39211,6 +39177,41 @@
     method public android.view.ViewPropertyAnimator zBy(float);
   }
 
+  public abstract class ViewStructure {
+    ctor public ViewStructure();
+    method public abstract void asyncCommit();
+    method public abstract android.view.ViewAssistStructure asyncNewChild(int);
+    method public abstract int getChildCount();
+    method public abstract android.os.Bundle getExtras();
+    method public abstract java.lang.CharSequence getHint();
+    method public abstract java.lang.CharSequence getText();
+    method public abstract int getTextSelectionEnd();
+    method public abstract int getTextSelectionStart();
+    method public abstract boolean hasExtras();
+    method public abstract android.view.ViewAssistStructure newChild(int);
+    method public abstract void setAccessibilityFocused(boolean);
+    method public abstract void setActivated(boolean);
+    method public abstract void setCheckable(boolean);
+    method public abstract void setChecked(boolean);
+    method public abstract void setChildCount(int);
+    method public abstract void setClassName(java.lang.String);
+    method public abstract void setClickable(boolean);
+    method public abstract void setContentDescription(java.lang.CharSequence);
+    method public abstract void setDimens(int, int, int, int, int, int);
+    method public abstract void setEnabled(boolean);
+    method public abstract void setFocusable(boolean);
+    method public abstract void setFocused(boolean);
+    method public abstract void setHint(java.lang.CharSequence);
+    method public abstract void setId(int, java.lang.String, java.lang.String, java.lang.String);
+    method public abstract void setLongClickable(boolean);
+    method public abstract void setSelected(boolean);
+    method public abstract void setStylusButtonPressable(boolean);
+    method public abstract void setText(java.lang.CharSequence);
+    method public abstract void setText(java.lang.CharSequence, int, int);
+    method public abstract void setTextPaint(android.text.TextPaint);
+    method public abstract void setVisibility(int);
+  }
+
   public final class ViewStub extends android.view.View {
     ctor public ViewStub(android.content.Context);
     ctor public ViewStub(android.content.Context, int);
@@ -41801,7 +41802,7 @@
     method public abstract boolean onKeyUp(int, android.view.KeyEvent);
     method public abstract void onMeasure(int, int);
     method public abstract void onOverScrolled(int, int, boolean, boolean);
-    method public abstract void onProvideVirtualAssistStructure(android.view.ViewAssistStructure);
+    method public abstract void onProvideVirtualAssistStructure(android.view.ViewStructure);
     method public abstract void onScrollChanged(int, int, int, int);
     method public abstract void onSizeChanged(int, int, int, int);
     method public abstract void onStartTemporaryDetach();
diff --git a/core/java/android/app/AssistStructure.java b/core/java/android/app/AssistStructure.java
index 3abbb5b..a06bc31 100644
--- a/core/java/android/app/AssistStructure.java
+++ b/core/java/android/app/AssistStructure.java
@@ -35,6 +35,7 @@
 import android.view.View;
 import android.view.ViewAssistStructure;
 import android.view.ViewRootImpl;
+import android.view.WindowManager;
 import android.view.WindowManagerGlobal;
 
 import java.util.ArrayList;
@@ -140,7 +141,14 @@
             mTitle = root.getTitle();
             mRoot = new ViewNode();
             ViewNodeBuilder builder = new ViewNodeBuilder(assist, mRoot, false);
-            view.dispatchProvideAssistStructure(builder);
+            if ((root.getWindowFlags()&WindowManager.LayoutParams.FLAG_SECURE) != 0) {
+                // This is a secure window, so it doesn't want a screenshot, and that
+                // means we should also not copy out its view hierarchy.
+                view.onProvideStructure(builder);
+                builder.setAssistBlocked(true);
+                return;
+            }
+            view.dispatchProvideStructure(builder);
         }
 
         WindowNode(Parcel in, PooledStringReader preader) {
@@ -652,7 +660,7 @@
         }
 
         @Override
-        public Bundle editExtras() {
+        public Bundle getExtras() {
             if (mNode.mExtras != null) {
                 return mNode.mExtras;
             }
@@ -661,8 +669,8 @@
         }
 
         @Override
-        public void clearExtras() {
-            mNode.mExtras = null;
+        public boolean hasExtras() {
+            return mNode.mExtras != null;
         }
 
         @Override
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index a3d0b2a..e1f1816 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -633,7 +633,6 @@
  * </p>
  *
  * @attr ref android.R.styleable#View_alpha
- * @attr ref android.R.styleable#View_assistBlocked
  * @attr ref android.R.styleable#View_background
  * @attr ref android.R.styleable#View_clickable
  * @attr ref android.R.styleable#View_contentDescription
@@ -2533,7 +2532,7 @@
             PFLAG3_SCROLL_INDICATOR_END >> SCROLL_INDICATORS_TO_PFLAGS3_LSHIFT;
 
     /**
-     * <p>Indicates that we are allowing {@link android.view.ViewAssistStructure} to traverse
+     * <p>Indicates that we are allowing {@link ViewStructure} to traverse
      * into this view.<p>
      */
     static final int PFLAG3_ASSIST_BLOCKED = 0x100;
@@ -4050,11 +4049,6 @@
                         viewFlagMasks |= SAVE_DISABLED_MASK;
                     }
                     break;
-                case com.android.internal.R.styleable.View_assistBlocked:
-                    if (a.getBoolean(attr, false)) {
-                        mPrivateFlags3 |= PFLAG3_ASSIST_BLOCKED;
-                    }
-                    break;
                 case com.android.internal.R.styleable.View_duplicateParentState:
                     if (a.getBoolean(attr, false)) {
                         viewFlagValues |= DUPLICATE_PARENT_STATE;
@@ -6163,7 +6157,7 @@
      * @param structure Fill in with structured view data.  The default implementation
      * fills in all data that can be inferred from the view itself.
      */
-    public void onProvideAssistStructure(ViewAssistStructure structure) {
+    public void onProvideStructure(ViewStructure structure) {
         final int id = mID;
         if (id > 0 && (id&0xff000000) != 0 && (id&0x00ff0000) != 0
                 && (id&0x0000ffff) != 0) {
@@ -6217,6 +6211,11 @@
         structure.setContentDescription(getContentDescription());
     }
 
+    /** @hide */
+    public void onProvideAssistStructure(ViewStructure structure) {
+        onProvideStructure(structure);
+    }
+
     /**
      * Called when assist structure is being retrieved from a view as part of
      * {@link android.app.Activity#onProvideAssistData Activity.onProvideAssistData} to
@@ -6225,19 +6224,24 @@
      * view's virtual accessibility nodes, if any.  You can override this for a more
      * optimal implementation providing this data.
      */
-    public void onProvideVirtualAssistStructure(ViewAssistStructure structure) {
+    public void onProvideVirtualStructure(ViewStructure structure) {
         AccessibilityNodeProvider provider = getAccessibilityNodeProvider();
         if (provider != null) {
             AccessibilityNodeInfo info = createAccessibilityNodeInfo();
             Log.i("View", "Provider of " + this + ": children=" + info.getChildCount());
             structure.setChildCount(1);
-            ViewAssistStructure root = structure.newChild(0);
-            populateVirtualAssistStructure(root, provider, info);
+            ViewStructure root = structure.newChild(0);
+            populateVirtualStructure(root, provider, info);
             info.recycle();
         }
     }
 
-    private void populateVirtualAssistStructure(ViewAssistStructure structure,
+    /** @hide */
+    public void onProvideVirtualAssistStructure(ViewStructure structure) {
+        onProvideVirtualStructure(structure);
+    }
+
+    private void populateVirtualStructure(ViewStructure structure,
             AccessibilityNodeProvider provider, AccessibilityNodeInfo info) {
         structure.setId(AccessibilityNodeInfo.getVirtualDescendantId(info.getSourceNodeId()),
                 null, null, null);
@@ -6288,19 +6292,19 @@
             for (int i=0; i<NCHILDREN; i++) {
                 AccessibilityNodeInfo cinfo = provider.createAccessibilityNodeInfo(
                         AccessibilityNodeInfo.getVirtualDescendantId(info.getChildId(i)));
-                ViewAssistStructure child = structure.newChild(i);
-                populateVirtualAssistStructure(child, provider, cinfo);
+                ViewStructure child = structure.newChild(i);
+                populateVirtualStructure(child, provider, cinfo);
                 cinfo.recycle();
             }
         }
     }
 
     /**
-     * Dispatch creation of {@link ViewAssistStructure} down the hierarchy.  The default
-     * implementation calls {@link #onProvideAssistStructure} and
-     * {@link #onProvideVirtualAssistStructure}.
+     * Dispatch creation of {@link ViewStructure} down the hierarchy.  The default
+     * implementation calls {@link #onProvideStructure} and
+     * {@link #onProvideVirtualStructure}.
      */
-    public void dispatchProvideAssistStructure(ViewAssistStructure structure) {
+    public void dispatchProvideStructure(ViewStructure structure) {
         if (!isAssistBlocked()) {
             onProvideAssistStructure(structure);
             onProvideVirtualAssistStructure(structure);
@@ -7904,8 +7908,9 @@
     }
 
     /**
+     * @hide
      * Indicates whether this view will participate in data collection through
-     * {@link android.view.ViewAssistStructure}.  If true, it will not provide any data
+     * {@link ViewStructure}.  If true, it will not provide any data
      * for itself or its children.  If false, the normal data collection will be allowed.
      *
      * @return Returns false if assist data collection is not blocked, else true.
@@ -7918,17 +7923,18 @@
     }
 
     /**
+     * @hide
      * Controls whether assist data collection from this view and its children is enabled
-     * (that is, whether {@link #onProvideAssistStructure} and
-     * {@link #onProvideVirtualAssistStructure} will be called).  The default value is false,
+     * (that is, whether {@link #onProvideStructure} and
+     * {@link #onProvideVirtualStructure} will be called).  The default value is false,
      * allowing normal assist collection.  Setting this to false will disable assist collection.
      *
      * @param enabled Set to true to <em>disable</em> assist data collection, or false
      * (the default) to allow it.
      *
      * @see #isAssistBlocked()
-     * @see #onProvideAssistStructure
-     * @see #onProvideVirtualAssistStructure
+     * @see #onProvideStructure
+     * @see #onProvideVirtualStructure
      * @attr ref android.R.styleable#View_assistBlocked
      */
     public void setAssistBlocked(boolean enabled) {
diff --git a/core/java/android/view/ViewAssistStructure.java b/core/java/android/view/ViewAssistStructure.java
index fccfbb8..a66d93c 100644
--- a/core/java/android/view/ViewAssistStructure.java
+++ b/core/java/android/view/ViewAssistStructure.java
@@ -16,70 +16,9 @@
 
 package android.view;
 
-import android.graphics.Rect;
-import android.os.Bundle;
-import android.text.TextPaint;
-
 /**
- * Container for storing additional per-view data generated by {@link View#onProvideAssistStructure
- * View.onProvideAssistStructure}.
+ * @deprecated Temporary until old apps can move off this.
  */
-public abstract class ViewAssistStructure {
-    public abstract void setId(int id, String packageName, String typeName, String entryName);
-
-    public abstract void setDimens(int left, int top, int scrollX, int scrollY, int width,
-            int height);
-
-    public abstract void setVisibility(int visibility);
-
-    public abstract void setAssistBlocked(boolean state);
-
-    public abstract void setEnabled(boolean state);
-
-    public abstract void setClickable(boolean state);
-
-    public abstract void setLongClickable(boolean state);
-
-    public abstract void setStylusButtonPressable(boolean state);
-
-    public abstract void setFocusable(boolean state);
-
-    public abstract void setFocused(boolean state);
-
-    public abstract void setAccessibilityFocused(boolean state);
-
-    public abstract void setCheckable(boolean state);
-
-    public abstract void setChecked(boolean state);
-
-    public abstract void setSelected(boolean state);
-
-    public abstract void setActivated(boolean state);
-
-    public abstract void setClassName(String className);
-
-    public abstract void setContentDescription(CharSequence contentDescription);
-
-    public abstract void setText(CharSequence text);
-    public abstract void setText(CharSequence text, int selectionStart, int selectionEnd);
-    public abstract void setTextPaint(TextPaint paint);
-    public abstract void setHint(CharSequence hint);
-
-    public abstract CharSequence getText();
-    public abstract int getTextSelectionStart();
-    public abstract int getTextSelectionEnd();
-    public abstract CharSequence getHint();
-
-    public abstract Bundle editExtras();
-    public abstract void clearExtras();
-
-    public abstract void setChildCount(int num);
-    public abstract int getChildCount();
-    public abstract ViewAssistStructure newChild(int index);
-
-    public abstract ViewAssistStructure asyncNewChild(int index);
-    public abstract void asyncCommit();
-
-    /** @hide */
-    public abstract Rect getTempRect();
+@Deprecated
+public abstract class ViewAssistStructure extends ViewStructure {
 }
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index d0738b0..51c4760 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -2878,12 +2878,12 @@
     }
 
     /**
-     * Dispatch creation of {@link ViewAssistStructure} down the hierarchy.  This implementation
+     * Dispatch creation of {@link ViewStructure} down the hierarchy.  This implementation
      * adds in all child views of the view group, in addition to calling the default View
      * implementation.
      */
-    public void dispatchProvideAssistStructure(ViewAssistStructure structure) {
-        super.dispatchProvideAssistStructure(structure);
+    public void dispatchProvideStructure(ViewStructure structure) {
+        super.dispatchProvideStructure(structure);
         if (!isAssistBlocked()) {
             if (structure.getChildCount() == 0) {
                 final int childrenCount = getChildCount();
@@ -2898,8 +2898,8 @@
                                 ? getChildDrawingOrder(childrenCount, i) : i;
                         final View child = (preorderedList == null)
                                 ? children[childIndex] : preorderedList.get(childIndex);
-                        ViewAssistStructure cstructure = structure.newChild(i);
-                        child.dispatchProvideAssistStructure(cstructure);
+                        ViewStructure cstructure = structure.newChild(i);
+                        child.dispatchProvideStructure(cstructure);
                     }
                 }
             }
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index c9c2a82..ea1dadb2 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -654,6 +654,10 @@
         return (mWindowAttributes.flags & WindowManager.LayoutParams.FLAG_LOCAL_FOCUS_MODE) != 0;
     }
 
+    public int getWindowFlags() {
+        return mWindowAttributes.flags;
+    }
+
     public CharSequence getTitle() {
         return mWindowAttributes.getTitle();
     }
diff --git a/core/java/android/view/ViewStructure.java b/core/java/android/view/ViewStructure.java
new file mode 100644
index 0000000..8dc49acd
--- /dev/null
+++ b/core/java/android/view/ViewStructure.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.view;
+
+import android.graphics.Rect;
+import android.os.Bundle;
+import android.text.TextPaint;
+
+/**
+ * Container for storing additional per-view data generated by {@link View#onProvideStructure
+ * View.onProvideStructure}.
+ */
+public abstract class ViewStructure {
+    public abstract void setId(int id, String packageName, String typeName, String entryName);
+
+    public abstract void setDimens(int left, int top, int scrollX, int scrollY, int width,
+            int height);
+
+    public abstract void setVisibility(int visibility);
+
+    /** @hide */
+    public abstract void setAssistBlocked(boolean state);
+
+    public abstract void setEnabled(boolean state);
+
+    public abstract void setClickable(boolean state);
+
+    public abstract void setLongClickable(boolean state);
+
+    public abstract void setStylusButtonPressable(boolean state);
+
+    public abstract void setFocusable(boolean state);
+
+    public abstract void setFocused(boolean state);
+
+    public abstract void setAccessibilityFocused(boolean state);
+
+    public abstract void setCheckable(boolean state);
+
+    public abstract void setChecked(boolean state);
+
+    public abstract void setSelected(boolean state);
+
+    public abstract void setActivated(boolean state);
+
+    public abstract void setClassName(String className);
+
+    public abstract void setContentDescription(CharSequence contentDescription);
+
+    public abstract void setText(CharSequence text);
+    public abstract void setText(CharSequence text, int selectionStart, int selectionEnd);
+    public abstract void setTextPaint(TextPaint paint);
+    public abstract void setHint(CharSequence hint);
+
+    public abstract CharSequence getText();
+    public abstract int getTextSelectionStart();
+    public abstract int getTextSelectionEnd();
+    public abstract CharSequence getHint();
+
+    public abstract Bundle getExtras();
+    public abstract boolean hasExtras();
+
+    public abstract void setChildCount(int num);
+    public abstract int getChildCount();
+    public abstract ViewAssistStructure newChild(int index);
+
+    public abstract ViewAssistStructure asyncNewChild(int index);
+    public abstract void asyncCommit();
+
+    /** @hide */
+    public abstract Rect getTempRect();
+}
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index a261aaf..e27e253 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -41,7 +41,7 @@
 import android.view.KeyEvent;
 import android.view.MotionEvent;
 import android.view.View;
-import android.view.ViewAssistStructure;
+import android.view.ViewStructure;
 import android.view.ViewDebug;
 import android.view.ViewGroup;
 import android.view.ViewHierarchyEncoder;
@@ -2428,7 +2428,7 @@
     }
 
     @Override
-    public void onProvideVirtualAssistStructure(ViewAssistStructure structure) {
+    public void onProvideVirtualStructure(ViewStructure structure) {
         mProvider.getViewDelegate().onProvideVirtualAssistStructure(structure);
     }
 
diff --git a/core/java/android/webkit/WebViewProvider.java b/core/java/android/webkit/WebViewProvider.java
index d5787de..e367192 100644
--- a/core/java/android/webkit/WebViewProvider.java
+++ b/core/java/android/webkit/WebViewProvider.java
@@ -32,7 +32,7 @@
 import android.view.KeyEvent;
 import android.view.MotionEvent;
 import android.view.View;
-import android.view.ViewAssistStructure;
+import android.view.ViewStructure;
 import android.view.ViewGroup.LayoutParams;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityNodeInfo;
@@ -299,7 +299,7 @@
     interface ViewDelegate {
         public boolean shouldDelayChildPressedState();
 
-        public void onProvideVirtualAssistStructure(ViewAssistStructure structure);
+        public void onProvideVirtualAssistStructure(ViewStructure structure);
 
         public AccessibilityNodeProvider getAccessibilityNodeProvider();
 
diff --git a/core/java/android/widget/Switch.java b/core/java/android/widget/Switch.java
index f94f97c..ff587c2 100644
--- a/core/java/android/widget/Switch.java
+++ b/core/java/android/widget/Switch.java
@@ -26,13 +26,11 @@
 import android.content.res.TypedArray;
 import android.graphics.Canvas;
 import android.graphics.Insets;
-import android.graphics.Paint;
 import android.graphics.PorterDuff;
 import android.graphics.Rect;
 import android.graphics.Typeface;
 import android.graphics.Region.Op;
 import android.graphics.drawable.Drawable;
-import android.os.Bundle;
 import android.text.Layout;
 import android.text.StaticLayout;
 import android.text.TextPaint;
@@ -46,7 +44,7 @@
 import android.view.MotionEvent;
 import android.view.SoundEffectConstants;
 import android.view.VelocityTracker;
-import android.view.ViewAssistStructure;
+import android.view.ViewStructure;
 import android.view.ViewConfiguration;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityNodeInfo;
@@ -1363,8 +1361,8 @@
     }
 
     @Override
-    public void onProvideAssistStructure(ViewAssistStructure structure) {
-        super.onProvideAssistStructure(structure);
+    public void onProvideStructure(ViewStructure structure) {
+        super.onProvideStructure(structure);
         CharSequence switchText = isChecked() ? mTextOn : mTextOff;
         if (!TextUtils.isEmpty(switchText)) {
             CharSequence oldText = structure.getText();
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index b9a08f5..68c49cd 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -114,7 +114,7 @@
 import android.view.KeyEvent;
 import android.view.MotionEvent;
 import android.view.View;
-import android.view.ViewAssistStructure;
+import android.view.ViewStructure;
 import android.view.ViewConfiguration;
 import android.view.ViewDebug;
 import android.view.ViewGroup.LayoutParams;
@@ -8715,8 +8715,8 @@
     }
 
     @Override
-    public void onProvideAssistStructure(ViewAssistStructure structure) {
-        super.onProvideAssistStructure(structure);
+    public void onProvideStructure(ViewStructure structure) {
+        super.onProvideStructure(structure);
         final boolean isPassword = hasPasswordTransformationMethod();
         if (!isPassword) {
             structure.setText(getText(), getSelectionStart(), getSelectionEnd());
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index eaa6278..0b96d22 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -2347,11 +2347,6 @@
              be saved. -->
         <attr name="saveEnabled" format="boolean" />
 
-        <!-- If true, no {@link android.view.ViewAssistStructure} data will be collected from
-             this view or any of its children.  The default is false, allowing assist structure
-             to be reported by it. -->
-        <attr name="assistBlocked" format="boolean" />
-
         <!-- Specifies whether to filter touches when the view's window is obscured by
              another visible window.  When set to true, the view will not receive touches
              whenever a toast, dialog or other window appears above the view's window.
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 297b302..e403a16 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -2682,7 +2682,9 @@
   <!-- NFC CardEmulation: dynamically load service resources -->
   <public type="attr" name="dynamicResources" />
 
-  <public type="attr" name="assistBlocked" />
+  <attr name="__reserved0" format="boolean" />
+  <public type="attr" name="__reserved0" />
+
   <public type="attr" name="stylusButtonPressable" />
   <public type="attr" name="supportsLaunchVoiceAssistFromKeyguard" />
   <public type="attr" name="scrollIndicators" />
diff --git a/tests/VoiceInteraction/res/layout/main.xml b/tests/VoiceInteraction/res/layout/main.xml
index 34a7563..092d37d 100644
--- a/tests/VoiceInteraction/res/layout/main.xml
+++ b/tests/VoiceInteraction/res/layout/main.xml
@@ -34,12 +34,6 @@
             android:text="@string/asyncStructure"
             />
 
-    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
-        android:assistBlocked="true"
-        android:textAppearance="?android:attr/textAppearanceMedium"
-        android:text="This won't be included in assist."
-        />
-
 </LinearLayout>
 
 
diff --git a/tests/VoiceInteraction/src/com/android/test/voiceinteraction/AsyncStructure.java b/tests/VoiceInteraction/src/com/android/test/voiceinteraction/AsyncStructure.java
index 73e04e5..ae8e9e4 100644
--- a/tests/VoiceInteraction/src/com/android/test/voiceinteraction/AsyncStructure.java
+++ b/tests/VoiceInteraction/src/com/android/test/voiceinteraction/AsyncStructure.java
@@ -20,7 +20,7 @@
 import android.content.Context;
 import android.util.AttributeSet;
 import android.view.View;
-import android.view.ViewAssistStructure;
+import android.view.ViewStructure;
 import android.widget.TextView;
 
 /**
@@ -32,9 +32,9 @@
     }
 
     @Override
-    public void onProvideVirtualAssistStructure(ViewAssistStructure structure) {
+    public void onProvideVirtualStructure(ViewStructure structure) {
         structure.setChildCount(1);
-        final ViewAssistStructure child = structure.asyncNewChild(0);
+        final ViewStructure child = structure.asyncNewChild(0);
         final int width = getWidth();
         final int height = getHeight();
         (new Thread() {