Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7262418e authored by Steve Kondik's avatar Steve Kondik Committed by Gerrit Code Review
Browse files

Merge "Restore Overscrolling" into froyo

parents 65fd231a 8935fad5
Loading
Loading
Loading
Loading
+535 −0
Original line number Diff line number Diff line
@@ -5938,6 +5938,39 @@
 visibility="public"
>
</field>
<field name="overscrollFooter"
 type="int"
 transient="false"
 volatile="false"
 value="16843456"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="overscrollHeader"
 type="int"
 transient="false"
 volatile="false"
 value="16843455"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="overscrollMode"
 type="int"
 transient="false"
 volatile="false"
 value="16843457"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="padding"
 type="int"
 transient="false"
@@ -176454,6 +176487,17 @@
 visibility="public"
>
</method>
<method name="getOverscrollMode"
 return="int"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="getPaddingBottom"
 return="int"
 abstract="false"
@@ -177594,6 +177638,25 @@
<parameter name="heightMeasureSpec" type="int">
</parameter>
</method>
<method name="onOverscrolled"
 return="void"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="protected"
>
<parameter name="scrollX" type="int">
</parameter>
<parameter name="scrollY" type="int">
</parameter>
<parameter name="clampedX" type="boolean">
</parameter>
<parameter name="clampedY" type="boolean">
</parameter>
</method>
<method name="onRestoreInstanceState"
 return="void"
 abstract="false"
@@ -177747,6 +177810,35 @@
<parameter name="visibility" type="int">
</parameter>
</method>
<method name="overscrollBy"
 return="boolean"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="protected"
>
<parameter name="deltaX" type="int">
</parameter>
<parameter name="deltaY" type="int">
</parameter>
<parameter name="scrollX" type="int">
</parameter>
<parameter name="scrollY" type="int">
</parameter>
<parameter name="scrollRangeX" type="int">
</parameter>
<parameter name="scrollRangeY" type="int">
</parameter>
<parameter name="maxOverscrollX" type="int">
</parameter>
<parameter name="maxOverscrollY" type="int">
</parameter>
<parameter name="isTouchEvent" type="boolean">
</parameter>
</method>
<method name="performClick"
 return="boolean"
 abstract="false"
@@ -178573,6 +178665,19 @@
<parameter name="l" type="android.view.View.OnTouchListener">
</parameter>
</method>
<method name="setOverscrollMode"
 return="void"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="overscrollMode" type="int">
</parameter>
</method>
<method name="setPadding"
 return="void"
 abstract="false"
@@ -179195,6 +179300,39 @@
 visibility="public"
>
</field>
<field name="OVERSCROLL_ALWAYS"
 type="int"
 transient="false"
 volatile="false"
 value="0"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="OVERSCROLL_IF_CONTENT_SCROLLS"
 type="int"
 transient="false"
 volatile="false"
 value="1"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="OVERSCROLL_NEVER"
 type="int"
 transient="false"
 volatile="false"
 value="2"
 static="true"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</field>
<field name="PRESSED_ENABLED_FOCUSED_SELECTED_STATE_SET"
 type="int[]"
 transient="false"
@@ -194039,6 +194177,17 @@
 visibility="public"
>
</method>
<method name="getUseWebViewBackgroundForOverscrollBackground"
 return="boolean"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="getUseWideViewPort"
 return="boolean"
 abstract="false"
@@ -194631,6 +194780,19 @@
<parameter name="use" type="boolean">
</parameter>
</method>
<method name="setUseWebViewBackgroundForOverscrollBackground"
 return="void"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="view" type="boolean">
</parameter>
</method>
<method name="setUseWideViewPort"
 return="void"
 abstract="false"
@@ -205241,6 +205403,28 @@
 visibility="public"
>
</method>
<method name="getOverscrollFooter"
 return="android.graphics.drawable.Drawable"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="getOverscrollHeader"
 return="android.graphics.drawable.Drawable"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="isItemChecked"
 return="boolean"
 abstract="false"
@@ -205386,6 +205570,32 @@
<parameter name="itemsCanFocus" type="boolean">
</parameter>
</method>
<method name="setOverscrollFooter"
 return="void"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="footer" type="android.graphics.drawable.Drawable">
</parameter>
</method>
<method name="setOverscrollHeader"
 return="void"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="header" type="android.graphics.drawable.Drawable">
</parameter>
</method>
<method name="setSelection"
 return="void"
 abstract="false"
@@ -205957,6 +206167,331 @@
</parameter>
</method>
</interface>
<class name="OverScroller"
 extends="java.lang.Object"
 abstract="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<constructor name="OverScroller"
 type="android.widget.OverScroller"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="context" type="android.content.Context">
</parameter>
</constructor>
<constructor name="OverScroller"
 type="android.widget.OverScroller"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="context" type="android.content.Context">
</parameter>
<parameter name="interpolator" type="android.view.animation.Interpolator">
</parameter>
</constructor>
<constructor name="OverScroller"
 type="android.widget.OverScroller"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="context" type="android.content.Context">
</parameter>
<parameter name="interpolator" type="android.view.animation.Interpolator">
</parameter>
<parameter name="bounceCoefficientX" type="float">
</parameter>
<parameter name="bounceCoefficientY" type="float">
</parameter>
</constructor>
<method name="abortAnimation"
 return="void"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="computeScrollOffset"
 return="boolean"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="fling"
 return="void"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="startX" type="int">
</parameter>
<parameter name="startY" type="int">
</parameter>
<parameter name="velocityX" type="int">
</parameter>
<parameter name="velocityY" type="int">
</parameter>
<parameter name="minX" type="int">
</parameter>
<parameter name="maxX" type="int">
</parameter>
<parameter name="minY" type="int">
</parameter>
<parameter name="maxY" type="int">
</parameter>
</method>
<method name="fling"
 return="void"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="startX" type="int">
</parameter>
<parameter name="startY" type="int">
</parameter>
<parameter name="velocityX" type="int">
</parameter>
<parameter name="velocityY" type="int">
</parameter>
<parameter name="minX" type="int">
</parameter>
<parameter name="maxX" type="int">
</parameter>
<parameter name="minY" type="int">
</parameter>
<parameter name="maxY" type="int">
</parameter>
<parameter name="overX" type="int">
</parameter>
<parameter name="overY" type="int">
</parameter>
</method>
<method name="forceFinished"
 return="void"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="finished" type="boolean">
</parameter>
</method>
<method name="getCurrX"
 return="int"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="getCurrY"
 return="int"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="getFinalX"
 return="int"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="getFinalY"
 return="int"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="getStartX"
 return="int"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="getStartY"
 return="int"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="isFinished"
 return="boolean"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="isOverscrolled"
 return="boolean"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="notifyHorizontalEdgeReached"
 return="void"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="startX" type="int">
</parameter>
<parameter name="finalX" type="int">
</parameter>
<parameter name="overX" type="int">
</parameter>
</method>
<method name="notifyVerticalEdgeReached"
 return="void"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="startY" type="int">
</parameter>
<parameter name="finalY" type="int">
</parameter>
<parameter name="overY" type="int">
</parameter>
</method>
<method name="springback"
 return="boolean"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="startX" type="int">
</parameter>
<parameter name="startY" type="int">
</parameter>
<parameter name="minX" type="int">
</parameter>
<parameter name="maxX" type="int">
</parameter>
<parameter name="minY" type="int">
</parameter>
<parameter name="maxY" type="int">
</parameter>
</method>
<method name="startScroll"
 return="void"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="startX" type="int">
</parameter>
<parameter name="startY" type="int">
</parameter>
<parameter name="dx" type="int">
</parameter>
<parameter name="dy" type="int">
</parameter>
</method>
<method name="startScroll"
 return="void"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="false"
 deprecated="not deprecated"
 visibility="public"
>
<parameter name="startX" type="int">
</parameter>
<parameter name="startY" type="int">
</parameter>
<parameter name="dx" type="int">
</parameter>
<parameter name="dy" type="int">
</parameter>
<parameter name="duration" type="int">
</parameter>
</method>
</class>
<class name="PopupWindow"
 extends="java.lang.Object"
 abstract="false"
+6 −0
Original line number Diff line number Diff line
@@ -2323,6 +2323,12 @@ public final class Settings {
         */
        public static final String QUIET_HOURS_DIM = "quiet_hours_dim";

        /**
         * Whether to allow overscrolling (edge bounce effect on lists)
         * @hide
         */
        public static final String ALLOW_OVERSCROLL = "allow_overscroll";

        /**
         * Settings to backup. This is here so that it's in the same place as the settings
         * keys and easy to update.
+197 −0
Original line number Diff line number Diff line
@@ -65,6 +65,7 @@ import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
import android.view.inputmethod.InputMethodManager;
import android.widget.ScrollBarDrawable;
import android.provider.Settings;

import java.lang.ref.SoftReference;
import java.lang.reflect.InvocationTargetException;
@@ -1520,6 +1521,40 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
     */
    private static final int AWAKEN_SCROLL_BARS_ON_ATTACH = 0x08000000;

    /**
     * Always allow a user to overscroll this view, provided it is a
     * view that can scroll.
     * 
     * @see #getOverscrollMode()
     * @see #setOverscrollMode(int)
     */
    public static final int OVERSCROLL_ALWAYS = 0;
    
    /**
     * Allow a user to overscroll this view only if the content is large
     * enough to meaningfully scroll, provided it is a view that can scroll.
     * 
     * @see #getOverscrollMode()
     * @see #setOverscrollMode(int)
     */
    public static final int OVERSCROLL_IF_CONTENT_SCROLLS = 1;
    
    /**
     * Never allow a user to overscroll this view.
     * 
     * @see #getOverscrollMode()
     * @see #setOverscrollMode(int)
     */
    public static final int OVERSCROLL_NEVER = 2;
    
    /**
     * Controls the overscroll mode for this view.
     * See {@link #overscrollBy(int, int, int, int, int, int, int, int, boolean)},
     * {@link #OVERSCROLL_ALWAYS}, {@link #OVERSCROLL_IF_CONTENT_SCROLLS},
     * and {@link #OVERSCROLL_NEVER}.
     */
    private int mOverscrollMode = OVERSCROLL_ALWAYS;

    /**
     * The parent this view is attached to.
     * {@hide}
@@ -2076,6 +2111,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
                        });
                    }
                    break;
                case R.styleable.View_overscrollMode:
                    mOverscrollMode = a.getInt(attr, OVERSCROLL_ALWAYS);
                    break;
            }
        }

@@ -8668,6 +8706,165 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
        return factory.inflate(resource, root);
    }
    
    /**
     * Scroll the view with standard behavior for scrolling beyond the normal
     * content boundaries. Views that call this method should override
     * {@link #onOverscrolled(int, int, boolean, boolean)} to respond to the
     * results of an overscroll operation.
     * 
     * Views can use this method to handle any touch or fling-based scrolling.
     * 
     * @param deltaX Change in X in pixels 
     * @param deltaY Change in Y in pixels
     * @param scrollX Current X scroll value in pixels before applying deltaX
     * @param scrollY Current Y scroll value in pixels before applying deltaY
     * @param scrollRangeX Maximum content scroll range along the X axis
     * @param scrollRangeY Maximum content scroll range along the Y axis
     * @param maxOverscrollX Number of pixels to overscroll by in either direction
     *          along the X axis.
     * @param maxOverscrollY Number of pixels to overscroll by in either direction
     *          along the Y axis.
     * @param isTouchEvent true if this scroll operation is the result of a touch event.
     * @return true if scrolling was clamped to an overscroll boundary along either
     *          axis, false otherwise.
     */
    protected boolean overscrollBy(int deltaX, int deltaY,
            int scrollX, int scrollY,
            int scrollRangeX, int scrollRangeY,
            int maxOverscrollX, int maxOverscrollY,
            boolean isTouchEvent) {
        final int overscrollMode = getOverscrollMode();
        final boolean canScrollHorizontal = 
                computeHorizontalScrollRange() > computeHorizontalScrollExtent();
        final boolean canScrollVertical = 
                computeVerticalScrollRange() > computeVerticalScrollExtent();
        final boolean overscrollHorizontal = overscrollMode == OVERSCROLL_ALWAYS ||
                (overscrollMode == OVERSCROLL_IF_CONTENT_SCROLLS && canScrollHorizontal);
        final boolean overscrollVertical = overscrollMode == OVERSCROLL_ALWAYS ||
                (overscrollMode == OVERSCROLL_IF_CONTENT_SCROLLS && canScrollVertical);
        
        int newScrollX = scrollX + deltaX;
        if (overscrollHorizontal) {
            // Scale the scroll amount if we're in the dropoff zone
            final int dropoffX = maxOverscrollX / 2;
            final int dropoffLeft = -dropoffX;
            final int dropoffRight = dropoffX + scrollRangeX;
            if ((scrollX < dropoffLeft && deltaX < 0) ||
                    (scrollX > dropoffRight && deltaX > 0)) {
                newScrollX = scrollX + deltaX / 2;
            } else {
                if (newScrollX > dropoffRight && deltaX > 0) {
                    int extra = newScrollX - dropoffRight;
                    newScrollX = dropoffRight + extra / 2;
                } else if (newScrollX < dropoffLeft && deltaX < 0) {
                    int extra = newScrollX - dropoffLeft;
                    newScrollX = dropoffLeft + extra / 2;
                }
            }
        } else {
            maxOverscrollX = 0;
        }

        int newScrollY = scrollY + deltaY;
        if (overscrollVertical) {
            final int dropoffY = maxOverscrollY / 2;
            final int dropoffTop = -dropoffY;
            final int dropoffBottom = dropoffY + scrollRangeY;
            if ((scrollY < dropoffTop && deltaY < 0) ||
                    (scrollY > dropoffBottom && deltaY > 0)) {
                newScrollY = scrollY + deltaY / 2;
            } else {
                if (newScrollY > dropoffBottom && deltaY > 0) {
                    int extra = newScrollY - dropoffBottom;
                    newScrollY = dropoffBottom + extra / 2;
                } else if (newScrollY < dropoffTop && deltaY < 0) {
                    int extra = newScrollY - dropoffTop;
                    newScrollY = dropoffTop + extra / 2;
                }
            }
        } else {
            maxOverscrollY = 0;
        }
        
        // Clamp values if at the limits and record
        final int left = -maxOverscrollX;
        final int right = maxOverscrollX + scrollRangeX;
        final int top = -maxOverscrollY;
        final int bottom = maxOverscrollY + scrollRangeY;

        boolean clampedX = false;
        if (newScrollX > right) {
            newScrollX = right;
            clampedX = true;
        } else if (newScrollX < left) {
            newScrollX = left;
            clampedX = true;
        }
        
        boolean clampedY = false;
        if (newScrollY > bottom) {
            newScrollY = bottom;
            clampedY = true;
        } else if (newScrollY < top) {
            newScrollY = top;
            clampedY = true;
        }

        onOverscrolled(newScrollX, newScrollY, clampedX, clampedY);
        
        return clampedX || clampedY;
    }
    
    /**
     * Called by {@link #overscrollBy(int, int, int, int, int, int, int, int, boolean)} to
     * respond to the results of an overscroll operation.
     * 
     * @param scrollX New X scroll value in pixels
     * @param scrollY New Y scroll value in pixels
     * @param clampedX True if scrollX was clamped to an overscroll boundary
     * @param clampedY True if scrollY was clamped to an overscroll boundary
     */
    protected void onOverscrolled(int scrollX, int scrollY,
            boolean clampedX, boolean clampedY) {
        // Intentionally empty.
    }
    
    /**
     * Returns the overscroll mode for this view. The result will be
     * one of {@link #OVERSCROLL_ALWAYS} (default), {@link #OVERSCROLL_IF_CONTENT_SCROLLS}
     * (allow overscrolling only if the view content is larger than the container),
     * or {@link #OVERSCROLL_NEVER}.
     * 
     * @return This view's overscroll mode.
     */
    public int getOverscrollMode() {
		if (Settings.System.getInt(mContext.getContentResolver(), 
				Settings.System.ALLOW_OVERSCROLL, 1) <= 0)
			return OVERSCROLL_NEVER;

        return mOverscrollMode;
    }
    
    /**
     * Set the overscroll mode for this view. Valid overscroll modes are
     * {@link #OVERSCROLL_ALWAYS} (default), {@link #OVERSCROLL_IF_CONTENT_SCROLLS}
     * (allow overscrolling only if the view content is larger than the container),
     * or {@link #OVERSCROLL_NEVER}.
     * 
     * Setting the overscroll mode of a view will have an effect only if the
     * view is capable of scrolling.
     * 
     * @param overscrollMode The new overscroll mode for this view.
     */
    public void setOverscrollMode(int overscrollMode) {
        if (overscrollMode != OVERSCROLL_ALWAYS &&
                overscrollMode != OVERSCROLL_IF_CONTENT_SCROLLS &&
                overscrollMode != OVERSCROLL_NEVER) {
            throw new IllegalArgumentException("Invalid overscroll mode " + overscrollMode);
        }
        mOverscrollMode = overscrollMode;
    }

    /**
     * A MeasureSpec encapsulates the layout requirements passed from parent to child.
     * Each MeasureSpec represents a requirement for either the width or the height.
+18 −0
Original line number Diff line number Diff line
@@ -208,6 +208,7 @@ public class WebSettings {
    private boolean         mBuiltInZoomControls = false;
    private boolean         mAllowFileAccess = true;
    private boolean         mLoadWithOverviewMode = false;
    private boolean         mUseWebViewBackgroundOverscrollBackground = true;

    // private WebSettings, not accessible by the host activity
    static private int      mDoubleTapToastCount = 3;
@@ -493,6 +494,23 @@ public class WebSettings {
        return mLoadWithOverviewMode;
    }

    /**
     * Set whether the WebView uses its background for over scroll background.
     * If true, it will use the WebView's background. If false, it will use an
     * internal pattern. Default is true.
     */
    public void setUseWebViewBackgroundForOverscrollBackground(boolean view) {
        mUseWebViewBackgroundOverscrollBackground = view;
    }

    /**
     * Returns true if this WebView uses WebView's background instead of
     * internal pattern for over scroll background.
     */
    public boolean getUseWebViewBackgroundForOverscrollBackground() {
        return mUseWebViewBackgroundOverscrollBackground;
    }

    /**
     * Store whether the WebView is saving form data.
     */
+145 −39

File changed.

Preview size limit exceeded, changes collapsed.

Loading