diff options
| author | Andrew Dolgov <fox@fakecake.org> | 2025-05-11 15:27:05 +0300 |
|---|---|---|
| committer | Andrew Dolgov <fox@fakecake.org> | 2025-05-11 15:27:05 +0300 |
| commit | aef1065ca26ff4806561b9b68c9d55d8f3d63677 (patch) | |
| tree | 4ad5ec8e0a40c03987c1b756ede3a9b6ecf6855a | |
| parent | aec7443a54a8292a62055fd2a72e71f4b8010ed3 (diff) | |
use one instance of loaded articles and keep it in an application singleton
11 files changed, 73 insertions, 201 deletions
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/Application.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/Application.java index 5d82618a..1527f64f 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/Application.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/Application.java @@ -10,9 +10,13 @@ import java.util.LinkedHashMap; public class Application extends android.app.Application { private static Application m_singleton; - - public ArticleList tmpArticleList; - public Article tmpArticle; + + // this is the only instance of a (large) object which contains all currently loaded articles and is + // used by all fragments and activities concurrently + private ArticleList m_articles = new ArticleList(); + + // we use this to pass a large temporary object between activities + public Article tmpActiveArticle; public int m_selectedArticleId; public String m_sessionId; @@ -22,7 +26,11 @@ public class Application extends android.app.Application { public static Application getInstance(){ return m_singleton; } - + + public static ArticleList getArticles() { + return getInstance().m_articles; + } + @Override public final void onCreate() { super.onCreate(); diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticlePager.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticlePager.java index 445f94bb..c051fa86 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticlePager.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticlePager.java @@ -34,7 +34,6 @@ public class ArticlePager extends androidx.fragment.app.Fragment { private RecyclerView.Adapter m_adapter; private HeadlinesEventListener m_listener; protected Article m_article; - protected ArticleList m_articles = new ArticleList(); //m_articles = Application.getInstance().m_loadedArticles; private OnlineActivity m_activity; private String m_searchQuery = ""; protected Feed m_feed; @@ -55,7 +54,7 @@ public class ArticlePager extends androidx.fragment.app.Fragment { @Override public Fragment createFragment(int position) { try { - Article article = m_articles.get(position); + Article article = Application.getArticles().get(position); if (article != null) { ArticleFragment af = new ArticleFragment(); @@ -72,7 +71,7 @@ public class ArticlePager extends androidx.fragment.app.Fragment { @Override public int getItemCount() { - return m_articles.size(); + return Application.getArticles().size(); } public ArticleFragment getCurrentFragment() { @@ -81,10 +80,9 @@ public class ArticlePager extends androidx.fragment.app.Fragment { } - public void initialize(Article article, Feed feed, ArticleList articles) { + public void initialize(Article article, Feed feed) { m_article = article; m_feed = feed; - m_articles = articles; } public void setSearchQuery(String searchQuery) { @@ -96,7 +94,6 @@ public class ArticlePager extends androidx.fragment.app.Fragment { super.onSaveInstanceState(out); out.putParcelable("m_article", m_article); - //out.putParcelable("m_articles", m_articles); out.putParcelable("m_feed", m_feed); out.putInt("m_firstId", m_firstId); } @@ -118,17 +115,11 @@ public class ArticlePager extends androidx.fragment.app.Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_article_pager, container, false); - if (savedInstanceState != null) { - if (m_activity instanceof DetailActivity) { - m_articles = ((DetailActivity)m_activity).m_articles; - } - } - m_adapter = new PagerAdapter(getActivity()); m_pager = view.findViewById(R.id.article_pager); - int position = m_articles.indexOf(m_article); + int position = Application.getArticles().indexOf(m_article); m_listener.onArticleSelected(m_article, false); @@ -141,7 +132,7 @@ public class ArticlePager extends androidx.fragment.app.Fragment { public void onPageSelected(int position) { Log.d(TAG, "onPageSelected: " + position); - final Article article = m_articles.get(position); + final Article article = Application.getArticles().get(position); if (article != null) { m_article = article; @@ -181,7 +172,7 @@ public class ArticlePager extends androidx.fragment.app.Fragment { m_refreshInProgress = true; - @SuppressLint("StaticFieldLeak") HeadlinesRequest req = new HeadlinesRequest(getActivity().getApplicationContext(), m_activity, m_feed, m_articles) { + @SuppressLint("StaticFieldLeak") HeadlinesRequest req = new HeadlinesRequest(getActivity().getApplicationContext(), m_activity, m_feed, Application.getArticles()) { @Override protected void onProgressUpdate(Integer... progress) { m_activity.setProgress(progress[0] / progress[1] * 10000); @@ -193,7 +184,7 @@ public class ArticlePager extends androidx.fragment.app.Fragment { if (!append) { m_pager.setCurrentItem(0, false); - m_articles.clear(); + Application.getArticles().clear(); } super.onPostExecute(result); @@ -234,9 +225,9 @@ public class ArticlePager extends androidx.fragment.app.Fragment { } if (m_article != null) { - if (m_article.id == 0 || !m_articles.containsId(m_article.id)) { - if (m_articles.size() > 0) { - m_article = m_articles.get(0); + if (m_article.id == 0 || !Application.getArticles().containsId(m_article.id)) { + if (Application.getArticles().size() > 0) { + m_article = Application.getArticles().get(0); m_listener.onArticleSelected(m_article, false); } } @@ -264,9 +255,9 @@ public class ArticlePager extends androidx.fragment.app.Fragment { // adaptive, all_articles, marked, published, unread String viewMode = m_activity.getViewMode(); int numUnread = 0; - int numAll = m_articles.size(); + int numAll = Application.getArticles().size(); - for (Article a : m_articles) { + for (Article a : Application.getArticles()) { if (a.unread) ++numUnread; } @@ -358,15 +349,15 @@ public class ArticlePager extends androidx.fragment.app.Fragment { if (m_article != article) { m_article = article; - int position = m_articles.indexOf(m_article); + int position = Application.getArticles().indexOf(m_article); - m_pager.setCurrentItem(position); + m_pager.setCurrentItem(position, false); } } public void selectArticle(boolean next) { if (m_article != null) { - int position = m_articles.indexOf(m_article); + int position = Application.getArticles().indexOf(m_article); if (next) position++; @@ -374,7 +365,7 @@ public class ArticlePager extends androidx.fragment.app.Fragment { position--; try { - Article tmp = m_articles.get(position); + Article tmp = Application.getArticles().get(position); if (tmp != null) { setActiveArticle(tmp); diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/DetailActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/DetailActivity.java index ecde9d51..f2f43001 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/DetailActivity.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/DetailActivity.java @@ -26,7 +26,7 @@ import org.fox.ttrss.types.Feed; public class DetailActivity extends OnlineActivity implements HeadlinesEventListener { private final String TAG = this.getClass().getSimpleName(); - protected ArticleList m_articles = new ArticleList(); + //protected ArticleList m_articles = new ArticleList(); protected BottomAppBar m_bottomAppBar; protected SharedPreferences m_prefs; @@ -42,10 +42,6 @@ public class DetailActivity extends OnlineActivity implements HeadlinesEventList super.onCreate(savedInstanceState); - if (savedInstanceState != null) { - m_articles = savedInstanceState.getParcelable("m_articles"); - } - if (m_prefs.getBoolean("force_phone_layout", false)) { setContentView(R.layout.activity_detail_phone); } else { @@ -152,35 +148,25 @@ public class DetailActivity extends OnlineActivity implements HeadlinesEventList String feedTitle = i.getStringExtra("feed_title"); tmpFeed = new Feed(feedId, feedTitle, isCat); - - //Application.getInstance().m_loadedArticles.clear(); } else { tmpFeed = i.getParcelableExtra("feed"); } final Feed feed = tmpFeed; - //final Article article = i.getParcelableExtra("article"); - final Article article = Application.getInstance().tmpArticle; + final Article article = Application.getInstance().tmpActiveArticle; final String searchQuery = i.getStringExtra("searchQuery"); - ArticleList tmp = Application.getInstance().tmpArticleList; - - if (tmp != null) { - m_articles.clear(); - m_articles.addAll(tmp); - } - FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); final HeadlinesFragment hf = new HeadlinesFragment(); - hf.initialize(feed, article, true, m_articles); + hf.initialize(feed, article, true); hf.setSearchQuery(searchQuery); ft.replace(R.id.headlines_fragment, hf, FRAG_HEADLINES); ArticlePager af = new ArticlePager(); - af.initialize(article != null ? hf.getArticleById(article.id) : new Article(), feed, m_articles); + af.initialize(article != null ? hf.getArticleById(article.id) : new Article(), feed); af.setSearchQuery(searchQuery); ft.replace(R.id.article_fragment, af, FRAG_ARTICLE); @@ -262,8 +248,6 @@ public class DetailActivity extends OnlineActivity implements HeadlinesEventList public void onSaveInstanceState(Bundle out) { super.onSaveInstanceState(out); - out.putParcelable("m_articles", m_articles); - Application.getInstance().save(out); } @@ -384,7 +368,7 @@ public class DetailActivity extends OnlineActivity implements HeadlinesEventList .beginTransaction(); ArticlePager af = new ArticlePager(); - af.initialize(article, hf.getFeed(), m_articles); + af.initialize(article, hf.getFeed()); ft.replace(R.id.article_fragment, af, FRAG_ARTICLE); ft.commitAllowingStateLoss(); @@ -396,7 +380,6 @@ public class DetailActivity extends OnlineActivity implements HeadlinesEventList public void onBackPressed() { Intent resultIntent = new Intent(); - Application.getInstance().tmpArticleList = m_articles; resultIntent.putExtra("activeArticle", m_activeArticle); setResult(Activity.RESULT_OK, resultIntent); diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedCategoriesFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedCategoriesFragment.java index b805ee6a..3133d974 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedCategoriesFragment.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedCategoriesFragment.java @@ -235,15 +235,6 @@ public class FeedCategoriesFragment extends BaseFeedlistFragment implements OnIt } } return true; - } else if (itemId == R.id.create_shortcut) { - if (true) { - FeedCategory cat = getCategoryAtPosition(info.position); - if (cat != null) { - m_activity.createCategoryShortcut(cat); - //cf.setSelectedCategory(cat); - } - } - return true; } else if (itemId == R.id.catchup_category) { if (true) { final FeedCategory cat = getCategoryAtPosition(info.position); @@ -270,10 +261,6 @@ public class FeedCategoriesFragment extends BaseFeedlistFragment implements OnIt if (cat != null) menu.setHeaderTitle(cat.title); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - menu.findItem(R.id.create_shortcut).setVisible(false); - } - super.onCreateContextMenu(menu, v, menuInfo); } diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsFragment.java index 1a038456..0ebb63a3 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsFragment.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsFragment.java @@ -281,14 +281,6 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi } return true; - } else if (itemId == R.id.create_shortcut) { - if (true) { - Feed feed = getFeedAtPosition(info.position); - if (feed != null) { - m_activity.createFeedShortcut(feed); - } - } - return true; } else if (itemId == R.id.catchup_feed) { if (true) { Feed feed = getFeedAtPosition(info.position); @@ -323,11 +315,7 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi menu.findItem(R.id.unsubscribe_feed).setVisible(false); } - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - menu.findItem(R.id.create_shortcut).setVisible(false); - } - - super.onCreateContextMenu(menu, v, menuInfo); + super.onCreateContextMenu(menu, v, menuInfo); } diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java index 352ebab6..29972c66 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java @@ -111,7 +111,6 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { private SharedPreferences m_prefs; private HeaderViewRecyclerAdapter m_adapter; - ArticleList m_articles = new ArticleList(); private ArticleList m_readArticles = new ArticleList(); private HeadlinesEventListener m_listener; private OnlineActivity m_activity; @@ -127,7 +126,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { public ArticleList getSelectedArticles() { ArticleList tmp = new ArticleList(); - for (Article a : m_articles) { + for (Article a : Application.getArticles()) { if (a.selected) tmp.add(a); } @@ -138,7 +137,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { m_feed = feed; } - public void initialize(Feed feed, Article activeArticle, boolean compactMode, ArticleList articles) { + public void initialize(Feed feed, Article activeArticle, boolean compactMode) { m_feed = feed; m_compactLayoutMode = compactMode; @@ -146,9 +145,6 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { m_activeArticle = getArticleById(activeArticle.id); } - if (articles != null) { - m_articles = articles; - } } public boolean onArticleMenuItemSelected(MenuItem item, Article article, int position) { @@ -283,20 +279,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { m_searchQuery = savedInstanceState.getString("m_searchQuery"); m_firstId = savedInstanceState.getInt("m_firstId"); m_lazyLoadDisabled = savedInstanceState.getBoolean("m_lazyLoadDisabled"); - - /*ArrayList<Article> list = savedInstanceState.getParcelableArrayList("m_articles"); - - m_articles.clear(); // ? - m_articles.addAll(list);*/ - - ArticleList tmp = Application.getInstance().tmpArticleList; - - if (tmp != null) { - m_articles.clear(); - m_articles.addAll(Application.getInstance().tmpArticleList); - } - - savedInstanceState.getBoolean("m_compactLayoutMode", m_compactLayoutMode); + m_compactLayoutMode = savedInstanceState.getBoolean("m_compactLayoutMode"); } setRetainInstance(true); @@ -313,21 +296,12 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { out.putString("m_searchQuery", m_searchQuery); out.putInt("m_firstId", m_firstId); out.putBoolean("m_lazyLoadDisabled", m_lazyLoadDisabled); - //out.putParcelable("m_articles", m_articles); out.putBoolean("m_compactLayoutMode", m_compactLayoutMode); - - Application.getInstance().tmpArticleList = m_articles; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - if (savedInstanceState != null) { - if (m_activity instanceof DetailActivity) { - m_articles = ((DetailActivity)m_activity).m_articles; - } - } - String headlineMode = m_prefs.getString("headline_mode", "HL_DEFAULT"); if ("HL_COMPACT".equals(headlineMode) || "HL_COMPACT_NOIMAGES".equals(headlineMode)) @@ -364,7 +338,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { m_list.addItemDecoration(materialDivider); } */ - ArticleListAdapter adapter = new ArticleListAdapter(getActivity(), R.layout.headlines_row, m_articles); + ArticleListAdapter adapter = new ArticleListAdapter(getActivity(), R.layout.headlines_row, Application.getArticles()); m_adapter = new HeaderViewRecyclerAdapter(adapter); @@ -412,7 +386,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { wasUnread = false; } - m_articles.remove(position); + Application.getArticles().remove(position); m_adapter.notifyDataSetChanged(); Snackbar.make(m_list, R.string.headline_undo_row_prompt, Snackbar.LENGTH_LONG) @@ -425,7 +399,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { m_activity.saveArticleUnread(article); } - m_articles.add(position, article); + Application.getArticles().add(position, article); m_adapter.notifyItemInserted(adapterPosition); m_adapter.notifyItemRangeChanged(adapterPosition, 1); } @@ -486,7 +460,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { if (m_prefs.getBoolean("headlines_mark_read_scroll", false) && firstVisibleItem > m_adapter.getHeaderCount()) { - if (firstVisibleItem <= m_articles.size() + m_adapter.getHeaderCount()) { + if (firstVisibleItem <= Application.getArticles().size() + m_adapter.getHeaderCount()) { Article a = getArticleAtPosition(firstVisibleItem - m_adapter.getHeaderCount() - 1); @@ -500,7 +474,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { } } - if (!m_refreshInProgress && !m_lazyLoadDisabled && lastVisibleItem >= m_articles.size() - 5) { + if (!m_refreshInProgress && !m_lazyLoadDisabled && lastVisibleItem >= Application.getArticles().size() - 5) { m_refreshInProgress = true; new Handler().postDelayed(new Runnable() { @Override @@ -532,7 +506,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { setActiveArticle(m_activeArticle); } - if (m_articles.size() == 0) { + if (Application.getArticles().size() == 0) { refresh(false); } @@ -553,7 +527,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { @SuppressWarnings({ "serial" }) public void refresh(final boolean append, boolean userInitiated) { - m_articles.stripFooters(); + Application.getArticles().stripFooters(); m_adapter.notifyDataSetChanged(); if (!append) m_lazyLoadDisabled = false; @@ -565,11 +539,11 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { if (!append) { m_activity.getSupportActionBar().show(); - m_articles.clear(); + Application.getArticles().clear(); m_adapter.notifyDataSetChanged(); } else { if (!(m_activity instanceof DetailActivity)) { - m_articles.add(new Article(Article.TYPE_LOADMORE)); + Application.getArticles().add(new Article(Article.TYPE_LOADMORE)); m_adapter.notifyDataSetChanged(); } } @@ -577,7 +551,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { final String sessionId = m_activity.getSessionId(); final boolean isCat = m_feed.is_cat; - @SuppressLint("StaticFieldLeak") HeadlinesRequest req = new HeadlinesRequest(getActivity().getApplicationContext(), m_activity, m_feed, m_articles) { + @SuppressLint("StaticFieldLeak") HeadlinesRequest req = new HeadlinesRequest(getActivity().getApplicationContext(), m_activity, m_feed, Application.getArticles()) { @Override protected void onProgressUpdate(Integer... progress) { m_activity.setProgress(Math.round((((float) progress[0] / (float) progress[1]) * 10000))); @@ -597,7 +571,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { if (result != null) { - if (m_activeArticle != null && !m_articles.containsId(m_activeArticle.id)) { + if (m_activeArticle != null && !Application.getArticles().containsId(m_activeArticle.id)) { m_activeArticle = null; } @@ -643,7 +617,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { } if (!(m_activity instanceof DetailActivity)) { - m_articles.add(new Article(Article.TYPE_AMR_FOOTER)); + Application.getArticles().add(new Article(Article.TYPE_AMR_FOOTER)); m_adapter.notifyDataSetChanged(); } } @@ -655,9 +629,9 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { // adaptive, all_articles, marked, published, unread String viewMode = m_activity.getViewMode(); int numUnread = 0; - int numAll = m_articles.size(); + int numAll = Application.getArticles().size(); - for (Article a : m_articles) { + for (Article a : Application.getArticles()) { if (a.unread) ++numUnread; } @@ -839,7 +813,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { } private class ArticleListAdapter extends RecyclerView.Adapter<ArticleViewHolder> { - private ArrayList<Article> items; + private ArticleList items; public static final int VIEW_NORMAL = 0; public static final int VIEW_UNREAD = 1; @@ -879,7 +853,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { return false; } - public ArticleListAdapter(Context context, int textViewResourceId, ArrayList<Article> items) { + public ArticleListAdapter(Context context, int textViewResourceId, ArticleList items) { super(); this.items = items; @@ -1716,7 +1690,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { // returns cloned array without footers public ArticleList getAllArticles() { - ArticleList tmp = (ArticleList) m_articles.clone(); + ArticleList tmp = (ArticleList) Application.getArticles().clone(); tmp.stripFooters(); return tmp; @@ -1740,11 +1714,11 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { } public void setSelection(ArticlesSelection select) { - for (Article a : m_articles) + for (Article a : Application.getArticles()) a.selected = false; if (select != ArticlesSelection.NONE) { - for (Article a : m_articles) { + for (Article a : Application.getArticles()) { if (select == ArticlesSelection.ALL || select == ArticlesSelection.UNREAD && a.unread) { a.selected = true; } @@ -1758,7 +1732,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { public Article getArticleAtPosition(int position) { try { - return m_articles.get(position); + return Application.getArticles().get(position); } catch (IndexOutOfBoundsException e) { e.printStackTrace(); } catch (Exception e) { @@ -1769,7 +1743,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { } public Article getArticleById(int id) { - for (Article a : m_articles) { + for (Article a : Application.getArticles()) { if (a.id == id) return a; } @@ -1778,7 +1752,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { public ArticleList getUnreadArticles() { ArticleList tmp = new ArticleList(); - for (Article a : m_articles) { + for (Article a : Application.getArticles()) { if (a.unread) tmp.add(a); } return tmp; @@ -1789,8 +1763,8 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { } public int getArticlePositionById(int id) { - for (int i = 0; i < m_articles.size(); i++) { - if (m_articles.get(i).id == id) { + for (int i = 0; i < Application.getArticles().size(); i++) { + if (Application.getArticles().get(i).id == id) { return i + m_adapter.getHeaderCount(); } } @@ -1818,10 +1792,10 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { } public void setArticles(ArticleList articles) { - m_articles.clear(); - m_articles.addAll(articles); + Application.getArticles().clear(); + Application.getArticles().addAll(articles); - m_articles.add(new Article(Article.TYPE_AMR_FOOTER)); + Application.getArticles().add(new Article(Article.TYPE_AMR_FOOTER)); m_adapter.notifyDataSetChanged(); } diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java index 9d9d0901..3d531239 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java @@ -482,8 +482,8 @@ public class MasterActivity extends OnlineActivity implements HeadlinesEventList Intent intent = new Intent(MasterActivity.this, DetailActivity.class); intent.putExtra("feed", hf.getFeed()); intent.putExtra("searchQuery", hf.getSearchQuery()); - Application.getInstance().tmpArticleList = hf.getAllArticles(); - Application.getInstance().tmpArticle = article; + + Application.getInstance().tmpActiveArticle = article; startActivityForResult(intent, HEADLINES_REQUEST); overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left); @@ -525,44 +525,13 @@ public class MasterActivity extends OnlineActivity implements HeadlinesEventList @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { - if (requestCode == HEADLINES_REQUEST && data != null) { - ArticleList articles = Application.getInstance().tmpArticleList; - - if (articles != null) { - HeadlinesFragment hf = (HeadlinesFragment)getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); - - if (hf != null) { - hf.setArticles(articles); - } - } - } - super.onActivityResult(requestCode, resultCode, data); - } - // TODO: remove; not supported on oreo - public void createFeedShortcut(Feed feed) { - final Intent shortcutIntent = new Intent(this, MasterActivity.class); - shortcutIntent.putExtra("feed_id", feed.id); - shortcutIntent.putExtra("feed_is_cat", feed.is_cat); - shortcutIntent.putExtra("feed_title", feed.title); - shortcutIntent.putExtra("shortcut_mode", true); - - Intent intent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); - - intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, feed.title); - intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); - intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(this, R.drawable.ic_launcher)); - intent.putExtra("duplicate", false); - - sendBroadcast(intent); - - toast(R.string.shortcut_has_been_placed_on_the_home_screen); - } + HeadlinesFragment hf = (HeadlinesFragment)getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); - // TODO: remove; not supported on oreo - public void createCategoryShortcut(FeedCategory cat) { - createFeedShortcut(new Feed(cat.id, cat.title, true)); + if (hf != null) { + hf.notifyUpdated(); + } } public void unsubscribeFeed(final Feed feed) { diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/types/ArticleList.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/types/ArticleList.java index bee0a46d..3a18ccd5 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/types/ArticleList.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/types/ArticleList.java @@ -4,9 +4,10 @@ import android.os.Parcel; import android.os.Parcelable; import java.util.ArrayList; +import java.util.concurrent.CopyOnWriteArrayList; @SuppressWarnings("serial") -public class ArticleList extends ArrayList<Article> implements Parcelable { +public class ArticleList extends CopyOnWriteArrayList<Article> implements Parcelable { @Override public int describeContents() { return 0; diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/HeadlinesRequest.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/HeadlinesRequest.java index 1df20837..0283305c 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/HeadlinesRequest.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/HeadlinesRequest.java @@ -72,8 +72,6 @@ public class HeadlinesRequest extends ApiRequest { Type listType = new TypeToken<List<Article>>() {}.getType(); articles = new Gson().fromJson(content.get(1), listType); } else { - header = null; - Type listType = new TypeToken<List<Article>>() {}.getType(); articles = new Gson().fromJson(content, listType); } @@ -87,11 +85,6 @@ public class HeadlinesRequest extends ApiRequest { while (m_articles.size() > HeadlinesFragment.HEADLINES_BUFFER_MAX) { m_articles.remove(0); } - - /*if (m_articles.get(m_articles.size()-1).id == HeadlinesFragment.ARTICLE_SPECIAL_LOADMORE) { - m_articles.remove(m_articles.size()-1); // remove previous placeholder - }*/ - } m_amountLoaded = articles.size(); @@ -103,17 +96,6 @@ public class HeadlinesRequest extends ApiRequest { m_articles.add(f); } - /*if (articles.size() == HEADLINES_REQUEST_SIZE) { - Article placeholder = new Article(HeadlinesFragment.ARTICLE_SPECIAL_LOADMORE); - m_articles.add(placeholder); - }*/ - - /* if (m_articles.size() == 0) - m_activity.setLoadingStatus(R.string.no_headlines_to_display, false); - else */ - - //m_activity.setLoadingStatus(R.string.blank, false); - return; } diff --git a/org.fox.ttrss/src/main/res/menu/context_category.xml b/org.fox.ttrss/src/main/res/menu/context_category.xml index f2547a6d..8f975c0a 100644 --- a/org.fox.ttrss/src/main/res/menu/context_category.xml +++ b/org.fox.ttrss/src/main/res/menu/context_category.xml @@ -3,10 +3,6 @@ <item android:id="@+id/browse_headlines" android:title="@string/category_browse_headlines"/> - - <!-- <item - android:id="@+id/browse_articles" - android:title="@string/category_browse_articles"/> --> <item android:id="@+id/browse_feeds" @@ -15,8 +11,5 @@ <item android:id="@+id/catchup_category" android:title="@string/catchup"/> - - <item - android:id="@+id/create_shortcut" - android:title="@string/place_shortcut"/> + </menu>
\ No newline at end of file diff --git a/org.fox.ttrss/src/main/res/menu/context_feed.xml b/org.fox.ttrss/src/main/res/menu/context_feed.xml index ba5ad55b..0b0cdc3e 100644 --- a/org.fox.ttrss/src/main/res/menu/context_feed.xml +++ b/org.fox.ttrss/src/main/res/menu/context_feed.xml @@ -17,10 +17,6 @@ android:title="@string/catchup"/> <item - android:id="@+id/create_shortcut" - android:title="@string/place_shortcut"/> - - <item android:id="@+id/unsubscribe_feed" android:title="@string/unsubscribe"/> |