Subversion Repository Public Repository

Nextrek

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
package nextrek.widgets.rubberlist;

import nextrek.lib.R;
import android.view.View;
import android.widget.AbsListView;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;


public class RubberFooterController extends RubberControllerBase {

    private static final int MINIMUM_COUNT_TO_SHOW_FOOTER = 7;

    private TextView mRefreshViewText;
    private ImageView mArrowImageView;
    private ProgressBar mRefreshViewProgress;

    public RubberFooterController(RubberListView parent) {

        super(parent, R.layout.rubber_footer_layout);

        mRefreshViewText = (TextView) mWidgetRootView.findViewById(R.id.pull_to_refresh_text);
        mArrowImageView = (ImageView) mWidgetRootView.findViewById(R.id.pull_to_refresh_image);
        mRefreshViewProgress = (ProgressBar) mWidgetRootView.findViewById(R.id.pull_to_refresh_progress);

        mArrowImageView.setMinimumHeight(50);

        mWidgetRootView.setOnClickListener(mClickToRefreshListener);

        mParentListView.addFooterView(mWidgetRootView);

        measureView(mWidgetRootView);

        setWidgetState(WidgetState.PULL_TO_REFRESH);

        mParentListView.setRubberFooterWidget(this);
    }

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        super.onScrollStateChanged(view, scrollState);

        if (mCurrentScrollState == AbsListView.OnScrollListener.SCROLL_STATE_FLING) {
            return;
        }
    }

    @Override
    protected int getWidgetHeight() {
        return mParentListView.getHeight() - mWidgetRootView.getTop();
    }

    @Override
    protected boolean widgetIsVisibleOnScreen() {
        return super.widgetIsVisibleOnScreen() && (mParentListView.getLastVisiblePosition() == (mParentListView.getAdapter().getCount() - 1));
    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

        if (totalItemCount <= visibleItemCount) {
            mWidgetRootView.setVisibility(View.GONE);
        } else {
            mWidgetRootView.setVisibility(View.VISIBLE);
        }

        super.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount);
    }

    WidgetState mWidgetState = WidgetState.TAP_TO_REFRESH;

    @Override
    public WidgetState getWidgetState() {
        return mWidgetState;
    }

    @Override
    public void setWidgetState(WidgetState newState) {
        if (mWidgetState != newState) {

            // System.out.println("setWidgetState("+newState.toString()+")");

            switch (newState) {
                case TAP_TO_REFRESH:
                    restoreViewPadding();

                    mRefreshViewProgress.setVisibility(View.GONE);
                    mArrowImageView.setVisibility(View.GONE);

                    // Set refresh view text to the pull label
                    mRefreshViewText.setText(R.string.pull_to_refresh_tap_label);
                    // Replace refresh drawable with arrow drawable
                    mArrowImageView.setImageResource(R.drawable.rubber_footer_arrow);
                    // Clear the full rotation animation
                    mArrowImageView.clearAnimation();
                    // Hide progress bar and arrow.

                    break;

                case REFRESHING:
                    mArrowImageView.clearAnimation();
                    mArrowImageView.setVisibility(View.GONE);

                    restoreViewPadding();

                    mRefreshViewProgress.setVisibility(View.VISIBLE);

                    // Set refresh view text to the refreshing label
                    mRefreshViewText.setText(R.string.pull_to_refresh_refreshing_label);

                    break;

                case PULL_TO_REFRESH:
                    mRefreshViewProgress.setVisibility(View.GONE);
                    mArrowImageView.setVisibility(View.VISIBLE);

                    mRefreshViewText.setText(R.string.pull_to_refresh_load_more_pull_label);
                    mArrowImageView.clearAnimation();
                    if (getWidgetState() == WidgetState.RELEASE_TO_REFRESH) {
                        mArrowImageView.startAnimation(mReverseFlipAnimation);
                    }
                    break;

                case RELEASE_TO_REFRESH:
                    mRefreshViewProgress.setVisibility(View.GONE);
                    mArrowImageView.setVisibility(View.VISIBLE);

                    mRefreshViewText.setText(R.string.pull_to_refresh_load_more_release_label);
                    mArrowImageView.clearAnimation();
                    if (getWidgetState() == WidgetState.PULL_TO_REFRESH) {
                        mArrowImageView.startAnimation(mFlipAnimation);
                    }
                    break;

                default:
                    break;
            }

            mWidgetState = newState;
        }
    }

    @Override
    public void onRefreshComplete() {
        super.onRefreshComplete();

        if (mParentListView.getCount() >= MINIMUM_COUNT_TO_SHOW_FOOTER) {
            mWidgetRootView.setVisibility(View.VISIBLE);
        } else {
            mWidgetRootView.setVisibility(View.GONE);
        }
    }
}

Commits for Nextrek/Android/LibrerieNextrek/src/nextrek/widgets/rubberlist/RubberFooterController.java

Diff revisions: vs.
Revision Author Commited Message
4 FMMortaroli picture FMMortaroli Fri 19 Apr, 2013 16:54:38 +0000