/* 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 . Copyright 2015 (C) Scott Jackson */ package net.nullsum.audinaut.adapter; import android.content.Context; import android.support.v7.widget.PopupMenu; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import net.nullsum.audinaut.R; import net.nullsum.audinaut.domain.Artist; import net.nullsum.audinaut.domain.MusicDirectory.Entry; import net.nullsum.audinaut.domain.MusicFolder; import net.nullsum.audinaut.util.Util; import net.nullsum.audinaut.view.ArtistView; import net.nullsum.audinaut.view.FastScroller; import net.nullsum.audinaut.view.SongView; import net.nullsum.audinaut.view.UpdateView; import java.io.Serializable; import java.util.List; public class ArtistAdapter extends SectionAdapter implements FastScroller.BubbleTextGetter { public static final int VIEW_TYPE_ARTIST = 4; private static final int VIEW_TYPE_SONG = 3; private final List musicFolders; private final OnMusicFolderChanged onMusicFolderChanged; public ArtistAdapter(Context context, List artists, List musicFolders, OnItemClickedListener onItemClickedListener, OnMusicFolderChanged onMusicFolderChanged) { super(context, artists); this.musicFolders = musicFolders; this.onItemClickedListener = onItemClickedListener; this.onMusicFolderChanged = onMusicFolderChanged; if (musicFolders != null) { this.singleSectionHeader = true; } } @Override public UpdateView.UpdateViewHolder onCreateHeaderHolder(ViewGroup parent) { final View header = LayoutInflater.from(context).inflate(R.layout.select_artist_header, parent, false); header.setOnClickListener(v -> { PopupMenu popup = new PopupMenu(context, header.findViewById(R.id.select_artist_folder_2)); popup.getMenu().add(R.string.select_artist_all_folders); for (MusicFolder musicFolder : musicFolders) { popup.getMenu().add(musicFolder.getName()); } popup.setOnMenuItemClickListener(item -> { for (MusicFolder musicFolder : musicFolders) { if (item.getTitle().equals(musicFolder.getName())) { if (onMusicFolderChanged != null) { onMusicFolderChanged.onMusicFolderChanged(musicFolder); } return true; } } if (onMusicFolderChanged != null) { onMusicFolderChanged.onMusicFolderChanged(null); } return true; }); popup.show(); }); return new UpdateView.UpdateViewHolder(header); } @Override public void onBindHeaderHolder(UpdateView.UpdateViewHolder holder, String header, int sectionIndex) { TextView folderName = holder.getView().findViewById(R.id.select_artist_folder_2); String musicFolderId = Util.getSelectedMusicFolderId(context); if (musicFolderId != null) { for (MusicFolder musicFolder : musicFolders) { if (musicFolder.getId().equals(musicFolderId)) { folderName.setText(musicFolder.getName()); break; } } } else { folderName.setText(R.string.select_artist_all_folders); } } @Override public UpdateView.UpdateViewHolder onCreateSectionViewHolder(int viewType) { UpdateView updateView = null; if (viewType == VIEW_TYPE_ARTIST) { updateView = new ArtistView(context); } else if (viewType == VIEW_TYPE_SONG) { updateView = new SongView(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_ARTIST) { view.setObject(item); } else if (viewType == VIEW_TYPE_SONG) { SongView songView = (SongView) view; Entry entry = (Entry) item; songView.setObject(entry, checkable); } } @Override public int getItemViewType(Serializable item) { if (item instanceof Artist) { return VIEW_TYPE_ARTIST; } else { return VIEW_TYPE_SONG; } } @Override public String getTextToShowInBubble(int position) { Object item = getItemForPosition(position); if (item instanceof Artist) { return getNameIndex(((Artist) item).getName(), true); } else { return null; } } public interface OnMusicFolderChanged { void onMusicFolderChanged(MusicFolder musicFolder); } }