From d1a43fb394f57defa6b2595e31b7fee1c9d49407 Mon Sep 17 00:00:00 2001
From: Halzyn
Date: Tue, 2 Jun 2015 15:39:46 +0200
Subject: OnClick implemented for feed items
---
app/src/main/AndroidManifest.xml | 7 ++-
.../java/org/rssin/android/ArticleActivity.java | 59 ++++++++++++++++++++++
.../java/org/rssin/android/FeedItemAdapter.java | 15 +++++-
app/src/main/java/org/rssin/rss/FeedItem.java | 3 +-
app/src/main/res/layout/activity_article.xml | 50 ++++++++++++++++++
app/src/main/res/menu/menu_article.xml | 7 +++
app/src/main/res/values/strings.xml | 1 +
7 files changed, 139 insertions(+), 3 deletions(-)
create mode 100644 app/src/main/java/org/rssin/android/ArticleActivity.java
create mode 100644 app/src/main/res/layout/activity_article.xml
create mode 100644 app/src/main/res/menu/menu_article.xml
(limited to 'app')
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6726a0f..58a53b3 100755
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -12,8 +12,9 @@
-
+
+
@@ -52,6 +53,10 @@
android:name="android.support.PARENT_ACTIVITY"
android:value="org.rssin.android.UnifiedInboxActivity" />
+
+
diff --git a/app/src/main/java/org/rssin/android/ArticleActivity.java b/app/src/main/java/org/rssin/android/ArticleActivity.java
new file mode 100644
index 0000000..0cc9055
--- /dev/null
+++ b/app/src/main/java/org/rssin/android/ArticleActivity.java
@@ -0,0 +1,59 @@
+package org.rssin.android;
+
+import android.content.Intent;
+import android.support.v7.app.ActionBarActivity;
+import android.os.Bundle;
+import android.text.Html;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.ScrollView;
+import android.widget.TextView;
+
+import org.rssin.rss.FeedItem;
+import org.rssin.rssin.R;
+
+public class ArticleActivity extends ActionBarActivity {
+
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_article);
+ Intent intent = getIntent();
+ Bundle arguments = intent.getExtras();
+ FeedItem item = (FeedItem) arguments.getSerializable("Feed item");
+
+ TextView title = (TextView) findViewById(R.id.article_title);
+ title.setText(item.getTitle());
+ TextView description = (TextView) findViewById(R.id.article_description);
+ description.setText(Html.fromHtml(item.getDescription()));
+ TextView author = (TextView) findViewById(R.id.article_author);
+ author.setText("Written by: " + item.getAuthor());
+ TextView date = (TextView) findViewById(R.id.article_date);
+ date.setText("Published on: " + item.getPubDate().toString());
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ // Inflate the menu; this adds items to the action bar if it is present.
+ getMenuInflater().inflate(R.menu.menu_article, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ // Handle action bar item clicks here. The action bar will
+ // automatically handle clicks on the Home/Up button, so long
+ // as you specify a parent activity in AndroidManifest.xml.
+ int id = item.getItemId();
+
+ //noinspection SimplifiableIfStatement
+ if (id == R.id.action_settings) {
+ return true;
+ }
+
+ return super.onOptionsItemSelected(item);
+ }
+}
diff --git a/app/src/main/java/org/rssin/android/FeedItemAdapter.java b/app/src/main/java/org/rssin/android/FeedItemAdapter.java
index a16f4b5..7522bfa 100755
--- a/app/src/main/java/org/rssin/android/FeedItemAdapter.java
+++ b/app/src/main/java/org/rssin/android/FeedItemAdapter.java
@@ -4,6 +4,7 @@ package org.rssin.android;
* @author Jos.
*/
+import android.content.Intent;
import android.support.v7.widget.RecyclerView;
import android.text.Html;
import android.view.LayoutInflater;
@@ -36,6 +37,8 @@ class FeedItemAdapter extends RecyclerView.Adapter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/menu/menu_article.xml b/app/src/main/res/menu/menu_article.xml
new file mode 100644
index 0000000..3692b70
--- /dev/null
+++ b/app/src/main/res/menu/menu_article.xml
@@ -0,0 +1,7 @@
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 665b36c..4e40abf 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -42,4 +42,5 @@
Feeds
Hello world!
+ ArticleActivity
--
cgit v1.2.3
From dd851b2ab27390ac5402c39fcb73c7d1f79c9bb3 Mon Sep 17 00:00:00 2001
From: Size43
Date: Tue, 2 Jun 2015 16:05:11 +0200
Subject: SortedFeedItemContainer added
---
.../java/org/rssin/android/FeedItemAdapter.java | 19 +++++----
.../java/org/rssin/android/FeedSorterTrainer.java | 28 ++++++++++++++
.../java/org/rssin/android/FilterActivity.java | 5 ++-
.../org/rssin/android/UnifiedInboxActivity.java | 5 ++-
.../main/java/org/rssin/neurons/FeedSorter.java | 19 ++++-----
.../org/rssin/neurons/SortedFeedItemContainer.java | 45 ++++++++++++++++++++++
app/src/main/java/org/rssin/rss/FeedItem.java | 14 -------
.../java/org/rssin/rssin/FeedLoaderAndSorter.java | 7 ++--
.../java/org/rssin/rssin/UnifiedFilterLoader.java | 18 ++++-----
9 files changed, 109 insertions(+), 51 deletions(-)
create mode 100755 app/src/main/java/org/rssin/android/FeedSorterTrainer.java
create mode 100755 app/src/main/java/org/rssin/neurons/SortedFeedItemContainer.java
(limited to 'app')
diff --git a/app/src/main/java/org/rssin/android/FeedItemAdapter.java b/app/src/main/java/org/rssin/android/FeedItemAdapter.java
index 7522bfa..fe9821e 100755
--- a/app/src/main/java/org/rssin/android/FeedItemAdapter.java
+++ b/app/src/main/java/org/rssin/android/FeedItemAdapter.java
@@ -12,15 +12,18 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
+import org.rssin.neurons.FeedSorter;
+import org.rssin.neurons.Feedback;
+import org.rssin.neurons.SortedFeedItemContainer;
import org.rssin.rss.FeedItem;
import org.rssin.rssin.R;
import java.util.List;
class FeedItemAdapter extends RecyclerView.Adapter {
- List feedItems;
+ List feedItems;
- public FeedItemAdapter(List objects) {
+ public FeedItemAdapter(List objects) {
feedItems = objects;
}
@@ -34,11 +37,10 @@ class FeedItemAdapter extends RecyclerView.Adapter, VolleyError>() {
+ loaderAndSorter.getFilteredFeedItems(new VolleyFetcher(this), new FallibleListener, VolleyError>() {
@Override
- public void onReceive(List data) {
+ public void onReceive(List data) {
FeedItemAdapter feedItemAdapter = new FeedItemAdapter(data);
mRecyclerView.setAdapter(feedItemAdapter);
diff --git a/app/src/main/java/org/rssin/android/UnifiedInboxActivity.java b/app/src/main/java/org/rssin/android/UnifiedInboxActivity.java
index e38c663..76618ba 100755
--- a/app/src/main/java/org/rssin/android/UnifiedInboxActivity.java
+++ b/app/src/main/java/org/rssin/android/UnifiedInboxActivity.java
@@ -11,6 +11,7 @@ import android.view.MenuItem;
import com.android.volley.VolleyError;
import org.rssin.listener.FallibleListener;
+import org.rssin.neurons.SortedFeedItemContainer;
import org.rssin.rss.FeedItem;
import org.rssin.rssin.FeedLoaderAndSorter;
import org.rssin.rssin.Filter;
@@ -54,9 +55,9 @@ public class UnifiedInboxActivity extends ActionBarActivity {
* results. We could do this for example with {@link org.rssin.listener.RealtimeListener}
*/
UnifiedFilterLoader loaderAndSorter = new UnifiedFilterLoader(filtersList.getFilters());
- loaderAndSorter.getFilteredFeedItems(new VolleyFetcher(this), new FallibleListener, VolleyError>() {
+ loaderAndSorter.getFilteredFeedItems(new VolleyFetcher(this), new FallibleListener, VolleyError>() {
@Override
- public void onReceive(List data) {
+ public void onReceive(List data) {
FeedItemAdapter feedItemAdapter = new FeedItemAdapter(data);
mRecyclerView.setAdapter(feedItemAdapter);
mRecyclerView.setHasFixedSize(true);
diff --git a/app/src/main/java/org/rssin/neurons/FeedSorter.java b/app/src/main/java/org/rssin/neurons/FeedSorter.java
index 6cb369a..e7fdb1f 100755
--- a/app/src/main/java/org/rssin/neurons/FeedSorter.java
+++ b/app/src/main/java/org/rssin/neurons/FeedSorter.java
@@ -163,7 +163,7 @@ public class FeedSorter implements Storable {
/**
* Runs an iteration of training, using feedback that was provided previously using FeedSorter.feedback(...).
*/
- public void train() {
+ public synchronized void train() {
Random random = new Random();
for (int i = 0; i < trainingCases.size(); i++) {
TrainingCase t = trainingCases.get(random.nextInt(trainingCases.size()));
@@ -184,21 +184,18 @@ public class FeedSorter implements Storable {
* @param items The list of items.
* @return A new, sorted, list of items. The parameter items is not modified.
*/
- public List sortItems(List items) {
+ public List sortItems(List items) {
final int SECONDS_IN_DAY = 24 * 60 * 60;
- final List newItems = new ArrayList<>(items);
+ final List newItems = new ArrayList<>();
- for (FeedItem item : newItems) {
+ for (FeedItem item : items) {
PredictionInterface prediction = getPrediction(item);
- item.setScore((long) (item.getPubDate().getTime() / 1000 + prediction.getOutput() * SECONDS_IN_DAY));
+ SortedFeedItemContainer container = new SortedFeedItemContainer(item, this);
+ container.setScore((long) (item.getPubDate().getTime() / 1000 + prediction.getOutput() * SECONDS_IN_DAY));
+ newItems.add(container);
}
- Collections.sort(newItems, new Comparator() {
- @Override
- public int compare(FeedItem lhs, FeedItem rhs) {
- return (int) Math.signum(rhs.getScore() - lhs.getScore());
- }
- });
+ Collections.sort(newItems);
return newItems;
}
diff --git a/app/src/main/java/org/rssin/neurons/SortedFeedItemContainer.java b/app/src/main/java/org/rssin/neurons/SortedFeedItemContainer.java
new file mode 100755
index 0000000..cc36f5e
--- /dev/null
+++ b/app/src/main/java/org/rssin/neurons/SortedFeedItemContainer.java
@@ -0,0 +1,45 @@
+package org.rssin.neurons;
+
+import org.rssin.rss.FeedItem;
+
+/**
+ * @author Jos.
+ */
+public class SortedFeedItemContainer implements Comparable {
+ private FeedItem feeditem;
+ private FeedSorter sorter;
+ private long score;
+
+ public SortedFeedItemContainer(FeedItem feeditem, FeedSorter sorter)
+ {
+ this.feeditem = feeditem;
+ this.sorter = sorter;
+ this.setScore(-1);
+ }
+
+ public FeedItem getFeeditem() {
+ return feeditem;
+ }
+
+ public FeedSorter getSorter() {
+ return sorter;
+ }
+
+ public long getScore() {
+ if(score == -1)
+ {
+ throw new UnsupportedOperationException("score not set");
+ }
+
+ return score;
+ }
+
+ public void setScore(long score) {
+ this.score = score;
+ }
+
+ @Override
+ public int compareTo(SortedFeedItemContainer another) {
+ return Long.compare(this.getScore(), another.getScore());
+ }
+}
diff --git a/app/src/main/java/org/rssin/rss/FeedItem.java b/app/src/main/java/org/rssin/rss/FeedItem.java
index 5565488..7128c4c 100755
--- a/app/src/main/java/org/rssin/rss/FeedItem.java
+++ b/app/src/main/java/org/rssin/rss/FeedItem.java
@@ -20,7 +20,6 @@ public class FeedItem implements Serializable {
private String enclosure;
private String source;
private List category = new LinkedList<>();
- private transient long score = -1;
public FeedItem(String guid, Date pubDate, String title, String description, String link,
String author, List category, String comments, String enclosure, String source)
@@ -170,17 +169,4 @@ public class FeedItem implements Serializable {
&& (enclosure == null && other.enclosure == null) || (enclosure != null && enclosure.equals(other.enclosure))
&& (source == null && other.source == null) || (source != null && source.equals(other.source));
}
-
- public long getScore() {
- if(score == -1)
- {
- throw new UnsupportedOperationException("score not set");
- }
-
- return score;
- }
-
- public void setScore(long score) {
- this.score = score;
- }
}
diff --git a/app/src/main/java/org/rssin/rssin/FeedLoaderAndSorter.java b/app/src/main/java/org/rssin/rssin/FeedLoaderAndSorter.java
index 7ad0001..ecdfc33 100755
--- a/app/src/main/java/org/rssin/rssin/FeedLoaderAndSorter.java
+++ b/app/src/main/java/org/rssin/rssin/FeedLoaderAndSorter.java
@@ -5,6 +5,7 @@ import org.rssin.listener.FallibleListener;
import org.rssin.listener.Listener;
import org.rssin.listener.RealtimeListener;
import org.rssin.neurons.FeedSorter;
+import org.rssin.neurons.SortedFeedItemContainer;
import org.rssin.rss.FeedItem;
import org.rssin.rss.FeedLoader;
@@ -27,7 +28,7 @@ public class FeedLoaderAndSorter {
* @param fetcher HTTP Fetcher
* @param listener Listener for when the fetcher finishes
*/
- public void getFilteredFeedItems(Fetcher fetcher, final Listener> listener)
+ public void getFilteredFeedItems(Fetcher fetcher, final Listener> listener)
{
final List resultingItems = new ArrayList<>();
final Counter counter = new Counter(filter.getFeeds().size());
@@ -42,10 +43,10 @@ public class FeedLoaderAndSorter {
resultingItems.add(item);
}
- sorter.sortItems(resultingItems);
+ List sorted = sorter.sortItems(resultingItems);
if (counter.decr().isZero() || listener.getClass() == RealtimeListener.class) {
- listener.onReceive(resultingItems);
+ listener.onReceive(sorted);
if (counter.decr().isZero() && listener.getClass() == RealtimeListener.class) {
((RealtimeListener) listener).finish();
}
diff --git a/app/src/main/java/org/rssin/rssin/UnifiedFilterLoader.java b/app/src/main/java/org/rssin/rssin/UnifiedFilterLoader.java
index 9740380..6ca8b50 100755
--- a/app/src/main/java/org/rssin/rssin/UnifiedFilterLoader.java
+++ b/app/src/main/java/org/rssin/rssin/UnifiedFilterLoader.java
@@ -3,6 +3,7 @@ package org.rssin.rssin;
import org.rssin.http.Fetcher;
import org.rssin.listener.Listener;
import org.rssin.listener.RealtimeListener;
+import org.rssin.neurons.SortedFeedItemContainer;
import org.rssin.rss.FeedItem;
import java.util.ArrayList;
@@ -28,32 +29,27 @@ public class UnifiedFilterLoader {
* @param fetcher HTTP Fetcher
* @param listener Listener for when the fetcher finishes
*/
- public void getFilteredFeedItems(Fetcher fetcher, final Listener> listener) {
+ public void getFilteredFeedItems(Fetcher fetcher, final Listener> listener) {
// HashSet to make sure that there are no duplicates when merging multiple filters, since different filters
// may contain the same feed.
- final HashSet resultingItems = new HashSet<>();
+ final HashSet resultingItems = new HashSet<>();
final Counter counter = new Counter(filters.size());
for (Filter filter : filters) {
// Load the sorted FeedItems from the filters, and combine them.
FeedLoaderAndSorter loaderAndSorter = new FeedLoaderAndSorter(filter);
- loaderAndSorter.getFilteredFeedItems(fetcher, new Listener>() {
+ loaderAndSorter.getFilteredFeedItems(fetcher, new Listener>() {
@Override
- public void onReceive(List data) {
+ public void onReceive(List data) {
resultingItems.addAll(data);
if (counter.decr().isZero() || listener.getClass() == RealtimeListener.class) {
- ArrayList newItems = new ArrayList(resultingItems);
+ ArrayList newItems = new ArrayList(resultingItems);
// Do another sort to make sure the items are still in the correct order.
// this uses the score set by the FeedSorter class, which is called
// in the Filter class. The Unified inbox does not have a separate network.
- Collections.sort(newItems, new Comparator() {
- @Override
- public int compare(FeedItem lhs, FeedItem rhs) {
- return (int) Math.signum(rhs.getScore() - lhs.getScore());
- }
- });
+ Collections.sort(newItems);
listener.onReceive(newItems);
if (counter.decr().isZero() && listener.getClass() == RealtimeListener.class) {
--
cgit v1.2.3
From 5ede214acc280c40fc4ada36953b6d14040124aa Mon Sep 17 00:00:00 2001
From: Size43
Date: Tue, 2 Jun 2015 22:25:52 +0200
Subject: Added like/dislike button in ArticleActivity
---
.../java/org/rssin/android/ArticleActivity.java | 20 ++++---
.../java/org/rssin/android/FeedItemAdapter.java | 8 ++-
.../java/org/rssin/android/FeedSorterTrainer.java | 3 ++
.../java/org/rssin/android/FilterActivity.java | 4 +-
.../main/java/org/rssin/android/FiltersList.java | 2 +-
.../android/SharedPreferencesStorageProvider.java | 0
.../org/rssin/android/UnifiedInboxActivity.java | 4 +-
.../main/java/org/rssin/neurons/FeedSorter.java | 24 +++++----
.../org/rssin/neurons/SortedFeedItemContainer.java | 45 ----------------
.../java/org/rssin/rssin/FeedLoaderAndSorter.java | 5 +-
.../org/rssin/rssin/SortedFeedItemContainer.java | 58 +++++++++++++++++++++
.../java/org/rssin/rssin/UnifiedFilterLoader.java | 3 --
.../drawable-hdpi/ic_action_action_thumb_down.png | Bin 0 -> 455 bytes
.../drawable-hdpi/ic_action_action_thumb_up.png | Bin 0 -> 465 bytes
.../drawable-mdpi/ic_action_action_thumb_down.png | Bin 0 -> 312 bytes
.../drawable-mdpi/ic_action_action_thumb_up.png | Bin 0 -> 291 bytes
.../drawable-xhdpi/ic_action_action_thumb_down.png | Bin 0 -> 555 bytes
.../drawable-xhdpi/ic_action_action_thumb_up.png | Bin 0 -> 562 bytes
.../ic_action_action_thumb_down.png | Bin 0 -> 749 bytes
.../drawable-xxhdpi/ic_action_action_thumb_up.png | Bin 0 -> 792 bytes
.../ic_action_action_thumb_down.png | Bin 0 -> 1167 bytes
.../drawable-xxxhdpi/ic_action_action_thumb_up.png | Bin 0 -> 1201 bytes
app/src/main/res/menu/menu_article.xml | 16 +++++-
app/src/main/res/values/strings.xml | 2 +
24 files changed, 112 insertions(+), 82 deletions(-)
mode change 100644 => 100755 app/src/main/java/org/rssin/android/ArticleActivity.java
mode change 100644 => 100755 app/src/main/java/org/rssin/android/SharedPreferencesStorageProvider.java
delete mode 100755 app/src/main/java/org/rssin/neurons/SortedFeedItemContainer.java
create mode 100755 app/src/main/java/org/rssin/rssin/SortedFeedItemContainer.java
create mode 100755 app/src/main/res/drawable-hdpi/ic_action_action_thumb_down.png
create mode 100755 app/src/main/res/drawable-hdpi/ic_action_action_thumb_up.png
create mode 100755 app/src/main/res/drawable-mdpi/ic_action_action_thumb_down.png
create mode 100755 app/src/main/res/drawable-mdpi/ic_action_action_thumb_up.png
create mode 100755 app/src/main/res/drawable-xhdpi/ic_action_action_thumb_down.png
create mode 100755 app/src/main/res/drawable-xhdpi/ic_action_action_thumb_up.png
create mode 100755 app/src/main/res/drawable-xxhdpi/ic_action_action_thumb_down.png
create mode 100755 app/src/main/res/drawable-xxhdpi/ic_action_action_thumb_up.png
create mode 100755 app/src/main/res/drawable-xxxhdpi/ic_action_action_thumb_down.png
create mode 100755 app/src/main/res/drawable-xxxhdpi/ic_action_action_thumb_up.png
mode change 100644 => 100755 app/src/main/res/menu/menu_article.xml
mode change 100644 => 100755 app/src/main/res/values/strings.xml
(limited to 'app')
diff --git a/app/src/main/java/org/rssin/android/ArticleActivity.java b/app/src/main/java/org/rssin/android/ArticleActivity.java
old mode 100644
new mode 100755
index 0cc9055..2e5460c
--- a/app/src/main/java/org/rssin/android/ArticleActivity.java
+++ b/app/src/main/java/org/rssin/android/ArticleActivity.java
@@ -4,18 +4,18 @@ import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.text.Html;
-import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
-import android.view.View;
-import android.widget.ScrollView;
import android.widget.TextView;
+import org.rssin.rssin.SortedFeedItemContainer;
import org.rssin.rss.FeedItem;
import org.rssin.rssin.R;
-public class ArticleActivity extends ActionBarActivity {
+import static org.rssin.neurons.Feedback.*;
+public class ArticleActivity extends ActionBarActivity {
+ private SortedFeedItemContainer container;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -23,7 +23,8 @@ public class ArticleActivity extends ActionBarActivity {
setContentView(R.layout.activity_article);
Intent intent = getIntent();
Bundle arguments = intent.getExtras();
- FeedItem item = (FeedItem) arguments.getSerializable("Feed item");
+ container = (SortedFeedItemContainer) arguments.getSerializable("item");
+ FeedItem item = container.getFeeditem();
TextView title = (TextView) findViewById(R.id.article_title);
title.setText(item.getTitle());
@@ -33,6 +34,8 @@ public class ArticleActivity extends ActionBarActivity {
author.setText("Written by: " + item.getAuthor());
TextView date = (TextView) findViewById(R.id.article_date);
date.setText("Published on: " + item.getPubDate().toString());
+
+ new Thread(new FeedSorterTrainer(container.getSorter())).start();
}
@Override
@@ -50,7 +53,12 @@ public class ArticleActivity extends ActionBarActivity {
int id = item.getItemId();
//noinspection SimplifiableIfStatement
- if (id == R.id.action_settings) {
+ if (id == R.id.article_action_dislike) {
+ container.feedback(Dislike);
+ return true;
+ } else if(id == R.id.article_action_like)
+ {
+ container.feedback(Like);
return true;
}
diff --git a/app/src/main/java/org/rssin/android/FeedItemAdapter.java b/app/src/main/java/org/rssin/android/FeedItemAdapter.java
index fe9821e..de1766a 100755
--- a/app/src/main/java/org/rssin/android/FeedItemAdapter.java
+++ b/app/src/main/java/org/rssin/android/FeedItemAdapter.java
@@ -12,10 +12,8 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
-import org.rssin.neurons.FeedSorter;
import org.rssin.neurons.Feedback;
-import org.rssin.neurons.SortedFeedItemContainer;
-import org.rssin.rss.FeedItem;
+import org.rssin.rssin.SortedFeedItemContainer;
import org.rssin.rssin.R;
import java.util.List;
@@ -65,9 +63,9 @@ class FeedItemAdapter extends RecyclerView.Adapter sortItems(List items) {
+ public List sortItems(List items) {
final int SECONDS_IN_DAY = 24 * 60 * 60;
- final List newItems = new ArrayList<>();
- for (FeedItem item : items) {
- PredictionInterface prediction = getPrediction(item);
- SortedFeedItemContainer container = new SortedFeedItemContainer(item, this);
- container.setScore((long) (item.getPubDate().getTime() / 1000 + prediction.getOutput() * SECONDS_IN_DAY));
- newItems.add(container);
+ for (SortedFeedItemContainer item : items) {
+ PredictionInterface prediction = getPrediction(item.getFeeditem());
+ item.setScore((long) (item.getFeeditem().getPubDate().getTime() / 1000 + prediction.getOutput() * SECONDS_IN_DAY));
}
- Collections.sort(newItems);
+ Collections.sort(items);
- return newItems;
+ return items;
}
}
diff --git a/app/src/main/java/org/rssin/neurons/SortedFeedItemContainer.java b/app/src/main/java/org/rssin/neurons/SortedFeedItemContainer.java
deleted file mode 100755
index cc36f5e..0000000
--- a/app/src/main/java/org/rssin/neurons/SortedFeedItemContainer.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package org.rssin.neurons;
-
-import org.rssin.rss.FeedItem;
-
-/**
- * @author Jos.
- */
-public class SortedFeedItemContainer implements Comparable {
- private FeedItem feeditem;
- private FeedSorter sorter;
- private long score;
-
- public SortedFeedItemContainer(FeedItem feeditem, FeedSorter sorter)
- {
- this.feeditem = feeditem;
- this.sorter = sorter;
- this.setScore(-1);
- }
-
- public FeedItem getFeeditem() {
- return feeditem;
- }
-
- public FeedSorter getSorter() {
- return sorter;
- }
-
- public long getScore() {
- if(score == -1)
- {
- throw new UnsupportedOperationException("score not set");
- }
-
- return score;
- }
-
- public void setScore(long score) {
- this.score = score;
- }
-
- @Override
- public int compareTo(SortedFeedItemContainer another) {
- return Long.compare(this.getScore(), another.getScore());
- }
-}
diff --git a/app/src/main/java/org/rssin/rssin/FeedLoaderAndSorter.java b/app/src/main/java/org/rssin/rssin/FeedLoaderAndSorter.java
index ecdfc33..3211325 100755
--- a/app/src/main/java/org/rssin/rssin/FeedLoaderAndSorter.java
+++ b/app/src/main/java/org/rssin/rssin/FeedLoaderAndSorter.java
@@ -5,7 +5,6 @@ import org.rssin.listener.FallibleListener;
import org.rssin.listener.Listener;
import org.rssin.listener.RealtimeListener;
import org.rssin.neurons.FeedSorter;
-import org.rssin.neurons.SortedFeedItemContainer;
import org.rssin.rss.FeedItem;
import org.rssin.rss.FeedLoader;
@@ -30,7 +29,7 @@ public class FeedLoaderAndSorter {
*/
public void getFilteredFeedItems(Fetcher fetcher, final Listener> listener)
{
- final List resultingItems = new ArrayList<>();
+ final List resultingItems = new ArrayList<>();
final Counter counter = new Counter(filter.getFeeds().size());
final FeedSorter sorter = filter.getFeedSorter();
@@ -40,7 +39,7 @@ public class FeedLoaderAndSorter {
@Override
public void onReceive(Object data) {
for (FeedItem item : loader.getFeed().getPosts()) {
- resultingItems.add(item);
+ resultingItems.add(new SortedFeedItemContainer(item, filter));
}
List sorted = sorter.sortItems(resultingItems);
diff --git a/app/src/main/java/org/rssin/rssin/SortedFeedItemContainer.java b/app/src/main/java/org/rssin/rssin/SortedFeedItemContainer.java
new file mode 100755
index 0000000..d46cf3b
--- /dev/null
+++ b/app/src/main/java/org/rssin/rssin/SortedFeedItemContainer.java
@@ -0,0 +1,58 @@
+package org.rssin.rssin;
+
+import org.rssin.android.FiltersList;
+import org.rssin.neurons.FeedSorter;
+import org.rssin.neurons.Feedback;
+import org.rssin.rss.FeedItem;
+
+import java.io.Serializable;
+
+/**
+ * @author Jos.
+ */
+public class SortedFeedItemContainer implements Comparable, Serializable {
+ private FeedItem feeditem;
+ private int filterHashCode;
+ private long score;
+
+ public SortedFeedItemContainer(FeedItem feeditem, Filter filter)
+ {
+ this.feeditem = feeditem;
+ this.filterHashCode = filter.hashCode();
+ this.setScore(-1);
+ }
+
+ public FeedItem getFeeditem() {
+ return feeditem;
+ }
+
+ public FeedSorter getSorter() {
+ FiltersList provider = FiltersList.getInstance();
+ Filter f = provider.getFilterFromHashCode(filterHashCode);
+
+ return f.getFeedSorter();
+ }
+
+ public long getScore() {
+ if(score == -1)
+ {
+ throw new UnsupportedOperationException("score not set");
+ }
+
+ return score;
+ }
+
+ public void feedback(Feedback feedback)
+ {
+ getSorter().feedback(getFeeditem(), feedback);
+ }
+
+ public void setScore(long score) {
+ this.score = score;
+ }
+
+ @Override
+ public int compareTo(SortedFeedItemContainer another) {
+ return (int)(another.getScore() - this.getScore());
+ }
+}
diff --git a/app/src/main/java/org/rssin/rssin/UnifiedFilterLoader.java b/app/src/main/java/org/rssin/rssin/UnifiedFilterLoader.java
index 6ca8b50..619a152 100755
--- a/app/src/main/java/org/rssin/rssin/UnifiedFilterLoader.java
+++ b/app/src/main/java/org/rssin/rssin/UnifiedFilterLoader.java
@@ -3,12 +3,9 @@ package org.rssin.rssin;
import org.rssin.http.Fetcher;
import org.rssin.listener.Listener;
import org.rssin.listener.RealtimeListener;
-import org.rssin.neurons.SortedFeedItemContainer;
-import org.rssin.rss.FeedItem;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
diff --git a/app/src/main/res/drawable-hdpi/ic_action_action_thumb_down.png b/app/src/main/res/drawable-hdpi/ic_action_action_thumb_down.png
new file mode 100755
index 0000000..a893329
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_action_action_thumb_down.png differ
diff --git a/app/src/main/res/drawable-hdpi/ic_action_action_thumb_up.png b/app/src/main/res/drawable-hdpi/ic_action_action_thumb_up.png
new file mode 100755
index 0000000..8a88204
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_action_action_thumb_up.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_action_action_thumb_down.png b/app/src/main/res/drawable-mdpi/ic_action_action_thumb_down.png
new file mode 100755
index 0000000..949a390
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_action_action_thumb_down.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_action_action_thumb_up.png b/app/src/main/res/drawable-mdpi/ic_action_action_thumb_up.png
new file mode 100755
index 0000000..cdd182e
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_action_action_thumb_up.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_action_action_thumb_down.png b/app/src/main/res/drawable-xhdpi/ic_action_action_thumb_down.png
new file mode 100755
index 0000000..fe6e491
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_action_action_thumb_down.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_action_action_thumb_up.png b/app/src/main/res/drawable-xhdpi/ic_action_action_thumb_up.png
new file mode 100755
index 0000000..3f14e6d
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_action_action_thumb_up.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_action_thumb_down.png b/app/src/main/res/drawable-xxhdpi/ic_action_action_thumb_down.png
new file mode 100755
index 0000000..f46548a
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_action_action_thumb_down.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_action_thumb_up.png b/app/src/main/res/drawable-xxhdpi/ic_action_action_thumb_up.png
new file mode 100755
index 0000000..c689b37
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_action_action_thumb_up.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_action_action_thumb_down.png b/app/src/main/res/drawable-xxxhdpi/ic_action_action_thumb_down.png
new file mode 100755
index 0000000..c4eed7d
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_action_action_thumb_down.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_action_action_thumb_up.png b/app/src/main/res/drawable-xxxhdpi/ic_action_action_thumb_up.png
new file mode 100755
index 0000000..b475923
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_action_action_thumb_up.png differ
diff --git a/app/src/main/res/menu/menu_article.xml b/app/src/main/res/menu/menu_article.xml
old mode 100644
new mode 100755
index 3692b70..c0f4281
--- a/app/src/main/res/menu/menu_article.xml
+++ b/app/src/main/res/menu/menu_article.xml
@@ -2,6 +2,18 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="org.rssin.android.ArticleActivity">
-
+
+
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
old mode 100644
new mode 100755
index 9560d7c..77a55f0
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -44,4 +44,6 @@
Hello world!
ArticleActivity
feeds
+ Dislike
+ Like
--
cgit v1.2.3