Defer to TabHost to retrieve MediaAdapters

This commit is contained in:
Christopher Eby 2010-03-12 21:57:44 -06:00
parent ebcae9e507
commit 1b1b83127c

View File

@ -42,7 +42,6 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.Window; import android.view.Window;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.ListView; import android.widget.ListView;
import android.widget.TabHost; import android.widget.TabHost;
@ -54,16 +53,28 @@ public class SongSelector extends TabActivity implements AdapterView.OnItemClick
private TextView mTextFilter; private TextView mTextFilter;
private View mClearButton; private View mClearButton;
private ViewGroup mLimiters; private ViewGroup mLimiters;
private MediaAdapter[] mAdapters = new MediaAdapter[3];
private int mDefaultAction; private int mDefaultAction;
private boolean mDefaultIsLastAction; private boolean mDefaultIsLastAction;
private void initializeListView(int id, BaseAdapter adapter) private ListView getList(int tab)
{
return (ListView)mTabHost.getTabContentView().getChildAt(tab);
}
private MediaAdapter getAdapter(int tab)
{
return (MediaAdapter)getList(tab).getAdapter();
}
private void initializeList(int id, Song[] songs, int lineA, int lineB, View.OnClickListener expanderListener)
{ {
ListView view = (ListView)findViewById(id); ListView view = (ListView)findViewById(id);
view.setOnItemClickListener(this); view.setOnItemClickListener(this);
view.setOnCreateContextMenuListener(this); view.setOnCreateContextMenuListener(this);
MediaAdapter adapter = new MediaAdapter(SongSelector.this, songs, lineA, lineB);
adapter.setExpanderListener(this);
view.setAdapter(adapter); view.setAdapter(adapter);
} }
@ -117,17 +128,10 @@ public class SongSelector extends TabActivity implements AdapterView.OnItemClick
{ {
Song[] songs = Song.getAllSongMetadata(); Song[] songs = Song.getAllSongMetadata();
mAdapters[0] = new MediaAdapter(SongSelector.this, Song.filter(songs, new Song.ArtistComparator()), Song.FIELD_ARTIST, -1); initializeList(R.id.artist_list, Song.filter(songs, new Song.ArtistComparator()), Song.FIELD_ARTIST, -1, SongSelector.this);
mAdapters[0].setExpanderListener(SongSelector.this); initializeList(R.id.album_list, Song.filter(songs, new Song.AlbumComparator()), Song.FIELD_ALBUM, Song.FIELD_ARTIST, SongSelector.this);
initializeListView(R.id.artist_list, mAdapters[0]);
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]);
Arrays.sort(songs, new Song.TitleComparator()); Arrays.sort(songs, new Song.TitleComparator());
mAdapters[2] = new MediaAdapter(SongSelector.this, songs, Song.FIELD_TITLE, Song.FIELD_ARTIST); initializeList(R.id.song_list, songs, Song.FIELD_TITLE, Song.FIELD_ARTIST, null);
initializeListView(R.id.song_list, mAdapters[2]);
} }
}); });
} }
@ -168,7 +172,7 @@ public class SongSelector extends TabActivity implements AdapterView.OnItemClick
public void onTextChanged(CharSequence s, int start, int before, int count) public void onTextChanged(CharSequence s, int start, int before, int count)
{ {
MediaAdapter adapter = mAdapters[mTabHost.getCurrentTab()]; MediaAdapter adapter = getAdapter(mTabHost.getCurrentTab());
if (adapter != null) if (adapter != null)
adapter.getFilter().filter(s); adapter.getFilter().filter(s);
} }
@ -180,7 +184,7 @@ public class SongSelector extends TabActivity implements AdapterView.OnItemClick
mLimiters.removeAllViews(); mLimiters.removeAllViews();
MediaAdapter adapter = mAdapters[mTabHost.getCurrentTab()]; MediaAdapter adapter = getAdapter(mTabHost.getCurrentTab());
if (adapter == null) if (adapter == null)
return; return;
@ -230,15 +234,17 @@ public class SongSelector extends TabActivity implements AdapterView.OnItemClick
if (view instanceof TextView) { if (view instanceof TextView) {
int newField = data.field == Song.FIELD_ARTIST ? -1 : data.field - 1; int newField = data.field == Song.FIELD_ARTIST ? -1 : data.field - 1;
for (int i = mAdapters.length; --i != -1; ) { for (int i = mTabHost.getChildCount(); --i != -1; ) {
if (mAdapters[i].getLimiterField() >= data.field) MediaAdapter adapter = getAdapter(i);
mAdapters[i].setLimiter(newField, mAdapters[i].getLimiterMedia()); if (adapter.getLimiterField() >= data.field)
adapter.setLimiter(newField, adapter.getLimiterMedia());
} }
updateLimiterViews(); updateLimiterViews();
} else { } else {
for (int i = data.field; i != 3; ++i) { for (int i = data.field; i != 3; ++i) {
mAdapters[i].setLimiter(data.field, data.media); MediaAdapter adapter = getAdapter(i);
mAdapters[i].hideAll(); adapter.setLimiter(data.field, data.media);
adapter.hideAll();
} }
mTabHost.setCurrentTab(data.field); mTabHost.setCurrentTab(data.field);
} }