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 -- 12 files changed, 96 insertions(+), 80 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 (limited to 'app/src/main/java') 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; -- cgit v1.2.3