summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--res/layout/main.xml8
-rw-r--r--src/de/danoeh/antennapod/activity/MainActivity.java131
2 files changed, 98 insertions, 41 deletions
diff --git a/res/layout/main.xml b/res/layout/main.xml
index 41b37eac6..2917db164 100644
--- a/res/layout/main.xml
+++ b/res/layout/main.xml
@@ -4,12 +4,6 @@
android:layout_width="match_parent"
android:layout_height="match_parent" >
- <com.viewpagerindicator.TabPageIndicator
- android:id="@+id/tabs"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentTop="true" />
-
<FrameLayout
android:id="@+id/playerFragment"
android:layout_width="match_parent"
@@ -21,7 +15,7 @@
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_above="@id/playerFragment"
- android:layout_below="@id/tabs" >
+ android:layout_alignParentTop="true" >
</android.support.v4.view.ViewPager>
</RelativeLayout> \ No newline at end of file
diff --git a/src/de/danoeh/antennapod/activity/MainActivity.java b/src/de/danoeh/antennapod/activity/MainActivity.java
index 0ec66ff35..2bca3ac6b 100644
--- a/src/de/danoeh/antennapod/activity/MainActivity.java
+++ b/src/de/danoeh/antennapod/activity/MainActivity.java
@@ -1,15 +1,23 @@
package de.danoeh.antennapod.activity;
+import java.util.ArrayList;
+
import android.content.Context;
import android.content.Intent;
+import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.util.Log;
+import android.view.View;
+import com.actionbarsherlock.app.ActionBar;
+import com.actionbarsherlock.app.ActionBar.Tab;
+import com.actionbarsherlock.app.ActionBar.TabListener;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
@@ -39,8 +47,7 @@ public class MainActivity extends SherlockFragmentActivity {
private FeedManager manager;
private ViewPager viewpager;
- private MainPagerAdapter pagerAdapter;
- private TabPageIndicator tabs;
+ private TabsAdapter pagerAdapter;
private ExternalPlayerFragment externalPlayerFragment;
private static boolean appLaunched = false;
@@ -53,13 +60,21 @@ public class MainActivity extends SherlockFragmentActivity {
manager = FeedManager.getInstance();
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.main);
- pagerAdapter = new MainPagerAdapter(getSupportFragmentManager(), this);
+
+ getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
viewpager = (ViewPager) findViewById(R.id.viewpager);
- tabs = (TabPageIndicator) findViewById(R.id.tabs);
+ pagerAdapter = new TabsAdapter(this, viewpager);
viewpager.setAdapter(pagerAdapter);
- tabs.setViewPager(viewpager);
+
+ Tab feedsTab = getSupportActionBar().newTab();
+ feedsTab.setText(R.string.podcasts_label);
+ Tab episodesTab = getSupportActionBar().newTab();
+ episodesTab.setText(R.string.episodes_label);
+
+ pagerAdapter.addTab(feedsTab, FeedlistFragment.class, null);
+ pagerAdapter.addTab(episodesTab, EpisodesFragment.class, null);
FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction();
@@ -72,10 +87,21 @@ public class MainActivity extends SherlockFragmentActivity {
&& getIntent().getAction().equals(Intent.ACTION_MAIN)) {
appLaunched = true;
if (manager.getUnreadItemsSize(true) > 0) {
- viewpager.setCurrentItem(MainPagerAdapter.POS_EPISODES);
-
+ // select 'episodes' tab
+ getSupportActionBar().setSelectedNavigationItem(1);
}
}
+ if (savedInstanceState != null) {
+ getSupportActionBar().setSelectedNavigationItem(
+ savedInstanceState.getInt("tab", 0));
+ }
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putInt("tab", getSupportActionBar()
+ .getSelectedNavigationIndex());
}
@Override
@@ -166,48 +192,85 @@ public class MainActivity extends SherlockFragmentActivity {
return true;
}
- public static class MainPagerAdapter extends FragmentStatePagerAdapter {
- private static final int NUM_ITEMS = 2;
+ public static class TabsAdapter extends FragmentPagerAdapter implements
+ ActionBar.TabListener, ViewPager.OnPageChangeListener {
+ private final Context mContext;
+ private final ActionBar mActionBar;
+ private final ViewPager mViewPager;
+ private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();
+
+ static final class TabInfo {
+ private final Class<?> clss;
+ private final Bundle args;
+
+ TabInfo(Class<?> _class, Bundle _args) {
+ clss = _class;
+ args = _args;
+ }
+ }
- public static final int POS_FEEDLIST = 0;
- public static final int POS_EPISODES = 1;
+ public TabsAdapter(MainActivity activity, ViewPager pager) {
+ super(activity.getSupportFragmentManager());
+ mContext = activity;
+ mActionBar = activity.getSupportActionBar();
+ mViewPager = pager;
+ mViewPager.setAdapter(this);
+ mViewPager.setOnPageChangeListener(this);
+ }
- private Context context;
+ public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args) {
+ TabInfo info = new TabInfo(clss, args);
+ tab.setTag(info);
+ tab.setTabListener(this);
+ mTabs.add(info);
+ mActionBar.addTab(tab);
+ notifyDataSetChanged();
+ }
- public MainPagerAdapter(FragmentManager fm, Context context) {
- super(fm);
- this.context = context;
+ @Override
+ public int getCount() {
+ return mTabs.size();
}
@Override
public Fragment getItem(int position) {
- switch (position) {
- case POS_FEEDLIST:
- return new FeedlistFragment();
- case POS_EPISODES:
- return new EpisodesFragment();
-
- default:
- return null;
- }
+ TabInfo info = mTabs.get(position);
+ return Fragment.instantiate(mContext, info.clss.getName(),
+ info.args);
}
@Override
- public int getCount() {
- return NUM_ITEMS;
+ public void onPageScrolled(int position, float positionOffset,
+ int positionOffsetPixels) {
+ }
+
+ @Override
+ public void onPageSelected(int position) {
+ mActionBar.setSelectedNavigationItem(position);
+ }
+
+ @Override
+ public void onPageScrollStateChanged(int state) {
}
@Override
- public CharSequence getPageTitle(int position) {
- switch (position) {
- case POS_FEEDLIST:
- return context.getString(R.string.podcasts_label);
- case POS_EPISODES:
- return context.getString(R.string.episodes_label);
- default:
- return null;
+ public void onTabSelected(Tab tab, FragmentTransaction ft) {
+ Object tag = tab.getTag();
+ for (int i = 0; i < mTabs.size(); i++) {
+ if (mTabs.get(i) == tag) {
+ mViewPager.setCurrentItem(i);
+ }
}
}
+ @Override
+ public void onTabUnselected(Tab tab, FragmentTransaction ft) {
+
+ }
+
+ @Override
+ public void onTabReselected(Tab tab, FragmentTransaction ft) {
+ }
}
+
}