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;
+
+ }
+}