Audinaut-subsonic-app-android/app/src/main/java/net/nullsum/audinaut/adapter/SearchAdapter.java

135 lines
5.2 KiB
Java

/*
This file is part of Subsonic.
Subsonic 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
(at your option) any later version.
Subsonic 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 Subsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2015 (C) Scott Jackson
*/
package net.nullsum.audinaut.adapter;
import android.content.Context;
import android.content.res.Resources;
import android.view.Menu;
import android.view.MenuInflater;
import net.nullsum.audinaut.R;
import net.nullsum.audinaut.domain.MusicDirectory.Entry;
import net.nullsum.audinaut.domain.SearchResult;
import net.nullsum.audinaut.util.ImageLoader;
import net.nullsum.audinaut.util.Util;
import net.nullsum.audinaut.view.AlbumView;
import net.nullsum.audinaut.view.ArtistView;
import net.nullsum.audinaut.view.SongView;
import net.nullsum.audinaut.view.UpdateView;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import static net.nullsum.audinaut.adapter.ArtistAdapter.VIEW_TYPE_ARTIST;
import static net.nullsum.audinaut.adapter.EntryGridAdapter.VIEW_TYPE_ALBUM_CELL;
import static net.nullsum.audinaut.adapter.EntryGridAdapter.VIEW_TYPE_ALBUM_LINE;
import static net.nullsum.audinaut.adapter.EntryGridAdapter.VIEW_TYPE_SONG;
public class SearchAdapter extends ExpandableSectionAdapter<Serializable> {
private static final int MAX_ARTISTS = 10;
private static final int MAX_ALBUMS = 4;
private static final int MAX_SONGS = 10;
private final ImageLoader imageLoader;
private final boolean largeAlbums;
public SearchAdapter(Context context, SearchResult searchResult, ImageLoader imageLoader, boolean largeAlbums, OnItemClickedListener listener) {
this.imageLoader = imageLoader;
this.largeAlbums = largeAlbums;
List<List<Serializable>> sections = new ArrayList<>();
List<String> headers = new ArrayList<>();
List<Integer> defaultVisible = new ArrayList<>();
Resources res = context.getResources();
if (!searchResult.getArtists().isEmpty()) {
sections.add((List<Serializable>) (List<?>) searchResult.getArtists());
headers.add(res.getString(R.string.search_artists));
defaultVisible.add(MAX_ARTISTS);
}
if (!searchResult.getAlbums().isEmpty()) {
sections.add((List<Serializable>) (List<?>) searchResult.getAlbums());
headers.add(res.getString(R.string.search_albums));
defaultVisible.add(MAX_ALBUMS);
}
if (!searchResult.getSongs().isEmpty()) {
sections.add((List<Serializable>) (List<?>) searchResult.getSongs());
headers.add(res.getString(R.string.search_songs));
defaultVisible.add(MAX_SONGS);
}
init(context, headers, sections, defaultVisible);
this.onItemClickedListener = listener;
checkable = true;
}
@Override
public UpdateView.UpdateViewHolder onCreateSectionViewHolder(int viewType) {
UpdateView updateView = null;
if (viewType == VIEW_TYPE_ALBUM_CELL || viewType == VIEW_TYPE_ALBUM_LINE) {
updateView = new AlbumView(context, viewType == VIEW_TYPE_ALBUM_CELL);
} else if (viewType == VIEW_TYPE_SONG) {
updateView = new SongView(context);
} else if (viewType == VIEW_TYPE_ARTIST) {
updateView = new ArtistView(context);
}
return new UpdateView.UpdateViewHolder(updateView);
}
@Override
public void onBindViewHolder(UpdateView.UpdateViewHolder holder, Serializable item, int viewType) {
UpdateView view = holder.getUpdateView();
if (viewType == VIEW_TYPE_ALBUM_CELL || viewType == VIEW_TYPE_ALBUM_LINE) {
AlbumView albumView = (AlbumView) view;
albumView.setObject((Entry) item, imageLoader);
} else if (viewType == VIEW_TYPE_SONG) {
SongView songView = (SongView) view;
songView.setObject((Entry) item, true);
} else if (viewType == VIEW_TYPE_ARTIST) {
view.setObject(item);
}
}
@Override
public int getItemViewType(Serializable item) {
if (item instanceof Entry) {
Entry entry = (Entry) item;
if (entry.isDirectory()) {
if (largeAlbums) {
return VIEW_TYPE_ALBUM_CELL;
} else {
return VIEW_TYPE_ALBUM_LINE;
}
} else {
return VIEW_TYPE_SONG;
}
} else {
return VIEW_TYPE_ARTIST;
}
}
@Override
public void onCreateActionModeMenu(Menu menu, MenuInflater menuInflater) {
if (Util.isOffline(context)) {
menuInflater.inflate(R.menu.multiselect_media_offline, menu);
} else {
menuInflater.inflate(R.menu.multiselect_media, menu);
}
menu.removeItem(R.id.menu_remove_playlist);
}
}