Bug 970707 - Wrap child view in GeckoSwipeRefreshLayout. r=margaret

This commit is contained in:
Josh Dover 2014-04-15 15:50:00 +02:00
parent 38543233c9
commit 8428d87346
4 changed files with 75 additions and 0 deletions

View File

@ -373,6 +373,10 @@ abstract class PanelLayout extends FrameLayout {
if (view instanceof DatasetBacked) {
DatasetBacked datasetBacked = (DatasetBacked) view;
datasetBacked.setFilterManager(new PanelFilterManager(viewState));
if (viewConfig.isRefreshEnabled()) {
view = new PanelRefreshLayout(getContext(), view);
}
}
viewState.setView(view);

View File

@ -0,0 +1,66 @@
/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.gecko.home;
import org.mozilla.gecko.R;
import org.mozilla.gecko.home.PanelLayout.DatasetBacked;
import org.mozilla.gecko.home.PanelLayout.FilterManager;
import org.mozilla.gecko.widget.GeckoSwipeRefreshLayout;
import org.mozilla.gecko.widget.GeckoSwipeRefreshLayout.OnRefreshListener;
import android.content.Context;
import android.database.Cursor;
import android.view.View;
/**
* Used to wrap a {@code DatasetBacked} ListView or GridView to give the child view swipe-to-refresh
* capabilities.
*
* This view acts as a decorator to forward the {@code DatasetBacked} methods to the child view
* while providing the refresh gesture support on top of it.
*/
class PanelRefreshLayout extends GeckoSwipeRefreshLayout implements DatasetBacked {
private final DatasetBacked datasetBacked;
/**
* @param context Android context.
* @param childView ListView or GridView. Must implement {@code DatasetBacked}.
*/
public PanelRefreshLayout(Context context, View childView) {
super(context);
if (!(childView instanceof DatasetBacked)) {
throw new IllegalArgumentException("View must implement DatasetBacked to be refreshed");
}
this.datasetBacked = (DatasetBacked) childView;
setOnRefreshListener(new RefreshListener());
addView(childView);
// Must be called after the child view has been added.
setColorScheme(R.color.swipe_refresh_orange, R.color.swipe_refresh_white,
R.color.swipe_refresh_orange, R.color.swipe_refresh_white);
}
@Override
public void setDataset(Cursor cursor) {
datasetBacked.setDataset(cursor);
}
@Override
public void setFilterManager(FilterManager manager) {
datasetBacked.setFilterManager(manager);
}
private class RefreshListener implements OnRefreshListener {
@Override
public void onRefresh() {
setRefreshing(false);
}
}
}

View File

@ -267,6 +267,7 @@ gbjar.sources += [
'home/PanelLayout.java',
'home/PanelListView.java',
'home/PanelManager.java',
'home/PanelRefreshLayout.java',
'home/PanelViewAdapter.java',
'home/PanelViewItemHandler.java',
'home/PinSiteDialog.java',

View File

@ -91,5 +91,9 @@
<color name="home_last_tab_bar_bg">#FFF5F7F9</color>
<color name="panel_image_item_background">#D1D9E1</color>
<!-- Swipe to refresh colors -->
<color name="swipe_refresh_orange">#FFFFC26C</color>
<color name="swipe_refresh_white">#FFFFFFFF</color>
</resources>