From 0cf0c338f4205e2a4a3cb522362b20025848868e Mon Sep 17 00:00:00 2001
From: Size43
Date: Tue, 9 Jun 2015 15:22:22 +0200
Subject: Single feedsorter for all filters
---
app/src/main/AndroidManifest.xml | 16 --
.../java/org/rssin/android/ArticleActivity.java | 6 +-
.../java/org/rssin/android/FeedItemAdapter.java | 5 +-
.../java/org/rssin/android/FeedSorterProvider.java | 81 ++++++++
.../java/org/rssin/android/FeedSorterTrainer.java | 14 +-
.../java/org/rssin/android/FilterActivity.java | 98 ---------
.../java/org/rssin/android/FiltersActivity.java | 228 ---------------------
.../java/org/rssin/android/HomeScreenActivity.java | 26 +--
.../android/NavigationDrawerAllFeedsFragment.java | 53 ++---
.../android/NavigationDrawerFeedFragment.java | 56 +++--
.../android/NavigationDrawerFilterFragment.java | 6 +-
.../NavigationDrawerManageFiltersFragment.java | 5 -
.../android/SharedPreferencesStorageProvider.java | 14 +-
.../java/org/rssin/rssin/FeedLoaderAndSorter.java | 19 +-
app/src/main/java/org/rssin/rssin/Filter.java | 76 -------
.../org/rssin/rssin/SortedFeedItemContainer.java | 20 +-
.../java/org/rssin/rssin/UnifiedFilterLoader.java | 77 -------
.../java/org/rssin/rssin/dummy/DummyContent.java | 55 -----
app/src/main/res/layout/activity_filter.xml | 2 +-
app/src/main/res/layout/fragment_filters.xml | 2 +-
app/src/main/res/menu/menu_filter.xml | 2 +-
21 files changed, 170 insertions(+), 691 deletions(-)
create mode 100755 app/src/main/java/org/rssin/android/FeedSorterProvider.java
delete mode 100755 app/src/main/java/org/rssin/android/FilterActivity.java
delete mode 100755 app/src/main/java/org/rssin/android/FiltersActivity.java
delete mode 100755 app/src/main/java/org/rssin/rssin/UnifiedFilterLoader.java
delete mode 100755 app/src/main/java/org/rssin/rssin/dummy/DummyContent.java
mode change 100644 => 100755 app/src/main/res/layout/fragment_filters.xml
mode change 100644 => 100755 app/src/main/res/menu/menu_filter.xml
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c0a9eed..1403185 100755
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -13,14 +13,6 @@
android:name="org.rssin.android.SettingsActivity"
android:label="@string/title_activity_settings" >
-
-
-
@@ -28,14 +20,6 @@
android:name="android.support.PARENT_ACTIVITY"
android:value="org.rssin.android.HomeScreenActivity" />
-
-
-
, VolleyError>() {
- @Override
- public void onReceive(List data) {
-
- FeedItemAdapter feedItemAdapter = new FeedItemAdapter(data);
- mRecyclerView.setAdapter(feedItemAdapter);
- mRecyclerView.setHasFixedSize(true);
- }
-
- @Override
- public void onError(VolleyError error) {
- Frontend.error(getBaseContext(), R.string.error_net_load);
- }
- });
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.menu_filter, menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- int id = item.getItemId();
-
- if (id == R.id.action_settings) {
- Intent intent = new Intent(getApplicationContext(), FilterSettingsActivity.class);
- intent.putExtra("filter", filter.hashCode());
- startActivity(intent);
- return true;
- }
-
- return super.onOptionsItemSelected(item);
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
- try {
- filter.storeFeedSorter(InternalStorageProvider.getInstance(this));
- } catch (Exception e) {
- Frontend.warning(this, R.string.error_save_feedsorter, e);
- }
- }
-}
diff --git a/app/src/main/java/org/rssin/android/FiltersActivity.java b/app/src/main/java/org/rssin/android/FiltersActivity.java
deleted file mode 100755
index a8e295c..0000000
--- a/app/src/main/java/org/rssin/android/FiltersActivity.java
+++ /dev/null
@@ -1,228 +0,0 @@
-package org.rssin.android;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.pm.ActivityInfo;
-import android.support.v7.app.ActionBarActivity;
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.WindowManager;
-import android.widget.AdapterView;
-import android.widget.EditText;
-import android.widget.ListView;
-import android.widget.TextView;
-
-import org.rssin.rssin.Filter;
-import org.rssin.rssin.R;
-
-import java.io.IOException;
-import java.util.List;
-
-/**
- * List of filters
- *
- * Short tap opens the list with current articles that the filter returns
- * Long tap opens filter settings
- *
- * @author Camil Staps
- */
-public class FiltersActivity extends ActionBarActivity {
-
- private FiltersList filtersList;
- private ListView filtersView;
- private FilterAdapter filterAdapter;
-
- private AdapterView.OnItemClickListener onFilterClickListener;
- private AdapterView.OnItemLongClickListener onFilterLongClickListener;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.fragment_filters);
-
- filtersView = (ListView) findViewById(R.id.filters_list);
-
- try {
- filtersList = FiltersList.getInstance(this);
- } catch (IOException ex) {
- Frontend.error(this, R.string.error_load_filters, ex);
- finish();
- }
-
- filterAdapter = new FilterAdapter(this, R.layout.item_filter, filtersList.getFilters());
- filtersView.setAdapter(filterAdapter);
-
- setupListeners();
- }
-
- @Override
- protected void onResume() {
- super.onResume();
-
- filterAdapter.notifyDataSetChanged();
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.menu_filters, menu);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- int id = item.getItemId();
-
- if (id == R.id.filters_action_add) {
- openAddDialog();
- return true;
- }
-
- return super.onOptionsItemSelected(item);
- }
-
- /**
- * Setup listeners for the list items
- */
- private void setupListeners() {
- onFilterClickListener = new AdapterView.OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView> parent, View view, int position, long id) {
- Filter item = (Filter) parent.getItemAtPosition(position);
- openFilter(item);
- }
- };
- onFilterLongClickListener = new AdapterView.OnItemLongClickListener() {
- @Override
- public boolean onItemLongClick(AdapterView> parent, View view, int position, long id) {
- Filter item = (Filter) parent.getItemAtPosition(position);
- openFilterSettings(item);
- return true;
- }
- };
-
- filtersView.setOnItemClickListener(onFilterClickListener);
- filtersView.setOnItemLongClickListener(onFilterLongClickListener);
- }
-
- /**
- * Open dialog to create new filter
- * For the moment, we temporarily disable rotating because we can't get it working otherwise.
- * @todo make rotating possible
- */
- public void openAddDialog() {
- setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
-
- AlertDialog.Builder alert = new AlertDialog.Builder(this);
-
- alert.setTitle("Add filter");
- alert.setMessage("Title:");
-
- final EditText input = new EditText(this);
- input.setFocusable(true);
- input.requestFocus();
-
- AlertDialog dialog = alert
- .setView(input)
- .setPositiveButton(getResources().getString(R.string.button_apply), new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- String value = input.getText().toString();
- try {
- Filter f = new Filter(value);
- filtersList.getFilters().add(f);
- filtersList.save();
- openFilterSettings(f);
- } catch (Exception e) {
- Frontend.error(getBaseContext(), R.string.error_save_filters, e);
- }
- setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
- }
- })
- .setNegativeButton(getResources().getString(R.string.button_cancel), new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
- }
- })
- .setOnCancelListener(new DialogInterface.OnCancelListener() {
- @Override
- public void onCancel(DialogInterface dialog) {
- setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
- }
- })
- .create();
-
- dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
- dialog.show();
- }
-
- public void openFilterSettings(Filter f) {
- f.ensureFeeds(DefaultStorageProvider.getInstance(this));
- Intent intent = new Intent(getApplicationContext(), FilterSettingsActivity.class);
- intent.putExtra("filter", f.hashCode());
- startActivity(intent);
- }
-
- public void openFilter(Filter f) {
- f.ensureFeeds(DefaultStorageProvider.getInstance(this));
- Intent intent = new Intent(getApplicationContext(), FilterActivity.class);
- intent.putExtra("filter", f.hashCode());
- startActivity(intent);
- }
-
- /**
- * Custom ArrayAdapter to display filters with our own menu item
- */
- private static class FilterAdapter extends SortedArrayAdapter {
-
- Context context;
- int layoutResourceId;
-
- public FilterAdapter(Context context, int resource, List objects) {
- super(context, resource, objects);
- this.context = context;
- layoutResourceId = resource;
- items = objects;
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- View row = convertView;
- FilterHolder holder = null;
-
- if (row == null) {
- LayoutInflater inflater = ((Activity) context).getLayoutInflater();
- row = inflater.inflate(layoutResourceId, parent, false);
-
- holder = new FilterHolder();
- holder.title = (TextView) row.findViewById(R.id.filter_item_title);
- holder.feeds = (TextView) row.findViewById(R.id.filter_item_feeds);
-
- row.setTag(holder);
- } else {
- holder = (FilterHolder) row.getTag();
- }
-
- Filter filter = items.get(position);
- holder.title.setText(filter.getTitle());
- holder.feeds.setText(filter.getFeeds().size() + " " + context.getString(R.string.feeds));
-
- return row;
- }
-
- /**
- * TextViews holder
- */
- private static class FilterHolder {
- TextView title;
- TextView feeds;
- }
- }
-
-}
diff --git a/app/src/main/java/org/rssin/android/HomeScreenActivity.java b/app/src/main/java/org/rssin/android/HomeScreenActivity.java
index bbae149..797476a 100755
--- a/app/src/main/java/org/rssin/android/HomeScreenActivity.java
+++ b/app/src/main/java/org/rssin/android/HomeScreenActivity.java
@@ -1,33 +1,15 @@
package org.rssin.android;
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.support.v7.app.ActionBarActivity;
-import android.support.v7.app.ActionBar;
+import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
-import android.os.Bundle;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
-import android.view.LayoutInflater;
+import android.support.v4.widget.DrawerLayout;
+import android.support.v7.app.ActionBar;
+import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.support.v4.widget.DrawerLayout;
-import com.android.volley.VolleyError;
-
-import org.rssin.listener.FallibleListener;
-import org.rssin.rssin.Feed;
-import org.rssin.rssin.Filter;
import org.rssin.rssin.R;
-import org.rssin.rssin.SortedFeedItemContainer;
-import org.rssin.rssin.UnifiedFilterLoader;
-
-import java.io.IOException;
-import java.util.List;
public class HomeScreenActivity extends ActionBarActivity
diff --git a/app/src/main/java/org/rssin/android/NavigationDrawerAllFeedsFragment.java b/app/src/main/java/org/rssin/android/NavigationDrawerAllFeedsFragment.java
index 15edbed..b7a0d73 100755
--- a/app/src/main/java/org/rssin/android/NavigationDrawerAllFeedsFragment.java
+++ b/app/src/main/java/org/rssin/android/NavigationDrawerAllFeedsFragment.java
@@ -13,12 +13,10 @@ import android.view.ViewGroup;
import com.android.volley.VolleyError;
import org.rssin.listener.FallibleListener;
-import org.rssin.rssin.Filter;
+import org.rssin.rssin.FeedLoaderAndSorter;
import org.rssin.rssin.R;
import org.rssin.rssin.SortedFeedItemContainer;
-import org.rssin.rssin.UnifiedFilterLoader;
-import java.io.IOException;
import java.util.List;
/**
@@ -44,38 +42,27 @@ public class NavigationDrawerAllFeedsFragment extends Fragment {
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(context);
mRecyclerView.setLayoutManager(mLayoutManager);
- try {
- FiltersList filtersList = FiltersList.getInstance(context);
-
- for(Filter filter : filtersList.getFilters()) {
- filter.ensureFeedSorter(DefaultStorageProvider.getInstance(context));
- filter.ensureFeeds(DefaultStorageProvider.getInstance(context));
+ /**
+ * @todo Load feeds in separate thread so that the UI is immediately available
+ *
+ * @todo Now, feed items are only returned after *all* feeds have been loaded. With many
+ * filters that may take a while, so it would be preferable to return intermediate
+ * results. We could do this for example with {@link org.rssin.listener.RealtimeListener}
+ */
+ FeedLoaderAndSorter loaderAndSorter = new FeedLoaderAndSorter(FeedsList.getInstance().getFeeds());
+ loaderAndSorter.getFilteredFeedItems(context, new VolleyFetcher(context), new FallibleListener, VolleyError>() {
+ @Override
+ public void onReceive(List data) {
+ FeedItemAdapter feedItemAdapter = new FeedItemAdapter(data);
+ mRecyclerView.setAdapter(feedItemAdapter);
+ mRecyclerView.setHasFixedSize(true);
}
- /**
- * @todo Load feeds in separate thread so that the UI is immediately available
- *
- * @todo Now, feed items are only returned after *all* feeds have been loaded. With many
- * filters that may take a while, so it would be preferable to return intermediate
- * results. We could do this for example with {@link org.rssin.listener.RealtimeListener}
- */
- UnifiedFilterLoader loaderAndSorter = new UnifiedFilterLoader(filtersList.getFilters());
- loaderAndSorter.getFilteredFeedItems(new VolleyFetcher(context), new FallibleListener, VolleyError>() {
- @Override
- public void onReceive(List data) {
- FeedItemAdapter feedItemAdapter = new FeedItemAdapter(data);
- mRecyclerView.setAdapter(feedItemAdapter);
- mRecyclerView.setHasFixedSize(true);
- }
-
- @Override
- public void onError(VolleyError error) {
- Frontend.error(context, R.string.error_net_load);
- }
- });
- } catch (IOException e) {
- Frontend.error(context, R.string.error_load_filters, e);
- }
+ @Override
+ public void onError(VolleyError error) {
+ Frontend.error(context, R.string.error_net_load);
+ }
+ });
return rootView;
}
diff --git a/app/src/main/java/org/rssin/android/NavigationDrawerFeedFragment.java b/app/src/main/java/org/rssin/android/NavigationDrawerFeedFragment.java
index 901d854..0f33aca 100755
--- a/app/src/main/java/org/rssin/android/NavigationDrawerFeedFragment.java
+++ b/app/src/main/java/org/rssin/android/NavigationDrawerFeedFragment.java
@@ -14,13 +14,13 @@ import com.android.volley.VolleyError;
import org.rssin.listener.FallibleListener;
import org.rssin.rssin.Feed;
-import org.rssin.rssin.Filter;
+import org.rssin.rssin.FeedLoaderAndSorter;
import org.rssin.rssin.R;
import org.rssin.rssin.SortedFeedItemContainer;
-import org.rssin.rssin.UnifiedFilterLoader;
import java.io.IOException;
import java.util.List;
+import java.util.ArrayList;
/**
* @author Jos.
@@ -64,38 +64,30 @@ public class NavigationDrawerFeedFragment extends Fragment {
feed = (Feed) args.get(ARG_FEED_NAME);
- try {
- FiltersList filtersList = FiltersList.getInstance(context);
-
- for(Filter filter : filtersList.getFilters()) {
- filter.ensureFeedSorter(DefaultStorageProvider.getInstance(context));
- filter.ensureFeeds(DefaultStorageProvider.getInstance(context));
+ List singleFeedList = new ArrayList();
+ singleFeedList.add(feed);
+
+ /**
+ * @todo Load feeds in separate thread so that the UI is immediately available
+ *
+ * @todo Now, feed items are only returned after *all* feeds have been loaded. With many
+ * filters that may take a while, so it would be preferable to return intermediate
+ * results. We could do this for example with {@link org.rssin.listener.RealtimeListener}
+ */
+ FeedLoaderAndSorter loaderAndSorter = new FeedLoaderAndSorter(singleFeedList);
+ loaderAndSorter.getFilteredFeedItems(context, new VolleyFetcher(context), new FallibleListener, VolleyError>() {
+ @Override
+ public void onReceive(List data) {
+ FeedItemAdapter feedItemAdapter = new FeedItemAdapter(data);
+ mRecyclerView.setAdapter(feedItemAdapter);
+ mRecyclerView.setHasFixedSize(true);
}
- /**
- * @todo Load feeds in separate thread so that the UI is immediately available
- *
- * @todo Now, feed items are only returned after *all* feeds have been loaded. With many
- * filters that may take a while, so it would be preferable to return intermediate
- * results. We could do this for example with {@link org.rssin.listener.RealtimeListener}
- */
- UnifiedFilterLoader loaderAndSorter = new UnifiedFilterLoader(filtersList.getFilters());
- loaderAndSorter.getFilteredFeedItems(new VolleyFetcher(context), new FallibleListener, VolleyError>() {
- @Override
- public void onReceive(List data) {
- FeedItemAdapter feedItemAdapter = new FeedItemAdapter(data);
- mRecyclerView.setAdapter(feedItemAdapter);
- mRecyclerView.setHasFixedSize(true);
- }
-
- @Override
- public void onError(VolleyError error) {
- Frontend.error(context, R.string.error_net_load);
- }
- });
- } catch (IOException e) {
- Frontend.error(context, R.string.error_load_filters, e);
- }
+ @Override
+ public void onError(VolleyError error) {
+ Frontend.error(context, R.string.error_net_load);
+ }
+ });
return rootView;
}
diff --git a/app/src/main/java/org/rssin/android/NavigationDrawerFilterFragment.java b/app/src/main/java/org/rssin/android/NavigationDrawerFilterFragment.java
index ab9d458..74be14a 100755
--- a/app/src/main/java/org/rssin/android/NavigationDrawerFilterFragment.java
+++ b/app/src/main/java/org/rssin/android/NavigationDrawerFilterFragment.java
@@ -17,7 +17,6 @@ import org.rssin.rssin.FeedLoaderAndSorter;
import org.rssin.rssin.Filter;
import org.rssin.rssin.R;
import org.rssin.rssin.SortedFeedItemContainer;
-import org.rssin.rssin.UnifiedFilterLoader;
import java.io.IOException;
import java.util.List;
@@ -65,7 +64,6 @@ public class NavigationDrawerFilterFragment extends Fragment {
e.printStackTrace();
}
- filter.ensureFeedSorter(DefaultStorageProvider.getInstance(context));
filter.ensureFeeds(DefaultStorageProvider.getInstance(context));
/**
@@ -75,8 +73,8 @@ public class NavigationDrawerFilterFragment extends Fragment {
* filters that may take a while, so it would be preferable to return intermediate
* results. We could do this for example with {@link org.rssin.listener.RealtimeListener}
*/
- FeedLoaderAndSorter loaderAndSorter = new FeedLoaderAndSorter(filter);
- loaderAndSorter.getFilteredFeedItems(new VolleyFetcher(context), new FallibleListener, VolleyError>() {
+ FeedLoaderAndSorter loaderAndSorter = new FeedLoaderAndSorter(filter.getFeeds());
+ loaderAndSorter.getFilteredFeedItems(context, new VolleyFetcher(context), new FallibleListener, VolleyError>() {
@Override
public void onReceive(List data) {
FeedItemAdapter feedItemAdapter = new FeedItemAdapter(data);
diff --git a/app/src/main/java/org/rssin/android/NavigationDrawerManageFiltersFragment.java b/app/src/main/java/org/rssin/android/NavigationDrawerManageFiltersFragment.java
index d82aaaa..405d7be 100755
--- a/app/src/main/java/org/rssin/android/NavigationDrawerManageFiltersFragment.java
+++ b/app/src/main/java/org/rssin/android/NavigationDrawerManageFiltersFragment.java
@@ -21,13 +21,8 @@ import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
-import com.android.volley.VolleyError;
-
-import org.rssin.listener.FallibleListener;
import org.rssin.rssin.Filter;
import org.rssin.rssin.R;
-import org.rssin.rssin.SortedFeedItemContainer;
-import org.rssin.rssin.UnifiedFilterLoader;
import java.io.IOException;
import java.util.List;
diff --git a/app/src/main/java/org/rssin/android/SharedPreferencesStorageProvider.java b/app/src/main/java/org/rssin/android/SharedPreferencesStorageProvider.java
index 2818a08..dbfcc9a 100755
--- a/app/src/main/java/org/rssin/android/SharedPreferencesStorageProvider.java
+++ b/app/src/main/java/org/rssin/android/SharedPreferencesStorageProvider.java
@@ -86,7 +86,11 @@ class SharedPreferencesStorageProvider implements StorageProvider, FilterStorage
if (serialized == null) {
throw new IOException("No sharedPreference with key " + key.toString() + " and class " + className.getName());
}
- ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(Base64.decode(serialized.getBytes(), Base64.DEFAULT)));
+
+ byte[] bytes = serialized.getBytes();
+ byte[] decoded = Base64.decode(bytes, Base64.DEFAULT);
+
+ ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(decoded));
Object obj = ois.readObject();
return (Storable) className.cast(obj);
}
@@ -97,10 +101,6 @@ class SharedPreferencesStorageProvider implements StorageProvider, FilterStorage
.edit()
.remove(className.getName())
.apply();
-
- if (className == Feed.class) {
- removeFeed(key);
- }
}
@Override
@@ -170,14 +170,14 @@ class SharedPreferencesStorageProvider implements StorageProvider, FilterStorage
Set names = context.getSharedPreferences(ADMIN_PREF_KEY, Context.MODE_PRIVATE).getStringSet("feeds", new HashSet());
if (names.isEmpty() && !context.getSharedPreferences(ADMIN_PREF_KEY, Context.MODE_PRIVATE).getBoolean("firstload", false)) {
String[] feedsList = context.getResources().getStringArray(R.array.default_feeds);
- for (String url : feedsList) {
+ /*for (String url : feedsList) {
try {
Feed f = new Feed(url);
f.store(this);
} catch (Exception e) {
Log.w("SPSP", "Couldn't add " + url, e);
}
- }
+ }*/
context.getSharedPreferences(ADMIN_PREF_KEY, Context.MODE_PRIVATE).edit().putBoolean("firstload", true).apply();
names = context.getSharedPreferences(ADMIN_PREF_KEY, Context.MODE_PRIVATE).getStringSet("feeds", new HashSet());
}
diff --git a/app/src/main/java/org/rssin/rssin/FeedLoaderAndSorter.java b/app/src/main/java/org/rssin/rssin/FeedLoaderAndSorter.java
index 3211325..a317a27 100755
--- a/app/src/main/java/org/rssin/rssin/FeedLoaderAndSorter.java
+++ b/app/src/main/java/org/rssin/rssin/FeedLoaderAndSorter.java
@@ -1,5 +1,8 @@
package org.rssin.rssin;
+import android.content.Context;
+
+import org.rssin.android.FeedSorterProvider;
import org.rssin.http.Fetcher;
import org.rssin.listener.FallibleListener;
import org.rssin.listener.Listener;
@@ -16,10 +19,10 @@ import java.util.List;
* @todo javadoc
*/
public class FeedLoaderAndSorter {
- private Filter filter;
+ private final List feeds;
- public FeedLoaderAndSorter(Filter filter) {
- this.filter = filter;
+ public FeedLoaderAndSorter(List feeds) {
+ this.feeds = feeds;
}
/**
@@ -27,19 +30,19 @@ 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(Context context, Fetcher fetcher, final Listener> listener)
{
final List resultingItems = new ArrayList<>();
- final Counter counter = new Counter(filter.getFeeds().size());
- final FeedSorter sorter = filter.getFeedSorter();
+ final Counter counter = new Counter(feeds.size());
+ final FeedSorter sorter = FeedSorterProvider.getInstance(context).getFeedSorter();
- for (Feed feed : filter.getFeeds()) {
+ for (Feed feed : feeds) {
final FeedLoader loader = new FeedLoader(feed.getURL());
loader.fetchXML(fetcher, new FallibleListener