diff options
author | Camil Staps | 2015-04-15 21:24:24 +0200 |
---|---|---|
committer | Camil Staps | 2015-04-15 21:27:27 +0200 |
commit | f3f71c7d0c2e6944e7bb2a7190bb06680819ad73 (patch) | |
tree | eab03f2a6e9d4412002b52f45eab967feb41a117 /app/src/main/java | |
parent | Overall continuation of development (diff) |
Added working podcasts
Diffstat (limited to 'app/src/main/java')
8 files changed, 161 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 - } |