package com.race604.flyrefresh;

/**
 * Created by jing on 15-5-19.
 */
public class HeaderController {

    private int mHeight;
    private int mMaxHegiht;
    private int mMinHegiht;
    private float mOverDistance;

    private float mResistance = 0.5f;
    private boolean mIsInTouch = false;
    private float mScroll = 0;
    private int mMaxScroll = 0;
    private int mMinScroll = 0;

    public HeaderController(int height, int maxHeight, int minHeight) {

        if (maxHeight <= 0) {
            throw new IllegalArgumentException("maxHeight must > 0");
        }

        setSize(height, maxHeight, minHeight);
    }

    public void setSize(int height, int maxHeight, int minHeight) {
        mHeight = Math.max(0, height);
        mMaxHegiht = Math.max(0, maxHeight);
        mMinHegiht = Math.max(0, minHeight);
        mOverDistance = mMaxHegiht - mHeight;

        mScroll = 0;
        mMaxScroll = mHeight - mMinHegiht;
        mMinScroll = mHeight - mMaxHegiht;
    }

    public int getMaxHeight() {
        return mMaxHegiht;
    }

    public int getMinHeight() {
        return mMinHegiht;
    }

    public int getHeight() {
        return mHeight;
    }

    public int getScroll() {
        return (int) mScroll;
    }

    public int getMaxScroll() {
        return mMaxScroll;
    }

    public int getMinScroll() {
        return mMinScroll;
    }

    public int getCurPosition() {
        return (int) (mHeight - mScroll);
    }

    public boolean isInTouch() {
        return mIsInTouch;
    }

    /**
     * Check if can scroll down to show top
     * @return
     */
    public boolean canScrollDown() {
        return mScroll > mMinScroll;
    }

    /**
     * Check if can scroll up to show bottom
     * @return
     */
    public boolean canScrollUp() {
        return mScroll < mMaxScroll;
    }

    public int move(float deltaY) {
        float willTo;
        float consumed = deltaY;
        if (mScroll >= 0) {
            willTo = mScroll + deltaY;
            if (willTo < 0) {
                willTo = willTo * mResistance;
                if (willTo < mMinScroll) {
                    consumed -= (willTo - mMinScroll) / mResistance;
                    willTo = mMinScroll;
                }
            } else if (willTo > mMaxHegiht) {
                consumed -= willTo - mMaxScroll;
                willTo = mMaxScroll;
            }
        } else {
            willTo = mScroll + deltaY * mResistance;
            if (willTo > 0) {
                willTo = willTo / mResistance;
                if (willTo > mMaxScroll) {
                    consumed -= willTo - mMaxScroll;
                    willTo = mMaxScroll;
                }
            } else if (willTo < mMinScroll) {
                consumed -= willTo - mMinScroll;
                willTo = mMinScroll;
            }
        }

        mScroll = willTo;
        return (int) consumed;
    }

    public boolean isOverHeight() {
        return mScroll < 0;
    }

    public float getMovePercentage() {
        return -mScroll / mOverDistance;
    }

    public boolean needSendRefresh() {
        return getMovePercentage() > 0.9f;
    }
}

@@ -2276,22 +2276,22 @@
 o %3E mMax
-Hegiht
+Scroll
 ) %7B%0A    

Update HeaderController.java