summaryrefslogtreecommitdiff
path: root/org.fox.ttrss/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'org.fox.ttrss/src/main/java')
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/ArticleFragment.java83
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java73
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java21
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineArticleFragment.java5
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineHeadlinesFragment.java6
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java3
6 files changed, 189 insertions, 2 deletions
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleFragment.java
index ed961e38..d75a4e5a 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleFragment.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleFragment.java
@@ -2,7 +2,11 @@ package org.fox.ttrss;
import android.annotation.SuppressLint;
import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.DialogInterface;
import android.content.SharedPreferences;
+import android.content.res.Resources;
import android.graphics.Color;
import android.net.Uri;
import android.os.Build;
@@ -23,6 +27,7 @@ import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebView.HitTestResult;
import android.webkit.WebViewClient;
+import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
@@ -210,6 +215,70 @@ public class ArticleFragment extends StateSavedFragment {
}
+ final ImageView scoreView = view.findViewById(R.id.score);
+
+ if (scoreView != null) {
+ setScoreImage(scoreView, m_article.score);
+
+ Resources.Theme theme = m_activity.getTheme();
+ TypedValue tv = new TypedValue();
+ theme.resolveAttribute(R.attr.headlineTitleHighScoreUnreadTextColor, tv, true);
+ int titleHighScoreUnreadColor = tv.data;
+
+ if (m_article.score > Article.SCORE_HIGH)
+ scoreView.setColorFilter(titleHighScoreUnreadColor);
+ else
+ scoreView.setColorFilter(null);
+
+ if (m_activity.getApiLevel() >= 16) {
+ scoreView.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ final EditText edit = new EditText(getActivity());
+ edit.setText(String.valueOf(m_article.score));
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
+ .setTitle(R.string.score_for_this_article)
+ .setPositiveButton(R.string.set_score,
+ new DialogInterface.OnClickListener() {
+
+ @Override
+ public void onClick(DialogInterface dialog,
+ int which) {
+
+ try {
+ int newScore = Integer.parseInt(edit.getText().toString());
+
+ m_article.score = newScore;
+
+ m_activity.saveArticleScore(m_article);
+
+ setScoreImage(scoreView, newScore);
+ } catch (NumberFormatException e) {
+ m_activity.toast(R.string.score_invalid);
+ e.printStackTrace();
+ }
+ }
+ })
+ .setNegativeButton(getString(R.string.cancel),
+ new DialogInterface.OnClickListener() {
+
+ @Override
+ public void onClick(DialogInterface dialog,
+ int which) {
+
+ //
+
+ }
+ }).setView(edit);
+
+ Dialog dialog = builder.create();
+ dialog.show();
+ }
+ });
+ }
+ }
+
ImageView attachments = view.findViewById(R.id.attachments);
if (attachments != null) {
@@ -360,6 +429,20 @@ public class ArticleFragment extends StateSavedFragment {
return view;
}
+ private void setScoreImage(ImageView scoreView, int score) {
+ TypedValue tv = new TypedValue();
+ int scoreAttr = R.attr.ic_action_trending_flat;
+
+ if (m_article.score > 0)
+ scoreAttr = R.attr.ic_action_trending_up;
+ else if (m_article.score < 0)
+ scoreAttr = R.attr.ic_action_trending_down;
+
+ m_activity.getTheme().resolveAttribute(scoreAttr, tv, true);
+
+ scoreView.setImageResource(tv.resourceId);
+ }
+
protected void renderContent(Bundle savedInstanceState) {
if (!isAdded() || m_web == null) return;
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 b92324da..672da44e 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
@@ -43,6 +43,7 @@ import android.view.ViewTreeObserver;
import android.view.WindowManager;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.CheckBox;
+import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.PopupMenu;
@@ -704,6 +705,7 @@ public class HeadlinesFragment extends StateSavedFragment {
public TextView titleView;
public TextView feedTitleView;
public ImageView markedView;
+ public ImageView scoreView;
public ImageView publishedView;
public TextView excerptView;
public ImageView flavorImageView;
@@ -747,6 +749,7 @@ public class HeadlinesFragment extends StateSavedFragment {
feedTitleView = v.findViewById(R.id.feed_title);
markedView = v.findViewById(R.id.marked);
+ scoreView = v.findViewById(R.id.score);
publishedView = v.findViewById(R.id.published);
excerptView = v.findViewById(R.id.excerpt);
flavorImageView = v.findViewById(R.id.flavor_image);
@@ -1034,6 +1037,72 @@ public class HeadlinesFragment extends StateSavedFragment {
});
}
+ if (holder.scoreView != null) {
+ TypedValue tv = new TypedValue();
+ int scoreAttr = R.attr.ic_action_trending_flat;
+
+ if (article.score > 0)
+ scoreAttr = R.attr.ic_action_trending_up;
+ else if (article.score < 0)
+ scoreAttr = R.attr.ic_action_trending_down;
+
+ m_activity.getTheme().resolveAttribute(scoreAttr, tv, true);
+
+ holder.scoreView.setImageResource(tv.resourceId);
+
+ if (article.score > Article.SCORE_HIGH)
+ holder.scoreView.setColorFilter(titleHighScoreUnreadColor);
+ else
+ holder.scoreView.setColorFilter(null);
+
+ if (m_activity.getApiLevel() >= 16) {
+ holder.scoreView.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ final EditText edit = new EditText(getActivity());
+ edit.setText(String.valueOf(article.score));
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
+ .setTitle(R.string.score_for_this_article)
+ .setPositiveButton(R.string.set_score,
+ new DialogInterface.OnClickListener() {
+
+ @Override
+ public void onClick(DialogInterface dialog,
+ int which) {
+
+ try {
+ int newScore = Integer.parseInt(edit.getText().toString());
+
+ article.score = newScore;
+
+ m_activity.saveArticleScore(article);
+
+ m_adapter.notifyItemChanged(m_list.getChildPosition(holder.view));
+ } catch (NumberFormatException e) {
+ m_activity.toast(R.string.score_invalid);
+ e.printStackTrace();
+ }
+ }
+ })
+ .setNegativeButton(getString(R.string.cancel),
+ new DialogInterface.OnClickListener() {
+
+ @Override
+ public void onClick(DialogInterface dialog,
+ int which) {
+
+ //
+
+ }
+ }).setView(edit);
+
+ Dialog dialog = builder.create();
+ dialog.show();
+ }
+ });
+ }
+ }
if (holder.publishedView != null) {
TypedValue tv = new TypedValue();
@@ -1662,9 +1731,9 @@ public class HeadlinesFragment extends StateSavedFragment {
// store original color
origTitleColors[viewType] = Integer.valueOf(tv.getCurrentTextColor());
- if (score < -500) {
+ if (score < Article.SCORE_LOW) {
tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
- } else if (score > 500) {
+ } else if (score > Article.SCORE_HIGH) {
tv.setTextColor(titleHighScoreUnreadColor);
tv.setPaintFlags(tv.getPaintFlags() & ~Paint.STRIKE_THRU_TEXT_FLAG);
} else {
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 e8559d3e..b188f2b8 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
@@ -1208,6 +1208,27 @@ public class OnlineActivity extends CommonActivity {
req.execute(map);
}
+ 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<String, String>() {
+ {
+ put("sid", getSessionId());
+ put("op", "updateArticle");
+ put("article_ids", String.valueOf(article.id));
+ put("data", String.valueOf(article.score));
+ put("field", "4");
+ }
+ };
+
+ req.execute(map);
+ }
+
public void saveArticleMarked(final Article article) {
ApiRequest req = new ApiRequest(getApplicationContext()) {
protected void onPostExecute(JsonElement result) {
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineArticleFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineArticleFragment.java
index 441ec62b..a3b152a7 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineArticleFragment.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineArticleFragment.java
@@ -235,6 +235,11 @@ public class OfflineArticleFragment extends Fragment {
}
+ ImageView score = view.findViewById(R.id.score);
+
+ if (score != null) {
+ score.setVisibility(View.GONE);
+ }
ImageView attachments = view.findViewById(R.id.attachments);
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineHeadlinesFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineHeadlinesFragment.java
index 3d9e1229..470b0aac 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineHeadlinesFragment.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineHeadlinesFragment.java
@@ -505,6 +505,7 @@ public class OfflineHeadlinesFragment extends Fragment implements OnItemClickLis
public View flavorImageOverflow;
public View headlineHeader;
public ImageView attachmentsView;
+ public ImageView scoreView;
public ArticleViewHolder(View v) {
@@ -549,6 +550,7 @@ public class OfflineHeadlinesFragment extends Fragment implements OnItemClickLis
headlineHeader = v.findViewById(R.id.headline_header);
flavorImageOverflow = v.findViewById(R.id.gallery_overflow);
attachmentsView = v.findViewById(R.id.attachments);
+ scoreView = v.findViewById(R.id.score);
}
}
@@ -794,6 +796,10 @@ public class OfflineHeadlinesFragment extends Fragment implements OnItemClickLis
holder.attachmentsView.setVisibility(View.GONE);
}
+ if (holder.scoreView != null) {
+ holder.scoreView.setVisibility(View.GONE);
+ }
+
if (holder.markedView != null) {
TypedValue tv = new TypedValue();
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java
index a11cd0ac..2daaba49 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java
@@ -21,6 +21,9 @@ public class Article implements Parcelable {
public static final int FLAVOR_KIND_VIDEO = 2;
public static final int FLAVOR_KIND_YOUTUBE = 3;
+ public static final int SCORE_LOW = -500;
+ public static final int SCORE_HIGH = 500;
+
public int id;
public boolean unread;
public boolean marked;