From 6e4dac4f333e02e624c5b7a1d579c2c7b2888d89 Mon Sep 17 00:00:00 2001
From: Size43
Date: Wed, 10 Jun 2015 11:08:28 +0200
Subject: Removed hardcoded strings & only one TrainingCase is stored per
Article.
---
app/src/main/res/values/strings.xml | 5 +++++
1 file changed, 5 insertions(+)
(limited to 'app/src/main/res')
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 1a279c7..3b3a884 100755
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -65,4 +65,9 @@
Unknown author
Published on:
+ All feeds
+ START
+ FILTERS (EDIT)
+ FEEDS (EDIT)
+ Feedback saved.
--
cgit v1.2.3
From fef7df0f36e8871a6e2bd36030d5b68a85e91f0e Mon Sep 17 00:00:00 2001
From: Size43
Date: Wed, 10 Jun 2015 11:53:29 +0200
Subject: Fixed all hardcoded strings
---
README.md | 2 --
app/src/main/java/org/rssin/android/FeedSorterTrainer.java | 3 ++-
app/src/main/java/org/rssin/android/FeedsActivity.java | 4 ++--
app/src/main/java/org/rssin/android/FilterSettingsActivity.java | 4 ++--
app/src/main/java/org/rssin/android/HomeScreenActivity.java | 2 +-
.../java/org/rssin/android/NavigationDrawerManageFeedsFragment.java | 4 ++--
.../java/org/rssin/android/NavigationDrawerManageFiltersFragment.java | 4 ++--
app/src/main/res/values/strings.xml | 4 ++++
8 files changed, 15 insertions(+), 12 deletions(-)
(limited to 'app/src/main/res')
diff --git a/README.md b/README.md
index 7cd6f2c..5afc936 100644
--- a/README.md
+++ b/README.md
@@ -8,8 +8,6 @@ Copyright © 2015 Randy Wanga, Jos Craaijo, Joep Bernards, Camil Staps. All
(see also the @todo markings throughout the source code)
## High priority
-* Walk through all java to check for hardcoded strings
-* Don't train both like and dislike
* Test deleting feeds
* Test settings button
* Make "start" not clickable
diff --git a/app/src/main/java/org/rssin/android/FeedSorterTrainer.java b/app/src/main/java/org/rssin/android/FeedSorterTrainer.java
index 1f88a3e..987ed45 100755
--- a/app/src/main/java/org/rssin/android/FeedSorterTrainer.java
+++ b/app/src/main/java/org/rssin/android/FeedSorterTrainer.java
@@ -14,8 +14,8 @@ public class FeedSorterTrainer implements Runnable {
@Override
public void run() {
+ Log.d("FeedSorterTrainer", "Training starting...");
for (int i = 0; i < 50; i++) {
- Log.d("FeedSorterTrainer", "Training: round " + i);
sorterProvider.getFeedSorter().train();
try {
Thread.sleep(10);
@@ -24,6 +24,7 @@ public class FeedSorterTrainer implements Runnable {
}
}
+ Log.d("FeedSorterTrainer", "Training stopping...");
sorterProvider.save();
}
}
diff --git a/app/src/main/java/org/rssin/android/FeedsActivity.java b/app/src/main/java/org/rssin/android/FeedsActivity.java
index 4a69af9..32f256a 100755
--- a/app/src/main/java/org/rssin/android/FeedsActivity.java
+++ b/app/src/main/java/org/rssin/android/FeedsActivity.java
@@ -105,8 +105,8 @@ public class FeedsActivity extends ActionBarActivity {
AlertDialog.Builder alert = new AlertDialog.Builder(this);
- alert.setTitle("Add feed");
- alert.setMessage("URL:");
+ alert.setTitle(getString(R.string.feeds_activity_add_feed));
+ alert.setMessage(getString(R.string.feeds_activity_url));
final EditText input = new EditText(this);
input.setFocusable(true);
diff --git a/app/src/main/java/org/rssin/android/FilterSettingsActivity.java b/app/src/main/java/org/rssin/android/FilterSettingsActivity.java
index 931a86c..3041859 100755
--- a/app/src/main/java/org/rssin/android/FilterSettingsActivity.java
+++ b/app/src/main/java/org/rssin/android/FilterSettingsActivity.java
@@ -182,8 +182,8 @@ public class FilterSettingsActivity extends ActionBarActivity {
AlertDialog.Builder alert = new AlertDialog.Builder(this);
- alert.setTitle("Title");
- alert.setMessage("New title:");
+ alert.setTitle(getString(R.string.filter_settings_title));
+ alert.setMessage(getString(R.string.filter_settings_new_title));
final EditText input = new EditText(this);
input.setText(filter.getTitle());
diff --git a/app/src/main/java/org/rssin/android/HomeScreenActivity.java b/app/src/main/java/org/rssin/android/HomeScreenActivity.java
index 378ac18..f33411b 100755
--- a/app/src/main/java/org/rssin/android/HomeScreenActivity.java
+++ b/app/src/main/java/org/rssin/android/HomeScreenActivity.java
@@ -41,7 +41,7 @@ public class HomeScreenActivity extends ActionBarActivity implements NavigationD
fragmentManager.beginTransaction()
.replace(R.id.container, currentFragment = initialFragment)
.commit();
- mTitle = "All feeds";
+ mTitle = getString(R.string.navigation_drawer_all_feeds);
}
private Fragment currentFragment;
diff --git a/app/src/main/java/org/rssin/android/NavigationDrawerManageFeedsFragment.java b/app/src/main/java/org/rssin/android/NavigationDrawerManageFeedsFragment.java
index c768a3b..e239588 100755
--- a/app/src/main/java/org/rssin/android/NavigationDrawerManageFeedsFragment.java
+++ b/app/src/main/java/org/rssin/android/NavigationDrawerManageFeedsFragment.java
@@ -119,8 +119,8 @@ public class NavigationDrawerManageFeedsFragment extends Fragment {
AlertDialog.Builder alert = new AlertDialog.Builder(context);
- alert.setTitle("Add feed");
- alert.setMessage("URL:");
+ alert.setTitle(getString(R.string.feeds_activity_add_feed));
+ alert.setMessage(getString(R.string.feeds_activity_url));
final EditText input = new EditText(context);
input.setFocusable(true);
diff --git a/app/src/main/java/org/rssin/android/NavigationDrawerManageFiltersFragment.java b/app/src/main/java/org/rssin/android/NavigationDrawerManageFiltersFragment.java
index 405d7be..42be75f 100755
--- a/app/src/main/java/org/rssin/android/NavigationDrawerManageFiltersFragment.java
+++ b/app/src/main/java/org/rssin/android/NavigationDrawerManageFiltersFragment.java
@@ -115,8 +115,8 @@ public class NavigationDrawerManageFiltersFragment extends Fragment {
AlertDialog.Builder alert = new AlertDialog.Builder(rootView.getContext());
- alert.setTitle("Add filter");
- alert.setMessage("Title:");
+ alert.setTitle(getString(R.string.filters_action_add));
+ alert.setMessage(getString(R.string.filter_settings_title));
final EditText input = new EditText(rootView.getContext());
input.setFocusable(true);
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 3b3a884..591a878 100755
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -70,4 +70,8 @@
FILTERS (EDIT)
FEEDS (EDIT)
Feedback saved.
+ Add feed
+ URL:
+ Title
+ New title:
--
cgit v1.2.3
From 3617197cf2b010ce59691e4a263ce5f7e2c18b25 Mon Sep 17 00:00:00 2001
From: Size43
Date: Wed, 10 Jun 2015 12:19:22 +0200
Subject: Added icons, changed filter title edittext to singleline, fixed feed
settings crash
---
README.md | 2 --
app/src/main/java/org/rssin/android/FeedsActivity.java | 2 +-
.../java/org/rssin/android/FilterSettingsActivity.java | 1 +
.../java/org/rssin/android/NavigationDrawerAdapter.java | 5 +++--
.../main/res/drawable-hdpi/ic_action_action_delete.png | Bin 0 -> 239 bytes
.../main/res/drawable-hdpi/ic_action_action_settings.png | Bin 0 -> 654 bytes
.../res/drawable-hdpi/ic_action_editor_border_color.png | Bin 0 -> 410 bytes
.../main/res/drawable-mdpi/ic_action_action_delete.png | Bin 0 -> 190 bytes
.../main/res/drawable-mdpi/ic_action_action_settings.png | Bin 0 -> 399 bytes
.../res/drawable-mdpi/ic_action_editor_border_color.png | Bin 0 -> 262 bytes
.../main/res/drawable-xhdpi/ic_action_action_delete.png | Bin 0 -> 306 bytes
.../res/drawable-xhdpi/ic_action_action_settings.png | Bin 0 -> 903 bytes
.../res/drawable-xhdpi/ic_action_editor_border_color.png | Bin 0 -> 489 bytes
.../main/res/drawable-xxhdpi/ic_action_action_delete.png | Bin 0 -> 444 bytes
.../res/drawable-xxhdpi/ic_action_action_settings.png | Bin 0 -> 1289 bytes
.../drawable-xxhdpi/ic_action_editor_border_color.png | Bin 0 -> 678 bytes
.../res/drawable-xxxhdpi/ic_action_action_delete.png | Bin 0 -> 659 bytes
.../res/drawable-xxxhdpi/ic_action_action_settings.png | Bin 0 -> 2029 bytes
.../drawable-xxxhdpi/ic_action_editor_border_color.png | Bin 0 -> 940 bytes
app/src/main/res/menu/global.xml | 2 +-
app/src/main/res/menu/home_screen.xml | 2 +-
app/src/main/res/menu/menu_article.xml | 2 +-
app/src/main/res/menu/menu_filter.xml | 2 +-
app/src/main/res/menu/menu_filter_settings.xml | 6 ++++--
app/src/main/res/menu/menu_unified_inbox.xml | 11 -----------
app/src/main/res/values/strings.xml | 1 +
26 files changed, 14 insertions(+), 22 deletions(-)
create mode 100755 app/src/main/res/drawable-hdpi/ic_action_action_delete.png
create mode 100755 app/src/main/res/drawable-hdpi/ic_action_action_settings.png
create mode 100755 app/src/main/res/drawable-hdpi/ic_action_editor_border_color.png
create mode 100755 app/src/main/res/drawable-mdpi/ic_action_action_delete.png
create mode 100755 app/src/main/res/drawable-mdpi/ic_action_action_settings.png
create mode 100755 app/src/main/res/drawable-mdpi/ic_action_editor_border_color.png
create mode 100755 app/src/main/res/drawable-xhdpi/ic_action_action_delete.png
create mode 100755 app/src/main/res/drawable-xhdpi/ic_action_action_settings.png
create mode 100755 app/src/main/res/drawable-xhdpi/ic_action_editor_border_color.png
create mode 100755 app/src/main/res/drawable-xxhdpi/ic_action_action_delete.png
create mode 100755 app/src/main/res/drawable-xxhdpi/ic_action_action_settings.png
create mode 100755 app/src/main/res/drawable-xxhdpi/ic_action_editor_border_color.png
create mode 100755 app/src/main/res/drawable-xxxhdpi/ic_action_action_delete.png
create mode 100755 app/src/main/res/drawable-xxxhdpi/ic_action_action_settings.png
create mode 100755 app/src/main/res/drawable-xxxhdpi/ic_action_editor_border_color.png
mode change 100644 => 100755 app/src/main/res/menu/menu_filter_settings.xml
delete mode 100644 app/src/main/res/menu/menu_unified_inbox.xml
(limited to 'app/src/main/res')
diff --git a/README.md b/README.md
index 5afc936..c6fc667 100644
--- a/README.md
+++ b/README.md
@@ -9,8 +9,6 @@ Copyright © 2015 Randy Wanga, Jos Craaijo, Joep Bernards, Camil Staps. All
## High priority
* Test deleting feeds
-* Test settings button
-* Make "start" not clickable
* Titles & alignment "edit"
## Normal priority
diff --git a/app/src/main/java/org/rssin/android/FeedsActivity.java b/app/src/main/java/org/rssin/android/FeedsActivity.java
index 32f256a..87edab0 100755
--- a/app/src/main/java/org/rssin/android/FeedsActivity.java
+++ b/app/src/main/java/org/rssin/android/FeedsActivity.java
@@ -45,7 +45,7 @@ public class FeedsActivity extends ActionBarActivity {
Intent intent = getIntent();
String ac = intent.getAction();
- if (ac.equals(Intent.ACTION_VIEW)) {
+ if (ac != null && ac.equals(Intent.ACTION_VIEW)) {
//open with
startUri = intent.getData().toString();
openAddDialog();
diff --git a/app/src/main/java/org/rssin/android/FilterSettingsActivity.java b/app/src/main/java/org/rssin/android/FilterSettingsActivity.java
index 3041859..a38c7bc 100755
--- a/app/src/main/java/org/rssin/android/FilterSettingsActivity.java
+++ b/app/src/main/java/org/rssin/android/FilterSettingsActivity.java
@@ -187,6 +187,7 @@ public class FilterSettingsActivity extends ActionBarActivity {
final EditText input = new EditText(this);
input.setText(filter.getTitle());
+ input.setSingleLine(true);
input.setFocusable(true);
input.requestFocus();
diff --git a/app/src/main/java/org/rssin/android/NavigationDrawerAdapter.java b/app/src/main/java/org/rssin/android/NavigationDrawerAdapter.java
index 2a24342..8f0a068 100755
--- a/app/src/main/java/org/rssin/android/NavigationDrawerAdapter.java
+++ b/app/src/main/java/org/rssin/android/NavigationDrawerAdapter.java
@@ -57,12 +57,13 @@ class NavigationDrawerAdapter implements ListAdapter {
@Override
public boolean areAllItemsEnabled() {
- return true;
+ return false;
}
@Override
public boolean isEnabled(int position) {
- return true;
+ // Position 0 is always "Start"
+ return position != 0;
}
private List observers = new ArrayList<>();
diff --git a/app/src/main/res/drawable-hdpi/ic_action_action_delete.png b/app/src/main/res/drawable-hdpi/ic_action_action_delete.png
new file mode 100755
index 0000000..9449c35
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_action_action_delete.png differ
diff --git a/app/src/main/res/drawable-hdpi/ic_action_action_settings.png b/app/src/main/res/drawable-hdpi/ic_action_action_settings.png
new file mode 100755
index 0000000..116e9a0
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_action_action_settings.png differ
diff --git a/app/src/main/res/drawable-hdpi/ic_action_editor_border_color.png b/app/src/main/res/drawable-hdpi/ic_action_editor_border_color.png
new file mode 100755
index 0000000..b044320
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_action_editor_border_color.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_action_action_delete.png b/app/src/main/res/drawable-mdpi/ic_action_action_delete.png
new file mode 100755
index 0000000..eb03dce
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_action_action_delete.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_action_action_settings.png b/app/src/main/res/drawable-mdpi/ic_action_action_settings.png
new file mode 100755
index 0000000..1a8017b
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_action_action_settings.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_action_editor_border_color.png b/app/src/main/res/drawable-mdpi/ic_action_editor_border_color.png
new file mode 100755
index 0000000..6216372
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_action_editor_border_color.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_action_action_delete.png b/app/src/main/res/drawable-xhdpi/ic_action_action_delete.png
new file mode 100755
index 0000000..a0b397e
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_action_action_delete.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_action_action_settings.png b/app/src/main/res/drawable-xhdpi/ic_action_action_settings.png
new file mode 100755
index 0000000..b764d9c
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_action_action_settings.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_action_editor_border_color.png b/app/src/main/res/drawable-xhdpi/ic_action_editor_border_color.png
new file mode 100755
index 0000000..a754a2d
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_action_editor_border_color.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_action_delete.png b/app/src/main/res/drawable-xxhdpi/ic_action_action_delete.png
new file mode 100755
index 0000000..c1fbf46
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_action_action_delete.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_action_settings.png b/app/src/main/res/drawable-xxhdpi/ic_action_action_settings.png
new file mode 100755
index 0000000..a68f6f9
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_action_action_settings.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_editor_border_color.png b/app/src/main/res/drawable-xxhdpi/ic_action_editor_border_color.png
new file mode 100755
index 0000000..ef5e602
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_action_editor_border_color.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_action_action_delete.png b/app/src/main/res/drawable-xxxhdpi/ic_action_action_delete.png
new file mode 100755
index 0000000..d152354
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_action_action_delete.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_action_action_settings.png b/app/src/main/res/drawable-xxxhdpi/ic_action_action_settings.png
new file mode 100755
index 0000000..f18ff96
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_action_action_settings.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_action_editor_border_color.png b/app/src/main/res/drawable-xxxhdpi/ic_action_editor_border_color.png
new file mode 100755
index 0000000..a57ae9b
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_action_editor_border_color.png differ
diff --git a/app/src/main/res/menu/global.xml b/app/src/main/res/menu/global.xml
index 86959a3..c4ae1a3 100755
--- a/app/src/main/res/menu/global.xml
+++ b/app/src/main/res/menu/global.xml
@@ -1,5 +1,5 @@
\ No newline at end of file
diff --git a/app/src/main/res/menu/home_screen.xml b/app/src/main/res/menu/home_screen.xml
index a894d92..bf901df 100755
--- a/app/src/main/res/menu/home_screen.xml
+++ b/app/src/main/res/menu/home_screen.xml
@@ -3,5 +3,5 @@
xmlns:tools="http://schemas.android.com/tools"
tools:context="org.rssin.android.HomeScreenActivity">
+ android:orderInCategory="100" app:showAsAction="ifRoom" android:icon="@drawable/ic_action_action_settings" />
diff --git a/app/src/main/res/menu/menu_article.xml b/app/src/main/res/menu/menu_article.xml
index 064831b..80ef7a7 100755
--- a/app/src/main/res/menu/menu_article.xml
+++ b/app/src/main/res/menu/menu_article.xml
@@ -19,7 +19,7 @@
diff --git a/app/src/main/res/menu/menu_filter.xml b/app/src/main/res/menu/menu_filter.xml
index 86cfe5d..5822314 100755
--- a/app/src/main/res/menu/menu_filter.xml
+++ b/app/src/main/res/menu/menu_filter.xml
@@ -2,5 +2,5 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" tools:context="org.rssin.android.HomeScreenActivity">
+ android:orderInCategory="100" app:showAsAction="ifRoom" android:icon="@drawable/ic_action_action_settings" />
diff --git a/app/src/main/res/menu/menu_filter_settings.xml b/app/src/main/res/menu/menu_filter_settings.xml
old mode 100644
new mode 100755
index 655ee84..a914ad8
--- a/app/src/main/res/menu/menu_filter_settings.xml
+++ b/app/src/main/res/menu/menu_filter_settings.xml
@@ -8,11 +8,13 @@
+ app:showAsAction="ifRoom"
+ android:icon="@drawable/ic_action_editor_border_color"/>
+ app:showAsAction="ifRoom"
+ android:icon="@drawable/ic_action_action_delete"/>
diff --git a/app/src/main/res/menu/menu_unified_inbox.xml b/app/src/main/res/menu/menu_unified_inbox.xml
deleted file mode 100644
index 021ceb5..0000000
--- a/app/src/main/res/menu/menu_unified_inbox.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 591a878..df130b3 100755
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -74,4 +74,5 @@
URL:
Title
New title:
+ Share
--
cgit v1.2.3
From ed6446af455fe0749fabd0b39f1e2c1b25623e06 Mon Sep 17 00:00:00 2001
From: Size43
Date: Wed, 10 Jun 2015 13:00:11 +0200
Subject: Aligned (EDIT) to the right
---
README.md | 3 +--
.../org/rssin/android/NavigationDrawerAdapter.java | 24 ++++++++++++++--------
.../res/layout/separator_navigation_drawer.xml | 16 +++++++++++++--
app/src/main/res/values/strings.xml | 5 +++--
4 files changed, 34 insertions(+), 14 deletions(-)
(limited to 'app/src/main/res')
diff --git a/README.md b/README.md
index c6fc667..b31a843 100644
--- a/README.md
+++ b/README.md
@@ -8,13 +8,12 @@ Copyright © 2015 Randy Wanga, Jos Craaijo, Joep Bernards, Camil Staps. All
(see also the @todo markings throughout the source code)
## High priority
-* Test deleting feeds
-* Titles & alignment "edit"
## Normal priority
* Background sync & notifications
* Add tutorial (e.g.: at first startup, walk user through creating first filter)
* Swipe left & right for (dis)like
+* Extract feed title from feed
## Low priority
* Readability plugin to view whole article
diff --git a/app/src/main/java/org/rssin/android/NavigationDrawerAdapter.java b/app/src/main/java/org/rssin/android/NavigationDrawerAdapter.java
index 8f0a068..973f7ab 100755
--- a/app/src/main/java/org/rssin/android/NavigationDrawerAdapter.java
+++ b/app/src/main/java/org/rssin/android/NavigationDrawerAdapter.java
@@ -33,16 +33,16 @@ class NavigationDrawerAdapter implements ListAdapter {
public void updateMenu(Context context) throws IOException {
menuItems.clear();
- menuItems.add(new MenuSection(context.getString(R.string.navigation_drawer_start)));
+ menuItems.add(new MenuSection(context.getString(R.string.navigation_drawer_start), ""));
menuItems.add(new MenuUnifiedInbox(context));
- menuItems.add(new ManageFiltersSection(context.getString(R.string.navigation_drawer_edit_filters)));
+ menuItems.add(new ManageFiltersSection(context.getString(R.string.navigation_drawer_edit_filters), context.getString(R.string.navigation_drawer_edit_text)));
for(Filter f : FiltersList.getInstance(context).getFilters())
{
menuItems.add(new MenuFilterItem(f));
}
- menuItems.add(new ManageFeedsSection(context.getString(R.string.navigation_drawer_edit_feeds)));
+ menuItems.add(new ManageFeedsSection(context.getString(R.string.navigation_drawer_edit_feeds), context.getString(R.string.navigation_drawer_edit_text)));
for(Feed f : FeedsList.getInstance(context).getFeeds())
{
@@ -117,6 +117,7 @@ class NavigationDrawerAdapter implements ListAdapter {
if (type == ITEM_VIEW_TYPE_SEPARATOR) {
final MenuSection section = (MenuSection) getItem(position);
((TextView) convertView.findViewById(R.id.separator_navigation_drawer_text)).setText(section.getText());
+ ((TextView) convertView.findViewById(R.id.separator_navigation_drawer_edit)).setText(section.getRightText());
} else {
final MenuItem video = (MenuItem) getItem(position);
((TextView) convertView.findViewById(R.id.item_navigation_drawer_text)).setText(video.getText());
@@ -261,22 +262,29 @@ class NavigationDrawerAdapter implements ListAdapter {
class MenuSection extends MenuItem
{
- public MenuSection(String text)
+ private String rightText;
+
+ public MenuSection(String text, String rightText)
{
super(text);
+ this.rightText = rightText;
}
@Override
public int getItemViewType() {
return ITEM_VIEW_TYPE_SEPARATOR;
}
+
+ public String getRightText() {
+ return rightText;
+ }
}
class ManageFiltersSection extends MenuSection
{
- public ManageFiltersSection(String text)
+ public ManageFiltersSection(String text, String rightText)
{
- super(text);
+ super(text, rightText);
}
@Override
@@ -292,9 +300,9 @@ class NavigationDrawerAdapter implements ListAdapter {
class ManageFeedsSection extends MenuSection
{
- public ManageFeedsSection(String text)
+ public ManageFeedsSection(String text, String rightText)
{
- super(text);
+ super(text, rightText);
}
@Override
diff --git a/app/src/main/res/layout/separator_navigation_drawer.xml b/app/src/main/res/layout/separator_navigation_drawer.xml
index 81a9d0a..a3031a0 100755
--- a/app/src/main/res/layout/separator_navigation_drawer.xml
+++ b/app/src/main/res/layout/separator_navigation_drawer.xml
@@ -10,7 +10,7 @@ android:layout_marginTop="0dp"
android:background="#252525"
>
-
-
+
+
+
All feeds
START
- FILTERS (EDIT)
- FEEDS (EDIT)
+ FILTERS
+ FEEDS
Feedback saved.
Add feed
URL:
Title
New title:
Share
+ (EDIT)
--
cgit v1.2.3
From 797d7a62c782e4cc141c0c434047dd3fa2fdeff5 Mon Sep 17 00:00:00 2001
From: Camil Staps
Date: Wed, 10 Jun 2015 13:13:35 +0200
Subject: IT WORKS
---
.../java/org/rssin/android/FeedSorterProvider.java | 13 +++--
.../java/org/rssin/android/FeedSorterTrainer.java | 1 +
app/src/main/java/org/rssin/android/FeedsList.java | 26 ++++++++-
.../main/java/org/rssin/android/FiltersList.java | 2 +-
.../org/rssin/android/InternalStorageProvider.java | 33 ++++++-----
.../android/NavigationDrawerAllFeedsFragment.java | 25 ++++----
.../android/NavigationDrawerFeedFragment.java | 21 ++++---
.../android/NavigationDrawerFilterFragment.java | 22 +++++---
.../android/SharedPreferencesStorageProvider.java | 13 -----
.../main/java/org/rssin/android/VolleyFetcher.java | 14 ++++-
.../java/org/rssin/listener/RealtimeListener.java | 2 +-
.../main/java/org/rssin/neurons/FeedSorter.java | 42 ++------------
.../java/org/rssin/neurons/MultiNeuralNetwork.java | 8 ---
.../main/java/org/rssin/neurons/NeuralNetwork.java | 10 ----
app/src/main/java/org/rssin/neurons/Neuron.java | 9 ---
.../java/org/rssin/rssin/FeedLoaderAndSorter.java | 61 ++++++++++++++++----
.../org/rssin/rssin/SortedFeedItemContainer.java | 14 ++---
app/src/main/res/values/feeds.xml | 66 ----------------------
18 files changed, 171 insertions(+), 211 deletions(-)
(limited to 'app/src/main/res')
diff --git a/app/src/main/java/org/rssin/android/FeedSorterProvider.java b/app/src/main/java/org/rssin/android/FeedSorterProvider.java
index 0f0748d..fcdeca2 100755
--- a/app/src/main/java/org/rssin/android/FeedSorterProvider.java
+++ b/app/src/main/java/org/rssin/android/FeedSorterProvider.java
@@ -15,11 +15,11 @@ public class FeedSorterProvider {
private static FeedSorterProvider instance;
private FeedSorter sorter = null;
private final String storageKey = "FeedSorter";
- private InternalStorageProvider storageProvider;
+ private final StorageProvider storageProvider;
private FeedSorterProvider(Context context)
{
- storageProvider = InternalStorageProvider.getInstance(context);
+ storageProvider = SharedPreferencesStorageProvider.getInstance(context);
}
public synchronized static FeedSorterProvider getInstance()
@@ -43,8 +43,9 @@ public class FeedSorterProvider {
{
try {
sorter = (FeedSorter) storageProvider.fetch(storageKey, FeedSorter.class);
- } catch (IOException e) {
+ } catch (Exception e) {
sorter = new FeedSorter();
+ Log.v("FST", "Saving new empty sorterProvider", e);
this.save();
}
}
@@ -52,7 +53,7 @@ public class FeedSorterProvider {
return sorter;
}
- public synchronized void save()
+ public void save()
{
FeedSorterStorer storer = new FeedSorterStorer(storageKey, storageProvider, sorter);
new Thread(storer).start();
@@ -72,7 +73,9 @@ public class FeedSorterProvider {
@Override
public void run() {
try {
- storageProvider.store(storageKey, feedSorter);
+ synchronized (feedSorter) {
+ storageProvider.store(storageKey, feedSorter);
+ }
} catch (Exception e) {
Log.e("Filter", "Failed to store FeedSorter", e);
}
diff --git a/app/src/main/java/org/rssin/android/FeedSorterTrainer.java b/app/src/main/java/org/rssin/android/FeedSorterTrainer.java
index 1f88a3e..9704fc7 100755
--- a/app/src/main/java/org/rssin/android/FeedSorterTrainer.java
+++ b/app/src/main/java/org/rssin/android/FeedSorterTrainer.java
@@ -24,6 +24,7 @@ public class FeedSorterTrainer implements Runnable {
}
}
+ Log.v("FST", "Saving sorterProvider");
sorterProvider.save();
}
}
diff --git a/app/src/main/java/org/rssin/android/FeedsList.java b/app/src/main/java/org/rssin/android/FeedsList.java
index 72a56d1..1036ad3 100644
--- a/app/src/main/java/org/rssin/android/FeedsList.java
+++ b/app/src/main/java/org/rssin/android/FeedsList.java
@@ -1,8 +1,11 @@
package org.rssin.android;
import android.content.Context;
+import android.preference.PreferenceManager;
+import android.util.Log;
import org.rssin.rssin.Feed;
+import org.rssin.rssin.R;
import java.io.IOException;
import java.util.Collections;
@@ -16,18 +19,39 @@ class FeedsList {
private static FeedsList instance;
- private final List feeds;
+ private List feeds;
private final DefaultStorageProvider storageProvider;
+ public static final boolean USE_DEFAULT_LIST = true;
+
/**
* Fetch from storage provider
* @param context needed to get the storageprovider
* @throws IOException if data is corrupted, and deserializing fails
*/
+ @SuppressWarnings("all")
protected FeedsList(Context context) throws IOException {
storageProvider = DefaultStorageProvider.getInstance(context);
feeds = storageProvider.allFeeds();
sort();
+
+ if (USE_DEFAULT_LIST &&
+ feeds.isEmpty() &&
+ !PreferenceManager.getDefaultSharedPreferences(context).getBoolean("firstload", false)) {
+ String[] feedsList = context.getResources().getStringArray(R.array.default_feeds);
+ for (String url : feedsList) {
+ try {
+ Feed f = new Feed(url);
+ f.store(storageProvider);
+ } catch (Exception e) {
+ Log.w("SPSP", "Couldn't add " + url, e);
+ }
+ }
+ PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean("firstload", true).apply();
+
+ feeds = storageProvider.allFeeds();
+ sort();
+ }
}
public static FeedsList getInstance(Context context) throws IOException {
diff --git a/app/src/main/java/org/rssin/android/FiltersList.java b/app/src/main/java/org/rssin/android/FiltersList.java
index 6b53186..b555e5e 100755
--- a/app/src/main/java/org/rssin/android/FiltersList.java
+++ b/app/src/main/java/org/rssin/android/FiltersList.java
@@ -12,7 +12,7 @@ import java.util.List;
* A list of filters that can be saved using the DefaultStorageProvider
* @author Camil Staps
*/
-public class FiltersList {
+class FiltersList {
private static FiltersList instance;
diff --git a/app/src/main/java/org/rssin/android/InternalStorageProvider.java b/app/src/main/java/org/rssin/android/InternalStorageProvider.java
index c5a7bc1..b6787b4 100644
--- a/app/src/main/java/org/rssin/android/InternalStorageProvider.java
+++ b/app/src/main/java/org/rssin/android/InternalStorageProvider.java
@@ -1,6 +1,7 @@
package org.rssin.android;
import android.content.Context;
+import android.util.Log;
import org.rssin.neurons.FeedSorter;
import org.rssin.rssin.Filter;
@@ -8,6 +9,7 @@ import org.rssin.storage.FilterStorageProvider;
import org.rssin.storage.Storable;
import org.rssin.storage.StorageProvider;
+import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
@@ -21,14 +23,15 @@ import java.util.List;
* A way to store data in internal storage
* @author Camil Staps
*/
-class InternalStorageProvider implements StorageProvider, FilterStorageProvider {
+class InternalStorageProvider implements StorageProvider, FilterStorageProvider {
protected static final String PREFIX = "storage_", PREFIX_FILTER = "f_", PREFIX_FEEDSORTER = "fs_";
private static InternalStorageProvider instance;
private final Context context;
- private InternalStorageProvider(Context context) {
+ // @todo redo singleton
+ public InternalStorageProvider(Context context) {
this.context = context;
}
@@ -43,7 +46,7 @@ class InternalStorageProvider implements StorageProvider, Filt
}
@Override
- public synchronized void store(String key, Storable element) throws FileNotFoundException, IOException {
+ public synchronized void store(String key, FeedSorter element) throws FileNotFoundException, IOException {
FileOutputStream fos = context.openFileOutput(getFilename(key, element), Context.MODE_PRIVATE);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(element);
@@ -52,7 +55,7 @@ class InternalStorageProvider implements StorageProvider, Filt
}
@Override
- public Storable fetch(String key, Class className) throws ClassCastException, FileNotFoundException, IOException {
+ public FeedSorter fetch(String key, Class className) throws ClassCastException, FileNotFoundException, IOException {
return fetchFromFilename(getFilename(key, className));
}
@@ -61,11 +64,11 @@ class InternalStorageProvider implements StorageProvider, Filt
throw new UnsupportedOperationException("Not implemented yet.");
}
- public Storable fetchFromFilename(String fileName) throws ClassCastException, FileNotFoundException, IOException {
+ public FeedSorter fetchFromFilename(String fileName) throws ClassCastException, FileNotFoundException, IOException {
FileInputStream fis = context.openFileInput(fileName);
ObjectInputStream ois = new ObjectInputStream(fis);
try {
- return (Storable) ois.readObject();
+ return (FeedSorter) ois.readObject();
} catch (ClassNotFoundException e) {
return null;
}
@@ -114,11 +117,11 @@ class InternalStorageProvider implements StorageProvider, Filt
@Override
public List allFilters() {
List filters = new ArrayList<>();
- for (String fileName : context.fileList()) {
- try {
- filters.add((Filter) fetchFromFilename(fileName));
- } catch (ClassCastException | IOException e) {}
- }
+// for (String fileName : context.fileList()) {
+// try {
+// filters.add((Filter) fetchFromFilename(fileName));
+// } catch (ClassCastException | IOException e) {}
+// }
return filters;
}
@@ -129,11 +132,11 @@ class InternalStorageProvider implements StorageProvider, Filt
@Override
public Filter getFilter(String key) {
- try {
- return (Filter) fetch(key, Filter.class);
- } catch (ClassCastException | IOException e) {
+// try {
+// return (Filter) fetch(key, Filter.class);
+// } catch (ClassCastException | IOException e) {
return null;
- }
+// }
}
@Override
diff --git a/app/src/main/java/org/rssin/android/NavigationDrawerAllFeedsFragment.java b/app/src/main/java/org/rssin/android/NavigationDrawerAllFeedsFragment.java
index b7a0d73..e32b7e6 100755
--- a/app/src/main/java/org/rssin/android/NavigationDrawerAllFeedsFragment.java
+++ b/app/src/main/java/org/rssin/android/NavigationDrawerAllFeedsFragment.java
@@ -10,13 +10,12 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import com.android.volley.VolleyError;
-
-import org.rssin.listener.FallibleListener;
+import org.rssin.listener.RealtimeListener;
import org.rssin.rssin.FeedLoaderAndSorter;
import org.rssin.rssin.R;
import org.rssin.rssin.SortedFeedItemContainer;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -42,24 +41,30 @@ public class NavigationDrawerAllFeedsFragment extends Fragment {
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(context);
mRecyclerView.setLayoutManager(mLayoutManager);
+ final FeedItemAdapter feedItemAdapter = new FeedItemAdapter(new ArrayList());
+ 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}
*/
FeedLoaderAndSorter loaderAndSorter = new FeedLoaderAndSorter(FeedsList.getInstance().getFeeds());
- loaderAndSorter.getFilteredFeedItems(context, new VolleyFetcher(context), new FallibleListener, VolleyError>() {
+ loaderAndSorter.getFilteredFeedItems(context, VolleyFetcher.getInstance(context), new RealtimeListener, Object>() {
+ @Override
+ public void finish() {
+ // @todo finish
+ }
+
@Override
public void onReceive(List data) {
- FeedItemAdapter feedItemAdapter = new FeedItemAdapter(data);
- mRecyclerView.setAdapter(feedItemAdapter);
- mRecyclerView.setHasFixedSize(true);
+ feedItemAdapter.feedItems = data;
+ feedItemAdapter.notifyDataSetChanged();
}
@Override
- public void onError(VolleyError error) {
+ public void onError(Object error) {
Frontend.error(context, R.string.error_net_load);
}
});
diff --git a/app/src/main/java/org/rssin/android/NavigationDrawerFeedFragment.java b/app/src/main/java/org/rssin/android/NavigationDrawerFeedFragment.java
index 0f33aca..66b808b 100755
--- a/app/src/main/java/org/rssin/android/NavigationDrawerFeedFragment.java
+++ b/app/src/main/java/org/rssin/android/NavigationDrawerFeedFragment.java
@@ -13,6 +13,7 @@ import android.view.ViewGroup;
import com.android.volley.VolleyError;
import org.rssin.listener.FallibleListener;
+import org.rssin.listener.RealtimeListener;
import org.rssin.rssin.Feed;
import org.rssin.rssin.FeedLoaderAndSorter;
import org.rssin.rssin.R;
@@ -67,24 +68,30 @@ public class NavigationDrawerFeedFragment extends Fragment {
List singleFeedList = new ArrayList();
singleFeedList.add(feed);
+ final FeedItemAdapter feedItemAdapter = new FeedItemAdapter(new ArrayList());
+ 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}
*/
FeedLoaderAndSorter loaderAndSorter = new FeedLoaderAndSorter(singleFeedList);
- loaderAndSorter.getFilteredFeedItems(context, new VolleyFetcher(context), new FallibleListener, VolleyError>() {
+ loaderAndSorter.getFilteredFeedItems(context, VolleyFetcher.getInstance(context), new RealtimeListener, Object>() {
+ @Override
+ public void finish() {
+ // @todo finish
+ }
+
@Override
public void onReceive(List data) {
- FeedItemAdapter feedItemAdapter = new FeedItemAdapter(data);
- mRecyclerView.setAdapter(feedItemAdapter);
- mRecyclerView.setHasFixedSize(true);
+ feedItemAdapter.feedItems = data;
+ feedItemAdapter.notifyDataSetChanged();
}
@Override
- public void onError(VolleyError error) {
+ public void onError(Object error) {
Frontend.error(context, R.string.error_net_load);
}
});
diff --git a/app/src/main/java/org/rssin/android/NavigationDrawerFilterFragment.java b/app/src/main/java/org/rssin/android/NavigationDrawerFilterFragment.java
index 74be14a..ececd81 100755
--- a/app/src/main/java/org/rssin/android/NavigationDrawerFilterFragment.java
+++ b/app/src/main/java/org/rssin/android/NavigationDrawerFilterFragment.java
@@ -13,12 +13,14 @@ import android.view.ViewGroup;
import com.android.volley.VolleyError;
import org.rssin.listener.FallibleListener;
+import org.rssin.listener.RealtimeListener;
import org.rssin.rssin.FeedLoaderAndSorter;
import org.rssin.rssin.Filter;
import org.rssin.rssin.R;
import org.rssin.rssin.SortedFeedItemContainer;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -66,24 +68,30 @@ public class NavigationDrawerFilterFragment extends Fragment {
filter.ensureFeeds(DefaultStorageProvider.getInstance(context));
+ final FeedItemAdapter feedItemAdapter = new FeedItemAdapter(new ArrayList());
+ 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}
*/
FeedLoaderAndSorter loaderAndSorter = new FeedLoaderAndSorter(filter.getFeeds());
- loaderAndSorter.getFilteredFeedItems(context, new VolleyFetcher(context), new FallibleListener, VolleyError>() {
+ loaderAndSorter.getFilteredFeedItems(context, VolleyFetcher.getInstance(context), new RealtimeListener, Object>() {
+ @Override
+ public void finish() {
+ // @todo finish
+ }
+
@Override
public void onReceive(List data) {
- FeedItemAdapter feedItemAdapter = new FeedItemAdapter(data);
- mRecyclerView.setAdapter(feedItemAdapter);
- mRecyclerView.setHasFixedSize(true);
+ feedItemAdapter.feedItems = data;
+ feedItemAdapter.notifyDataSetChanged();
}
@Override
- public void onError(VolleyError error) {
+ public void onError(Object error) {
Frontend.error(context, R.string.error_net_load);
}
});
diff --git a/app/src/main/java/org/rssin/android/SharedPreferencesStorageProvider.java b/app/src/main/java/org/rssin/android/SharedPreferencesStorageProvider.java
index dbfcc9a..ffcf0e1 100755
--- a/app/src/main/java/org/rssin/android/SharedPreferencesStorageProvider.java
+++ b/app/src/main/java/org/rssin/android/SharedPreferencesStorageProvider.java
@@ -168,19 +168,6 @@ class SharedPreferencesStorageProvider implements StorageProvider, FilterStorage
@Override
public List allFeeds() {
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) {
- 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());
- }
List feeds = new ArrayList<>();
for (String name : names) {
Feed feed = getFeed(name);
diff --git a/app/src/main/java/org/rssin/android/VolleyFetcher.java b/app/src/main/java/org/rssin/android/VolleyFetcher.java
index af6895e..9aa7c03 100644
--- a/app/src/main/java/org/rssin/android/VolleyFetcher.java
+++ b/app/src/main/java/org/rssin/android/VolleyFetcher.java
@@ -19,14 +19,22 @@ import org.rssin.listener.Listener;
*/
class VolleyFetcher implements Fetcher {
- private final Context context;
+ private static VolleyFetcher instance;
+
private final RequestQueue requestQueue;
- public VolleyFetcher(Context context) {
- this.context = context;
+ private VolleyFetcher(Context context) {
requestQueue = Volley.newRequestQueue(context);
}
+ public static VolleyFetcher getInstance(Context context) {
+ if (instance == null) {
+ instance = new VolleyFetcher(context);
+ }
+
+ return instance;
+ }
+
@Override
public void fetch(Request request) {
fetch(request, null);
diff --git a/app/src/main/java/org/rssin/listener/RealtimeListener.java b/app/src/main/java/org/rssin/listener/RealtimeListener.java
index 4a2ac3e..cb63b33 100644
--- a/app/src/main/java/org/rssin/listener/RealtimeListener.java
+++ b/app/src/main/java/org/rssin/listener/RealtimeListener.java
@@ -4,6 +4,6 @@ package org.rssin.listener;
* The RealtimeListener lets you call onReceive() multiple times.
* When all data has been sent, call finish().
*/
-public interface RealtimeListener extends Listener {
+public interface RealtimeListener extends FallibleListener {
void finish();
}
diff --git a/app/src/main/java/org/rssin/neurons/FeedSorter.java b/app/src/main/java/org/rssin/neurons/FeedSorter.java
index 0af57ae..d2605f1 100755
--- a/app/src/main/java/org/rssin/neurons/FeedSorter.java
+++ b/app/src/main/java/org/rssin/neurons/FeedSorter.java
@@ -24,7 +24,7 @@ public class FeedSorter implements Storable {
private static final long serialVersionUID = 0;
private final SentenceSplitter splitter = new SentenceSplitter();
- private MultiNeuralNetwork nn = new MultiNeuralNetwork(25, 50);
+ private MultiNeuralNetwork nn = new MultiNeuralNetwork(10, 50);
private List trainingCases = new ArrayList<>();
private int[] isNthMonthInput = new int[12];
@@ -34,36 +34,6 @@ public class FeedSorter implements Storable {
private Hashtable wordInputs = new Hashtable<>();
private Hashtable authorInputs = new Hashtable<>();
- private synchronized void writeObject(java.io.ObjectOutputStream stream) throws IOException {
- stream.writeObject(nn);
- SerializationTools.writeList(trainingCases, stream);
- SerializationTools.writeArray(isNthMonthInput, stream);
- SerializationTools.writeArray(isNthWeekDayInput, stream);
- stream.writeInt(isMorning);
- stream.writeInt(isAfternoon);
- stream.writeInt(isEvening);
- stream.writeInt(isNight);
- stream.writeInt(biasInput);
- stream.writeObject(categoryInputs);
- stream.writeObject(wordInputs);
- stream.writeObject(authorInputs);
- }
-
- private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException {
- nn = (MultiNeuralNetwork) stream.readObject();
- trainingCases = SerializationTools.readList(stream);
- isNthMonthInput = SerializationTools.readArrayInt(stream);
- isNthWeekDayInput = SerializationTools.readArrayInt(stream);
- isMorning = stream.readInt();
- isAfternoon = stream.readInt();
- isEvening = stream.readInt();
- isNight = stream.readInt();
- biasInput = stream.readInt();
- categoryInputs = (Hashtable) stream.readObject();
- wordInputs = (Hashtable) stream.readObject();
- authorInputs = (Hashtable) stream.readObject();
- }
-
public FeedSorter() {
biasInput = nn.addInput();
for (int i = 0; i < 12; i++) {
@@ -189,16 +159,16 @@ public class FeedSorter implements Storable {
* @param items The list of items.
* @return A new, sorted, list of items.
*/
- public List sortItems(List items) {
+ public synchronized void sortItems(List items) {
final int SECONDS_IN_DAY = 24 * 60 * 60;
for (SortedFeedItemContainer item : items) {
- PredictionInterface prediction = getPrediction(item.getFeeditem());
- item.setScore((long) (item.getFeeditem().getPubDate().getTime() / 1000 + prediction.getOutput() * SECONDS_IN_DAY));
+ if (!item.hasScore()) {
+ PredictionInterface prediction = getPrediction(item.getFeeditem());
+ item.setScore((long) (item.getFeeditem().getPubDate().getTime() / 1000 + prediction.getOutput() * SECONDS_IN_DAY));
+ }
}
Collections.sort(items);
-
- return items;
}
}
diff --git a/app/src/main/java/org/rssin/neurons/MultiNeuralNetwork.java b/app/src/main/java/org/rssin/neurons/MultiNeuralNetwork.java
index 9ba40e0..420f43d 100755
--- a/app/src/main/java/org/rssin/neurons/MultiNeuralNetwork.java
+++ b/app/src/main/java/org/rssin/neurons/MultiNeuralNetwork.java
@@ -13,14 +13,6 @@ class MultiNeuralNetwork implements Serializable {
private static final long serialVersionUID = 0;
private NeuralNetwork[] networks;
- private synchronized void writeObject(java.io.ObjectOutputStream stream) throws IOException {
- SerializationTools.writeArray(networks, stream);
- }
-
- private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException {
- networks = SerializationTools.readArray(stream, NeuralNetwork.class);
- }
-
public MultiNeuralNetwork(int numNetworks, int numHiddenNodes) {
networks = new NeuralNetwork[numNetworks];
for (int i = 0; i < networks.length; i++) {
diff --git a/app/src/main/java/org/rssin/neurons/NeuralNetwork.java b/app/src/main/java/org/rssin/neurons/NeuralNetwork.java
index 972f9de..e050145 100755
--- a/app/src/main/java/org/rssin/neurons/NeuralNetwork.java
+++ b/app/src/main/java/org/rssin/neurons/NeuralNetwork.java
@@ -15,16 +15,6 @@ class NeuralNetwork implements Serializable {
private Neuron[] hiddenNodes;
private Neuron outputNode;
- private synchronized void writeObject(java.io.ObjectOutputStream stream) throws IOException {
- SerializationTools.writeArray(hiddenNodes, stream);
- stream.writeObject(outputNode);
- }
-
- private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException {
- hiddenNodes = SerializationTools.readArray(stream, Neuron.class);
- outputNode = (Neuron) stream.readObject();
- }
-
NeuralNetwork(int numHiddenNodes) {
if (numHiddenNodes < 1) {
throw new IllegalArgumentException("numHiddenNodes must be > 0");
diff --git a/app/src/main/java/org/rssin/neurons/Neuron.java b/app/src/main/java/org/rssin/neurons/Neuron.java
index da0e4ca..e29e218 100755
--- a/app/src/main/java/org/rssin/neurons/Neuron.java
+++ b/app/src/main/java/org/rssin/neurons/Neuron.java
@@ -17,15 +17,6 @@ class Neuron implements Serializable {
private List weights = new ArrayList<>();
- private synchronized void writeObject(java.io.ObjectOutputStream stream) throws IOException {
- SerializationTools.writeList(weights, stream);
- }
-
- private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException {
- weights = SerializationTools.readList(stream);
- }
-
-
public Neuron() {
}
diff --git a/app/src/main/java/org/rssin/rssin/FeedLoaderAndSorter.java b/app/src/main/java/org/rssin/rssin/FeedLoaderAndSorter.java
index a317a27..5e9a05a 100755
--- a/app/src/main/java/org/rssin/rssin/FeedLoaderAndSorter.java
+++ b/app/src/main/java/org/rssin/rssin/FeedLoaderAndSorter.java
@@ -30,25 +30,68 @@ public class FeedLoaderAndSorter {
* @param fetcher HTTP Fetcher
* @param listener Listener for when the fetcher finishes
*/
- public void getFilteredFeedItems(Context context, Fetcher fetcher, final Listener> listener)
- {
+ public void getFilteredFeedItems(
+ Context context,
+ Fetcher fetcher,
+ final RealtimeListener, Object> listener) {
final List resultingItems = new ArrayList<>();
final Counter counter = new Counter(feeds.size());
final FeedSorter sorter = FeedSorterProvider.getInstance(context).getFeedSorter();
for (Feed feed : feeds) {
+ Loader loader = new Loader(
+ feed,
+ fetcher,
+ listener,
+ resultingItems,
+ counter,
+ sorter
+ );
+ Thread thread = new Thread(loader);
+ thread.start();
+ }
+ }
+
+ private static class Loader implements Runnable {
+
+ final private Feed feed;
+ final private Fetcher fetcher;
+ final private RealtimeListener,Object> listener;
+ final private List resultingItems;
+ final private Counter counter;
+ final private FeedSorter feedSorter;
+
+ public Loader(
+ Feed feed,
+ Fetcher fetcher,
+ RealtimeListener,Object> listener,
+ List resultingItems,
+ Counter counter,
+ FeedSorter feedSorter) {
+ this.feed = feed;
+ this.fetcher = fetcher;
+ this.listener = listener;
+ this.resultingItems = resultingItems;
+ this.counter = counter;
+ this.feedSorter = feedSorter;
+ }
+
+ @Override
+ public void run() {
final FeedLoader loader = new FeedLoader(feed.getURL());
loader.fetchXML(fetcher, new FallibleListener