summaryrefslogtreecommitdiffstats
path: root/src/org/lineageos/eleven/ui/fragments/AlbumDetailFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/lineageos/eleven/ui/fragments/AlbumDetailFragment.java')
-rw-r--r--src/org/lineageos/eleven/ui/fragments/AlbumDetailFragment.java210
1 files changed, 210 insertions, 0 deletions
diff --git a/src/org/lineageos/eleven/ui/fragments/AlbumDetailFragment.java b/src/org/lineageos/eleven/ui/fragments/AlbumDetailFragment.java
new file mode 100644
index 0000000..5aeb70f
--- /dev/null
+++ b/src/org/lineageos/eleven/ui/fragments/AlbumDetailFragment.java
@@ -0,0 +1,210 @@
+/*
+* Copyright (C) 2014 The CyanogenMod Project
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package com.cyanogenmod.eleven.ui.fragments;
+
+import android.os.Bundle;
+import android.support.v4.app.LoaderManager;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.TextView;
+import com.cyanogenmod.eleven.Config;
+import com.cyanogenmod.eleven.R;
+import com.cyanogenmod.eleven.adapters.AlbumDetailSongAdapter;
+import com.cyanogenmod.eleven.adapters.DetailSongAdapter;
+import com.cyanogenmod.eleven.adapters.PagerAdapter;
+import com.cyanogenmod.eleven.cache.ImageFetcher;
+import com.cyanogenmod.eleven.model.Album;
+import com.cyanogenmod.eleven.model.Song;
+import com.cyanogenmod.eleven.utils.AlbumPopupMenuHelper;
+import com.cyanogenmod.eleven.utils.GenreFetcher;
+import com.cyanogenmod.eleven.utils.MusicUtils;
+import com.cyanogenmod.eleven.utils.PopupMenuHelper;
+import com.cyanogenmod.eleven.utils.SongPopupMenuHelper;
+import com.cyanogenmod.eleven.widgets.IPopupMenuCallback;
+import com.cyanogenmod.eleven.widgets.LoadingEmptyContainer;
+
+import java.util.List;
+
+public class AlbumDetailFragment extends DetailFragment implements IChildFragment {
+ private static final int LOADER_ID = 1;
+
+ private ListView mSongs;
+ private DetailSongAdapter mSongAdapter;
+ private TextView mAlbumDuration;
+ private TextView mGenre;
+ private ImageView mAlbumArt;
+ private PopupMenuHelper mSongMenuHelper;
+ private long mAlbumId;
+ private String mArtistName;
+ private String mAlbumName;
+ private LoadingEmptyContainer mLoadingEmptyContainer;
+
+ @Override
+ protected int getLayoutToInflate() {
+ return R.layout.activity_album_detail;
+ }
+
+ @Override
+ protected String getTitle() {
+ return getArguments().getString(Config.ARTIST_NAME);
+ }
+
+ @Override
+ protected void onViewCreated() {
+ super.onViewCreated();
+
+ Bundle arguments = getArguments();
+ String artistName = arguments.getString(Config.ARTIST_NAME);
+
+ setupPopupMenuHelper();
+ setupHeader(artistName, arguments);
+ setupSongList();
+
+ LoaderManager lm = getLoaderManager();
+ lm.initLoader(LOADER_ID, arguments, mSongAdapter);
+ }
+
+ @Override // DetailFragment
+ protected PopupMenuHelper createActionMenuHelper() {
+ return new AlbumPopupMenuHelper(getActivity(), getChildFragmentManager()) {
+ public Album getAlbum(int position) {
+ return new Album(mAlbumId, mAlbumName, mArtistName, -1, null);
+ }
+ };
+ }
+
+ @Override // DetailFragment
+ protected int getShuffleTitleId() { return R.string.menu_shuffle_album; }
+
+ @Override // DetailFragment
+ protected void playShuffled() {
+ MusicUtils.playAlbum(getActivity(), mAlbumId, -1, true);
+ }
+
+ private void setupHeader(String artist, Bundle arguments) {
+ mAlbumId = arguments.getLong(Config.ID);
+ mArtistName = artist;
+ mAlbumName = arguments.getString(Config.NAME);
+ String year = arguments.getString(Config.ALBUM_YEAR);
+ int songCount = arguments.getInt(Config.SONG_COUNT);
+
+ mAlbumArt = (ImageView)mRootView.findViewById(R.id.album_art);
+ mAlbumArt.setContentDescription(mAlbumName);
+ ImageFetcher.getInstance(getActivity()).loadAlbumImage(artist, mAlbumName, mAlbumId, mAlbumArt);
+
+ TextView title = (TextView)mRootView.findViewById(R.id.title);
+ title.setText(mAlbumName);
+
+ setupCountAndYear(mRootView, year, songCount);
+
+ // will be updated once we have song data
+ mAlbumDuration = (TextView)mRootView.findViewById(R.id.duration);
+ mGenre = (TextView)mRootView.findViewById(R.id.genre);
+ }
+
+ private void setupCountAndYear(View root, String year, int songCount) {
+ TextView songCountAndYear = (TextView)root.findViewById(R.id.song_count_and_year);
+ if(songCount > 0) {
+ String countText = getResources().
+ getQuantityString(R.plurals.Nsongs, songCount, songCount);
+ if(year == null) {
+ songCountAndYear.setText(countText);
+ } else {
+ songCountAndYear.setText(getString(R.string.combine_two_strings, countText, year));
+ }
+ } else if(year != null) {
+ songCountAndYear.setText(year);
+ }
+ }
+
+ private void setupPopupMenuHelper() {
+ mSongMenuHelper = new SongPopupMenuHelper(getActivity(), getChildFragmentManager()) {
+ @Override
+ public Song getSong(int position) {
+ return mSongAdapter.getItem(position);
+ }
+
+ @Override
+ protected long getSourceId() {
+ return mAlbumId;
+ }
+
+ @Override
+ protected Config.IdType getSourceType() {
+ return Config.IdType.Album;
+ }
+ };
+ }
+
+ private void setupSongList() {
+ mSongs = (ListView)mRootView.findViewById(R.id.songs);
+ mSongAdapter = new AlbumDetailSongAdapter(getActivity(), this) {
+ @Override
+ protected void onLoading() {
+ mLoadingEmptyContainer.showLoading();
+ }
+
+ @Override
+ protected void onNoResults() {
+ getContainingActivity().postRemoveFragment(AlbumDetailFragment.this);
+ }
+ };
+ mSongAdapter.setPopupMenuClickedListener(new IPopupMenuCallback.IListener() {
+ @Override
+ public void onPopupMenuClicked(View v, int position) {
+ mSongMenuHelper.showPopupMenu(v, position);
+ }
+ });
+ mSongs.setAdapter(mSongAdapter);
+ mSongs.setOnItemClickListener(mSongAdapter);
+ mLoadingEmptyContainer =
+ (LoadingEmptyContainer)mRootView.findViewById(R.id.loading_empty_container);
+ mSongs.setEmptyView(mLoadingEmptyContainer);
+ }
+
+ /** called back by song loader */
+ public void update(List<Song> songs) {
+ /** compute total run time for album */
+ int duration = 0;
+ for(Song s : songs) { duration += s.mDuration; }
+ mAlbumDuration.setText(MusicUtils.makeLongTimeString(getActivity(), duration));
+
+ /** use the first song on the album to get a genre */
+ if(!songs.isEmpty()) {
+ GenreFetcher.fetch(getActivity(), (int) songs.get(0).mSongId, mGenre);
+ }
+ }
+
+ @Override
+ public void restartLoader() {
+ getLoaderManager().restartLoader(LOADER_ID, getArguments(), mSongAdapter);
+ ImageFetcher.getInstance(getActivity()).loadAlbumImage(mArtistName, mAlbumName, mAlbumId,
+ mAlbumArt);
+ }
+
+ @Override
+ public void onMetaChanged() {
+ super.onMetaChanged();
+
+ mSongAdapter.setCurrentlyPlayingTrack(MusicUtils.getCurrentTrack());
+ }
+
+ @Override
+ public PagerAdapter.MusicFragments getMusicFragmentParent() {
+ return PagerAdapter.MusicFragments.ALBUM;
+ }
+}