diff options
7 files changed, 110 insertions, 189 deletions
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 c8fde41d..13d68465 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 @@ -130,6 +130,7 @@ public class ArticlePager extends androidx.fragment.app.Fragment { @Override public void onResume() { super.onResume(); + m_activity.invalidateOptionsMenu(); } 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 589ecc03..f336600e 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 @@ -261,28 +261,11 @@ public class DetailActivity extends OnlineActivity implements HeadlinesEventList if (articleClone.unread) { articleClone.unread = false; saveArticleUnread(articleClone); - - Application.getArticlesModel().updateById(articleClone); } Application.getArticlesModel().setActive(articleClone); if (!getSupportActionBar().isShowing()) getSupportActionBar().show(); - - /* ArticlePager ap = (ArticlePager) DetailActivity.this.getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE); - HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); - - if (open) { - if (ap != null) { - ap.setActiveArticleId(article.id); - } - } else { - if (hf != null) { - hf.setActiveArticleId(article.id); - } - } */ - - invalidateOptionsMenu(); } @Override 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 b7450afa..48ae7c8c 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 @@ -319,8 +319,6 @@ public class FeedsFragment extends Fragment implements OnSharedPreferenceChangeL setSelectedFeed(m_activity.getActiveFeed()); refresh(); - - m_activity.invalidateOptionsMenu(); } public void refresh() { 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 38dc8e8e..17e0231f 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 @@ -146,8 +146,6 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { m_activity.saveArticleUnread(articleClone); - Application.getArticlesModel().updateById(articleClone); - return true; } else if (itemId == R.id.headlines_article_link_copy) { m_activity.copyToClipboard(article.link); @@ -160,8 +158,6 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { articleClone.unread = !articleClone.unread; m_activity.saveArticleUnread(articleClone); - - Application.getArticlesModel().updateById(articleClone); } return true; } else if (itemId == R.id.headlines_share_article) { @@ -901,8 +897,6 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { article.marked = !article.marked; m_activity.saveArticleMarked(article); - - Application.getArticlesModel().updateById(article); } }); } @@ -932,8 +926,6 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { article.published = !article.published; m_activity.saveArticlePublished(article); - - Application.getArticlesModel().updateById(article); } }); } @@ -970,20 +962,18 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { if (position != -1) { - Article article = new Article(getItem(position)); - + final Article articleClone = new Article(getItem(position)); final EditText edit = new EditText(getActivity()); - edit.setText(String.valueOf(article.score)); + + edit.setText(String.valueOf(articleClone.score)); MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(getContext()) .setTitle(R.string.score_for_this_article) .setPositiveButton(R.string.set_score, (dialog, which) -> { try { - article.score = Integer.parseInt(edit.getText().toString()); - m_activity.saveArticleScore(article); - - Application.getArticlesModel().updateById(article); + articleClone.score = Integer.parseInt(edit.getText().toString()); + m_activity.saveArticleScore(articleClone); } catch (NumberFormatException e) { m_activity.toast(R.string.score_invalid); 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 6f188bf4..4e71b90d 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 @@ -421,8 +421,6 @@ public class MasterActivity extends OnlineActivity implements HeadlinesEventList if (articleClone.unread) { articleClone.unread = false; saveArticleUnread(articleClone); - - Application.getArticlesModel().updateById(articleClone); } if (open) { diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java index 3079ced7..22acf6d9 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java @@ -427,9 +427,6 @@ public class OnlineActivity extends CommonActivity { ft.replace(R.id.headlines_fragment, hfnew, FRAG_HEADLINES); ft.commit(); - - invalidateOptionsMenu(); - }); Dialog dialog = builder.create(); @@ -520,7 +517,6 @@ public class OnlineActivity extends CommonActivity { break; } dialog.cancel(); - invalidateOptionsMenu(); }); Dialog dialog = builder.create(); @@ -539,23 +535,17 @@ public class OnlineActivity extends CommonActivity { } else if (itemId == R.id.toggle_marked) { if (activeArticle != null) { Article articleClone = new Article(activeArticle); - articleClone.marked = !articleClone.marked; saveArticleMarked(activeArticle); - - Application.getArticlesModel().updateById(articleClone); } return true; } else if (itemId == R.id.toggle_unread) { if (activeArticle != null) { Article articleClone = new Article(activeArticle); - articleClone.unread = !articleClone.unread; saveArticleUnread(activeArticle); - - Application.getArticlesModel().updateById(articleClone); } return true; } else if (itemId == R.id.selection_toggle_unread) { @@ -564,14 +554,10 @@ public class OnlineActivity extends CommonActivity { if (!selected.isEmpty()) { for (Article a : selected) { Article articleClone = new Article(a); - articleClone.unread = !articleClone.unread; - - Application.getArticlesModel().updateById(articleClone); } toggleArticlesUnread(selected); - invalidateOptionsMenu(); } return true; } else if (itemId == R.id.selection_toggle_marked) { @@ -580,14 +566,10 @@ public class OnlineActivity extends CommonActivity { if (!selected.isEmpty()) { for (Article a : selected) { Article articleClone = new Article(a); - articleClone.marked = !articleClone.marked; - - Application.getArticlesModel().updateById(articleClone); } toggleArticlesMarked(selected); - invalidateOptionsMenu(); } return true; } else if (itemId == R.id.selection_toggle_published) { @@ -596,24 +578,18 @@ public class OnlineActivity extends CommonActivity { if (!selected.isEmpty()) { for (Article a : selected) { Article articleClone = new Article(a); - articleClone.published = !articleClone.published; - - Application.getArticlesModel().updateById(articleClone); } toggleArticlesPublished(selected); - invalidateOptionsMenu(); } return true; } else if (itemId == R.id.toggle_published) { if (activeArticle != null) { Article articleClone = new Article(activeArticle); - articleClone.published = !articleClone.published; - saveArticlePublished(articleClone); - Application.getArticlesModel().updateById(articleClone); + saveArticlePublished(articleClone); } return true; } else if (itemId == R.id.catchup_above) { @@ -667,7 +643,6 @@ public class OnlineActivity extends CommonActivity { if (!tmp.isEmpty()) { setArticlesUnread(tmp, Article.UPDATE_SET_FALSE); - invalidateOptionsMenu(); } } } @@ -806,106 +781,6 @@ public class OnlineActivity extends CommonActivity { Application.getInstance().setApiLevel(apiLevel); } - // TODO switch to setArticleField() - public void saveArticleUnread(final Article article) { - ApiRequest req = new ApiRequest(getApplicationContext()) { - protected void onPostExecute(JsonElement result) { - //toast(R.string.article_set_unread); - invalidateOptionsMenu(); - } - }; - - HashMap<String, String> map = new HashMap<>(); - map.put("sid", getSessionId()); - map.put("op", "updateArticle"); - map.put("article_ids", String.valueOf(article.id)); - map.put("mode", article.unread ? "1" : "0"); - map.put("field", String.valueOf(Article.UPDATE_FIELD_UNREAD)); - - req.execute(map); - } - - // TODO switch to setArticleField() - public void saveArticleScore(final Article article) { - ApiRequest req = new ApiRequest(getApplicationContext()) { - protected void onPostExecute(JsonElement result) { - //toast(article.marked ? R.string.notify_article_marked : R.string.notify_article_unmarked); - invalidateOptionsMenu(); - } - }; - - HashMap<String, String> map = new HashMap<>(); - map.put("sid", getSessionId()); - map.put("op", "updateArticle"); - map.put("article_ids", String.valueOf(article.id)); - map.put("data", String.valueOf(article.score)); - map.put("field", String.valueOf(Article.UPDATE_FIELD_SCORE)); - - req.execute(map); - } - - // TODO switch to setArticleField() - public void saveArticleMarked(final Article article) { - ApiRequest req = new ApiRequest(getApplicationContext()) { - protected void onPostExecute(JsonElement result) { - //toast(article.marked ? R.string.notify_article_marked : R.string.notify_article_unmarked); - invalidateOptionsMenu(); - } - }; - - HashMap<String, String> map = new HashMap<>(); - map.put("sid", getSessionId()); - map.put("op", "updateArticle"); - map.put("article_ids", String.valueOf(article.id)); - map.put("mode", article.marked ? "1" : "0"); - map.put("field", String.valueOf(Article.UPDATE_FIELD_MARKED)); - - req.execute(map); - } - - // TODO switch to setArticleField() - public void saveArticlePublished(final Article article) { - - ApiRequest req = new ApiRequest(getApplicationContext()) { - protected void onPostExecute(JsonElement result) { - //toast(article.published ? R.string.notify_article_published : R.string.notify_article_unpublished); - invalidateOptionsMenu(); - } - }; - - HashMap<String, String> map = new HashMap<>(); - map.put("sid", getSessionId()); - map.put("op", "updateArticle"); - map.put("article_ids", String.valueOf(article.id)); - map.put("mode", article.published ? "1" : "0"); - map.put("field", String.valueOf(Article.UPDATE_FIELD_PUBLISHED)); - - req.execute(map); - } - - // TODO switch to setArticleField() - public void saveArticleNote(final Article article, final String note) { - ApiRequest req = new ApiRequest(getApplicationContext()) { - protected void onPostExecute(JsonElement result) { - Article articleClone = new Article(article); - - articleClone.note = note; - - Application.getArticlesModel().updateById(articleClone); - } - }; - - HashMap<String, String> map = new HashMap<>(); - map.put("sid", getSessionId()); - map.put("op", "updateArticle"); - map.put("article_ids", String.valueOf(article.id)); - map.put("mode", "1"); - map.put("data", note); - map.put("field", String.valueOf(Article.UPDATE_FIELD_NOTE)); - - req.execute(map); - } - public void shareArticle(Article article) { if (article != null) { shareText(article.link, article.title); @@ -923,16 +798,10 @@ public class OnlineActivity extends CommonActivity { try { Article articleClone = new Article(article); - articleClone.score = Integer.parseInt(edit.getText().toString()); saveArticleScore(articleClone); - int position = Application.getArticles().getPositionById(articleClone.id); - - if (position != -1) - Application.getArticlesModel().updateById(articleClone); - } catch (NumberFormatException e) { toast(R.string.score_invalid); e.printStackTrace(); @@ -988,8 +857,6 @@ public class OnlineActivity extends CommonActivity { if (selectedArticle != null) { selectedArticle.unread = !selectedArticle.unread; saveArticleUnread(selectedArticle); - - hf.notifyItemChanged(Application.getArticles().indexOf(selectedArticle)); } } return true; @@ -1050,14 +917,35 @@ public class OnlineActivity extends CommonActivity { req.execute(map); } + public void saveArticleUnread(final Article article) { + setArticlesField(new ArticleList(article), Article.UPDATE_FIELD_UNREAD, + article.unread ? Article.UPDATE_SET_TRUE : Article.UPDATE_SET_FALSE); + } + + public void saveArticleScore(final Article article) { + setArticlesField(new ArticleList(article), Article.UPDATE_FIELD_SCORE, Article.UPDATE_SET_TRUE); + } + + public void saveArticleMarked(final Article article) { + setArticlesField(new ArticleList(article), Article.UPDATE_FIELD_MARKED, + article.marked ? Article.UPDATE_SET_TRUE : Article.UPDATE_SET_FALSE); + } + + public void saveArticlePublished(final Article article) { + setArticlesField(new ArticleList(article), Article.UPDATE_FIELD_PUBLISHED, + article.published ? Article.UPDATE_SET_TRUE : Article.UPDATE_SET_FALSE); + } + + public void saveArticleNote(final Article article, final String note) { + setArticlesField(new ArticleList(article), Article.UPDATE_FIELD_NOTE, Article.UPDATE_SET_TRUE); + } + public void toggleArticlesMarked(final ArticleList articles) { setArticlesMarked(articles, Article.UPDATE_TOGGLE); } public void setArticlesMarked(final ArticleList articles, int mode) { - ApiRequest req = new ApiRequest(getApplicationContext()); - - setArticleField(articles, Article.UPDATE_FIELD_MARKED, mode); + setArticlesField(articles, Article.UPDATE_FIELD_MARKED, mode); } public void toggleArticlesUnread(final ArticleList articles) { @@ -1065,7 +953,7 @@ public class OnlineActivity extends CommonActivity { } public void setArticlesUnread(final ArticleList articles, int mode) { - setArticleField(articles, Article.UPDATE_FIELD_UNREAD, mode); + setArticlesField(articles, Article.UPDATE_FIELD_UNREAD, mode); } public void toggleArticlesPublished(final ArticleList articles) { @@ -1073,27 +961,85 @@ public class OnlineActivity extends CommonActivity { } public void setArticlesPublished(final ArticleList articles, int mode) { - setArticleField(articles, Article.UPDATE_FIELD_PUBLISHED, mode); + setArticlesField(articles, Article.UPDATE_FIELD_PUBLISHED, mode); } - public void setArticleField(final ArticleList articles, int field, int mode) { + public void setArticlesField(final ArticleList articles, int field, int mode) { ApiRequest req = new ApiRequest(getApplicationContext()) { protected void onPostExecute(JsonElement result) { - Log.d(TAG, "setArticleField operation complete"); + if (m_lastError == ApiCommon.ApiError.SUCCESS) { + + if (BuildConfig.DEBUG) + Log.d(TAG, "setArticleField operation complete"); + + ArticleModel model = Application.getArticlesModel(); + + for (Article a : articles) { + Article articleClone = new Article(a); + + switch (mode) { + case Article.UPDATE_SET_FALSE: + switch (field) { + case Article.UPDATE_FIELD_MARKED: + articleClone.marked = false; + break; + case Article.UPDATE_FIELD_PUBLISHED: + articleClone.published = false; + break; + case Article.UPDATE_FIELD_UNREAD: + articleClone.unread = false; + break; + } + break; + case Article.UPDATE_SET_TRUE: + switch (field) { + case Article.UPDATE_FIELD_MARKED: + articleClone.marked = true; + break; + case Article.UPDATE_FIELD_PUBLISHED: + articleClone.published = true; + break; + case Article.UPDATE_FIELD_UNREAD: + articleClone.unread = true; + break; + } + break; + case Article.UPDATE_TOGGLE: + switch (field) { + case Article.UPDATE_FIELD_MARKED: + articleClone.marked = !articleClone.marked; + break; + case Article.UPDATE_FIELD_PUBLISHED: + articleClone.published = !articleClone.published; + break; + case Article.UPDATE_FIELD_UNREAD: + articleClone.unread = !articleClone.unread; + break; + } + break; + } - // currently this is generally handled before operation completes (but after POJO is modified) - /* HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); - ArticlePager ap = (ArticlePager) getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE); + if (BuildConfig.DEBUG) + Log.d(TAG, "updating article: " + articleClone); - for (Article a : articles) { - int position = Application.getArticles().getPositionById(a.id); + model.updateById(articleClone); + } + + invalidateOptionsMenu(); + + return; + } - if (position != -1) { - if (hf != null) hf.notifyItemChanged(position); - if (ap != null) ap.notifyItemChanged(position); + if (m_lastError != null && m_lastError == ApiCommon.ApiError.LOGIN_FAILED) { + login(true); + } else { + if (m_lastErrorMessage != null) { + toast(getString(getErrorMessage()) + "\n" + m_lastErrorMessage); + } else { + toast(getErrorMessage()); } - } */ + } } }; @@ -1375,9 +1321,6 @@ public class OnlineActivity extends CommonActivity { m_headlinesActionMode.setTitle(String.valueOf(selectedCount)); } else if (m_headlinesActionMode != null) { m_headlinesActionMode.finish(); - - // is this needed? - invalidateOptionsMenu(); } })); } 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 87749e62..65e16afd 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 @@ -1,5 +1,7 @@ package org.fox.ttrss.types; +import java.util.Arrays; +import java.util.Collection; import java.util.concurrent.CopyOnWriteArrayList; import java.util.stream.Collectors; @@ -20,6 +22,12 @@ public class ArticleList extends CopyOnWriteArrayList<Article> { return null; } + public ArticleList(Article... articles) { + super(); + + addAll(Arrays.asList(articles)); + } + public ArticleList() { } public ArticleList(ArticleList clone) { |