16626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira/*
26626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira * Copyright (C) 2013 The Android Open Source Project
36626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira *
46626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira * Licensed under the Apache License, Version 2.0 (the "License");
56626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira * you may not use this file except in compliance with the License.
66626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira * You may obtain a copy of the License at
76626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira *
86626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira *      http://www.apache.org/licenses/LICENSE-2.0
96626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira *
106626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira * Unless required by applicable law or agreed to in writing, software
116626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira * distributed under the License is distributed on an "AS IS" BASIS,
126626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira * See the License for the specific language governing permissions and
146626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira * limitations under the License.
156626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira */
166626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira
176626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereirapackage com.example.android.supportv4.widget;
186626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira
1994349e753cba952f613abb992b0d8c2623bf485eChris Banesimport com.example.android.supportv4.R;
2094349e753cba952f613abb992b0d8c2623bf485eChris Banes
216626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereiraimport android.app.Activity;
226626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereiraimport android.os.Bundle;
236626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereiraimport android.os.Handler;
2494349e753cba952f613abb992b0d8c2623bf485eChris Banesimport android.support.annotation.LayoutRes;
256626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereiraimport android.support.v4.widget.SwipeRefreshLayout;
2694349e753cba952f613abb992b0d8c2623bf485eChris Banesimport android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener;
276626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereiraimport android.view.Menu;
286626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereiraimport android.view.MenuInflater;
296626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereiraimport android.view.MenuItem;
306626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereiraimport android.view.View;
316626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereiraimport android.widget.ArrayAdapter;
326626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereiraimport android.widget.ListView;
336626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira
346626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira/**
356626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira * Example of using the SwipeRefreshLayout.
366626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira */
3794349e753cba952f613abb992b0d8c2623bf485eChris Banesabstract class BaseSwipeRefreshLayoutActivity extends Activity implements OnRefreshListener {
3894349e753cba952f613abb992b0d8c2623bf485eChris Banes
3994349e753cba952f613abb992b0d8c2623bf485eChris Banes    public static final String[] TITLES = {
406626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Henry IV (1)",
416626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Henry V",
426626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Henry VIII",
436626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Richard II",
446626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Richard III",
456626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Merchant of Venice",
466626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Othello",
476626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "King Lear",
486626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Henry IV (1)",
496626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Henry V",
506626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Henry VIII",
516626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Richard II",
526626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Richard III",
536626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Merchant of Venice",
546626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Othello",
556626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "King Lear",
566626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Henry IV (1)",
576626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Henry V",
586626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Henry VIII",
596626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Richard II",
606626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Richard III",
616626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Merchant of Venice",
626626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Othello",
636626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "King Lear",
646626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Henry IV (1)",
656626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Henry V",
666626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Henry VIII",
676626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Richard II",
686626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Richard III",
696626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Merchant of Venice",
706626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Othello",
716626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "King Lear"
726626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    };
7394349e753cba952f613abb992b0d8c2623bf485eChris Banes
746626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    // Try a SUPER quick refresh to make sure we don't get extra refreshes
756626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    // while the user's finger is still down.
766626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    private static final boolean SUPER_QUICK_REFRESH = false;
7794349e753cba952f613abb992b0d8c2623bf485eChris Banes
786626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    private SwipeRefreshLayout mSwipeRefreshWidget;
796626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira
8094349e753cba952f613abb992b0d8c2623bf485eChris Banes    private final Handler mHandler = new Handler();
8194349e753cba952f613abb992b0d8c2623bf485eChris Banes
8294349e753cba952f613abb992b0d8c2623bf485eChris Banes    private final Runnable mRefreshDone = new Runnable() {
836626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        @Override
846626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        public void run() {
856626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            mSwipeRefreshWidget.setRefreshing(false);
866626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        }
876626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira
886626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    };
8994349e753cba952f613abb992b0d8c2623bf485eChris Banes
906626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    @Override
916626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    public void onCreate(Bundle bundle) {
926626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        super.onCreate(bundle);
9394349e753cba952f613abb992b0d8c2623bf485eChris Banes        setContentView(getLayoutId());
9494349e753cba952f613abb992b0d8c2623bf485eChris Banes
956626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        mSwipeRefreshWidget = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_widget);
9694349e753cba952f613abb992b0d8c2623bf485eChris Banes        mSwipeRefreshWidget.setColorSchemeResources(R.color.color1, R.color.color2, R.color.color3,
976626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira                R.color.color4);
986626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        mSwipeRefreshWidget.setOnRefreshListener(this);
996626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    }
1006626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira
10194349e753cba952f613abb992b0d8c2623bf485eChris Banes    @LayoutRes
10294349e753cba952f613abb992b0d8c2623bf485eChris Banes    protected abstract int getLayoutId();
10394349e753cba952f613abb992b0d8c2623bf485eChris Banes
1046626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    @Override
1056626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    public void onRefresh() {
1066626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        refresh();
1076626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    }
1086626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira
1096626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    @Override
1106626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    public boolean onCreateOptionsMenu(Menu menu) {
1116626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        MenuInflater inflater = getMenuInflater();
1126626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        inflater.inflate(R.menu.swipe_refresh_menu, menu);
1136626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        return true;
1146626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    }
1156626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira
1166626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    /**
1176626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira     * Click handler for the menu item to force a refresh.
1186626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira     */
1196626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    @Override
1206626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    public boolean onOptionsItemSelected(MenuItem item) {
1216626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        final int id = item.getItemId();
1226626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        switch(id) {
1236626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            case R.id.force_refresh:
1246626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira                mSwipeRefreshWidget.setRefreshing(true);
1256626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira                refresh();
1266626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira                return true;
1276626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        }
1286626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        return false;
1296626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    }
1306626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira
1316626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    private void refresh() {
1326626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        mHandler.removeCallbacks(mRefreshDone);
1336626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        mHandler.postDelayed(mRefreshDone, 1000);
1346626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    }
1356626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira}