1 package com.cyngn.eleven.ui.fragments;
3 import android.os.Bundle;
4 import android.support.v4.app.LoaderManager;
5 import android.support.v7.widget.LinearLayoutManager;
6 import android.support.v7.widget.RecyclerView;
7 import android.view.LayoutInflater;
8 import android.view.View;
9 import android.view.ViewGroup;
10 import android.widget.ImageView;
11 import android.widget.ListView;
13 import com.cyngn.eleven.Config;
14 import com.cyngn.eleven.R;
15 import com.cyngn.eleven.adapters.ArtistDetailAlbumAdapter;
16 import com.cyngn.eleven.adapters.ArtistDetailSongAdapter;
17 import com.cyngn.eleven.adapters.IEmptyAdapterCallback;
18 import com.cyngn.eleven.cache.ImageFetcher;
19 import com.cyngn.eleven.lastfm.Artist;
20 import com.cyngn.eleven.menu.FragmentMenuItems;
21 import com.cyngn.eleven.model.Album;
22 import com.cyngn.eleven.model.Song;
23 import com.cyngn.eleven.utils.AlbumPopupMenuHelper;
24 import com.cyngn.eleven.utils.SongPopupMenuHelper;
25 import com.cyngn.eleven.widgets.IPopupMenuCallback;
27 import java.util.TreeSet;
29 public class ArtistDetailFragment extends DetailFragment {
30 private final int ALBUM_LOADER_ID = 0;
31 private final int SONG_LOADER_ID = 1;
32 private ImageView mHero;
35 private ListView mSongs;
36 private ArtistDetailSongAdapter mSongAdapter;
38 private RecyclerView mAlbums;
39 private ArtistDetailAlbumAdapter mAlbumAdapter;
41 private SongPopupMenuHelper mSongPopupMenuHelper;
42 private AlbumPopupMenuHelper mAlbumPopupMenuHelper;
45 protected int getLayoutToInflate() { return R.layout.activity_artist_detail; }
48 protected String getTitle() {
49 return getArguments().getString(Config.ARTIST_NAME);
53 protected void onViewCreated() {
54 super.onViewCreated();
56 getContainingActivity().setFragmentPadding(false);
58 Bundle arguments = getArguments();
59 String artistName = arguments.getString(Config.ARTIST_NAME);
61 setupPopupMenuHelpers();
64 setupHero(artistName);
66 LoaderManager lm = getLoaderManager();
67 lm.initLoader(ALBUM_LOADER_ID, arguments, mAlbumAdapter);
68 lm.initLoader(SONG_LOADER_ID, arguments, mSongAdapter);
71 private void setupHero(String artistName) {
72 mHero = (ImageView)mHeader.findViewById(R.id.hero);
73 mHero.setContentDescription(artistName);
74 ImageFetcher.getInstance(getActivity()).loadArtistImage(artistName, mHero);
77 private void setupAlbumList() {
78 mAlbums = (RecyclerView) mHeader.findViewById(R.id.albums);
79 mAlbums.setHasFixedSize(true);
80 mAlbums.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false));
81 mAlbumAdapter = new ArtistDetailAlbumAdapter(getActivity());
82 mAlbumAdapter.setPopupMenuClickedListener(new IPopupMenuCallback.IListener() {
84 public void onPopupMenuClicked(View v, int position) {
85 mAlbumPopupMenuHelper.showPopupMenu(v, position);
88 mAlbums.setAdapter(mAlbumAdapter);
91 private void setupSongList() {
92 mSongs = (ListView)mRootView.findViewById(R.id.songs);
93 mHeader = (ViewGroup)LayoutInflater.from(getActivity()).
94 inflate(R.layout.artist_detail_header, mSongs, false);
95 mSongs.addHeaderView(mHeader);
96 mSongs.setOnScrollListener(this);
97 mSongAdapter = new ArtistDetailSongAdapter(getActivity());
98 mSongAdapter.setOnEmptyAdapterListener(new IEmptyAdapterCallback() {
100 public void onEmptyAdapter() {
101 // no results - because the user deleted the last item - pop our fragment
103 getContainingActivity().postRemoveFragment(ArtistDetailFragment.this);
106 mSongAdapter.setPopupMenuClickedListener(new IPopupMenuCallback.IListener() {
108 public void onPopupMenuClicked(View v, int position) {
109 mSongPopupMenuHelper.showPopupMenu(v, position);
112 mSongs.setAdapter(mSongAdapter);
113 mSongs.setOnItemClickListener(mSongAdapter);
116 private void setupPopupMenuHelpers() {
117 mSongPopupMenuHelper = new SongPopupMenuHelper(getActivity(), getChildFragmentManager()) {
119 public Song getSong(int position) {
120 return mSongAdapter.getItem(position);
124 protected void updateMenuIds(PopupMenuType type, TreeSet<Integer> set) {
125 super.updateMenuIds(type, set);
127 // since we are already on the artist page, this item doesn't make sense
128 set.remove(FragmentMenuItems.MORE_BY_ARTIST);
132 mAlbumPopupMenuHelper = new AlbumPopupMenuHelper(getActivity(), getChildFragmentManager()) {
134 public Album getAlbum(int position) {
135 return mAlbumAdapter.getItem(position);
139 protected void updateMenuIds(PopupMenuType type, TreeSet<Integer> set) {
140 super.updateMenuIds(type, set);
142 // since we are already on the artist page, this item doesn't make sense
143 set.remove(FragmentMenuItems.MORE_BY_ARTIST);
148 // TODO: change this class to use the same header strategy as PlaylistDetail
149 protected int getHeaderHeight() { return 0; }
151 protected void setHeaderPosition(float y) { }
154 public void restartLoader() {
155 Bundle arguments = getArguments();
156 LoaderManager lm = getLoaderManager();
157 lm.restartLoader(ALBUM_LOADER_ID, arguments, mAlbumAdapter);
158 lm.restartLoader(SONG_LOADER_ID, arguments, mSongAdapter);