/*****************************************************************************
* AudioSongsListAdapter.java
*****************************************************************************
* Copyright © 2011-2012 VLC authors and VideoLAN
*
* This program 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 2 of the License, or
* (at your option) any later version.
*
* This program 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 this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
package org.videolan.vlc.gui.audio;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.ColorStateList;
import android.database.DataSetObserver;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.TextView;
import org.videolan.vlc.MediaWrapper;
import org.videolan.vlc.R;
import org.videolan.vlc.util.Util;
import org.videolan.vlc.widget.AudioPlaylistItemViewGroup;
import java.util.ArrayList;
import java.util.List;
public class AudioPlaylistAdapter extends ArrayAdapter<MediaWrapper> {
private int mCurrentIndex;
private Context mContext;
private int mAlignMode;
public AudioPlaylistAdapter(Context context) {
super(context, 0);
mContext = context;
mCurrentIndex = -1;
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
mAlignMode = Integer.valueOf(preferences.getString("audio_title_alignment", "0"));
}
public void setCurrentIndex(int currentIndex) {
mCurrentIndex = currentIndex;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
View v = convertView;
if (v == null) {
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.audio_playlist_item, parent, false);
holder = new ViewHolder();
holder.title = (TextView) v.findViewById(R.id.title);
Util.setAlignModeByPref(mAlignMode, holder.title);
holder.artist = (TextView) v.findViewById(R.id.artist);
holder.moveButton = (ImageButton) v.findViewById(R.id.move);
holder.expansion = (LinearLayout)v.findViewById(R.id.item_expansion);
holder.layoutItem = (LinearLayout)v.findViewById(R.id.layout_item);
holder.layoutFooter = v.findViewById(R.id.layout_footer);
holder.itemGroup = (AudioPlaylistItemViewGroup)v.findViewById(R.id.playlist_item);
v.setTag(holder);
} else
holder = (ViewHolder) v.getTag();
holder.expansion.setVisibility(LinearLayout.GONE);
holder.layoutItem.setVisibility(LinearLayout.VISIBLE);
holder.layoutFooter.setVisibility(LinearLayout.VISIBLE);
holder.itemGroup.scrollTo(1);
MediaWrapper media = getItem(position);
final String title = media.getTitle();
final String artist = Util.getMediaSubtitle(mContext, media);
final int pos = position;
final View itemView = v;
holder.title.setText(title);
ColorStateList titleColor = v.getResources().getColorStateList(mCurrentIndex == position
? Util.getResourceFromAttribute(mContext, R.attr.list_title_last)
: Util.getResourceFromAttribute(mContext, R.attr.list_title));
holder.title.setTextColor(titleColor);
holder.artist.setText(artist);
holder.position = position;
final AudioPlaylistView playlistView = (AudioPlaylistView)parent;
holder.moveButton.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
playlistView.startDrag(pos, title, artist);
return true;
}
else
return false;
}
});
holder.itemGroup.setOnItemSlidedListener(
new AudioPlaylistItemViewGroup.OnItemSlidedListener() {
@Override
public void onItemSlided() {
playlistView.removeItem(pos);
}
});
holder.layoutItem.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
playlistView.performItemClick(itemView, pos, 0);
}
});
holder.layoutItem.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
playlistView.performItemLongClick(itemView, pos, 0);
return true;
}
});
return v;
}
public String getLocation(int position) {
String location = null;
if (position >= 0 && position < getCount())
location = getItem(position).getLocation();
return location;
}
public List<MediaWrapper> getMedias() {
List<MediaWrapper> medias = new ArrayList<MediaWrapper>();
for (int i = 0 ; i < getCount() ; ++i)
medias.add(getItem(i));
return medias;
}
static class ViewHolder {
int position;
TextView title;
TextView artist;
ImageButton moveButton;
LinearLayout expansion;
LinearLayout layoutItem;
View layoutFooter;
AudioPlaylistItemViewGroup itemGroup;
}
@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
if (observer != null)
super.unregisterDataSetObserver(observer);
}
}