diff --git a/vlc-android/res/layout/audio_browser_playlist.xml b/vlc-android/res/layout/audio_browser_playlist.xml new file mode 100644 index 0000000000000000000000000000000000000000..c85370031c1652116a53feedefc6fb618ca0189a --- /dev/null +++ b/vlc-android/res/layout/audio_browser_playlist.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/vlc-android/src/org/videolan/vlc/android/AudioBrowserActivity.java b/vlc-android/src/org/videolan/vlc/android/AudioBrowserActivity.java index 18c628c770cf034081a08d403f42422e19fb5510..5170809f931277fbe032ba0a60a661aa36c9b78f 100644 --- a/vlc-android/src/org/videolan/vlc/android/AudioBrowserActivity.java +++ b/vlc-android/src/org/videolan/vlc/android/AudioBrowserActivity.java @@ -58,9 +58,9 @@ public class AudioBrowserActivity extends Activity { mMediaLibrary.addUpdateHandler(mHandler); mSongsAdapter = new AudioSongsListAdapter(this, R.layout.audio_browser_item); - mArtistsAdapter = new AudioPlaylistAdapter(this, R.layout.audio_browser_item); - mAlbumsAdapter = new AudioPlaylistAdapter(this, R.layout.audio_browser_item); - mGenresAdapter = new AudioPlaylistAdapter(this, R.layout.audio_browser_item); + mArtistsAdapter = new AudioPlaylistAdapter(this, R.layout.audio_browser_playlist); + mAlbumsAdapter = new AudioPlaylistAdapter(this, R.layout.audio_browser_playlist); + mGenresAdapter = new AudioPlaylistAdapter(this, R.layout.audio_browser_playlist); ListView songsList = (ListView) findViewById(R.id.songs_list); ListView artistList = (ListView) findViewById(R.id.artists_list); ListView albumList = (ListView) findViewById(R.id.albums_list); diff --git a/vlc-android/src/org/videolan/vlc/android/AudioPlaylistAdapter.java b/vlc-android/src/org/videolan/vlc/android/AudioPlaylistAdapter.java index 8f2b22598fb4adde55968b9b5afff89d61ff1b57..f1b26be7dfa2648e64b986bb814fb8a50c759fef 100644 --- a/vlc-android/src/org/videolan/vlc/android/AudioPlaylistAdapter.java +++ b/vlc-android/src/org/videolan/vlc/android/AudioPlaylistAdapter.java @@ -1,86 +1,120 @@ -package org.videolan.vlc.android; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ArrayAdapter; -import android.widget.TextView; - -public class AudioPlaylistAdapter extends ArrayAdapter { - - private ArrayList mTitles; - private HashMap> mPlaylists; - - public AudioPlaylistAdapter(Context context, int textViewResourceId) { - super(context, textViewResourceId); - mTitles = new ArrayList(); - mPlaylists = new HashMap>(); - } - - public void add(String title, Media media) { - ArrayList list; - if (!mTitles.contains(title)) { - list = new ArrayList(); - mPlaylists.put(title, list); - mTitles.add(title); - super.add(title); - } else { - list = mPlaylists.get(title); - } - list.add(media); - } - - @Override - public void clear() { - for (String item : mTitles) { - mPlaylists.get(item).clear(); - mPlaylists.remove(item); - } - mTitles.clear(); - super.clear(); - } - - @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_browser_item, parent, false); - holder = new ViewHolder(); - holder.title = (TextView) v.findViewById(R.id.title); - holder.artist = (TextView) v.findViewById(R.id.artist); - v.setTag(holder); - } else - holder = (ViewHolder) v.getTag(); - - String name = mTitles.get(position); - ArrayList list = mPlaylists.get(name); - holder.title.setText(name); - holder.artist.setText(R.string.songs); - holder.artist.setText(list.size() + " " + holder.artist.getText()); - return v; - } - - static class ViewHolder { - TextView title; - TextView artist; - } - - public List getPlaylist(int position) { - List playlist = new ArrayList(); - if (position >= 0 && position < mTitles.size()) { - List mediaList = mPlaylists.get(mTitles.get(position)); - for (int i = 0; i < mediaList.size(); i++) { - playlist.add(mediaList.get(i).getPath()); - } - } - return playlist; - - } -} +package org.videolan.vlc.android; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +public class AudioPlaylistAdapter extends ArrayAdapter { + + private ArrayList mTitles; + private ArrayList mExpanded; + private HashMap> mPlaylists; + + public AudioPlaylistAdapter(Context context, int textViewResourceId) { + super(context, textViewResourceId); + mTitles = new ArrayList(); + mExpanded = new ArrayList(); + mPlaylists = new HashMap>(); + } + + public void add(String title, Media media) { + ArrayList list; + if (!mTitles.contains(title)) { + list = new ArrayList(); + mPlaylists.put(title, list); + mTitles.add(title); + mExpanded.add(false); + super.add(title); + } else { + list = mPlaylists.get(title); + } + list.add(media); + } + + @Override + public void clear() { + for (String item : mTitles) { + mPlaylists.get(item).clear(); + mPlaylists.remove(item); + } + mExpanded.clear(); + mTitles.clear(); + super.clear(); + } + + @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_browser_playlist, parent, false); + holder = new ViewHolder(); + holder.title = (TextView) v.findViewById(R.id.title); + holder.text = (TextView) v.findViewById(R.id.text); + holder.more = (ImageView) v.findViewById(R.id.ml_item_more); + v.setTag(holder); + } else + holder = (ViewHolder) v.getTag(); + + String name = mTitles.get(position); + ArrayList list = mPlaylists.get(name); + holder.title.setText(name); + if (mExpanded.get(position)) { + StringBuilder sb = new StringBuilder(); + for (Media media : list) { + sb.append(" - "); + sb.append(media.getTitle()); + sb.append("\n"); + } + holder.text.setText(sb.toString()); + } + else { + holder.text.setText(R.string.songs); + holder.text.setText(list.size() + " " + holder.text.getText()); + } + + holder.more.setTag(position); + holder.more.setOnClickListener(moreClickListener); + return v; + } + + private OnClickListener moreClickListener = new OnClickListener() { + @Override + public void onClick(View v) { + int position = (Integer) v.getTag(); + boolean expanded = mExpanded.get(position); + for (int i = 0; i < mExpanded.size(); ++i) + mExpanded.set(i, false); + mExpanded.set(position, !expanded); + notifyDataSetChanged(); + } + }; + + static class ViewHolder { + TextView title; + TextView text; + ImageView more; + } + + public List getPlaylist(int position) { + List playlist = new ArrayList(); + if (position >= 0 && position < mTitles.size()) { + List mediaList = mPlaylists.get(mTitles.get(position)); + for (int i = 0; i < mediaList.size(); i++) { + playlist.add(mediaList.get(i).getPath()); + } + } + return playlist; + + } +}