diff --git a/src/org/kreed/vanilla/AlbumAdapter.java b/src/org/kreed/vanilla/AlbumAdapter.java deleted file mode 100644 index 0f333eee..00000000 --- a/src/org/kreed/vanilla/AlbumAdapter.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.kreed.vanilla; - -import android.content.Context; - -public class AlbumAdapter extends AbstractAdapter { - public AlbumAdapter(Context context, Song[] allSongs) - { - super(context, Song.filter(allSongs, new Song.AlbumComparator()), MediaView.EXPANDER | MediaView.SECONDARY_LINE, Song.FIELD_ALBUM); - } - - @Override - protected void updateView(int position, MediaView view) - { - Song song = get(position); - view.setPrimaryText(song.album); - view.setSecondaryText(song.artist); - view.setMediaId(song.albumId); - } -} \ No newline at end of file diff --git a/src/org/kreed/vanilla/ArtistAdapter.java b/src/org/kreed/vanilla/ArtistAdapter.java deleted file mode 100644 index 3f5aad9f..00000000 --- a/src/org/kreed/vanilla/ArtistAdapter.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2010 Christopher Eby - * - * This file is part of Vanilla Music Player. - * - * Vanilla Music Player is free software; you can redistribute it and/or modify - * it under the terms of the GNU Library General Public License as published by - * the Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Vanilla Music Player 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. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.kreed.vanilla; - -import android.content.Context; - -public class ArtistAdapter extends AbstractAdapter { - public ArtistAdapter(Context context, Song[] allSongs) - { - super(context, Song.filter(allSongs, new Song.ArtistComparator()), MediaView.EXPANDER, Song.FIELD_ARTIST); - } - - @Override - protected void updateView(int position, MediaView view) - { - Song song = get(position); - view.setPrimaryText(song.artist); - view.setMediaId(song.artistId); - } -} \ No newline at end of file diff --git a/src/org/kreed/vanilla/AbstractAdapter.java b/src/org/kreed/vanilla/MediaAdapter.java similarity index 84% rename from src/org/kreed/vanilla/AbstractAdapter.java rename to src/org/kreed/vanilla/MediaAdapter.java index a1a261da..768ad4fd 100644 --- a/src/org/kreed/vanilla/AbstractAdapter.java +++ b/src/org/kreed/vanilla/MediaAdapter.java @@ -33,7 +33,7 @@ import android.widget.BaseAdapter; import android.widget.Filter; import android.widget.Filterable; -public abstract class AbstractAdapter extends BaseAdapter implements Filterable { +public class MediaAdapter extends BaseAdapter implements Filterable { private Context mContext; private OnClickListener mExpanderListener; @@ -44,15 +44,15 @@ public abstract class AbstractAdapter extends BaseAdapter implements Filterable private int mLimiterId = -1; private CharSequence mLastFilter; - private int mDrawFlags; - private int mMediaField; + private int mPrimaryField; + private int mSecondaryField; - public AbstractAdapter(Context context, Song[] allObjects, int drawFlags, int mediaField) + public MediaAdapter(Context context, Song[] allObjects, int primaryField, int secondaryField) { mContext = context; mAllObjects = allObjects; - mDrawFlags = drawFlags; - mMediaField = mediaField; + mPrimaryField = primaryField; + mSecondaryField = secondaryField; } public void setExpanderListener(View.OnClickListener listener) @@ -66,8 +66,6 @@ public abstract class AbstractAdapter extends BaseAdapter implements Filterable return true; } - protected abstract void updateView(int position, MediaView view); - public View getView(int position, View convertView, ViewGroup parent) { MediaView view = null; @@ -77,13 +75,19 @@ public abstract class AbstractAdapter extends BaseAdapter implements Filterable } if (view == null) { - view = new MediaView(mContext, mDrawFlags); + int flags = 0; + if (mSecondaryField != -1) + flags |= MediaView.SECONDARY_LINE; + if (mExpanderListener != null) + flags |= MediaView.EXPANDER; + + view = new MediaView(mContext, flags); if (mExpanderListener != null) - view.setupExpander(mMediaField, mExpanderListener); + view.setupExpander(mPrimaryField, mExpanderListener); } - updateView(position, view); + view.updateMedia(get(position), mPrimaryField, mSecondaryField); return view; } @@ -146,9 +150,9 @@ public abstract class AbstractAdapter extends BaseAdapter implements Filterable for (int j = matchers.length; --j != -1; ) { if (matchers[j].reset(song.artist).find()) continue; - if (mMediaField > 1 && matchers[j].reset(song.album).find()) + if (mPrimaryField > 1 && matchers[j].reset(song.album).find()) continue; - if (mMediaField > 2 && matchers[j].reset(song.title).find()) + if (mPrimaryField > 2 && matchers[j].reset(song.title).find()) continue; continue outer; } @@ -222,7 +226,7 @@ public abstract class AbstractAdapter extends BaseAdapter implements Filterable Song song = get(i); if (song == null) return 0; - return song.getFieldId(mMediaField); + return song.getFieldId(mPrimaryField); } public Intent buildSongIntent(int action, int pos) @@ -232,10 +236,10 @@ public abstract class AbstractAdapter extends BaseAdapter implements Filterable return null; Intent intent = new Intent(mContext, PlaybackService.class); - intent.putExtra("type", mMediaField); + intent.putExtra("type", mPrimaryField); intent.putExtra("action", action); - intent.putExtra("id", song.getFieldId(mMediaField)); - intent.putExtra("title", song.getField(mMediaField)); + intent.putExtra("id", song.getFieldId(mPrimaryField)); + intent.putExtra("title", song.getField(mPrimaryField)); return intent; } } \ No newline at end of file diff --git a/src/org/kreed/vanilla/MediaView.java b/src/org/kreed/vanilla/MediaView.java index 8530d0ae..3f7805a4 100644 --- a/src/org/kreed/vanilla/MediaView.java +++ b/src/org/kreed/vanilla/MediaView.java @@ -133,21 +133,14 @@ public class MediaView extends ViewGroup { mExpander.setOnClickListener(listener); } } - public void setPrimaryText(String text) + + public void updateMedia(Song song, int primaryField, int secondaryField) { if (mPrimaryLine != null) - mPrimaryLine.setText(text); - } - - public void setSecondaryText(String text) - { + mPrimaryLine.setText(song.getField(primaryField)); if (mSecondaryLine != null) - mSecondaryLine.setText(text); - } - - public void setMediaId(int id) - { + mSecondaryLine.setText(song.getField(secondaryField)); if (mExpander != null) - mExpander.setTag(R.id.id, id); + mExpander.setTag(R.id.id, song.getFieldId(primaryField)); } } \ No newline at end of file diff --git a/src/org/kreed/vanilla/SongAdapter.java b/src/org/kreed/vanilla/SongAdapter.java deleted file mode 100644 index 0a4fd870..00000000 --- a/src/org/kreed/vanilla/SongAdapter.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2010 Christopher Eby - * - * This file is part of Vanilla Music Player. - * - * Vanilla Music Player is free software; you can redistribute it and/or modify - * it under the terms of the GNU Library General Public License as published by - * the Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Vanilla Music Player 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. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.kreed.vanilla; - -import java.util.Arrays; - -import android.content.Context; - -public class SongAdapter extends AbstractAdapter { - private static Song[] sort(Song[] songs) - { - Arrays.sort(songs, new Song.TitleComparator()); - return songs; - } - - public SongAdapter(Context context, Song[] allSongs) - { - super(ContextApplication.getContext(), sort(allSongs), MediaView.SECONDARY_LINE, Song.FIELD_TITLE); - } - - @Override - protected void updateView(int position, MediaView view) - { - Song song = get(position); - view.setPrimaryText(song.title); - view.setSecondaryText(song.artist); - } -} \ No newline at end of file diff --git a/src/org/kreed/vanilla/SongSelector.java b/src/org/kreed/vanilla/SongSelector.java index 1b4f6310..fb06cfc5 100644 --- a/src/org/kreed/vanilla/SongSelector.java +++ b/src/org/kreed/vanilla/SongSelector.java @@ -18,6 +18,8 @@ package org.kreed.vanilla; +import java.util.Arrays; + import org.kreed.vanilla.R; import android.app.TabActivity; @@ -46,7 +48,7 @@ public class SongSelector extends TabActivity implements AdapterView.OnItemClick private TabHost mTabHost; private TextView mTextFilter; private View mClearButton; - private AbstractAdapter[] mAdapters = new AbstractAdapter[3]; + private MediaAdapter[] mAdapters = new MediaAdapter[3]; private int mDefaultAction; @@ -75,7 +77,7 @@ public class SongSelector extends TabActivity implements AdapterView.OnItemClick mTabHost.addTab(mTabHost.newTabSpec("tab_songs").setIndicator(res.getText(R.string.songs), res.getDrawable(R.drawable.tab_songs)).setContent(R.id.song_list)); final Song[] songs = Song.getAllSongMetadata(); - mAdapters[0] = new ArtistAdapter(this, songs); + mAdapters[0] = new MediaAdapter(this, Song.filter(songs, new Song.ArtistComparator()), Song.FIELD_ARTIST, -1); mAdapters[0].setExpanderListener(this); initializeListView(R.id.artist_list, mAdapters[0]); @@ -101,11 +103,12 @@ public class SongSelector extends TabActivity implements AdapterView.OnItemClick new Handler().post(new Runnable() { public void run() { - mAdapters[1] = new AlbumAdapter(SongSelector.this, songs); + mAdapters[1] = new MediaAdapter(SongSelector.this, Song.filter(songs, new Song.AlbumComparator()), Song.FIELD_ALBUM, Song.FIELD_ARTIST); mAdapters[1].setExpanderListener(SongSelector.this); initializeListView(R.id.album_list, mAdapters[1]); - mAdapters[2] = new SongAdapter(SongSelector.this, songs); + Arrays.sort(songs, new Song.TitleComparator()); + mAdapters[2] = new MediaAdapter(SongSelector.this, songs, Song.FIELD_TITLE, Song.FIELD_ARTIST); initializeListView(R.id.song_list, mAdapters[2]); } }); @@ -134,7 +137,7 @@ public class SongSelector extends TabActivity implements AdapterView.OnItemClick public void onItemClick(AdapterView list, View view, int pos, long id) { - sendSongIntent(((AbstractAdapter)list.getAdapter()).buildSongIntent(mDefaultAction, pos)); + sendSongIntent(((MediaAdapter)list.getAdapter()).buildSongIntent(mDefaultAction, pos)); } public void afterTextChanged(Editable editable) @@ -147,7 +150,7 @@ public class SongSelector extends TabActivity implements AdapterView.OnItemClick public void onTextChanged(CharSequence s, int start, int before, int count) { - AbstractAdapter adapter = mAdapters[mTabHost.getCurrentTab()]; + MediaAdapter adapter = mAdapters[mTabHost.getCurrentTab()]; if (adapter != null) adapter.getFilter().filter(s); } @@ -174,7 +177,7 @@ public class SongSelector extends TabActivity implements AdapterView.OnItemClick @Override public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo info) { - AbstractAdapter adapter = (AbstractAdapter)((ListView)view).getAdapter(); + MediaAdapter adapter = (MediaAdapter)((ListView)view).getAdapter(); int pos = (int)((AdapterView.AdapterContextMenuInfo)info).position; menu.add(0, MENU_PLAY, 0, R.string.play).setIntent(adapter.buildSongIntent(PlaybackService.ACTION_PLAY, pos)); menu.add(0, MENU_ENQUEUE, 0, R.string.enqueue).setIntent(adapter.buildSongIntent(PlaybackService.ACTION_ENQUEUE, pos));