aboutsummaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorSize432015-06-10 13:31:56 +0200
committerSize432015-06-10 13:31:56 +0200
commit7d0ebf14c5972f4b3191cfe8ae769c6cbd7d1ea6 (patch)
treed0fe451e36eae645b8634ddff51f87f9546076f2 /app
parentAligned (EDIT) to the right (diff)
Feed titles from RSS feeds
Diffstat (limited to 'app')
-rwxr-xr-xapp/src/main/java/org/rssin/android/FeedsActivity.java15
-rwxr-xr-xapp/src/main/java/org/rssin/android/FilterSettingsActivity.java15
-rwxr-xr-xapp/src/main/java/org/rssin/android/NavigationDrawerManageFeedsFragment.java12
-rwxr-xr-xapp/src/main/java/org/rssin/rssin/Feed.java47
4 files changed, 73 insertions, 16 deletions
diff --git a/app/src/main/java/org/rssin/android/FeedsActivity.java b/app/src/main/java/org/rssin/android/FeedsActivity.java
index 87edab0..37e8434 100755
--- a/app/src/main/java/org/rssin/android/FeedsActivity.java
+++ b/app/src/main/java/org/rssin/android/FeedsActivity.java
@@ -20,6 +20,7 @@ import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
+import org.rssin.listener.FallibleListener;
import org.rssin.rssin.Feed;
import org.rssin.rssin.R;
@@ -115,13 +116,25 @@ public class FeedsActivity extends ActionBarActivity {
input.setMaxLines(1);
input.requestFocus();
+ final Context context = feedsView.getContext();
+
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 {
- Feed f = new Feed(value);
+ Feed f = new Feed(value, context, new VolleyFetcher(context), new FallibleListener<String, Object>() {
+ @Override
+ public void onError(Object error) {
+
+ }
+
+ @Override
+ public void onReceive(String data) {
+ feedAdapter.notifyDataSetChanged();
+ }
+ });
f.store(DefaultStorageProvider.getInstance(getBaseContext()));
feedsList.getFeeds().add(f);
feedAdapter.notifyDataSetChanged();
diff --git a/app/src/main/java/org/rssin/android/FilterSettingsActivity.java b/app/src/main/java/org/rssin/android/FilterSettingsActivity.java
index a38c7bc..670c986 100755
--- a/app/src/main/java/org/rssin/android/FilterSettingsActivity.java
+++ b/app/src/main/java/org/rssin/android/FilterSettingsActivity.java
@@ -25,6 +25,7 @@ import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
+import org.rssin.listener.FallibleListener;
import org.rssin.rssin.Feed;
import org.rssin.rssin.Filter;
import org.rssin.rssin.R;
@@ -99,6 +100,8 @@ public class FilterSettingsActivity extends ActionBarActivity {
}
});
+ final Context context = feedsListView.getContext();
+
/**
* @todo Allow users to enter links without scheme (http:// ...)
*/
@@ -109,7 +112,17 @@ public class FilterSettingsActivity extends ActionBarActivity {
String value = editText.getText().toString();
try {
URL url = new URL(value);
- Feed feed = new Feed(url);
+ Feed feed = new Feed(url, context, new VolleyFetcher(context), new FallibleListener<String, Object>() {
+ @Override
+ public void onError(Object error) {
+
+ }
+
+ @Override
+ public void onReceive(String data) {
+ feedAdapter.notifyDataSetChanged();
+ }
+ });
try {
feed.store(DefaultStorageProvider.getInstance());
FeedsList.getInstance().getFeeds().add(feed);
diff --git a/app/src/main/java/org/rssin/android/NavigationDrawerManageFeedsFragment.java b/app/src/main/java/org/rssin/android/NavigationDrawerManageFeedsFragment.java
index e239588..bc2b710 100755
--- a/app/src/main/java/org/rssin/android/NavigationDrawerManageFeedsFragment.java
+++ b/app/src/main/java/org/rssin/android/NavigationDrawerManageFeedsFragment.java
@@ -134,7 +134,17 @@ public class NavigationDrawerManageFeedsFragment extends Fragment {
public void onClick(DialogInterface dialog, int whichButton) {
String value = input.getText().toString();
try {
- Feed f = new Feed(value);
+ Feed f = new Feed(value, context, new VolleyFetcher(context), new FallibleListener<String, Object>() {
+ @Override
+ public void onError(Object error) {
+
+ }
+
+ @Override
+ public void onReceive(String data) {
+ feedAdapter.notifyDataSetChanged();
+ }
+ });
f.store(DefaultStorageProvider.getInstance(context));
feedsList.getFeeds().add(f);
feedAdapter.notifyDataSetChanged();
diff --git a/app/src/main/java/org/rssin/rssin/Feed.java b/app/src/main/java/org/rssin/rssin/Feed.java
index ae8b5f2..d108017 100755
--- a/app/src/main/java/org/rssin/rssin/Feed.java
+++ b/app/src/main/java/org/rssin/rssin/Feed.java
@@ -1,9 +1,13 @@
package org.rssin.rssin;
+import android.content.Context;
import android.util.Log;
import org.json.JSONException;
import org.json.JSONObject;
+import org.rssin.http.Fetcher;
+import org.rssin.listener.FallibleListener;
+import org.rssin.rss.FeedLoader;
import org.rssin.serialization.Jsonable;
import org.rssin.storage.FeedStorageProvider;
import org.rssin.storage.Storable;
@@ -34,14 +38,13 @@ public class Feed implements Storable, Comparable<Feed>, Jsonable {
*/
private Object storageKey;
- public Feed(URL url) {
+ public Feed(URL url, Context context, Fetcher fetcher, FallibleListener<String, Object> titleHasChanged) {
this.url = url;
- setTitleFromURL();
+ setTitleFromURL(context, fetcher, titleHasChanged);
}
- public Feed(String url) throws MalformedURLException {
- this.url = new URL(url);
- setTitleFromURL();
+ public Feed(String url, Context context, Fetcher fetcher, FallibleListener<String, Object> titleHasChanged) throws MalformedURLException {
+ this(new URL(url), context, fetcher, titleHasChanged);
}
public Feed(URL url, String title) {
@@ -90,15 +93,33 @@ public class Feed implements Storable, Comparable<Feed>, Jsonable {
* Cleverly make up a title based on the URL
* @todo make it really really clever
*/
- public void setTitleFromURL() {
- String title = url.getHost();
- String url = this.url.toString();
- if (url.lastIndexOf('/') < url.lastIndexOf('.') && url.lastIndexOf('/') != -1) {
- title += " " + url.substring(url.lastIndexOf('/') + 1, url.lastIndexOf('.'));
- } else if (url.lastIndexOf('/') != -1) {
- title += " " + url.substring(url.lastIndexOf('/') + 1);
+ public void setTitleFromURL(Context context, Fetcher fetcher, final FallibleListener<String, Object> titlehasChanged) {
+ String newTitle = url.getHost();
+ String strUrl = url.toString();
+ if (strUrl.lastIndexOf('/') < strUrl.lastIndexOf('.') && strUrl.lastIndexOf('/') != -1) {
+ newTitle += " " + strUrl.substring(strUrl.lastIndexOf('/') + 1, strUrl.lastIndexOf('.'));
+ } else if (strUrl.lastIndexOf('/') != -1) {
+ newTitle += " " + strUrl.substring(strUrl.lastIndexOf('/') + 1);
}
- this.title = title;
+
+ title = newTitle;
+
+ final FeedLoader loader = new FeedLoader(url);
+ loader.fetchXML(fetcher, new FallibleListener<Object, Object>() {
+ @Override
+ public void onError(Object error) {
+ // Keep title the same, based on the URL
+ if(titlehasChanged != null){
+ titlehasChanged.onError(error);
+ }
+ }
+
+ @Override
+ public void onReceive(Object data) {
+ title = loader.getFeed().getTitle();
+ titlehasChanged.onReceive(title);
+ }
+ });
}
@Override