summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dolgov <fox@fakecake.org>2025-05-11 15:27:05 +0300
committerAndrew Dolgov <fox@fakecake.org>2025-05-11 15:27:05 +0300
commitaef1065ca26ff4806561b9b68c9d55d8f3d63677 (patch)
tree4ad5ec8e0a40c03987c1b756ede3a9b6ecf6855a
parentaec7443a54a8292a62055fd2a72e71f4b8010ed3 (diff)
use one instance of loaded articles and keep it in an application singleton
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/Application.java16
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/ArticlePager.java41
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/DetailActivity.java27
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/FeedCategoriesFragment.java13
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/FeedsFragment.java14
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java86
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java43
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/types/ArticleList.java3
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/util/HeadlinesRequest.java18
-rw-r--r--org.fox.ttrss/src/main/res/menu/context_category.xml9
-rw-r--r--org.fox.ttrss/src/main/res/menu/context_feed.xml4
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"/>