From 5b47e66734075109b86aafdc7562aa3264f46436 Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Tue, 19 May 2015 14:38:18 +0200 Subject: SettingsActivity with data sync option --- .../main/res/values/strings_activity_settings.xml | 34 ++++++++++++++++++++++ app/src/main/res/xml/pref_data_sync.xml | 21 +++++++++++++ app/src/main/res/xml/pref_headers.xml | 6 ++++ app/src/main/res/xml/pref_main.xml | 3 ++ 4 files changed, 64 insertions(+) create mode 100644 app/src/main/res/values/strings_activity_settings.xml create mode 100644 app/src/main/res/xml/pref_data_sync.xml create mode 100644 app/src/main/res/xml/pref_headers.xml create mode 100644 app/src/main/res/xml/pref_main.xml (limited to 'app/src/main/res') diff --git a/app/src/main/res/values/strings_activity_settings.xml b/app/src/main/res/values/strings_activity_settings.xml new file mode 100644 index 0000000..73fa482 --- /dev/null +++ b/app/src/main/res/values/strings_activity_settings.xml @@ -0,0 +1,34 @@ + + Settings + + + General + + + Data & sync + + Sync frequency + + 1 minute + 2 minutes + 5 minutes + 10 minutes + 15 minutes + 30 minutes + 1 hour + Never + + + 1 + 2 + 5 + 10 + 15 + 30 + 60 + -1 + + + System sync settings + + diff --git a/app/src/main/res/xml/pref_data_sync.xml b/app/src/main/res/xml/pref_data_sync.xml new file mode 100644 index 0000000..ffda831 --- /dev/null +++ b/app/src/main/res/xml/pref_data_sync.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/xml/pref_headers.xml b/app/src/main/res/xml/pref_headers.xml new file mode 100644 index 0000000..1c58203 --- /dev/null +++ b/app/src/main/res/xml/pref_headers.xml @@ -0,0 +1,6 @@ + + +
+ + diff --git a/app/src/main/res/xml/pref_main.xml b/app/src/main/res/xml/pref_main.xml new file mode 100644 index 0000000..dfc2102 --- /dev/null +++ b/app/src/main/res/xml/pref_main.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file -- cgit v1.2.3 From 7ae6bbe9c7800acbea302fc4092533a9d7448f9f Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Tue, 19 May 2015 14:42:34 +0200 Subject: Framework FiltersActivity --- app/src/main/AndroidManifest.xml | 8 +++++ .../java/org/rssin/android/FiltersActivity.java | 40 ++++++++++++++++++++++ app/src/main/res/layout/activity_filters.xml | 12 +++++++ app/src/main/res/menu/menu_filters.xml | 7 ++++ app/src/main/res/values/strings.xml | 1 + 5 files changed, 68 insertions(+) create mode 100644 app/src/main/java/org/rssin/android/FiltersActivity.java create mode 100644 app/src/main/res/layout/activity_filters.xml create mode 100644 app/src/main/res/menu/menu_filters.xml (limited to 'app/src/main/res') diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bc95dc9..912bd7b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -20,6 +20,14 @@ android:name="org.rssin.android.SettingsActivity" android:label="@string/title_activity_settings" > + + + diff --git a/app/src/main/java/org/rssin/android/FiltersActivity.java b/app/src/main/java/org/rssin/android/FiltersActivity.java new file mode 100644 index 0000000..dec349f --- /dev/null +++ b/app/src/main/java/org/rssin/android/FiltersActivity.java @@ -0,0 +1,40 @@ +package org.rssin.android; + +import android.support.v7.app.ActionBarActivity; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; + +import org.rssin.rssin.R; + +public class FiltersActivity extends ActionBarActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_filters); + } + + + @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_filters, 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/res/layout/activity_filters.xml b/app/src/main/res/layout/activity_filters.xml new file mode 100644 index 0000000..6c2912d --- /dev/null +++ b/app/src/main/res/layout/activity_filters.xml @@ -0,0 +1,12 @@ + + + + + diff --git a/app/src/main/res/menu/menu_filters.xml b/app/src/main/res/menu/menu_filters.xml new file mode 100644 index 0000000..0f6a87f --- /dev/null +++ b/app/src/main/res/menu/menu_filters.xml @@ -0,0 +1,7 @@ + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bbe8b60..9f97ad0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3,4 +3,5 @@ Hello world! Settings + FiltersActivity -- cgit v1.2.3 From 59c9090e86aa11d4cf51f620bec3cb6e5312a18d Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Tue, 19 May 2015 15:59:12 +0200 Subject: Filters --- .../java/org/rssin/android/FiltersActivity.java | 86 ++++++++++++++++++++++ .../main/java/org/rssin/android/FiltersList.java | 63 ++++++++++++++++ .../org/rssin/android/UnifiedInboxActivity.java | 4 + .../main/java/org/rssin/neurons/NeuralNetwork.java | 2 +- app/src/main/java/org/rssin/rss/Feed.java | 5 +- app/src/main/java/org/rssin/rssin/Filter.java | 55 ++++++++++---- app/src/main/java/org/rssin/rssin/Keyword.java | 11 ++- app/src/main/res/layout/activity_filters.xml | 6 +- app/src/main/res/layout/activity_filters_item.xml | 19 +++++ app/src/main/res/values/strings.xml | 2 +- 10 files changed, 232 insertions(+), 21 deletions(-) create mode 100644 app/src/main/java/org/rssin/android/FiltersList.java create mode 100644 app/src/main/res/layout/activity_filters_item.xml (limited to 'app/src/main/res') diff --git a/app/src/main/java/org/rssin/android/FiltersActivity.java b/app/src/main/java/org/rssin/android/FiltersActivity.java index dec349f..254020f 100644 --- a/app/src/main/java/org/rssin/android/FiltersActivity.java +++ b/app/src/main/java/org/rssin/android/FiltersActivity.java @@ -1,18 +1,59 @@ package org.rssin.android; +import android.app.Activity; +import android.content.Context; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ListView; +import android.widget.TextView; +import android.widget.Toast; +import org.rssin.rssin.Filter; +import org.rssin.rssin.Keyword; import org.rssin.rssin.R; +import java.io.IOException; +import java.util.List; + public class FiltersActivity extends ActionBarActivity { + private FiltersList filters; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_filters); + + try { + filters = new FiltersList(this); + } catch (IOException ex) { + Toast.makeText(this, "Couldn't load filters.", Toast.LENGTH_SHORT).show(); + Log.e("FILTER", "IOException", ex); + + filters = new FiltersList(); + } + + Filter filter = new Filter("Hello world"); + filter.getKeywords().add(new Keyword("Keyword test")); + filter.getKeywords().add(new Keyword("Keyword test 2")); + filters.getFilters().add(filter); + + FilterAdapter adapter = new FilterAdapter(this, R.layout.activity_filters_item, filters.getFilters()); + ((ListView) findViewById(R.id.filters_list)).setAdapter(adapter); + + try { + filters.save(this); + } catch (IOException ex) { + Toast.makeText(this, "Couldn't save filters.", Toast.LENGTH_SHORT).show(); + Log.e("FILTER", "IOException", ex); + } } @@ -37,4 +78,49 @@ public class FiltersActivity extends ActionBarActivity { return super.onOptionsItemSelected(item); } + + private static class FilterAdapter extends ArrayAdapter { + + Context context; + int layoutResourceId; + List filters; + + public FilterAdapter(Context context, int resource, List objects) { + super(context, resource, objects); + this.context = context; + layoutResourceId = resource; + filters = 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.keywords = (TextView) row.findViewById(R.id.filter_item_keywords); + + row.setTag(holder); + } else { + holder = (FilterHolder) row.getTag(); + } + + Filter filter = filters.get(position); + holder.title.setText(filter.getTitle()); + holder.keywords.setText(filter.getKeywordsAsString()); + + return row; + } + + private static class FilterHolder { + TextView title; + TextView keywords; + } + } + } diff --git a/app/src/main/java/org/rssin/android/FiltersList.java b/app/src/main/java/org/rssin/android/FiltersList.java new file mode 100644 index 0000000..99810a0 --- /dev/null +++ b/app/src/main/java/org/rssin/android/FiltersList.java @@ -0,0 +1,63 @@ +package org.rssin.android; + +import android.content.Context; +import android.preference.PreferenceManager; +import android.util.Base64; + +import org.rssin.rssin.Filter; + +import java.io.BufferedInputStream; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.ArrayList; +import java.util.List; + +/** + * Created by camilstaps on 19-5-15. + */ +public class FiltersList { + + private static final String PREF_KEY = "filters_list"; + private final List filters; + + public FiltersList(Context context) throws IOException { + String filters = PreferenceManager.getDefaultSharedPreferences(context).getString(PREF_KEY, null); + if (filters == null) { + this.filters = new ArrayList<>(); + } else { + List filters_list; + try { + ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(Base64.decode(filters, Base64.DEFAULT))); + filters_list = (List) ois.readObject(); + } catch (ClassNotFoundException ex) { + filters_list = new ArrayList<>(); + } + this.filters = filters_list; + } + } + + public FiltersList(List filters) { + this.filters = filters; + } + + public FiltersList() { + this.filters = new ArrayList<>(); + } + + public List getFilters() { + return filters; + } + + public void save(Context context) throws IOException { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutputStream oos = new ObjectOutputStream(baos); + oos.writeObject(filters); + oos.close(); + String string = Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT); + PreferenceManager.getDefaultSharedPreferences(context).edit().putString(PREF_KEY, string).apply(); + } + +} diff --git a/app/src/main/java/org/rssin/android/UnifiedInboxActivity.java b/app/src/main/java/org/rssin/android/UnifiedInboxActivity.java index 697a430..dbe1c89 100644 --- a/app/src/main/java/org/rssin/android/UnifiedInboxActivity.java +++ b/app/src/main/java/org/rssin/android/UnifiedInboxActivity.java @@ -1,5 +1,6 @@ package org.rssin.android; +import android.content.Intent; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; @@ -14,6 +15,9 @@ public class UnifiedInboxActivity extends ActionBarActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_unified_inbox); + + Intent intent = new Intent(this, FiltersActivity.class); + startActivity(intent); } diff --git a/app/src/main/java/org/rssin/neurons/NeuralNetwork.java b/app/src/main/java/org/rssin/neurons/NeuralNetwork.java index d761e35..365991f 100755 --- a/app/src/main/java/org/rssin/neurons/NeuralNetwork.java +++ b/app/src/main/java/org/rssin/neurons/NeuralNetwork.java @@ -25,7 +25,7 @@ public class NeuralNetwork { public int addInput() { int result = 0; for (int i = 0; i < hiddenNodes.length; i++) { - result = hiddenNodes[i].AddWeight(); + //result = hiddenNodes[i].AddWeight(); } return result; diff --git a/app/src/main/java/org/rssin/rss/Feed.java b/app/src/main/java/org/rssin/rss/Feed.java index 5d65991..fd271d6 100644 --- a/app/src/main/java/org/rssin/rss/Feed.java +++ b/app/src/main/java/org/rssin/rss/Feed.java @@ -1,7 +1,10 @@ package org.rssin.rss; +import java.io.Serializable; + /** * Created by Randy on 19-5-2015. */ -public class Feed { +public class Feed implements Serializable { + private static final long serialVersionUID = 2; } diff --git a/app/src/main/java/org/rssin/rssin/Filter.java b/app/src/main/java/org/rssin/rssin/Filter.java index 6bb191f..1cffe1a 100644 --- a/app/src/main/java/org/rssin/rssin/Filter.java +++ b/app/src/main/java/org/rssin/rssin/Filter.java @@ -1,45 +1,70 @@ package org.rssin.rssin; +import android.text.TextUtils; + import org.rssin.rss.Feed; import java.io.Serializable; -import java.util.HashSet; -import java.util.Set; +import java.util.ArrayList; +import java.util.List; /** * Created by camilstaps on 19-5-15. */ public class Filter implements Serializable { - private final Set feeds; - private final Set keywords; + private static final long serialVersionUID = 0; + + private final List feeds; + private final List keywords; + private String title = new String(""); public Filter() { - feeds = new HashSet<>(); - keywords = new HashSet<>(); + feeds = new ArrayList<>(); + keywords = new ArrayList<>(); } - public Filter(Set keywords) { - this.feeds = new HashSet<>(); - this.keywords = keywords; + public Filter(String title) { + this.title = title; + feeds = new ArrayList<>(); + keywords = new ArrayList<>(); } - public Filter(HashSet feeds) { - this.feeds = feeds; - this.keywords = new HashSet<>(); + public Filter(String title, List keywords) { + this.feeds = new ArrayList<>(); + this.keywords = keywords; + this.title = title; } - public Filter(HashSet keywords, HashSet feeds) { + public Filter(String title, List keywords, List feeds) { this.feeds = feeds; this.keywords = keywords; + this.title = title; } - public Set getFeeds() { + public List getFeeds() { return feeds; } - public Set getKeywords() { + public List getKeywords() { return keywords; } + public String getKeywordsAsString() { + Keyword[] keywords = new Keyword[this.keywords.size()]; + int i = 0; + for (Keyword keyword : this.keywords) { + keywords[i++] = keyword; + } + return TextUtils.join(", ", keywords); + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + } diff --git a/app/src/main/java/org/rssin/rssin/Keyword.java b/app/src/main/java/org/rssin/rssin/Keyword.java index 690d627..8555e1a 100644 --- a/app/src/main/java/org/rssin/rssin/Keyword.java +++ b/app/src/main/java/org/rssin/rssin/Keyword.java @@ -1,9 +1,13 @@ package org.rssin.rssin; +import java.io.Serializable; + /** * Created by camilstaps on 19-5-15. */ -public class Keyword { +public class Keyword implements Serializable { + + private static final long serialVersionUID = 1; private final String keyword; @@ -15,4 +19,9 @@ public class Keyword { return keyword; } + @Override + public String toString() { + return keyword; + } + } diff --git a/app/src/main/res/layout/activity_filters.xml b/app/src/main/res/layout/activity_filters.xml index 6c2912d..521a319 100644 --- a/app/src/main/res/layout/activity_filters.xml +++ b/app/src/main/res/layout/activity_filters.xml @@ -6,7 +6,9 @@ android:paddingBottom="@dimen/activity_vertical_margin" tools:context="org.rssin.android.FiltersActivity"> - + diff --git a/app/src/main/res/layout/activity_filters_item.xml b/app/src/main/res/layout/activity_filters_item.xml new file mode 100644 index 0000000..99fbb19 --- /dev/null +++ b/app/src/main/res/layout/activity_filters_item.xml @@ -0,0 +1,19 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9f97ad0..e3e9d33 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3,5 +3,5 @@ Hello world! Settings - FiltersActivity + Filters -- cgit v1.2.3