diff options
author | Andrew Dolgov <[email protected]> | 2011-12-07 00:17:20 +0300 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2011-12-07 00:17:20 +0300 |
commit | 8fa8debdcabe41083662de03fa9e0cd706f0975f (patch) | |
tree | e7936a1fe0688636243345e4ed5d189d35f4a249 | |
parent | c6cec83803313d153ab35280afceea47b9963be8 (diff) |
implement actionbar tabs when categories are enabled
-rw-r--r-- | res/menu/main_menu.xml | 2 | ||||
-rw-r--r-- | src/org/fox/ttrss/MainActivity.java | 148 |
2 files changed, 124 insertions, 26 deletions
diff --git a/res/menu/main_menu.xml b/res/menu/main_menu.xml index 72f05555..e20a2912 100644 --- a/res/menu/main_menu.xml +++ b/res/menu/main_menu.xml @@ -7,7 +7,7 @@ <item android:id="@+id/back_to_categories" android:icon="@android:drawable/ic_menu_close_clear_cancel" - android:showAsAction="ifRoom|withText" + android:showAsAction="" android:title="@string/back_to_categories"/> <item diff --git a/src/org/fox/ttrss/MainActivity.java b/src/org/fox/ttrss/MainActivity.java index 5fef0277..49674528 100644 --- a/src/org/fox/ttrss/MainActivity.java +++ b/src/org/fox/ttrss/MainActivity.java @@ -1,11 +1,13 @@ package org.fox.ttrss; import java.lang.reflect.Type; +import android.app.ActionBar; import java.util.HashMap; import java.util.List; import java.util.Timer; import java.util.TimerTask; +import android.app.ActionBar.Tab; import android.app.AlertDialog; import android.app.Dialog; import android.content.BroadcastReceiver; @@ -47,7 +49,6 @@ import com.google.gson.reflect.TypeToken; public class MainActivity extends FragmentActivity implements OnlineServices { private final String TAG = this.getClass().getSimpleName(); - private SharedPreferences m_prefs; private String m_themeName = ""; @@ -67,10 +68,13 @@ public class MainActivity extends FragmentActivity implements OnlineServices { private int m_apiLevel = 0; private boolean m_isOffline = false; + private ActionBar m_bar = null; + private Tab m_feedTab; + private Tab m_rootTab; + private SQLiteDatabase m_readableDb; private SQLiteDatabase m_writableDb; - private BroadcastReceiver m_broadcastReceiver = new BroadcastReceiver() { @Override @@ -416,6 +420,13 @@ public class MainActivity extends FragmentActivity implements OnlineServices { Log.d(TAG, "m_smallScreenMode=" + m_smallScreenMode); Log.d(TAG, "m_compatMode=" + m_compatMode); + + m_bar = getActionBar(); + + m_bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); + m_bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE); + //m_bar.setDisplayHomeAsUpEnabled(true); TODO + if (!m_compatMode) { new TransitionHelper((LinearLayout)findViewById(R.id.main)); } @@ -435,6 +446,13 @@ public class MainActivity extends FragmentActivity implements OnlineServices { } } + if (!m_compatMode && !m_smallScreenMode) { + if (m_enableCats && !m_prefs.getBoolean("browse_cats_like_feeds", false)) { + m_rootTab = m_bar.newTab().setText("Categories").setTabListener(new RootTabListener()); + m_bar.addTab(m_rootTab); + } + } + if (m_smallScreenMode) { if (m_selectedArticle != null) { findViewById(R.id.feeds_fragment).setVisibility(View.GONE); @@ -660,6 +678,8 @@ public class MainActivity extends FragmentActivity implements OnlineServices { refreshFeeds(); } m_activeFeed = null; + + initMainMenu(); } else if (m_activeCategory != null) { @@ -676,13 +696,7 @@ public class MainActivity extends FragmentActivity implements OnlineServices { if (m_selectedArticle != null) { closeArticle(); } else if (m_activeCategory != null) { - findViewById(R.id.feeds_fragment).setVisibility(View.GONE); - findViewById(R.id.cats_fragment).setVisibility(View.VISIBLE); - - m_activeCategory = null; - - initMainMenu(); - refreshCategories(); + closeCategory(); } else { finish(); } @@ -694,14 +708,18 @@ public class MainActivity extends FragmentActivity implements OnlineServices { } private void closeCategory() { - - findViewById(R.id.feeds_fragment).setVisibility(View.GONE); - findViewById(R.id.cats_fragment).setVisibility(View.VISIBLE); - m_activeCategory = null; - - initMainMenu(); - refreshCategories(); + if (m_bar != null) { + m_bar.selectTab(m_rootTab); + } else { + findViewById(R.id.feeds_fragment).setVisibility(View.GONE); + findViewById(R.id.cats_fragment).setVisibility(View.VISIBLE); + + m_activeCategory = null; + + initMainMenu(); + refreshCategories(); + } } @SuppressWarnings("unchecked") @@ -1367,17 +1385,27 @@ public class MainActivity extends FragmentActivity implements OnlineServices { public void viewCategory(FeedCategory cat, boolean openAsFeed) { + Log.d(TAG, "viewCategory"); + if (!openAsFeed) { - findViewById(R.id.cats_fragment).setVisibility(View.GONE); - findViewById(R.id.feeds_fragment).setVisibility(View.VISIBLE); - - m_activeCategory = cat; + if (m_bar != null) { + if (m_feedTab != null) m_bar.removeTab(m_feedTab); + + m_feedTab = m_bar.newTab().setText(cat.title).setTabListener(new CategoryTabListener(cat)); + m_bar.addTab(m_feedTab); + m_bar.selectTab(m_feedTab); + } else { + findViewById(R.id.cats_fragment).setVisibility(View.GONE); + findViewById(R.id.feeds_fragment).setVisibility(View.VISIBLE); - FeedsFragment frag = new FeedsFragment(); - - FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); - ft.replace(R.id.feeds_fragment, frag); - ft.commit(); + m_activeCategory = cat; + + FeedsFragment frag = new FeedsFragment(); + + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + ft.replace(R.id.feeds_fragment, frag); + ft.commit(); + } } else { if (m_smallScreenMode) findViewById(R.id.cats_fragment).setVisibility(View.GONE); findViewById(R.id.headlines_fragment).setVisibility(View.VISIBLE); @@ -1740,6 +1768,76 @@ public class MainActivity extends FragmentActivity implements OnlineServices { viewCategory(cat, browse && cat.id >= 0); } + private class RootTabListener implements ActionBar.TabListener { + + @Override + public void onTabReselected(Tab arg0, + android.app.FragmentTransaction arg1) { + // TODO Auto-generated method stub + + } + + @Override + public void onTabSelected(Tab arg0, android.app.FragmentTransaction arg1) { + // TODO Auto-generated method stub + + } + + @Override + public void onTabUnselected(Tab arg0, + android.app.FragmentTransaction arg1) { + // TODO Auto-generated method stub + + } + + } + + + private class CategoryTabListener implements ActionBar.TabListener { + + private FeedCategory m_cat = null; + + public CategoryTabListener(FeedCategory cat) { + m_cat = cat; + } + + @Override + public void onTabReselected(Tab tab, + android.app.FragmentTransaction _ft) { + // TODO Auto-generated method stub + + } + + @Override + public void onTabSelected(Tab tab, android.app.FragmentTransaction _ft) { + if (m_cat != null) { + m_activeCategory = m_cat; + + initMainMenu(); + + findViewById(R.id.cats_fragment).setVisibility(View.GONE); + findViewById(R.id.feeds_fragment).setVisibility(View.VISIBLE); + + FeedsFragment frag = new FeedsFragment(); + + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + ft.replace(R.id.feeds_fragment, frag); + ft.commit(); + } + } + + @Override + public void onTabUnselected(Tab tab, + android.app.FragmentTransaction _ft) { + + findViewById(R.id.feeds_fragment).setVisibility(View.GONE); + findViewById(R.id.cats_fragment).setVisibility(View.VISIBLE); + m_activeCategory = null; + + initMainMenu(); + refreshCategories(); + } + } }
\ No newline at end of file |