aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java
diff options
context:
space:
mode:
authorCamil Staps2015-05-22 09:46:05 +0200
committerCamil Staps2015-05-22 09:46:05 +0200
commite70cecf76b5c2aee0bd50fbacfbae6ae5f1dcf57 (patch)
tree629cb6ba1763ad270a1d5596b4f3f07a5b05b8f0 /app/src/main/java
parentcleanup (diff)
Working SharedPreferencesStorageProvider
Diffstat (limited to 'app/src/main/java')
-rw-r--r--app/src/main/java/org/rssin/android/FilterActivity.java2
-rw-r--r--app/src/main/java/org/rssin/android/FilterSettingsActivity.java2
-rwxr-xr-xapp/src/main/java/org/rssin/android/FiltersList.java6
-rw-r--r--app/src/main/java/org/rssin/android/SharedPreferencesStorageProvider.java98
-rwxr-xr-xapp/src/main/java/org/rssin/rssin/Filter.java2
5 files changed, 103 insertions, 7 deletions
diff --git a/app/src/main/java/org/rssin/android/FilterActivity.java b/app/src/main/java/org/rssin/android/FilterActivity.java
index cbe5382..5afa3ff 100644
--- a/app/src/main/java/org/rssin/android/FilterActivity.java
+++ b/app/src/main/java/org/rssin/android/FilterActivity.java
@@ -49,7 +49,7 @@ public class FilterActivity extends ActionBarActivity {
// @todo Check on -1? Shouldn't happen anyway.
filter = filtersList.getFilterFromHashCode(filterHashCode);
- filter.ensureFeedSorter(InternalStorageProvider.getInstance(this));
+ filter.ensureFeedSorter(SharedPreferencesStorageProvider.getInstance(this));
setTitle(filter.getTitle());
diff --git a/app/src/main/java/org/rssin/android/FilterSettingsActivity.java b/app/src/main/java/org/rssin/android/FilterSettingsActivity.java
index b0791a3..1893579 100644
--- a/app/src/main/java/org/rssin/android/FilterSettingsActivity.java
+++ b/app/src/main/java/org/rssin/android/FilterSettingsActivity.java
@@ -195,7 +195,7 @@ public class FilterSettingsActivity extends ActionBarActivity {
Keyword k = new Keyword(keyword);
filter.getKeywords().add(k);
try {
- filter.store(InternalStorageProvider.getInstance());
+ filter.store(SharedPreferencesStorageProvider.getInstance());
keywordAdapter.notifyDataSetChanged();
editText.setText("");
} catch (Exception e) {
diff --git a/app/src/main/java/org/rssin/android/FiltersList.java b/app/src/main/java/org/rssin/android/FiltersList.java
index 020e1e0..9448584 100755
--- a/app/src/main/java/org/rssin/android/FiltersList.java
+++ b/app/src/main/java/org/rssin/android/FiltersList.java
@@ -23,8 +23,8 @@ public class FiltersList {
* @throws IOException if data is corrupted, and deserializing fails
*/
protected FiltersList(Context context) throws IOException {
- InternalStorageProvider internalStorageProvider = InternalStorageProvider.getInstance(context);
- filters = internalStorageProvider.allFilters();
+ SharedPreferencesStorageProvider sharedPreferencesStorageProvider = SharedPreferencesStorageProvider.getInstance(context);
+ filters = sharedPreferencesStorageProvider.allFilters();
}
public static FiltersList getInstance(Context context) throws IOException {
@@ -49,7 +49,7 @@ public class FiltersList {
Exception e = null;
for (Filter filter : filters) {
try {
- filter.store(InternalStorageProvider.getInstance());
+ filter.store(SharedPreferencesStorageProvider.getInstance());
} catch (Exception ex) {
e = ex;
}
diff --git a/app/src/main/java/org/rssin/android/SharedPreferencesStorageProvider.java b/app/src/main/java/org/rssin/android/SharedPreferencesStorageProvider.java
new file mode 100644
index 0000000..d394343
--- /dev/null
+++ b/app/src/main/java/org/rssin/android/SharedPreferencesStorageProvider.java
@@ -0,0 +1,98 @@
+package org.rssin.android;
+
+import android.content.Context;
+import android.preference.PreferenceManager;
+import android.util.Base64;
+import android.util.Log;
+
+import org.rssin.rssin.Filter;
+import org.rssin.storage.FilterStorageProvider;
+import org.rssin.storage.Storable;
+import org.rssin.storage.StorageProvider;
+
+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.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Created by camilstaps on 22-5-15.
+ */
+public class SharedPreferencesStorageProvider implements StorageProvider, FilterStorageProvider {
+
+ private static final String ADMIN_PREF_KEY = "administration";
+
+ private static SharedPreferencesStorageProvider instance;
+
+ private Context context;
+
+ protected SharedPreferencesStorageProvider(Context context) {
+ this.context = context;
+ }
+
+ public static SharedPreferencesStorageProvider getInstance(Context context) {
+ if (instance == null) {
+ instance = new SharedPreferencesStorageProvider(context);
+ }
+
+ return instance;
+ }
+
+ public static SharedPreferencesStorageProvider getInstance() {
+ return instance;
+ }
+
+ @Override
+ public void store(Object key, Storable element) throws Exception {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ObjectOutputStream oos = new ObjectOutputStream(baos);
+ oos.writeObject(element);
+ oos.close();
+ String string = Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT);
+
+ context.getSharedPreferences(key.toString(), Context.MODE_PRIVATE).edit().putString(element.getClass().getName(), string).commit();
+ }
+
+ @Override
+ public Storable fetch(Object key, Class className) throws Exception {
+ String serialized = context.getSharedPreferences(key.toString(), Context.MODE_PRIVATE).getString(className.getName(), null);
+ 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, Base64.DEFAULT)));
+ return (Storable) className.cast(ois.readObject());
+ }
+
+ @Override
+ public Object uniqueKey() {
+ return Integer.toString((int) System.currentTimeMillis());
+ }
+
+ @Override
+ public List<Filter> allFilters() {
+ Set<String> names = context.getSharedPreferences(ADMIN_PREF_KEY, Context.MODE_PRIVATE).getStringSet("filters", new HashSet<String>());
+ List<Filter> filters = new ArrayList<>();
+ for (String name : names) {
+ Filter filter = getFilter(name);
+ if (filter != null) {
+ filters.add(filter);
+ }
+ }
+ return filters;
+ }
+
+ @Override
+ public Filter getFilter(Object key) {
+ try {
+ return (Filter) fetch(key.toString(), Filter.class);
+ } catch (Exception e) {
+ Log.e("SPSP", "Failed fetching filter", e);
+ return null;
+ }
+ }
+}
diff --git a/app/src/main/java/org/rssin/rssin/Filter.java b/app/src/main/java/org/rssin/rssin/Filter.java
index 77b114e..c135586 100755
--- a/app/src/main/java/org/rssin/rssin/Filter.java
+++ b/app/src/main/java/org/rssin/rssin/Filter.java
@@ -2,12 +2,10 @@ package org.rssin.rssin;
import android.text.TextUtils;
-import org.rssin.android.InternalStorageProvider;
import org.rssin.neurons.FeedSorter;
import org.rssin.storage.Storable;
import org.rssin.storage.StorageProvider;
-import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;