Go faster!!!!

The less we do, the faster we draw.

Change-Id: I7bbc3908b36d8ae295ea3e61ef71fd9ee2187970
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 7a35015..637f6466 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -69,6 +69,8 @@
 import android.view.inputmethod.InputMethodManager;
 import android.widget.ScrollBarDrawable;
 
+import static android.os.Build.VERSION_CODES.*;
+
 import com.android.internal.R;
 import com.android.internal.util.Predicate;
 import com.android.internal.view.menu.MenuBuilder;
@@ -585,7 +587,7 @@
  * @attr ref android.R.styleable#View_drawingCacheQuality
  * @attr ref android.R.styleable#View_duplicateParentState
  * @attr ref android.R.styleable#View_id
- * @attr ref android.R.styleable#View_fadingEdge
+ * @attr ref android.R.styleable#View_requiresFadingEdge
  * @attr ref android.R.styleable#View_fadingEdgeLength
  * @attr ref android.R.styleable#View_filterTouchesWhenObscured
  * @attr ref android.R.styleable#View_fitsSystemWindows
@@ -2895,6 +2897,12 @@
                     }
                     break;
                 case R.styleable.View_fadingEdge:
+                    if (context.getApplicationInfo().targetSdkVersion >= ICE_CREAM_SANDWICH) {
+                        // Ignore the attribute starting with ICS
+                        break;
+                    }
+                    // With builds < ICS, fall through and apply fading edges
+                case R.styleable.View_requiresFadingEdge:
                     final int fadingEdge = a.getInt(attr, FADING_EDGE_NONE);
                     if (fadingEdge != FADING_EDGE_NONE) {
                         viewFlagValues |= fadingEdge;
@@ -8642,7 +8650,7 @@
      *         otherwise
      *
      * @see #setHorizontalFadingEdgeEnabled(boolean)
-     * @attr ref android.R.styleable#View_fadingEdge
+     * @attr ref android.R.styleable#View_requiresFadingEdge
      */
     public boolean isHorizontalFadingEdgeEnabled() {
         return (mViewFlags & FADING_EDGE_HORIZONTAL) == FADING_EDGE_HORIZONTAL;
@@ -8657,7 +8665,7 @@
      *                                    horizontally
      *
      * @see #isHorizontalFadingEdgeEnabled()
-     * @attr ref android.R.styleable#View_fadingEdge
+     * @attr ref android.R.styleable#View_requiresFadingEdge
      */
     public void setHorizontalFadingEdgeEnabled(boolean horizontalFadingEdgeEnabled) {
         if (isHorizontalFadingEdgeEnabled() != horizontalFadingEdgeEnabled) {
@@ -8677,7 +8685,7 @@
      *         otherwise
      *
      * @see #setVerticalFadingEdgeEnabled(boolean)
-     * @attr ref android.R.styleable#View_fadingEdge
+     * @attr ref android.R.styleable#View_requiresFadingEdge
      */
     public boolean isVerticalFadingEdgeEnabled() {
         return (mViewFlags & FADING_EDGE_VERTICAL) == FADING_EDGE_VERTICAL;
@@ -8692,7 +8700,7 @@
      *                                  vertically
      *
      * @see #isVerticalFadingEdgeEnabled()
-     * @attr ref android.R.styleable#View_fadingEdge
+     * @attr ref android.R.styleable#View_requiresFadingEdge
      */
     public void setVerticalFadingEdgeEnabled(boolean verticalFadingEdgeEnabled) {
         if (isVerticalFadingEdgeEnabled() != verticalFadingEdgeEnabled) {
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 525b03a..2e61cf5 100755
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -1804,7 +1804,13 @@
         <!-- Defines whether the vertical scrollbar track should always be drawn. -->
         <attr name="scrollbarAlwaysDrawVerticalTrack" format="boolean" />
 
-        <!-- Defines which edges should be fadeded on scrolling. -->
+        <!-- {@deprecated This attribute is deprecated and will be ignored as of
+             API level {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH}.
+             Using fading edges may introduce noticeable performance
+             degradations and should be used only when required by the application's
+             visual design. To request fading edges with API level
+             {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH} and above,
+             use the <code>requiresFadingEdge</code> attribute instead.} -->
         <attr name="fadingEdge">
             <!-- No edge is faded. -->
             <flag name="none" value="0x00000000" />
@@ -1813,6 +1819,15 @@
             <!-- Fades vertical edges only. -->
             <flag name="vertical" value="0x00002000" />
         </attr>
+        <!-- Defines which edges should be faded on scrolling. -->
+        <attr name="requiresFadingEdge">
+            <!-- No edge is faded. -->
+            <flag name="none" value="0x00000000" />
+            <!-- Fades horizontal edges only. -->
+            <flag name="horizontal" value="0x00001000" />
+            <!-- Fades vertical edges only. -->
+            <flag name="vertical" value="0x00002000" />
+        </attr>
         <!-- Defines the length of the fading edges. -->
         <attr name="fadingEdgeLength" format="dimension" />
 
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 50dee12..9327a0b 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -1806,6 +1806,8 @@
   <public type="attr" name="listPreferredItemPaddingLeft" />
   <public type="attr" name="listPreferredItemPaddingRight" />
 
+  <public type="attr" name="requiresFadingEdge" />
+
   <public type="style" name="TextAppearance.SuggestionHighlight" />
 
   <public type="style" name="Theme.Holo.Light.DarkActionBar" />