diff options
author | Size43 | 2015-06-10 13:31:56 +0200 |
---|---|---|
committer | Size43 | 2015-06-10 13:31:56 +0200 |
commit | 7d0ebf14c5972f4b3191cfe8ae769c6cbd7d1ea6 (patch) | |
tree | d0fe451e36eae645b8634ddff51f87f9546076f2 /app | |
parent | Aligned (EDIT) to the right (diff) |
Feed titles from RSS feeds
Diffstat (limited to 'app')
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 |