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
196626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereiraimport android.app.Activity;
206626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereiraimport android.os.Bundle;
216626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereiraimport android.os.Handler;
2294349e753cba952f613abb992b0d8c2623bf485eChris Banesimport android.support.annotation.LayoutRes;
236626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereiraimport android.support.v4.widget.SwipeRefreshLayout;
2494349e753cba952f613abb992b0d8c2623bf485eChris Banesimport android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener;
256626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereiraimport android.view.Menu;
266626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereiraimport android.view.MenuInflater;
276626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereiraimport android.view.MenuItem;
2827644c071b7fc0e1e4f91194f2a08b4aa2cf1465Aurimas Liutikas
2927644c071b7fc0e1e4f91194f2a08b4aa2cf1465Aurimas Liutikasimport com.example.android.supportv4.R;
306626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira
316626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira/**
326626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira * Example of using the SwipeRefreshLayout.
336626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira */
3494349e753cba952f613abb992b0d8c2623bf485eChris Banesabstract class BaseSwipeRefreshLayoutActivity extends Activity implements OnRefreshListener {
3594349e753cba952f613abb992b0d8c2623bf485eChris Banes
3694349e753cba952f613abb992b0d8c2623bf485eChris Banes    public static final String[] TITLES = {
376626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Henry IV (1)",
386626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Henry V",
396626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Henry VIII",
406626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Richard II",
416626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Richard III",
426626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Merchant of Venice",
436626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Othello",
446626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "King Lear",
456626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Henry IV (1)",
466626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Henry V",
476626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Henry VIII",
486626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Richard II",
496626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Richard III",
506626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Merchant of Venice",
516626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Othello",
526626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "King Lear",
536626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Henry IV (1)",
546626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Henry V",
556626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Henry VIII",
566626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Richard II",
576626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Richard III",
586626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Merchant of Venice",
596626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Othello",
606626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "King Lear",
616626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Henry IV (1)",
626626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Henry V",
636626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Henry VIII",
646626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Richard II",
656626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Richard III",
666626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Merchant of Venice",
676626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "Othello",
686626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            "King Lear"
696626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    };
7094349e753cba952f613abb992b0d8c2623bf485eChris Banes
716626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    // Try a SUPER quick refresh to make sure we don't get extra refreshes
726626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    // while the user's finger is still down.
736626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    private static final boolean SUPER_QUICK_REFRESH = false;
7494349e753cba952f613abb992b0d8c2623bf485eChris Banes
756626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    private SwipeRefreshLayout mSwipeRefreshWidget;
766626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira
7794349e753cba952f613abb992b0d8c2623bf485eChris Banes    private final Handler mHandler = new Handler();
7894349e753cba952f613abb992b0d8c2623bf485eChris Banes
7994349e753cba952f613abb992b0d8c2623bf485eChris Banes    private final Runnable mRefreshDone = new Runnable() {
806626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        @Override
816626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        public void run() {
826626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            mSwipeRefreshWidget.setRefreshing(false);
836626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        }
846626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira
856626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    };
8694349e753cba952f613abb992b0d8c2623bf485eChris Banes
876626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    @Override
886626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    public void onCreate(Bundle bundle) {
896626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        super.onCreate(bundle);
9094349e753cba952f613abb992b0d8c2623bf485eChris Banes        setContentView(getLayoutId());
9194349e753cba952f613abb992b0d8c2623bf485eChris Banes
92fa2e2acf79d791a90410025daad438968550d18cAlan Viverette        mSwipeRefreshWidget = findViewById(R.id.swipe_refresh_widget);
9394349e753cba952f613abb992b0d8c2623bf485eChris Banes        mSwipeRefreshWidget.setColorSchemeResources(R.color.color1, R.color.color2, R.color.color3,
946626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira                R.color.color4);
956626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        mSwipeRefreshWidget.setOnRefreshListener(this);
966626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    }
976626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira
9894349e753cba952f613abb992b0d8c2623bf485eChris Banes    @LayoutRes
9994349e753cba952f613abb992b0d8c2623bf485eChris Banes    protected abstract int getLayoutId();
10094349e753cba952f613abb992b0d8c2623bf485eChris Banes
1016626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    @Override
1026626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    public void onRefresh() {
1036626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        refresh();
1046626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    }
1056626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira
1066626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    @Override
1076626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    public boolean onCreateOptionsMenu(Menu menu) {
1086626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        MenuInflater inflater = getMenuInflater();
1096626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        inflater.inflate(R.menu.swipe_refresh_menu, menu);
1106626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        return true;
1116626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    }
1126626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira
1136626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    /**
1146626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira     * Click handler for the menu item to force a refresh.
1156626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira     */
1166626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    @Override
1176626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    public boolean onOptionsItemSelected(MenuItem item) {
1186626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        final int id = item.getItemId();
1196626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        switch(id) {
1206626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira            case R.id.force_refresh:
1216626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira                mSwipeRefreshWidget.setRefreshing(true);
1226626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira                refresh();
1236626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira                return true;
1246626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        }
1256626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        return false;
1266626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    }
1276626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira
1286626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    private void refresh() {
1296626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        mHandler.removeCallbacks(mRefreshDone);
1306626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira        mHandler.postDelayed(mRefreshDone, 1000);
1316626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira    }
1326626fee1866b79558ef509d7c4c6f76afcdb7290Mindy Pereira}