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 --- .../java/org/rssin/android/ArticleActivity.java | 59 ++++++++++++++++++++++ .../java/org/rssin/android/FeedItemAdapter.java | 15 +++++- app/src/main/java/org/rssin/rss/FeedItem.java | 3 +- 3 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/org/rssin/android/ArticleActivity.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 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 { - 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/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; 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