diff --git a/api/current.txt b/api/current.txt index 3cd3ee25e3374..2d51b97b937eb 100644 --- a/api/current.txt +++ b/api/current.txt @@ -5832,10 +5832,12 @@ package android.app.assist { } public static class AssistStructure.ViewNode { + method public float getAlpha(); method public android.app.assist.AssistStructure.ViewNode getChildAt(int); method public int getChildCount(); method public java.lang.String getClassName(); method public java.lang.CharSequence getContentDescription(); + method public float getElevation(); method public android.os.Bundle getExtras(); method public int getHeight(); method public java.lang.String getHint(); @@ -5854,6 +5856,7 @@ package android.app.assist { method public float getTextSize(); method public int getTextStyle(); method public int getTop(); + method public android.graphics.Matrix getTransformation(); method public int getVisibility(); method public int getWidth(); method public boolean isAccessibilityFocused(); @@ -36948,6 +36951,7 @@ package android.view { method public abstract android.view.ViewStructure newChild(int); method public abstract void setAccessibilityFocused(boolean); method public abstract void setActivated(boolean); + method public abstract void setAlpha(float); method public abstract void setCheckable(boolean); method public abstract void setChecked(boolean); method public abstract void setChildCount(int); @@ -36956,6 +36960,7 @@ package android.view { method public abstract void setContentDescription(java.lang.CharSequence); method public abstract void setContextClickable(boolean); method public abstract void setDimens(int, int, int, int, int, int); + method public abstract void setElevation(float); method public abstract void setEnabled(boolean); method public abstract void setFocusable(boolean); method public abstract void setFocused(boolean); @@ -36966,6 +36971,7 @@ package android.view { method public abstract void setText(java.lang.CharSequence); method public abstract void setText(java.lang.CharSequence, int, int); method public abstract void setTextStyle(float, int, int, int); + method public abstract void setTransformation(android.graphics.Matrix); method public abstract void setVisibility(int); } diff --git a/api/system-current.txt b/api/system-current.txt index 574f0c825759d..33c7a1b1213ad 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -5964,10 +5964,12 @@ package android.app.assist { } public static class AssistStructure.ViewNode { + method public float getAlpha(); method public android.app.assist.AssistStructure.ViewNode getChildAt(int); method public int getChildCount(); method public java.lang.String getClassName(); method public java.lang.CharSequence getContentDescription(); + method public float getElevation(); method public android.os.Bundle getExtras(); method public int getHeight(); method public java.lang.String getHint(); @@ -5986,6 +5988,7 @@ package android.app.assist { method public float getTextSize(); method public int getTextStyle(); method public int getTop(); + method public android.graphics.Matrix getTransformation(); method public int getVisibility(); method public int getWidth(); method public boolean isAccessibilityFocused(); @@ -39243,6 +39246,7 @@ package android.view { method public abstract android.view.ViewStructure newChild(int); method public abstract void setAccessibilityFocused(boolean); method public abstract void setActivated(boolean); + method public abstract void setAlpha(float); method public abstract void setCheckable(boolean); method public abstract void setChecked(boolean); method public abstract void setChildCount(int); @@ -39251,6 +39255,7 @@ package android.view { method public abstract void setContentDescription(java.lang.CharSequence); method public abstract void setContextClickable(boolean); method public abstract void setDimens(int, int, int, int, int, int); + method public abstract void setElevation(float); method public abstract void setEnabled(boolean); method public abstract void setFocusable(boolean); method public abstract void setFocused(boolean); @@ -39261,6 +39266,7 @@ package android.view { method public abstract void setText(java.lang.CharSequence); method public abstract void setText(java.lang.CharSequence, int, int); method public abstract void setTextStyle(float, int, int, int); + method public abstract void setTransformation(android.graphics.Matrix); method public abstract void setVisibility(int); } diff --git a/core/java/android/app/assist/AssistStructure.java b/core/java/android/app/assist/AssistStructure.java index 284dfd62173ac..3429b6e2ddf21 100644 --- a/core/java/android/app/assist/AssistStructure.java +++ b/core/java/android/app/assist/AssistStructure.java @@ -2,6 +2,7 @@ package android.app.assist; import android.app.Activity; import android.content.ComponentName; +import android.graphics.Matrix; import android.graphics.Rect; import android.os.Binder; import android.os.Bundle; @@ -128,24 +129,24 @@ public class AssistStructure implements Parcelable { view.dispatchProvideStructure(builder); } - WindowNode(Parcel in, PooledStringReader preader) { + WindowNode(Parcel in, PooledStringReader preader, float[] tmpMatrix) { mX = in.readInt(); mY = in.readInt(); mWidth = in.readInt(); mHeight = in.readInt(); mTitle = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); mDisplayId = in.readInt(); - mRoot = new ViewNode(in, preader); + mRoot = new ViewNode(in, preader, tmpMatrix); } - void writeToParcel(Parcel out, PooledStringWriter pwriter) { + int writeToParcel(Parcel out, PooledStringWriter pwriter, float[] tmpMatrix) { out.writeInt(mX); out.writeInt(mY); out.writeInt(mWidth); out.writeInt(mHeight); TextUtils.writeToParcel(mTitle, out, 0); out.writeInt(mDisplayId); - mRoot.writeToParcel(out, pwriter); + return mRoot.writeToParcel(out, pwriter, tmpMatrix); } /** @@ -216,7 +217,7 @@ public class AssistStructure implements Parcelable { public static final int TEXT_STYLE_UNDERLINE = 1<<2; public static final int TEXT_STYLE_STRIKE_THRU = 1<<3; - int mId; + int mId = View.NO_ID; String mIdPackage; String mIdType; String mIdEntry; @@ -226,20 +227,35 @@ public class AssistStructure implements Parcelable { int mScrollY; int mWidth; int mHeight; + Matrix mMatrix; + float mElevation; + float mAlpha = 1.0f; static final int FLAGS_DISABLED = 0x00000001; static final int FLAGS_VISIBILITY_MASK = View.VISIBLE|View.INVISIBLE|View.GONE; static final int FLAGS_FOCUSABLE = 0x00000010; static final int FLAGS_FOCUSED = 0x00000020; - static final int FLAGS_ACCESSIBILITY_FOCUSED = 0x04000000; static final int FLAGS_SELECTED = 0x00000040; static final int FLAGS_ASSIST_BLOCKED = 0x00000080; - static final int FLAGS_ACTIVATED = 0x40000000; static final int FLAGS_CHECKABLE = 0x00000100; static final int FLAGS_CHECKED = 0x00000200; - static final int FLAGS_CLICKABLE = 0x00004000; - static final int FLAGS_LONG_CLICKABLE = 0x00200000; - static final int FLAGS_CONTEXT_CLICKABLE = 0x00400000; + static final int FLAGS_CLICKABLE = 0x00000400; + static final int FLAGS_LONG_CLICKABLE = 0x00000800; + static final int FLAGS_ACCESSIBILITY_FOCUSED = 0x00001000; + static final int FLAGS_ACTIVATED = 0x00002000; + static final int FLAGS_CONTEXT_CLICKABLE = 0x00004000; + + static final int FLAGS_HAS_MATRIX = 0x40000000; + static final int FLAGS_HAS_ALPHA = 0x20000000; + static final int FLAGS_HAS_ELEVATION = 0x10000000; + static final int FLAGS_HAS_SCROLL = 0x08000000; + static final int FLAGS_HAS_LARGE_COORDS = 0x04000000; + static final int FLAGS_HAS_CONTENT_DESCRIPTION = 0x02000000; + static final int FLAGS_HAS_TEXT = 0x01000000; + static final int FLAGS_HAS_EXTRAS = 0x00800000; + static final int FLAGS_HAS_ID = 0x00400000; + static final int FLAGS_HAS_CHILDREN = 0x00200000; + static final int FLAGS_ALL_CONTROL = 0xfff00000; int mFlags; @@ -254,79 +270,153 @@ public class AssistStructure implements Parcelable { ViewNode() { } - ViewNode(Parcel in, PooledStringReader preader) { - mId = in.readInt(); - if (mId != 0) { - mIdEntry = preader.readString(); - if (mIdEntry != null) { - mIdType = preader.readString(); - mIdPackage = preader.readString(); - } else { - mIdPackage = mIdType = null; - } - } else { - mIdPackage = mIdType = mIdEntry = null; - } - mX = in.readInt(); - mY = in.readInt(); - mScrollX = in.readInt(); - mScrollY = in.readInt(); - mWidth = in.readInt(); - mHeight = in.readInt(); - mFlags = in.readInt(); + ViewNode(Parcel in, PooledStringReader preader, float[] tmpMatrix) { mClassName = preader.readString(); - mContentDescription = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); - if (in.readInt() != 0) { - mText = new ViewNodeText(in); - } else { - mText = null; + mFlags = in.readInt(); + final int flags = mFlags; + if ((flags&FLAGS_HAS_ID) != 0) { + mId = in.readInt(); + if (mId != 0) { + mIdEntry = preader.readString(); + if (mIdEntry != null) { + mIdType = preader.readString(); + mIdPackage = preader.readString(); + } + } } - mExtras = in.readBundle(); - final int NCHILDREN = in.readInt(); - if (NCHILDREN > 0) { + if ((flags&FLAGS_HAS_LARGE_COORDS) != 0) { + mX = in.readInt(); + mY = in.readInt(); + mWidth = in.readInt(); + mHeight = in.readInt(); + } else { + int val = in.readInt(); + mX = val&0x7fff; + mY = (val>>16)&0x7fff; + val = in.readInt(); + mWidth = val&0x7fff; + mHeight = (val>>16)&0x7fff; + } + if ((flags&FLAGS_HAS_SCROLL) != 0) { + mScrollX = in.readInt(); + mScrollY = in.readInt(); + } + if ((flags&FLAGS_HAS_MATRIX) != 0) { + mMatrix = new Matrix(); + in.readFloatArray(tmpMatrix); + mMatrix.setValues(tmpMatrix); + } + if ((flags&FLAGS_HAS_ELEVATION) != 0) { + mElevation = in.readFloat(); + } + if ((flags&FLAGS_HAS_ALPHA) != 0) { + mAlpha = in.readFloat(); + } + if ((flags&FLAGS_HAS_CONTENT_DESCRIPTION) != 0) { + mContentDescription = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); + } + if ((flags&FLAGS_HAS_TEXT) != 0) { + mText = new ViewNodeText(in); + } + if ((flags&FLAGS_HAS_EXTRAS) != 0) { + mExtras = in.readBundle(); + } + if ((flags&FLAGS_HAS_CHILDREN) != 0) { + final int NCHILDREN = in.readInt(); mChildren = new ViewNode[NCHILDREN]; for (int i=0; i 0) { // We waited too long, assume none of the assist structure is valid. + Log.w(TAG, "Skipping assist structure, waiting too long for async children (have " + + mPendingAsyncChildren.size() + " remaining"); skipStructure = true; } } int start = out.dataPosition(); PooledStringWriter pwriter = new PooledStringWriter(out); + float[] tmpMatrix = new float[9]; ComponentName.writeToParcel(mActivityComponent, out); final int N = skipStructure ? 0 : mWindowNodes.size(); out.writeInt(N); + int NV = 0; for (int i=0; i + + @@ -30,19 +35,29 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="top" - android:orientation="vertical" + android:orientation="horizontal" android:background="#ffffffff" android:elevation="8dp" > + + +