diff --git a/src/org/fox/ttrss/ApiRequest.java b/src/org/fox/ttrss/ApiRequest.java index 1611cbb9..57da7d49 100644 --- a/src/org/fox/ttrss/ApiRequest.java +++ b/src/org/fox/ttrss/ApiRequest.java @@ -47,7 +47,7 @@ public class ApiRequest extends AsyncTask, Integer, JsonE private boolean m_transportDebugging = false; protected int m_httpStatusCode = 0; protected int m_apiStatusCode = 0; - private Context m_context; + protected Context m_context; private SharedPreferences m_prefs; protected ApiError m_lastError; diff --git a/src/org/fox/ttrss/FeedCategoriesFragment.java b/src/org/fox/ttrss/FeedCategoriesFragment.java index 249d17da..409f6e13 100644 --- a/src/org/fox/ttrss/FeedCategoriesFragment.java +++ b/src/org/fox/ttrss/FeedCategoriesFragment.java @@ -35,7 +35,7 @@ public class FeedCategoriesFragment extends Fragment implements OnItemClickListe private SharedPreferences m_prefs; private FeedCategoryListAdapter m_adapter; private FeedCategoryList m_cats = new FeedCategoryList(); - private int m_selectedCatId; + private int m_selectedCatId = -100; private OnCatSelectedListener m_catSelectedListener; public interface OnCatSelectedListener { @@ -172,6 +172,15 @@ public class FeedCategoriesFragment extends Fragment implements OnItemClickListe m_cats.clear(); + int apiLevel = ((MainActivity)getActivity()).getApiLevel(); + + // virtual cats implemented in getCategories since api level 1 + if (apiLevel == 0) { + m_cats.add(new FeedCategory(-1, "Special", 0)); + m_cats.add(new FeedCategory(-2, "Labels", 0)); + m_cats.add(new FeedCategory(0, "Uncategorized", 0)); + } + for (FeedCategory c : cats) m_cats.add(c); diff --git a/src/org/fox/ttrss/FeedCategory.java b/src/org/fox/ttrss/FeedCategory.java index c911dc61..43d78869 100644 --- a/src/org/fox/ttrss/FeedCategory.java +++ b/src/org/fox/ttrss/FeedCategory.java @@ -12,6 +12,12 @@ public class FeedCategory implements Parcelable { readFromParcel(in); } + public FeedCategory(int id, String title, int unread) { + this.id = id; + this.title = title; + this.unread = unread; + } + @Override public int describeContents() { return 0; diff --git a/src/org/fox/ttrss/FeedsFragment.java b/src/org/fox/ttrss/FeedsFragment.java index 15d5305c..4fb7c404 100644 --- a/src/org/fox/ttrss/FeedsFragment.java +++ b/src/org/fox/ttrss/FeedsFragment.java @@ -160,14 +160,14 @@ public class FeedsFragment extends Fragment implements OnItemClickListener, OnSh @SuppressWarnings({ "unchecked", "serial" }) public void refresh(boolean background) { - FeedsRequest req = new FeedsRequest(getActivity().getApplicationContext()); + FeedCategory cat = ((MainActivity)getActivity()).getActiveCategory(); + + final int catId = (cat != null) ? cat.id : -4; final String sessionId = ((MainActivity)getActivity()).getSessionId(); final boolean unreadOnly = ((MainActivity)getActivity()).getUnreadOnly(); - - FeedCategory cat = ((MainActivity)getActivity()).getActiveCategory(); - - final int catId = (cat != null) ? cat.id : -4; + + FeedsRequest req = new FeedsRequest(getActivity().getApplicationContext(), catId); if (sessionId != null) { @@ -257,9 +257,11 @@ public class FeedsFragment extends Fragment implements OnItemClickListener, OnSh } private class FeedsRequest extends ApiRequest { + private int m_catId; - public FeedsRequest(Context context) { + public FeedsRequest(Context context, int catId) { super(context); + m_catId = catId; } protected void onPostExecute(JsonElement result) { @@ -274,7 +276,7 @@ public class FeedsFragment extends Fragment implements OnItemClickListener, OnSh m_feeds.clear(); for (Feed f : feeds) - if (f.id > -10) // skip labels for now + if (f.id > -10 || m_catId != -4) // skip labels for flat feedlist for now m_feeds.add(f); sortFeeds(); diff --git a/src/org/fox/ttrss/MainActivity.java b/src/org/fox/ttrss/MainActivity.java index 78afd450..f989791e 100644 --- a/src/org/fox/ttrss/MainActivity.java +++ b/src/org/fox/ttrss/MainActivity.java @@ -46,6 +46,7 @@ public class MainActivity extends FragmentActivity implements FeedsFragment.OnFe private boolean m_canLoadMore = true; private boolean m_compatMode = false; private boolean m_enableCats = false; + private int m_apiLevel = 0; public void updateHeadlines() { HeadlinesFragment frag = (HeadlinesFragment)getSupportFragmentManager().findFragmentById(R.id.headlines_fragment); @@ -54,6 +55,10 @@ public class MainActivity extends FragmentActivity implements FeedsFragment.OnFe } } + public int getApiLevel() { + return m_apiLevel; + } + @SuppressWarnings({ "unchecked", "serial" }) public void saveArticleUnread(final Article article) { ApiRequest req = new ApiRequest(getApplicationContext()); @@ -203,6 +208,7 @@ public class MainActivity extends FragmentActivity implements FeedsFragment.OnFe m_unreadArticlesOnly = savedInstanceState.getBoolean("unreadArticlesOnly"); m_canLoadMore = savedInstanceState.getBoolean("canLoadMore"); m_activeCategory = savedInstanceState.getParcelable("activeCategory"); + m_apiLevel = savedInstanceState.getInt("apiLevel"); } m_enableCats = m_prefs.getBoolean("enable_cats", false); @@ -302,6 +308,7 @@ public class MainActivity extends FragmentActivity implements FeedsFragment.OnFe out.putBoolean("unreadArticlesOnly", m_unreadArticlesOnly); out.putBoolean("canLoadMore", m_canLoadMore); out.putParcelable("activeCategory", m_activeCategory); + out.putInt("apiLevel", m_apiLevel); } @Override @@ -428,7 +435,10 @@ public class MainActivity extends FragmentActivity implements FeedsFragment.OnFe startActivityForResult(intent, 0); return true; case R.id.update_feeds: - refreshFeeds(); + if (!m_enableCats || m_activeCategory != null ) + refreshFeeds(); + else + refreshCategories(); return true; case R.id.logout: logout(); @@ -644,19 +654,42 @@ public class MainActivity extends FragmentActivity implements FeedsFragment.OnFe Log.d(TAG, "Authenticated!"); + ApiRequest req = new ApiRequest(m_context) { + protected void onPostExecute(JsonElement result) { + if (result != null) { + m_apiLevel = result.getAsJsonObject().get("level").getAsInt(); + } else { + m_apiLevel = 0; + } + + Log.d(TAG, "Received API level: " + m_apiLevel); + + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + + if (m_enableCats) { + FeedCategoriesFragment frag = new FeedCategoriesFragment(); + ft.replace(R.id.cats_fragment, frag); + } else { + FeedsFragment frag = new FeedsFragment(); + ft.replace(R.id.feeds_fragment, frag); + } + + ft.commit(); + + } + }; + + HashMap map = new HashMap() { + { + put("sid", m_sessionId); + put("op", "getApiLevel"); + } + }; + + req.execute(map); + setLoadingStatus(R.string.loading_message, true); - FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); - - if (m_enableCats) { - FeedCategoriesFragment frag = new FeedCategoriesFragment(); - ft.replace(R.id.cats_fragment, frag); - } else { - FeedsFragment frag = new FeedsFragment(); - ft.replace(R.id.feeds_fragment, frag); - } - - ft.commit(); loginSuccess(); return;