aboutsummaryrefslogtreecommitdiff
path: root/app/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main')
-rw-r--r--app/src/main/java/com/camilstaps/common/Date.java11
-rw-r--r--app/src/main/java/com/camilstaps/rss/RssParser.java6
-rw-r--r--app/src/main/java/com/camilstaps/taize/DailyMeditationFragment.java4
-rw-r--r--app/src/main/java/com/camilstaps/taize/DailyReadingFragment.java4
-rw-r--r--app/src/main/java/com/camilstaps/taize/Podcast.java46
-rw-r--r--app/src/main/java/com/camilstaps/taize/PodcastAdapter.java38
-rw-r--r--app/src/main/java/com/camilstaps/taize/PodcastFragment.java18
-rw-r--r--app/src/main/java/com/camilstaps/taize/Taize.java50
-rw-r--r--app/src/main/res/values/strings.xml2
9 files changed, 163 insertions, 16 deletions
diff --git a/app/src/main/java/com/camilstaps/common/Date.java b/app/src/main/java/com/camilstaps/common/Date.java
index 8e5d6f4..59e7315 100644
--- a/app/src/main/java/com/camilstaps/common/Date.java
+++ b/app/src/main/java/com/camilstaps/common/Date.java
@@ -191,14 +191,19 @@ public class Date implements Comparable<Date> {
@Override
public int compareTo(Date another) {
if (another.year != year)
- return Integer.compare(another.year, year);
+ return compareIntegers(another.year, year);
if (another.month != month)
- return Integer.compare(another.month, month);
+ return compareIntegers(another.month, month);
if (another.day != day)
- return Integer.compare(another.day, day);
+ return compareIntegers(another.day, day);
return 0;
}
+ private int compareIntegers(int x, int y) {
+ if (x == y) return 0;
+ return (x < y) ? -1 : 1;
+ }
+
public String toNiceString(Context context) {
SimpleDateFormat sdf = new SimpleDateFormat("EEEE d MMMM y");
return sdf.format(new GregorianCalendar(year, month - 1, day).getTime());
diff --git a/app/src/main/java/com/camilstaps/rss/RssParser.java b/app/src/main/java/com/camilstaps/rss/RssParser.java
index c93f652..3417583 100644
--- a/app/src/main/java/com/camilstaps/rss/RssParser.java
+++ b/app/src/main/java/com/camilstaps/rss/RssParser.java
@@ -3,6 +3,8 @@ package com.camilstaps.rss;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
+import java.util.List;
+
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
@@ -290,4 +292,8 @@ public class RssParser extends DefaultHandler {
public Item getItem(int index) {
return items.get(index);
}
+
+ public List<Item> getItems() {
+ return items;
+ }
} \ No newline at end of file
diff --git a/app/src/main/java/com/camilstaps/taize/DailyMeditationFragment.java b/app/src/main/java/com/camilstaps/taize/DailyMeditationFragment.java
index 05d56d6..5ce6acd 100644
--- a/app/src/main/java/com/camilstaps/taize/DailyMeditationFragment.java
+++ b/app/src/main/java/com/camilstaps/taize/DailyMeditationFragment.java
@@ -46,8 +46,8 @@ public class DailyMeditationFragment extends Fragment {
onScrollChangedListener = new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
- Log.d("DMF", "Scrolling to (" + rootView.getScrollX() + "," + rootView.getScrollY() + ")");
- /*if (rootView.getScrollY() > 0) {
+ /*Log.d("DMF", "Scrolling to (" + rootView.getScrollX() + "," + rootView.getScrollY() + ")");
+ if (rootView.getScrollY() > 0) {
((MainActivity) context).swipeRefreshLayout.setEnabled(false);
} else {
((MainActivity) context).swipeRefreshLayout.setEnabled(true);
diff --git a/app/src/main/java/com/camilstaps/taize/DailyReadingFragment.java b/app/src/main/java/com/camilstaps/taize/DailyReadingFragment.java
index d919e42..40c89f3 100644
--- a/app/src/main/java/com/camilstaps/taize/DailyReadingFragment.java
+++ b/app/src/main/java/com/camilstaps/taize/DailyReadingFragment.java
@@ -48,8 +48,8 @@ public class DailyReadingFragment extends Fragment {
onScrollChangedListener = new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
- Log.d("DRF", "Scrolling to (" + rootView.getScrollX() + "," + rootView.getScrollY() + ")");
- /*if (rootView.getScrollY() > 0) {
+ /*Log.d("DRF", "Scrolling to (" + rootView.getScrollX() + "," + rootView.getScrollY() + ")");
+ if (rootView.getScrollY() > 0) {
((MainActivity) context).swipeRefreshLayout.setEnabled(false);
} else {
((MainActivity) context).swipeRefreshLayout.setEnabled(true);
diff --git a/app/src/main/java/com/camilstaps/taize/Podcast.java b/app/src/main/java/com/camilstaps/taize/Podcast.java
new file mode 100644
index 0000000..ef55cdf
--- /dev/null
+++ b/app/src/main/java/com/camilstaps/taize/Podcast.java
@@ -0,0 +1,46 @@
+package com.camilstaps.taize;
+
+import com.camilstaps.common.Date;
+import com.camilstaps.common.DatedString;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/**
+ * Created by camilstaps on 15-4-15.
+ */
+public class Podcast extends DatedString implements Comparable<Podcast> {
+
+ public Podcast(Date date, String title, String url) throws JSONException {
+ super(date, (new JSONObject()).put("title", title).put("url", url).toString());
+ }
+
+ private JSONObject getJSONObject() {
+ try {
+ return new JSONObject(getString());
+ } catch (JSONException e) {
+ return null;
+ }
+ }
+
+ public String getTitle() {
+ try {
+ return getJSONObject().getString("title");
+ } catch (JSONException e) {
+ return "";
+ }
+ }
+
+ public String getUrl() {
+ try {
+ return getJSONObject().getString("url");
+ } catch (JSONException e) {
+ return "";
+ }
+ }
+
+ @Override
+ public int compareTo(Podcast another) {
+ return getDate().compareTo(another.getDate());
+ }
+}
diff --git a/app/src/main/java/com/camilstaps/taize/PodcastAdapter.java b/app/src/main/java/com/camilstaps/taize/PodcastAdapter.java
index e3af543..caa6adf 100644
--- a/app/src/main/java/com/camilstaps/taize/PodcastAdapter.java
+++ b/app/src/main/java/com/camilstaps/taize/PodcastAdapter.java
@@ -1,11 +1,19 @@
package com.camilstaps.taize;
import android.content.Context;
+import android.content.Intent;
+import android.media.AudioManager;
+import android.media.MediaPlayer;
+import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
+import android.widget.Toast;
+
+import java.io.IOException;
+import java.util.List;
/**
* Created by camilstaps on 15-4-15.
@@ -13,10 +21,20 @@ import android.widget.TextView;
public class PodcastAdapter extends BaseAdapter {
Context context;
- String[] data;
+ final List<Podcast> data;
private static LayoutInflater inflater = null;
- public PodcastAdapter(Context context, String[] data) {
+ private View.OnClickListener onClickListener = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent();
+ intent.setAction(Intent.ACTION_VIEW);
+ intent.setDataAndType(Uri.parse((String) v.getTag()), "audio/*");
+ context.startActivity(intent);
+ }
+ };
+
+ public PodcastAdapter(Context context, List<Podcast> data) {
this.context = context;
this.data = data;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
@@ -24,12 +42,12 @@ public class PodcastAdapter extends BaseAdapter {
@Override
public int getCount() {
- return data.length;
+ return data.size();
}
@Override
public Object getItem(int position) {
- return data[position];
+ return data.get(position);
}
@Override
@@ -39,14 +57,22 @@ public class PodcastAdapter extends BaseAdapter {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
+
View vi = convertView;
+
if (vi == null) {
vi = inflater.inflate(R.layout.pager_content_podcast_item, null);
}
+
TextView dateTextView = (TextView) vi.findViewById(R.id.podcast_date);
- dateTextView.setText("Hello");
+ dateTextView.setText(data.get(position).getDate().toNiceString(context));
TextView titleTextView = (TextView) vi.findViewById(R.id.podcast_title);
- titleTextView.setText(data[position]);
+ titleTextView.setText(data.get(position).getTitle());
+
+ vi.setTag(data.get(position).getUrl());
+
+ vi.setOnClickListener(onClickListener);
+
return vi;
}
}
diff --git a/app/src/main/java/com/camilstaps/taize/PodcastFragment.java b/app/src/main/java/com/camilstaps/taize/PodcastFragment.java
index 29a0181..bf1bb3b 100644
--- a/app/src/main/java/com/camilstaps/taize/PodcastFragment.java
+++ b/app/src/main/java/com/camilstaps/taize/PodcastFragment.java
@@ -9,6 +9,7 @@ import android.content.SharedPreferences;
import android.database.DataSetObserver;
import android.os.Bundle;
import android.support.v4.app.Fragment;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -16,6 +17,11 @@ import android.view.ViewTreeObserver;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
+import android.widget.Toast;
+
+import com.camilstaps.common.Listener;
+
+import java.util.List;
/**
* Created by camilstaps on 8-4-15.
@@ -38,7 +44,17 @@ public class PodcastFragment extends Fragment {
protected void setupContent() {
- ((ListView) rootView.findViewById(R.id.podcasts_list)).setAdapter(new PodcastAdapter(context, new String[] {"Hello", "World", "!!!!"}));
+ Taize.getPodcasts(context, new Listener<List<Podcast>>() {
+ @Override
+ public void success(List<Podcast> data) {
+ ((ListView) rootView.findViewById(R.id.podcasts_list)).setAdapter(new PodcastAdapter(context, data));
+ }
+
+ @Override
+ public void failure() {
+ Toast.makeText(context, context.getResources().getText(R.string.failure_fetching_podcasts), Toast.LENGTH_LONG).show();
+ }
+ });
}
diff --git a/app/src/main/java/com/camilstaps/taize/Taize.java b/app/src/main/java/com/camilstaps/taize/Taize.java
index 284af51..25b8e3e 100644
--- a/app/src/main/java/com/camilstaps/taize/Taize.java
+++ b/app/src/main/java/com/camilstaps/taize/Taize.java
@@ -11,8 +11,16 @@ import com.camilstaps.common.Listener;
import com.camilstaps.rss.RetrieveFeedTask;
import com.camilstaps.rss.RssParser;
+import org.json.JSONException;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
import java.util.Iterator;
+import java.util.List;
import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
/**
* Class specific to methods for Taize
@@ -23,6 +31,7 @@ public class Taize {
private static final String url_reading_feed = "http://www.taize.fr/readingrss.php";
private static final String url_reading_feed_en = "http://www.taize.fr/readingrss.php?lang=en";
private static final String url_meditation_feed = "http://www.taize.fr/pdcrss.xml";
+ private static final String url_podcasts_feed = "http://www.taize.fr/podcast";
private static final int MAX_DIFFDATE_READING = 10;
@@ -235,6 +244,45 @@ public class Taize {
}
+ public static void getPodcasts(final Context context, final Listener<List<Podcast>> listener) {
+
+ RetrieveFeedTask retrieve = new RetrieveFeedTask();
+ retrieve.setRssDownloadListener(new Listener<RssParser>() {
+ @Override
+ public void success(RssParser data) {
+ Set<Podcast> podcasts = new HashSet<>();
+ for (RssParser.Item item : data.getItems()) {
+ Pattern datePattern = Pattern.compile("^(\\d{4})-(\\d{1,2})-(\\d{1,2})[\\s:]*(.*)");
+ Matcher dateMatcher = datePattern.matcher(item.title);
+ if (dateMatcher.find()) {
+ Date date = new Date(Integer.parseInt(dateMatcher.group(1)), Integer.parseInt(dateMatcher.group(2)), Integer.parseInt(dateMatcher.group(3)));
+ try {
+ podcasts.add(new Podcast(date, dateMatcher.group(4), item.guid));
+ } catch (JSONException e) {}
+ }
+ }
+
+ List<Podcast> sortedPodcasts = new ArrayList<>(podcasts);
+ Collections.sort(sortedPodcasts);
+ listener.success(sortedPodcasts);
+ }
+
+ @Override
+ public void failure() {
+ Toast.makeText(context, context.getResources().getText(R.string.failure_fetching_podcasts), Toast.LENGTH_LONG).show();
+ listener.failure();
+ }
+ });
+
+ try {
+ retrieve.execute(url_podcasts_feed).get();
+ } catch (Exception e) {
+ e.printStackTrace();
+ listener.failure();
+ }
+
+ }
+
public static void cleanTextSets(Context context) {
cleanDailyReadingsSet(context, "dailyreadings");
cleanDailyReadingsSet(context, "englishdailyreadings");
@@ -262,6 +310,4 @@ public class Taize {
DatedStringPreferenceSet.put(context, key, (Set) set);
}
- //http://www.taize.fr/pdcrss.xml
-
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 856aa2f..4324ff7 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -8,4 +8,6 @@
<string name="action_today">Today</string>
<string name="title_activity_settings" translatable="false">@string/action_settings</string>
+
+ <string name="failure_fetching_podcasts">Couldn\'t fetch podcasts</string>
</resources>