From 1a5017b43294c7d8d05621c84da1316e64ae2a12 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Mon, 17 Sep 2012 23:20:59 +0400 Subject: various tablet-related improvements --- src/org/fox/ttrss/ArticlePager.java | 14 ++++- src/org/fox/ttrss/FeedsActivity.java | 8 ++- src/org/fox/ttrss/GlobalState.java | 27 ++++++++ src/org/fox/ttrss/HeadlinesActivity.java | 12 ++-- src/org/fox/ttrss/HeadlinesFragment.java | 21 +++---- src/org/fox/ttrss/TinyApplication.java | 24 -------- src/org/fox/ttrss/offline/OfflineArticlePager.java | 21 +++++++ .../fox/ttrss/offline/OfflineFeedsActivity.java | 5 +- .../ttrss/offline/OfflineHeadlinesActivity.java | 71 +++++++++++++++++++++- .../ttrss/offline/OfflineHeadlinesFragment.java | 19 +++++- src/org/fox/ttrss/util/HeadlinesRequest.java | 4 +- 11 files changed, 177 insertions(+), 49 deletions(-) create mode 100644 src/org/fox/ttrss/GlobalState.java delete mode 100644 src/org/fox/ttrss/TinyApplication.java (limited to 'src') diff --git a/src/org/fox/ttrss/ArticlePager.java b/src/org/fox/ttrss/ArticlePager.java index a0085989..914003be 100644 --- a/src/org/fox/ttrss/ArticlePager.java +++ b/src/org/fox/ttrss/ArticlePager.java @@ -132,7 +132,7 @@ public class ArticlePager extends Fragment { } }; - final Feed feed = TinyApplication.getInstance().m_activeFeed; + final Feed feed = GlobalState.getInstance().m_activeFeed; final String sessionId = m_activity.getSessionId(); final boolean showUnread = m_activity.getUnreadArticlesOnly(); @@ -188,7 +188,7 @@ public class ArticlePager extends Fragment { m_onlineServices = (HeadlinesEventListener)activity; m_activity = (OnlineActivity)activity; - m_articles = TinyApplication.getInstance().m_loadedArticles; + m_articles = GlobalState.getInstance().m_loadedArticles; } @Override @@ -202,4 +202,14 @@ public class ArticlePager extends Fragment { return m_article; } + public void setActiveArticle(Article article) { + m_article = article; + + int position = m_articles.indexOf(m_article); + + ViewPager pager = (ViewPager) getView().findViewById(R.id.article_pager); + + pager.setCurrentItem(position); + } + } diff --git a/src/org/fox/ttrss/FeedsActivity.java b/src/org/fox/ttrss/FeedsActivity.java index 713e53eb..302ce7a9 100644 --- a/src/org/fox/ttrss/FeedsActivity.java +++ b/src/org/fox/ttrss/FeedsActivity.java @@ -50,6 +50,10 @@ public class FeedsActivity extends OnlineActivity implements HeadlinesEventListe if (intent.getParcelableExtra("feed") != null || intent.getParcelableExtra("category") != null || intent.getParcelableExtra("article") != null) { + if (!isCompatMode()) { + getActionBar().setDisplayHomeAsUpEnabled(true); + } + Feed feed = (Feed) intent.getParcelableExtra("feed"); FeedCategory cat = (FeedCategory) intent.getParcelableExtra("category"); Article article = (Article) intent.getParcelableExtra("article"); @@ -71,7 +75,7 @@ public class FeedsActivity extends OnlineActivity implements HeadlinesEventListe } if (article != null) { - Article original = TinyApplication.getInstance().m_loadedArticles.findById(article.id); + Article original = GlobalState.getInstance().m_loadedArticles.findById(article.id); ArticlePager ap = new ArticlePager(original != null ? original : article); ft.replace(R.id.feeds_fragment, ap, FRAG_ARTICLE); @@ -126,7 +130,7 @@ public class FeedsActivity extends OnlineActivity implements HeadlinesEventListe public void onFeedSelected(Feed feed) { - TinyApplication.getInstance().m_loadedArticles.clear(); + GlobalState.getInstance().m_loadedArticles.clear(); if (isSmallScreen()) { diff --git a/src/org/fox/ttrss/GlobalState.java b/src/org/fox/ttrss/GlobalState.java new file mode 100644 index 00000000..3df8ae34 --- /dev/null +++ b/src/org/fox/ttrss/GlobalState.java @@ -0,0 +1,27 @@ +package org.fox.ttrss; + +import org.fox.ttrss.types.Article; +import org.fox.ttrss.types.ArticleList; +import org.fox.ttrss.types.Feed; + +import android.app.Application; + +public class GlobalState extends Application { + private static GlobalState m_singleton; + + public Article m_activeArticle; + public ArticleList m_loadedArticles = new ArticleList(); + public Feed m_activeFeed; + public Article m_selectedArticle; + public int m_selectedArticleId; + + public static GlobalState getInstance(){ + return m_singleton; + } + + @Override + public final void onCreate() { + super.onCreate(); + m_singleton = this; + } +} diff --git a/src/org/fox/ttrss/HeadlinesActivity.java b/src/org/fox/ttrss/HeadlinesActivity.java index b4672f6a..ef642e88 100644 --- a/src/org/fox/ttrss/HeadlinesActivity.java +++ b/src/org/fox/ttrss/HeadlinesActivity.java @@ -144,9 +144,11 @@ public class HeadlinesActivity extends OnlineActivity implements HeadlinesEventL HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); - Fragment frag = new ArticlePager(article); + ArticlePager af = (ArticlePager) getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE); + + af.setActiveArticle(article); - ft.replace(R.id.article_fragment, frag, FRAG_ARTICLE); +// ft.replace(R.id.article_fragment, frag, FRAG_ARTICLE); // ft.addToBackStack(null); hf.notifyUpdated(); @@ -155,9 +157,11 @@ public class HeadlinesActivity extends OnlineActivity implements HeadlinesEventL } else { HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); hf.setActiveArticle(article); - - initMenu(); } + + GlobalState.getInstance().m_activeArticle = article; + + initMenu(); } } diff --git a/src/org/fox/ttrss/HeadlinesFragment.java b/src/org/fox/ttrss/HeadlinesFragment.java index fae19703..00a7160c 100644 --- a/src/org/fox/ttrss/HeadlinesFragment.java +++ b/src/org/fox/ttrss/HeadlinesFragment.java @@ -75,7 +75,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, private SharedPreferences m_prefs; private ArticleListAdapter m_adapter; - private ArticleList m_articles = TinyApplication.getInstance().m_loadedArticles; + private ArticleList m_articles = GlobalState.getInstance().m_loadedArticles; private ArticleList m_selectedArticles = new ArticleList(); private HeadlinesEventListener m_listener; private OnlineActivity m_activity; @@ -293,19 +293,18 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, public void onResume() { super.onResume(); + if (GlobalState.getInstance().m_activeArticle != null) { + m_activeArticle = GlobalState.getInstance().m_activeArticle; + GlobalState.getInstance().m_activeArticle = null; + } + if (m_activeArticle != null) { setActiveArticle(m_activeArticle); } - /* if (TinyApplication.getInstance().m_activeArticle != null) { - m_activeArticle = TinyApplication.getInstance().m_activeArticle; - notifyUpdated(); - TinyApplication.getInstance().m_activeArticle = null; - } */ - - if (m_articles.size() == 0 || !m_feed.equals(TinyApplication.getInstance().m_activeFeed)) { + if (m_articles.size() == 0 || !m_feed.equals(GlobalState.getInstance().m_activeFeed)) { refresh(false); - TinyApplication.getInstance().m_activeFeed = m_feed; + GlobalState.getInstance().m_activeFeed = m_feed; } else { notifyUpdated(); } @@ -366,7 +365,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, final boolean isCat = m_feed.is_cat; int skip = 0; - if (!m_feed.equals(TinyApplication.getInstance().m_activeFeed)) { + if (!m_feed.equals(GlobalState.getInstance().m_activeFeed)) { append = false; } @@ -577,7 +576,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, if (ft != null) { if (article.feed_title != null && (m_feed.is_cat || m_feed.id < 0)) { - ft.setText(article.feed_title); + ft.setText(article.feed_title.substring(0, 30)); } else { ft.setVisibility(View.GONE); } diff --git a/src/org/fox/ttrss/TinyApplication.java b/src/org/fox/ttrss/TinyApplication.java deleted file mode 100644 index 18c2fbc6..00000000 --- a/src/org/fox/ttrss/TinyApplication.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.fox.ttrss; - -import org.fox.ttrss.types.Article; -import org.fox.ttrss.types.ArticleList; -import org.fox.ttrss.types.Feed; - -import android.app.Application; - -public class TinyApplication extends Application { - private static TinyApplication m_singleton; - - public ArticleList m_loadedArticles = new ArticleList(); - public Feed m_activeFeed; - - public static TinyApplication getInstance(){ - return m_singleton; - } - - @Override - public final void onCreate() { - super.onCreate(); - m_singleton = this; - } -} diff --git a/src/org/fox/ttrss/offline/OfflineArticlePager.java b/src/org/fox/ttrss/offline/OfflineArticlePager.java index 0209cbfb..618e77db 100644 --- a/src/org/fox/ttrss/offline/OfflineArticlePager.java +++ b/src/org/fox/ttrss/offline/OfflineArticlePager.java @@ -190,4 +190,25 @@ public class OfflineArticlePager extends Fragment { public void setSearchQuery(String searchQuery) { m_searchQuery = searchQuery; } + + public void setArticleId(int articleId) { + m_articleId = articleId; + + m_cursor.moveToFirst(); + + int position = 0; + + while (!m_cursor.isLast()) { + if (m_cursor.getInt(m_cursor.getColumnIndex(BaseColumns._ID)) == m_articleId) { + position = m_cursor.getPosition(); + break; + } + m_cursor.moveToNext(); + } + + ViewPager pager = (ViewPager) getView().findViewById(R.id.article_pager); + + pager.setCurrentItem(position); + + } } diff --git a/src/org/fox/ttrss/offline/OfflineFeedsActivity.java b/src/org/fox/ttrss/offline/OfflineFeedsActivity.java index 7af62970..e4207a4f 100644 --- a/src/org/fox/ttrss/offline/OfflineFeedsActivity.java +++ b/src/org/fox/ttrss/offline/OfflineFeedsActivity.java @@ -42,6 +42,10 @@ public class OfflineFeedsActivity extends OfflineActivity implements OfflineHead if (intent.getIntExtra("feed", -10000) != -10000 || intent.getIntExtra("category", -10000) != -10000 || intent.getIntExtra("article", -10000) != -10000) { + if (!isCompatMode()) { + getActionBar().setDisplayHomeAsUpEnabled(true); + } + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); int feedId = intent.getIntExtra("feed", -10000); @@ -230,7 +234,6 @@ public class OfflineFeedsActivity extends OfflineActivity implements OfflineHead intent.putExtra("feed", hf.getFeedId()); intent.putExtra("isCat", hf.getFeedIsCat()); intent.putExtra("article", articleId); - intent.putExtra("title", "FIXME-TITLE"); startActivityForResult(intent, 0); } diff --git a/src/org/fox/ttrss/offline/OfflineHeadlinesActivity.java b/src/org/fox/ttrss/offline/OfflineHeadlinesActivity.java index 49ac2b59..c086eafb 100644 --- a/src/org/fox/ttrss/offline/OfflineHeadlinesActivity.java +++ b/src/org/fox/ttrss/offline/OfflineHeadlinesActivity.java @@ -1,11 +1,17 @@ package org.fox.ttrss.offline; +import org.fox.ttrss.GlobalState; +import org.fox.ttrss.HeadlinesFragment; import org.fox.ttrss.R; import android.content.Intent; import android.content.SharedPreferences; +import android.database.Cursor; +import android.database.sqlite.SQLiteStatement; import android.os.Bundle; import android.preference.PreferenceManager; +import android.provider.BaseColumns; +import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.view.View; @@ -43,7 +49,6 @@ public class OfflineHeadlinesActivity extends OfflineActivity implements Offline boolean isCat = i.getBooleanExtra("isCat", false); int articleId = i.getIntExtra("article", 0); String searchQuery = i.getStringExtra("searchQuery"); - String title = i.getStringExtra("title"); OfflineHeadlinesFragment hf = new OfflineHeadlinesFragment(feedId, isCat); OfflineArticlePager af = new OfflineArticlePager(articleId, feedId, isCat); @@ -59,8 +64,20 @@ public class OfflineHeadlinesActivity extends OfflineActivity implements Offline ft.replace(R.id.article_fragment, af, FRAG_ARTICLE); ft.commit(); + + Cursor c; + + if (isCat) { + c = getCatById(feedId); + } else { + c = getFeedById(feedId); + } - setTitle(title); + if (c != null) { + setTitle(c.getString(c.getColumnIndex("title"))); + c.close(); + } + } } @@ -72,8 +89,58 @@ public class OfflineHeadlinesActivity extends OfflineActivity implements Offline @Override public void onArticleSelected(int articleId, boolean open) { + SQLiteStatement stmt = getWritableDb().compileStatement( + "UPDATE articles SET unread = 0 " + "WHERE " + BaseColumns._ID + + " = ?"); + + stmt.bindLong(1, articleId); + stmt.execute(); + stmt.close(); + + if (open) { + OfflineHeadlinesFragment hf = (OfflineHeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); + + /* OfflineArticlePager af = new OfflineArticlePager(articleId, hf.getFeedId(), hf.getFeedIsCat()); + af.setSearchQuery(hf.getSearchQuery()); + + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + + ft.replace(R.id.article_fragment, af, FRAG_ARTICLE); + ft.commit(); */ + + OfflineArticlePager af = (OfflineArticlePager) getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE); + + af.setArticleId(articleId); + + } else { + OfflineHeadlinesFragment hf = (OfflineHeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); + + hf.setActiveArticleId(articleId); + } + + GlobalState.getInstance().m_selectedArticleId = articleId; + initMenu(); + refresh(); + } + + @Override + protected void initMenu() { + super.initMenu(); + + if (m_menu != null) { + m_menu.setGroupVisible(R.id.menu_group_feeds, false); + + OfflineHeadlinesFragment hf = (OfflineHeadlinesFragment)getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); + + m_menu.setGroupVisible(R.id.menu_group_headlines, hf != null && hf.getSelectedArticleCount() == 0); + m_menu.setGroupVisible(R.id.menu_group_headlines_selection, hf != null && hf.getSelectedArticleCount() != 0); + + Fragment af = getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE); + + m_menu.setGroupVisible(R.id.menu_group_article, af != null); + } } @Override diff --git a/src/org/fox/ttrss/offline/OfflineHeadlinesFragment.java b/src/org/fox/ttrss/offline/OfflineHeadlinesFragment.java index a7902be8..36acbe11 100644 --- a/src/org/fox/ttrss/offline/OfflineHeadlinesFragment.java +++ b/src/org/fox/ttrss/offline/OfflineHeadlinesFragment.java @@ -5,6 +5,7 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone; +import org.fox.ttrss.GlobalState; import org.fox.ttrss.R; import org.fox.ttrss.types.Article; import org.fox.ttrss.types.ArticleList; @@ -235,6 +236,16 @@ public class OfflineHeadlinesFragment extends Fragment implements OnItemClickLis @Override public void onResume() { super.onResume(); + + if (GlobalState.getInstance().m_selectedArticleId != 0) { + m_activeArticleId = GlobalState.getInstance().m_selectedArticleId; + GlobalState.getInstance().m_selectedArticleId = 0; + } + + if (m_activeArticleId != 0) { + setActiveArticleId(m_activeArticleId); + } + refresh(); } @@ -451,7 +462,7 @@ public class OfflineHeadlinesFragment extends Fragment implements OnItemClickLis int feedTitleIndex = article.getColumnIndex("feed_title"); if (ft != null && feedTitleIndex != -1 && m_feedIsCat) { - String feedTitle = article.getString(feedTitleIndex); + String feedTitle = article.getString(feedTitleIndex).substring(0, 30); if (feedTitle != null) { ft.setText(feedTitle); @@ -613,6 +624,8 @@ public class OfflineHeadlinesFragment extends Fragment implements OnItemClickLis ListView list = (ListView)getView().findViewById(R.id.headlines); + Log.d(TAG, articleId + " position " + getArticleIdPosition(articleId)); + if (list != null) { list.setSelection(getArticleIdPosition(articleId)); } @@ -666,5 +679,9 @@ public class OfflineHeadlinesFragment extends Fragment implements OnItemClickLis public boolean getFeedIsCat() { return m_feedIsCat; } + + public String getSearchQuery() { + return m_searchQuery; + } } diff --git a/src/org/fox/ttrss/util/HeadlinesRequest.java b/src/org/fox/ttrss/util/HeadlinesRequest.java index 49b8ec7c..5615ffdf 100644 --- a/src/org/fox/ttrss/util/HeadlinesRequest.java +++ b/src/org/fox/ttrss/util/HeadlinesRequest.java @@ -6,7 +6,7 @@ import java.util.List; import org.fox.ttrss.ApiRequest; import org.fox.ttrss.OnlineActivity; import org.fox.ttrss.R; -import org.fox.ttrss.TinyApplication; +import org.fox.ttrss.GlobalState; import org.fox.ttrss.ApiRequest.ApiError; import org.fox.ttrss.types.Article; import org.fox.ttrss.types.ArticleList; @@ -26,7 +26,7 @@ public class HeadlinesRequest extends ApiRequest { private int m_offset = 0; private OnlineActivity m_activity; - private ArticleList m_articles = TinyApplication.getInstance().m_loadedArticles; + private ArticleList m_articles = GlobalState.getInstance().m_loadedArticles; public HeadlinesRequest(Context context, OnlineActivity activity) { super(context); -- cgit v1.2.3-54-g00ecf