From 268a53796918f63f155664247782aabdde5eb964 Mon Sep 17 00:00:00 2001 From: Christopher Eby Date: Fri, 23 Sep 2011 01:03:06 -0500 Subject: [PATCH] Don't use TabHost --- res/color/tab_indicator_text.xml | 6 + res/drawable/buttonbar.xml | 7 + res/drawable/buttonbar_active.9.png | Bin 0 -> 198 bytes res/drawable/buttonbar_focused.9.png | Bin 0 -> 198 bytes res/drawable/buttonbar_inactive.9.png | Bin 0 -> 260 bytes res/drawable/buttonbar_pressed.9.png | Bin 0 -> 195 bytes res/drawable/ic_menu_shuffle.png | Bin .../{tab_albums.xml => ic_tab_albums.xml} | 0 .../{tab_artists.xml => ic_tab_artists.xml} | 0 ...tab_playlists.xml => ic_tab_playlists.xml} | 0 .../{tab_songs.xml => ic_tab_songs.xml} | 0 res/layout/library_content.xml | 143 +++++++++++++----- src/org/kreed/vanilla/LibraryActivity.java | 108 +++++++------ 13 files changed, 181 insertions(+), 83 deletions(-) create mode 100644 res/color/tab_indicator_text.xml create mode 100644 res/drawable/buttonbar.xml create mode 100644 res/drawable/buttonbar_active.9.png create mode 100644 res/drawable/buttonbar_focused.9.png create mode 100644 res/drawable/buttonbar_inactive.9.png create mode 100644 res/drawable/buttonbar_pressed.9.png mode change 100755 => 100644 res/drawable/ic_menu_shuffle.png rename res/drawable/{tab_albums.xml => ic_tab_albums.xml} (100%) rename res/drawable/{tab_artists.xml => ic_tab_artists.xml} (100%) rename res/drawable/{tab_playlists.xml => ic_tab_playlists.xml} (100%) rename res/drawable/{tab_songs.xml => ic_tab_songs.xml} (100%) diff --git a/res/color/tab_indicator_text.xml b/res/color/tab_indicator_text.xml new file mode 100644 index 00000000..84101823 --- /dev/null +++ b/res/color/tab_indicator_text.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/res/drawable/buttonbar.xml b/res/drawable/buttonbar.xml new file mode 100644 index 00000000..1c3df76a --- /dev/null +++ b/res/drawable/buttonbar.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/res/drawable/buttonbar_active.9.png b/res/drawable/buttonbar_active.9.png new file mode 100644 index 0000000000000000000000000000000000000000..83c3f22041fccda0637128253ad15331b74ccc45 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^>_F_o!3HFK=jjUqsa{VP#}JFt$w>~Z|0i1d1Xv}U zon`v}`MJ5LFI>CE7PNsWQb@bO```cn@_mLXA73q5wekPT2MZim3P&a#kTnT7c1b~? z&4=UfarKiHUz{>BEHe}~Jy@WckoVMvvOr*U*AMo5!NFUJtU5#Gca7@keb@)Wb_s2Fa}RoKbLh*2~7Y6icYlv literal 0 HcmV?d00001 diff --git a/res/drawable/buttonbar_focused.9.png b/res/drawable/buttonbar_focused.9.png new file mode 100644 index 0000000000000000000000000000000000000000..bc00f30b8a11883048d4628d1698e79bfc99858b GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^>_F_o!3HFK=jjUqsa{VP#}JFt$w>~Z|0i1d1Xw-z z&$adc|8ygRJ2_0+5sf;Xq6P~ke#l=Ja+KetwfOzhxMjk)UacZo#=HoXtJQr&;5S6wmvSs@@M$nU(^(G xHzis*=FCuetkd@Ng~ZKs8VY?bhZO9X8SWS?Y3skb>mJZy44$rjF6*2UngHP_O#c7? literal 0 HcmV?d00001 diff --git a/res/drawable/buttonbar_inactive.9.png b/res/drawable/buttonbar_inactive.9.png new file mode 100644 index 0000000000000000000000000000000000000000..afe798a289fef6c1f9cb4c1165f8732bc805d22d GIT binary patch literal 260 zcmV+f0sH=mP)oxl;ra13g4UuQN_~gfj^bohkR- zTPaU_s_jeCUV9Vp=$-6k$9Ln0bmIwKoc3{lu=1N=t%YS-oRV$JoCLFh$dTR3+A@G_ z({>-s!EqdM7zXJ39_UH6hx0r;F~*!|?x8Ve+A9q7{p%BmYWM*tM^=^SValce0000< KMNUMnLSTXk=xUh& literal 0 HcmV?d00001 diff --git a/res/drawable/buttonbar_pressed.9.png b/res/drawable/buttonbar_pressed.9.png new file mode 100644 index 0000000000000000000000000000000000000000..2288f28b974b33eaea36122b539286310af616bd GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^>_F_o!3HFK=jjUqsV+|!#}JFt$w>~Z|0i1d1Xw-z zFS_;r|MLb0cVgJXHZVmBX(u=tez0G4ka@vp`?Inx`!-4(^kcU^X+CYi+`~t-nIHNW zsr-LDIYlNYPBMzo|1(pv#8l2F(?9khp uNz)Aj&toNRPhUvfbPRNm>1=VVVPgoMw5+X2IXVgGDh5wiKbLh*2~7Y;&PdJx literal 0 HcmV?d00001 diff --git a/res/drawable/ic_menu_shuffle.png b/res/drawable/ic_menu_shuffle.png old mode 100755 new mode 100644 diff --git a/res/drawable/tab_albums.xml b/res/drawable/ic_tab_albums.xml similarity index 100% rename from res/drawable/tab_albums.xml rename to res/drawable/ic_tab_albums.xml diff --git a/res/drawable/tab_artists.xml b/res/drawable/ic_tab_artists.xml similarity index 100% rename from res/drawable/tab_artists.xml rename to res/drawable/ic_tab_artists.xml diff --git a/res/drawable/tab_playlists.xml b/res/drawable/ic_tab_playlists.xml similarity index 100% rename from res/drawable/tab_playlists.xml rename to res/drawable/ic_tab_playlists.xml diff --git a/res/drawable/tab_songs.xml b/res/drawable/ic_tab_songs.xml similarity index 100% rename from res/drawable/tab_songs.xml rename to res/drawable/ic_tab_songs.xml diff --git a/res/layout/library_content.xml b/res/layout/library_content.xml index 80af7a81..8811ee56 100644 --- a/res/layout/library_content.xml +++ b/res/layout/library_content.xml @@ -21,46 +21,118 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --> - - + + + + + + + + - - + - - - - - - - - + android:layout_height="fill_parent" /> + + + + + + diff --git a/src/org/kreed/vanilla/LibraryActivity.java b/src/org/kreed/vanilla/LibraryActivity.java index 099730d6..f2651454 100644 --- a/src/org/kreed/vanilla/LibraryActivity.java +++ b/src/org/kreed/vanilla/LibraryActivity.java @@ -50,14 +50,14 @@ import android.widget.AdapterView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; -import android.widget.TabHost; +import android.widget.TabWidget; import android.widget.TextView; import android.widget.Toast; /** * The library activity where songs to play can be selected from the library. */ -public class LibraryActivity extends PlaybackActivity implements AdapterView.OnItemClickListener, TextWatcher, TabHost.OnTabChangeListener { +public class LibraryActivity extends PlaybackActivity implements AdapterView.OnItemClickListener, TextWatcher { /** * The number of tabs in the song selector. */ @@ -69,7 +69,9 @@ public class LibraryActivity extends PlaybackActivity implements AdapterView.OnI private static final int[] modeForAction = { SongTimeline.MODE_PLAY, SongTimeline.MODE_ENQUEUE }; - private TabHost mTabHost; + private TabWidget mTabWidget; + private ViewGroup mLists; + private int mCurrentTab; private View mSearchBox; private boolean mSearchBoxVisible; @@ -130,17 +132,6 @@ public class LibraryActivity extends PlaybackActivity implements AdapterView.OnI setContentView(R.layout.library_nocontrols); } - mTabHost = (TabHost)findViewById(android.R.id.tabhost); - mTabHost.setup(); - - Resources res = getResources(); - mTabHost.addTab(mTabHost.newTabSpec("tab_artists").setIndicator(res.getText(R.string.artists), res.getDrawable(R.drawable.tab_artists)).setContent(R.id.artist_list)); - mTabHost.addTab(mTabHost.newTabSpec("tab_albums").setIndicator(res.getText(R.string.albums), res.getDrawable(R.drawable.tab_albums)).setContent(R.id.album_list)); - mTabHost.addTab(mTabHost.newTabSpec("tab_songs").setIndicator(res.getText(R.string.songs), res.getDrawable(R.drawable.tab_songs)).setContent(R.id.song_list)); - mTabHost.addTab(mTabHost.newTabSpec("tab_playlists").setIndicator(res.getText(R.string.playlists), res.getDrawable(R.drawable.tab_playlists)).setContent(R.id.playlist_list)); - // TODO: find/create genre icon - mTabHost.addTab(mTabHost.newTabSpec("tab_genres").setIndicator(res.getText(R.string.genres), res.getDrawable(R.drawable.tab_songs)).setContent(R.id.genre_list)); - mSearchBox = findViewById(R.id.search_box); mTextFilter = (TextView)findViewById(R.id.filter_text); @@ -159,21 +150,31 @@ public class LibraryActivity extends PlaybackActivity implements AdapterView.OnI // These should be in the same order as MediaUtils.TYPE_* mAdapters = new MediaAdapter[] { mArtistAdapter, mAlbumAdapter, mSongAdapter, mPlaylistAdapter, mGenreAdapter }; + mLists = (ViewGroup)findViewById(R.id.lists); + TabWidget tabWidget = (TabWidget)findViewById(R.id.tab_widget); + tabWidget.setCurrentTab(0); + mTabWidget = tabWidget; + for (int i = 0, count = tabWidget.getTabCount(); i != count; ++i) { + View view = tabWidget.getChildTabViewAt(i); + view.setOnClickListener(this); + view.setTag(i); + } + getContentResolver().registerContentObserver(MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, true, mPlaylistObserver); - mCurrentAdapter = mAdapters[mTabHost.getCurrentTab()]; - - mTabHost.setOnTabChangedListener(this); + int currentTab = 0; if (state != null) { if (state.getBoolean("search_box_visible")) setSearchBoxVisible(true); - int currentTab = state.getInt("current_tab", -1); - if (currentTab != -1) - mTabHost.setCurrentTab(currentTab); - mTextFilter.setText(state.getString("filter")); + currentTab = state.getInt("current_tab", 0); } + setCurrentTab(currentTab); + + if (state != null) + mTextFilter.setText(state.getString("filter")); + // query adapters onMediaChange(); } @@ -193,7 +194,7 @@ public class LibraryActivity extends PlaybackActivity implements AdapterView.OnI protected void onSaveInstanceState(Bundle out) { out.putBoolean("search_box_visible", mSearchBoxVisible); - out.putInt("current_tab", mTabHost.getCurrentTab()); + out.putInt("current_tab", mCurrentTab); out.putString("filter", mTextFilter.getText().toString()); out.putSerializable("limiter_albums", mAlbumAdapter.getLimiter()); out.putSerializable("limiter_songs", mSongAdapter.getLimiter()); @@ -291,7 +292,7 @@ public class LibraryActivity extends PlaybackActivity implements AdapterView.OnI { int type = intent.getIntExtra("type", 1); long id = intent.getLongExtra("id", -1); - mTabHost.setCurrentTab(setLimiter(mAdapters[type - 1].getLimiter(id))); + setCurrentTab(setLimiter(mAdapters[type - 1].getLimiter(id))); } /** @@ -398,12 +399,6 @@ public class LibraryActivity extends PlaybackActivity implements AdapterView.OnI } } - public void onTabChanged(String tabId) - { - mCurrentAdapter = mAdapters[mTabHost.getCurrentTab()]; - updateLimiterViews(); - } - @Override public void onClick(View view) { @@ -415,31 +410,35 @@ public class LibraryActivity extends PlaybackActivity implements AdapterView.OnI } else if (view == mCover) { startActivity(new Intent(this, FullPlaybackActivity.class)); } else if (view.getTag() != null) { - // a limiter view was clicked - int i = (Integer)view.getTag(); - if (i == 1) { - // generate the artist limiter (we need to query the artist id) - MediaAdapter.Limiter limiter = mSongAdapter.getLimiter(); - assert(limiter.type == MediaUtils.TYPE_ALBUM); + if (view.getParent() instanceof TabWidget) { + // a tab was clicked + setCurrentTab(i); + } else { + // a limiter view was clicked + if (i == 1) { + // generate the artist limiter (we need to query the artist id) + MediaAdapter.Limiter limiter = mSongAdapter.getLimiter(); + assert(limiter.type == MediaUtils.TYPE_ALBUM); - ContentResolver resolver = getContentResolver(); - Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; - String[] projection = new String[] { MediaStore.Audio.Media.ARTIST_ID }; - Cursor cursor = resolver.query(uri, projection, limiter.selection, null, null); - if (cursor != null) { - if (cursor.moveToNext()) { - setLimiter(mArtistAdapter.getLimiter(cursor.getLong(0))); - updateLimiterViews(); + ContentResolver resolver = getContentResolver(); + Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; + String[] projection = new String[] { MediaStore.Audio.Media.ARTIST_ID }; + Cursor cursor = resolver.query(uri, projection, limiter.selection, null, null); + if (cursor != null) { + if (cursor.moveToNext()) { + setLimiter(mArtistAdapter.getLimiter(cursor.getLong(0))); + updateLimiterViews(); + cursor.close(); + return; + } cursor.close(); - return; } - cursor.close(); } - } - setLimiter(null); - updateLimiterViews(); + setLimiter(null); + updateLimiterViews(); + } } else { super.onClick(view); } @@ -806,4 +805,17 @@ public class LibraryActivity extends PlaybackActivity implements AdapterView.OnI mCover.setVisibility(cover == null ? View.GONE : View.VISIBLE); } } + + /** + * Switch to the tab at the given index. + */ + private void setCurrentTab(int i) + { + mCurrentAdapter = mAdapters[i]; + mTabWidget.setCurrentTab(i); + mLists.getChildAt(mCurrentTab).setVisibility(View.GONE); + mLists.getChildAt(i).setVisibility(View.VISIBLE); + mCurrentTab = i; + updateLimiterViews(); + } }