summaryrefslogtreecommitdiffstats
path: root/src/org/lineageos/eleven/adapters/ArtistDetailAlbumAdapter.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/lineageos/eleven/adapters/ArtistDetailAlbumAdapter.java')
-rw-r--r--src/org/lineageos/eleven/adapters/ArtistDetailAlbumAdapter.java149
1 files changed, 149 insertions, 0 deletions
diff --git a/src/org/lineageos/eleven/adapters/ArtistDetailAlbumAdapter.java b/src/org/lineageos/eleven/adapters/ArtistDetailAlbumAdapter.java
new file mode 100644
index 0000000..4670e0d
--- /dev/null
+++ b/src/org/lineageos/eleven/adapters/ArtistDetailAlbumAdapter.java
@@ -0,0 +1,149 @@
+/*
+* 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.adapters;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.support.v4.app.LoaderManager.LoaderCallbacks;
+import android.support.v4.content.Loader;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.cyanogenmod.eleven.Config;
+import com.cyanogenmod.eleven.R;
+import com.cyanogenmod.eleven.cache.ImageFetcher;
+import com.cyanogenmod.eleven.loaders.AlbumLoader;
+import com.cyanogenmod.eleven.model.Album;
+import com.cyanogenmod.eleven.utils.ApolloUtils;
+import com.cyanogenmod.eleven.utils.NavUtils;
+import com.cyanogenmod.eleven.widgets.IPopupMenuCallback;
+import com.cyanogenmod.eleven.widgets.PopupMenuButton;
+
+import java.util.Collections;
+import java.util.List;
+
+public class ArtistDetailAlbumAdapter
+extends RecyclerView.Adapter<ArtistDetailAlbumAdapter.ViewHolder>
+implements LoaderCallbacks<List<Album>>, IPopupMenuCallback {
+ private static final int TYPE_FIRST = 1;
+ private static final int TYPE_MIDDLE = 2;
+ private static final int TYPE_LAST = 3;
+
+ private final Activity mActivity;
+ private final ImageFetcher mImageFetcher;
+ private final LayoutInflater mInflater;
+ private List<Album> mAlbums = Collections.emptyList();
+ private IListener mListener;
+ private int mListMargin;
+
+ public ArtistDetailAlbumAdapter(final Activity activity) {
+ mActivity = activity;
+ mImageFetcher = ApolloUtils.getImageFetcher(activity);
+ mInflater = LayoutInflater.from(activity);
+ mListMargin = activity.getResources().
+ getDimensionPixelSize(R.dimen.list_item_general_margin);
+ }
+
+ @Override
+ public int getItemViewType(int position) {
+ // use view types to distinguish first and last elements
+ // so they can be given special treatment for layout
+ if(position == 0) { return TYPE_FIRST; }
+ else if(position == getItemCount()-1) { return TYPE_LAST; }
+ else return TYPE_MIDDLE;
+ }
+
+ @Override
+ public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ View v = mInflater.inflate(R.layout.artist_detail_album, parent, false);
+ // add extra margin to the first and last elements
+ ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams)v.getLayoutParams();
+ if (viewType == TYPE_FIRST) { params.leftMargin = mListMargin; }
+ else if(viewType == TYPE_LAST) { params.rightMargin = mListMargin; }
+ return new ViewHolder(v);
+ }
+
+ @Override
+ public void onBindViewHolder(ViewHolder holder, int position) {
+ Album a = mAlbums.get(position);
+ holder.title.setText(a.mAlbumName);
+ holder.year.setText(a.mYear);
+ mImageFetcher.loadAlbumImage(
+ a.mArtistName, a.mAlbumName, a.mAlbumId, holder.art);
+ holder.popupbutton.setPopupMenuClickedListener(mListener);
+ holder.popupbutton.setPosition(position);
+ addAction(holder.itemView, a);
+ }
+
+ private void addAction(View view, final Album album) {
+ view.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ NavUtils.openAlbumProfile(
+ mActivity, album.mAlbumName, album.mArtistName, album.mAlbumId);
+ }
+ });
+ }
+
+ @Override
+ public int getItemCount() { return mAlbums.size(); }
+
+ public Album getItem(int position) {
+ return mAlbums.get(position);
+ }
+
+ @Override
+ public void setPopupMenuClickedListener(IListener listener) {
+ mListener = listener;
+ }
+
+ public static class ViewHolder extends RecyclerView.ViewHolder {
+ public ImageView art;
+ public TextView title;
+ public TextView year;
+ public PopupMenuButton popupbutton;
+ public ViewHolder(View root) {
+ super(root);
+ art = (ImageView)root.findViewById(R.id.album_art);
+ title = (TextView)root.findViewById(R.id.title);
+ year = (TextView)root.findViewById(R.id.year);
+ popupbutton = (PopupMenuButton)root.findViewById(R.id.overflow);
+ }
+ }
+
+ @Override // LoaderCallbacks
+ public Loader<List<Album>> onCreateLoader(int id, Bundle args) {
+ return new AlbumLoader(mActivity, args.getLong(Config.ID));
+ }
+
+ @Override // LoaderCallbacks
+ public void onLoadFinished(Loader<List<Album>> loader, List<Album> albums) {
+ if (albums.isEmpty()) { return; }
+ mAlbums = albums;
+ notifyDataSetChanged();
+ }
+
+ @Override // LoaderCallbacks
+ public void onLoaderReset(Loader<List<Album>> loader) {
+ mAlbums = Collections.emptyList();
+ notifyDataSetChanged();
+ mImageFetcher.flush();
+ }
+} \ No newline at end of file