/* * Copyright 2008-2013, ETH Zürich, Samuel Welten, Michael Kuhn, Tobias Langner, * Sandro Affentranger, Lukas Bossard, Michael Grob, Rahul Jain, * Dominic Langenegger, Sonia Mayor Alonso, Roger Odermatt, Tobias Schlueter, * Yannick Stucki, Sebastian Wendland, Samuel Zehnder, Samuel Zihlmann, * Samuel Zweifel * * This file is part of Jukefox. * * Jukefox is free software: you can redistribute it and/or modify it under the * terms of the GNU General Public License as published by the Free Software * Foundation, either version 3 of the License, or any later version. Jukefox is * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A * PARTICULAR PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with * Jukefox. If not, see <http://www.gnu.org/licenses/>. */ package ch.ethz.dcg.pancho3.tablet.view.lists; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.view.View; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; import ch.ethz.dcg.jukefox.commons.utils.Pair; import ch.ethz.dcg.jukefox.model.collection.CompleteTag; import ch.ethz.dcg.jukefox.model.collection.MapAlbum; import ch.ethz.dcg.pancho3.tablet.interfaces.AlbumAdapter; import ch.ethz.dcg.pancho3.tablet.presenter.exploration.ExplorationPresenter.IExplorationViewArtist; import ch.ethz.dcg.pancho3.tablet.view.ViewFactory; import ch.ethz.dcg.pancho3.tablet.widget.PinnedHeaderListView; public class ArtistGridAdapter extends GroupedAdapter implements IExplorationViewArtist, AlbumAdapter { private List<? extends MapAlbum> albums; private List<? extends MapAlbum> relatedAlbums; private ArrayList<Integer> groupCounts = new ArrayList<Integer>(); private ArrayList<String> groupTitles = new ArrayList<String>(); private final ViewFactory viewFactory; private OnItemClickListener onItemClickListener; private OnItemLongClickListener onItemLongClickListener; public ArtistGridAdapter(Context context, PinnedHeaderListView boundList, ViewFactory viewFactory) { super(context, boundList); this.viewFactory = viewFactory; } @Override public void displayAlbums(List<? extends MapAlbum> albums) { this.albums = albums; init(); } @Override public void displayRelatedAlbums(List<? extends MapAlbum> relatedAlbum) { this.relatedAlbums = relatedAlbum; init(); } private void init() { if (albums != null && relatedAlbums != null) { groupCounts.clear(); groupTitles.clear(); // Adding albums. groupCounts.add(getNumberOfRows(albums.size())); groupTitles.add("Albums"); // Adding related albums. groupCounts.add(getNumberOfRows(relatedAlbums.size())); groupTitles.add("Related Albums"); initAdapter(); notifyDataSetChanged(); } } private int getNumberOfRows(int items) { return (int) Math.ceil(items / 3.0); } @Override protected List<Integer> getGroupCounts() { return groupCounts; } @Override protected String getGroupTitle(int groupNumber) { return groupTitles.get(groupNumber); } @Override protected View getView(int groupNumber, int positionWithinGroup, View convertView, int totalDataIndex) { List<? extends MapAlbum> selectedList = groupNumber == 0 ? albums : relatedAlbums; int positionOffset = groupNumber == 0 ? 0 : albums.size(); int startIndex = 3 * positionWithinGroup; int endIndex = Math.min(startIndex + 3, selectedList.size()); return viewFactory.getAlbumRow(selectedList, startIndex, endIndex, onItemClickListener, onItemLongClickListener, convertView, positionOffset); } @Override public MapAlbum getItem(int position) { if (position < albums.size()) { return albums.get(position); } return relatedAlbums.get(position - albums.size()); } public void setOnItemClickListener(OnItemClickListener listener) { this.onItemClickListener = listener; } public void setOnItemLongClickListener(OnItemLongClickListener listener) { this.onItemLongClickListener = listener; } @Override public void displayTags(List<Pair<CompleteTag, Float>> tags) { // TODO Auto-generated method stub } }