From 88041c0a7fd2c69094f1bb0ab1d15518cd1fd75d Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Wed, 15 Apr 2015 12:59:32 +0200 Subject: Working tabs & meditations --- .../common/DatedStringPreferenceSet.java | 2 - app/src/main/java/com/camilstaps/taize/Bible.java | 20 ++- .../main/java/com/camilstaps/taize/BibleText.java | 47 +++++-- .../java/com/camilstaps/taize/DailyMeditation.java | 21 +++ .../camilstaps/taize/DailyMeditationFragment.java | 101 ++++++++++++++ .../java/com/camilstaps/taize/DailyReading.java | 13 +- .../com/camilstaps/taize/DailyReadingFragment.java | 23 ++- .../java/com/camilstaps/taize/MainActivity.java | 154 +++++++++------------ app/src/main/java/com/camilstaps/taize/Taize.java | 80 ++++++++--- app/src/main/res/layout/activity_main.xml | 15 +- app/src/main/res/layout/fragment_main.xml | 8 ++ app/src/main/res/layout/pager_content.xml | 55 -------- .../res/layout/pager_content_dailymeditation.xml | 38 +++++ .../main/res/layout/pager_content_dailyreading.xml | 55 ++++++++ 14 files changed, 437 insertions(+), 195 deletions(-) create mode 100644 app/src/main/java/com/camilstaps/taize/DailyMeditation.java create mode 100644 app/src/main/java/com/camilstaps/taize/DailyMeditationFragment.java create mode 100644 app/src/main/res/layout/fragment_main.xml delete mode 100644 app/src/main/res/layout/pager_content.xml create mode 100644 app/src/main/res/layout/pager_content_dailymeditation.xml create mode 100644 app/src/main/res/layout/pager_content_dailyreading.xml (limited to 'app/src') diff --git a/app/src/main/java/com/camilstaps/common/DatedStringPreferenceSet.java b/app/src/main/java/com/camilstaps/common/DatedStringPreferenceSet.java index d17bc90..4e3e449 100644 --- a/app/src/main/java/com/camilstaps/common/DatedStringPreferenceSet.java +++ b/app/src/main/java/com/camilstaps/common/DatedStringPreferenceSet.java @@ -4,8 +4,6 @@ import android.content.Context; import android.content.SharedPreferences; import android.preference.PreferenceManager; -import com.camilstaps.taize.DailyReading; - import org.json.JSONException; import java.text.ParseException; diff --git a/app/src/main/java/com/camilstaps/taize/Bible.java b/app/src/main/java/com/camilstaps/taize/Bible.java index 83fcba4..43795f7 100644 --- a/app/src/main/java/com/camilstaps/taize/Bible.java +++ b/app/src/main/java/com/camilstaps/taize/Bible.java @@ -2,7 +2,6 @@ package com.camilstaps.taize; import android.content.Context; import android.preference.PreferenceManager; -import android.util.Log; import com.android.volley.Request; import com.android.volley.RequestQueue; @@ -85,7 +84,24 @@ public class Bible { } } } catch (JSONException e) { - passage.append("No Bible text found."); + try { + JSONObject response = new JSONObject(s.substring(1, s.length() - 2)); + JSONObject chapter = response.getJSONObject("chapter"); + + List sortedKeys = new ArrayList(); + Iterator verses = chapter.keys(); + while (verses.hasNext()) { + String verse_number = (String) verses.next(); + sortedKeys.add(verse_number); + } + Collections.sort(sortedKeys); + for (String verse_number : sortedKeys) { + JSONObject verse = chapter.getJSONObject(verse_number); + passage.append(verse.getString("verse")).append(" "); + } + } catch (JSONException e2) { + errorListener.onErrorResponse(null); + } } listener.onResponse(passage.toString()); diff --git a/app/src/main/java/com/camilstaps/taize/BibleText.java b/app/src/main/java/com/camilstaps/taize/BibleText.java index 6a9dba8..4f73ad8 100644 --- a/app/src/main/java/com/camilstaps/taize/BibleText.java +++ b/app/src/main/java/com/camilstaps/taize/BibleText.java @@ -4,6 +4,7 @@ import android.content.Context; import com.android.volley.Response; import com.android.volley.VolleyError; +import com.camilstaps.common.Listener; /** * Class for holding some text in the Bible @@ -15,6 +16,17 @@ public class BibleText { private String book; private int start_chap, end_chap, start_verse, end_verse; + /** + * Constructor for a bible text consisting of a full chapter + * @param book + * @param chapter + */ + public BibleText(String book, int chapter) { + this.book = book; + start_chap = end_chap = chapter; + start_verse = end_verse = -1; + } + /** * Constructor for a bible text consisting of a single verse * @param book @@ -46,13 +58,17 @@ public class BibleText { @Override public String toString() { StringBuilder sb = new StringBuilder(book); - sb.append(' ').append(Integer.toString(start_chap)).append(':').append(Integer.toString(start_verse)); - if (start_chap != end_chap || start_verse != end_verse) { - sb.append('-'); - if (start_chap != end_chap) { - sb.append(Integer.toString(end_chap)).append('-'); + sb.append(' ').append(Integer.toString(start_chap)); + if (start_verse != -1) { + sb.append(':').append(Integer.toString(start_verse)); + + if (start_chap != end_chap || start_verse != end_verse) { + sb.append('-'); + if (start_chap != end_chap) { + sb.append(Integer.toString(end_chap)).append('-'); + } + sb.append(Integer.toString(end_verse)); } - sb.append(Integer.toString(end_verse)); } return sb.toString(); } @@ -61,13 +77,14 @@ public class BibleText { * Get the text (without verse numbers, line breaks, etc.) of this passage * @param context * @param listener - * @param errorListener */ - public void getText(Context context, Response.Listener listener, Response.ErrorListener errorListener) { + public void getText(Context context, final Listener listener) { String passage = ""; if (start_chap == end_chap) { - if (start_verse == end_verse) { + if (start_verse == -1) { + passage = book + " " + start_chap; + } else if (start_verse == end_verse) { passage = book + " " + start_chap + ":" + start_verse; } else { passage = book + " " + start_chap + ":" + start_verse + "-" + end_verse; @@ -81,7 +98,17 @@ public class BibleText { passage = passageBuilder.toString(); } - Bible.getPassage(context, passage, listener, errorListener); + Bible.getPassage(context, passage, new Response.Listener() { + @Override + public void onResponse(String s) { + listener.success(s); + } + }, new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError volleyError) { + listener.failure(); + } + }); } } diff --git a/app/src/main/java/com/camilstaps/taize/DailyMeditation.java b/app/src/main/java/com/camilstaps/taize/DailyMeditation.java new file mode 100644 index 0000000..fc5883b --- /dev/null +++ b/app/src/main/java/com/camilstaps/taize/DailyMeditation.java @@ -0,0 +1,21 @@ +package com.camilstaps.taize; + +import org.json.JSONException; + +import java.text.ParseException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import com.camilstaps.common.Date; +import com.camilstaps.common.DatedString; + +/** + * Created by camilstaps on 7-4-15. + */ +public class DailyMeditation extends DatedString { + + public DailyMeditation(Date date, String string) { + super(date, string); + } + +} diff --git a/app/src/main/java/com/camilstaps/taize/DailyMeditationFragment.java b/app/src/main/java/com/camilstaps/taize/DailyMeditationFragment.java new file mode 100644 index 0000000..4e1d4be --- /dev/null +++ b/app/src/main/java/com/camilstaps/taize/DailyMeditationFragment.java @@ -0,0 +1,101 @@ +package com.camilstaps.taize; + +import android.content.Context; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.support.v4.app.Fragment; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import android.widget.TextView; + +import com.camilstaps.common.Date; +import com.camilstaps.common.Listener; +import com.camilstaps.common.NullListener; + +/** + * Created by camilstaps on 8-4-15. + */ +public class DailyMeditationFragment extends Fragment { + + private SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener; + private ViewTreeObserver.OnScrollChangedListener onScrollChangedListener; + private View rootView; + private Context context; + + private Date date; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + rootView = inflater.inflate(R.layout.pager_content_dailymeditation, container, false); + + context = container.getContext(); + + Bundle args = getArguments(); + int dateOffset = args.getInt("dateOffset", 0); + + date = new Date(); + date.addOrSubtractDays(dateOffset); + + setupContent(); + + onScrollChangedListener = new ViewTreeObserver.OnScrollChangedListener() { + @Override + public void onScrollChanged() { + Log.d("DMF", "Scrolling to (" + rootView.getScrollX() + "," + rootView.getScrollY() + ")"); + /*if (rootView.getScrollY() > 0) { + ((MainActivity) context).swipeRefreshLayout.setEnabled(false); + } else { + ((MainActivity) context).swipeRefreshLayout.setEnabled(true); + }*/ + } + }; + rootView.findViewById(R.id.pager_content).getViewTreeObserver().addOnScrollChangedListener(onScrollChangedListener); + + return rootView; + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + sharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() { + @Override + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { + switch (key) { + case "dailymeditations": + setupContent(); + break; + } + } + }; + PreferenceManager.getDefaultSharedPreferences(context).registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); + } + + protected void setupContent() { + setDailyMeditation(new NullListener()); + } + + public void setDailyMeditation(final Listener listener) { + Taize.getDailyMeditation(context, new Listener() { + @Override + public void success(DailyMeditation data) { + ((TextView) rootView.findViewById(R.id.textDailyMeditation)).setText(data.getString()); + listener.success(data); + } + + @Override + public void failure() { + ((TextView) rootView.findViewById(R.id.textDailyMeditation)).setText("No reading found."); + listener.failure(); + } + }, date); + + String niceDate = date.toNiceString(context); + niceDate = niceDate.substring(0,1).toUpperCase() + niceDate.substring(1); + ((TextView) rootView.findViewById(R.id.dateDailyMeditation)).setText(niceDate); + } +} diff --git a/app/src/main/java/com/camilstaps/taize/DailyReading.java b/app/src/main/java/com/camilstaps/taize/DailyReading.java index fa5115e..151f7e3 100644 --- a/app/src/main/java/com/camilstaps/taize/DailyReading.java +++ b/app/src/main/java/com/camilstaps/taize/DailyReading.java @@ -1,7 +1,6 @@ package com.camilstaps.taize; import org.json.JSONException; -import org.json.JSONObject; import java.text.ParseException; import java.util.regex.Matcher; @@ -36,15 +35,19 @@ public class DailyReading extends DatedString { return null; } - return new BibleText(bible_ref_m.group(1), Integer.parseInt(bible_ref_m.group(2)), Integer.parseInt(bible_ref_m.group(3)), Integer.parseInt(bible_ref_m.group(2)), Integer.parseInt(bible_ref_m.group(4))); + if (bible_ref_m.group(3) == null) { + return new BibleText(bible_ref_m.group(1), Integer.parseInt(bible_ref_m.group(2))); + } else { + return new BibleText(bible_ref_m.group(1), Integer.parseInt(bible_ref_m.group(2)), Integer.parseInt(bible_ref_m.group(3)), Integer.parseInt(bible_ref_m.group(2)), Integer.parseInt(bible_ref_m.group(4))); + } } private Matcher referenceMatcher() { - Pattern bible_ref = Pattern.compile("\\((\\d? ?[a-zA-Z]+) (\\d{1,2})(?::|,)(\\d+)-?(\\d+?)\\)"); + Pattern bible_ref = Pattern.compile("\\((\\d? ?[a-zA-Z]+) (\\d{1,2})(?::|,)?(\\d+)?-?(\\d+?)?\\)"); return bible_ref.matcher(string); } - public static DailyReading fromString(String s) throws JSONException, ParseException { - return (DailyReading) DatedString.fromString(s, DailyReading.class); + public static DailyMeditation fromString(String s) throws JSONException, ParseException { + return (DailyMeditation) DatedString.fromString(s, DailyMeditation.class); } } diff --git a/app/src/main/java/com/camilstaps/taize/DailyReadingFragment.java b/app/src/main/java/com/camilstaps/taize/DailyReadingFragment.java index 7d07746..a45556b 100644 --- a/app/src/main/java/com/camilstaps/taize/DailyReadingFragment.java +++ b/app/src/main/java/com/camilstaps/taize/DailyReadingFragment.java @@ -5,13 +5,12 @@ import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.app.Fragment; -import android.support.v4.widget.SwipeRefreshLayout; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.ViewTreeObserver; import android.widget.TextView; -import android.widget.Toast; import com.camilstaps.common.Date; import com.camilstaps.common.Listener; @@ -23,6 +22,7 @@ import com.camilstaps.common.NullListener; public class DailyReadingFragment extends Fragment { private SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener; + private ViewTreeObserver.OnScrollChangedListener onScrollChangedListener; private View rootView; private Context context; @@ -33,9 +33,7 @@ public class DailyReadingFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - // The last two arguments ensure LayoutParams are inflated - // properly. - rootView = inflater.inflate(R.layout.pager_content, container, false); + rootView = inflater.inflate(R.layout.pager_content_dailyreading, container, false); context = container.getContext(); @@ -47,6 +45,21 @@ public class DailyReadingFragment extends Fragment { setupContent(); + onScrollChangedListener = new ViewTreeObserver.OnScrollChangedListener() { + @Override + public void onScrollChanged() { + Log.d("DRF", "Scrolling to (" + rootView.getScrollX() + "," + rootView.getScrollY() + ")"); + /*if (rootView.getScrollY() > 0) { + ((MainActivity) context).swipeRefreshLayout.setEnabled(false); + } else { + ((MainActivity) context).swipeRefreshLayout.setEnabled(true); + }*/ + } + }; + rootView.findViewById(R.id.pager_content).getViewTreeObserver().addOnScrollChangedListener(onScrollChangedListener); + + Log.d("DRF", "OnCreateView"); + return rootView; } diff --git a/app/src/main/java/com/camilstaps/taize/MainActivity.java b/app/src/main/java/com/camilstaps/taize/MainActivity.java index e740cfd..4e05109 100644 --- a/app/src/main/java/com/camilstaps/taize/MainActivity.java +++ b/app/src/main/java/com/camilstaps/taize/MainActivity.java @@ -1,31 +1,28 @@ package com.camilstaps.taize; import android.content.Intent; +import android.preference.PreferenceManager; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.app.FragmentTransaction; +import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; -import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; -import android.util.Log; -import android.view.HapticFeedbackConstants; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.ViewGroup; import android.widget.PopupMenu; -import com.camilstaps.common.Listener; +public class MainActivity extends ActionBarActivity { -public class MainActivity extends ActionBarActivity implements SwipeRefreshLayout.OnRefreshListener { - - ViewPager pager; + ViewPager viewPager; PagerAdapter pagerAdapter; - SwipeRefreshLayout swipeRefreshLayout; - int itemsInRefreshQueue = 0; + + ActionBar.TabListener tabListener; @Override protected void onCreate(Bundle savedInstanceState) { @@ -35,33 +32,46 @@ public class MainActivity extends ActionBarActivity implements SwipeRefreshLayou setContentView(R.layout.activity_main); - swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swiperefresh); - swipeRefreshLayout.setOnRefreshListener(this); - - pager = (ViewPager) findViewById(R.id.pager); - pagerAdapter = new PagerAdapter(getSupportFragmentManager()); - pager.setAdapter(pagerAdapter); - pager.setCurrentItem(PagerAdapter.COUNT - PagerAdapter.LOOKAHEAD - 1, false); + pagerAdapter = new TaizePagerAdapter(getSupportFragmentManager()); + viewPager = (ViewPager) findViewById(R.id.pager); + viewPager.setAdapter(pagerAdapter); final ActionBar actionBar = getSupportActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); - ActionBar.TabListener tabListener = new ActionBar.TabListener() { + PreferenceManager.getDefaultSharedPreferences(this).edit().remove("dailyreadingbibletexts").apply(); + + tabListener = new ActionBar.TabListener() { @Override - public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {} + public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { + switch (tab.getPosition()) { + case 0: + viewPager.setCurrentItem(TaizePagerAdapter.DAILYREADING_TODAY); + break; + case 1: + viewPager.setCurrentItem(TaizePagerAdapter.DAILYMEDITATION_TODAY); + break; + case 2: + viewPager.setCurrentItem(TaizePagerAdapter.PODCAST_TODAY); + } + } @Override - public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {} + public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { + } @Override - public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {} + public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { + } }; - getWindow().getDecorView().performHapticFeedback(HapticFeedbackConstants.LONG_PRESS); - actionBar.addTab(actionBar.newTab().setText("Reading").setIcon(R.drawable.ic_action_reading).setTabListener(tabListener)); actionBar.addTab(actionBar.newTab().setText("Meditation").setIcon(R.drawable.ic_action_meditation).setTabListener(tabListener)); - actionBar.addTab(actionBar.newTab().setText("Podcast").setIcon(R.drawable.ic_action_podcast).setTabListener(tabListener)); + //actionBar.addTab(actionBar.newTab().setText("Podcast").setIcon(R.drawable.ic_action_podcast).setTabListener(tabListener)); + } + + @Override + public void onRestoreInstanceState(Bundle savedInstanceState) { } @Override @@ -94,10 +104,10 @@ public class MainActivity extends ActionBarActivity implements SwipeRefreshLayou intent.setType("text/plain"); switch (item.getItemId()) { case R.id.action_share_bibletext: - intent.putExtra(Intent.EXTRA_TEXT, ((DailyReadingFragment) pagerAdapter.instantiateItem(pager, pager.getCurrentItem())).getBibleText()); + //intent.putExtra(Intent.EXTRA_TEXT, ((DailyReadingFragment) TaizePagerAdapter.instantiateItem(viewPager, viewPager.getCurrentItem())).getBibleText()); break; case R.id.action_share_reading: - intent.putExtra(Intent.EXTRA_TEXT, ((DailyReadingFragment) pagerAdapter.instantiateItem(pager, pager.getCurrentItem())).getReading()); + //intent.putExtra(Intent.EXTRA_TEXT, ((DailyReadingFragment) TaizePagerAdapter.instantiateItem(viewPager, viewPager.getCurrentItem())).getReading()); break; } startActivity(intent); @@ -112,66 +122,35 @@ public class MainActivity extends ActionBarActivity implements SwipeRefreshLayou return super.onOptionsItemSelected(item); } - @Override - public void onRefresh() { - increaseRefreshQueue(); - increaseRefreshQueue(); - - DailyReadingFragment fragment = (DailyReadingFragment) pagerAdapter.instantiateItem(pager, pager.getCurrentItem()); - - fragment.setDailyReading(new Listener() { - @Override - public void success(DailyReading data) { - decreaseRefreshQueue(); - } + private class TaizePagerAdapter extends FragmentStatePagerAdapter { - @Override - public void failure() { - decreaseRefreshQueue(); - } - }); + public static final int DAILYREADING_PAST_LIMIT = 100, DAILYREADING_TODAY = 200, DAILYREADING_FUTURE_LIMIT = 299; + public static final int DAILYMEDITATION_PAST_LIMIT = 300, DAILYMEDITATION_TODAY = 400, DAILYMEDITATION_FUTURE_LIMIT = 499; + public static final int PODCAST_PAST_LIMIT = 500, PODCAST_TODAY = 600, PODCAST_FUTURE_LIMIT = 699; + public static final int COUNT = 700; - fragment.setDailyReadingBibleText(new Listener() { - @Override - public void success(String data) { - decreaseRefreshQueue(); - } - - @Override - public void failure() { - decreaseRefreshQueue(); - } - }); - } - - protected void increaseRefreshQueue() { - itemsInRefreshQueue++; - swipeRefreshLayout.setRefreshing(true); - } - - protected void decreaseRefreshQueue() { - itemsInRefreshQueue--; - if (itemsInRefreshQueue <= 0) { - itemsInRefreshQueue = 0; - swipeRefreshLayout.setRefreshing(false); - } - } - - private class PagerAdapter extends FragmentStatePagerAdapter { - public static final int COUNT = Integer.MAX_VALUE; - public static final int LOOKAHEAD = 31; - - public PagerAdapter(FragmentManager fm) { + public TaizePagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int i) { - Fragment fragment = new DailyReadingFragment(); - Bundle args = new Bundle(); - args.putInt("dateOffset", -i + LOOKAHEAD); - fragment.setArguments(args); + Fragment fragment = null; + + if (i >= DAILYREADING_PAST_LIMIT && i <= DAILYREADING_FUTURE_LIMIT) { + fragment = new DailyReadingFragment(); + Bundle args = new Bundle(); + args.putInt("dateOffset", i - DAILYREADING_TODAY); + fragment.setArguments(args); + } else if (i >= DAILYMEDITATION_PAST_LIMIT && i <= DAILYMEDITATION_FUTURE_LIMIT) { + fragment = new DailyMeditationFragment(); + Bundle args = new Bundle(); + args.putInt("dateOffset", i - DAILYMEDITATION_TODAY); + fragment.setArguments(args); + } else if (i >= PODCAST_PAST_LIMIT && i <= PODCAST_FUTURE_LIMIT) { + return getItem(DAILYREADING_TODAY); + } return fragment; } @@ -181,26 +160,21 @@ public class MainActivity extends ActionBarActivity implements SwipeRefreshLayou return COUNT; } - @Override - public CharSequence getPageTitle(int position) { - return "OBJECT " + (position + 1); - } - @Override public Object instantiateItem(ViewGroup container, int position) { - if (position < 2) { - return super.instantiateItem(container, position); - } else { - return super.instantiateItem(container, COUNT - position - 1); - } + return super.instantiateItem(container, fakePosition(position)); } @Override public void destroyItem(ViewGroup container, int position, Object object) { - if (position < 2) { - super.destroyItem(container, position, object); + super.destroyItem(container, fakePosition(position), object); + } + + private int fakePosition(int requestedPosition) { + if (requestedPosition < 2) { + return DAILYREADING_TODAY; } else { - super.destroyItem(container, COUNT - position - 1, object); + return requestedPosition; } } diff --git a/app/src/main/java/com/camilstaps/taize/Taize.java b/app/src/main/java/com/camilstaps/taize/Taize.java index 2510946..284af51 100644 --- a/app/src/main/java/com/camilstaps/taize/Taize.java +++ b/app/src/main/java/com/camilstaps/taize/Taize.java @@ -1,30 +1,18 @@ package com.camilstaps.taize; import android.content.Context; -import android.content.SharedPreferences; import android.preference.PreferenceManager; -import android.util.Log; import android.widget.Toast; -import com.android.volley.Response; -import com.android.volley.VolleyError; import com.camilstaps.common.Date; import com.camilstaps.common.DatedString; import com.camilstaps.common.DatedStringPreferenceSet; import com.camilstaps.common.Listener; -import com.camilstaps.common.NullListener; import com.camilstaps.rss.RetrieveFeedTask; import com.camilstaps.rss.RssParser; -import org.json.JSONException; - -import java.text.ParseException; -import java.util.HashSet; import java.util.Iterator; import java.util.Set; -import java.util.concurrent.ExecutionException; -import java.util.regex.Matcher; -import java.util.regex.Pattern; /** * Class specific to methods for Taize @@ -34,6 +22,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 int MAX_DIFFDATE_READING = 10; @@ -65,16 +54,17 @@ public class Taize { return; } - text.getText(context, new Response.Listener() { + text.getText(context, new Listener() { @Override - public void onResponse(String s) { + public void success(String s) { DatedStringPreferenceSet.updateOrAdd(context, "dailyreadingbibletexts", new DatedString(date, s)); listener.success(s); } - }, new Response.ErrorListener() { + @Override - public void onErrorResponse(VolleyError volleyError) { - failure(); + public void failure() { + listener.failure(); + DatedStringPreferenceSet.remove(context, "dailyreadingbibletexts", date); } }); } @@ -191,10 +181,64 @@ public class Taize { } + public static void getDailyMeditation(final Context context, final Listener listener, Date date) { + + Set dailyMeditations = (Set) DatedStringPreferenceSet.get(context, "dailymeditations", DailyMeditation.class); + + for (DailyMeditation meditation : dailyMeditations) { + if (meditation.getDate().equals(date)) { + listener.success(meditation); + return; + } + } + + fetchDailyMeditation(context, listener, date); + + } + + private static void fetchDailyMeditation(final Context context, final Listener listener, final Date date) { + + RetrieveFeedTask retrieve = new RetrieveFeedTask(); + retrieve.setRssDownloadListener(new Listener() { + @Override + public void success(RssParser parser) { + try { + String text = parser.getItem(0).description.trim(); + DailyMeditation reading = new DailyMeditation(date, text); + + DatedStringPreferenceSet.add(context, "dailymeditations", reading); + + listener.success(reading); + } catch (Exception e) { + failure(); + } + } + + @Override + public void failure() { + Toast.makeText(context, "Failed to fetch daily meditation.", Toast.LENGTH_SHORT).show(); + listener.failure(); + } + }); + + try { + retrieve.execute(url_meditation_feed + + "?lang=" + PreferenceManager.getDefaultSharedPreferences(context).getString( + SettingsActivity.SettingsFragment.PREF_LANGUAGE_READINGS, + context.getString(R.string.pref_language_dailyreading_default)) + + "&date=" + date.toString() + ).get(); + } catch (Exception e) { + e.printStackTrace(); + listener.failure(); + } + + } + public static void cleanTextSets(Context context) { cleanDailyReadingsSet(context, "dailyreadings"); cleanDailyReadingsSet(context, "englishdailyreadings"); - DatedStringPreferenceSet.clear(context, "dailyreadingbibletexts"); + //DatedStringPreferenceSet.clear(context, "dailyreadingbibletexts"); } public static void cleanDailyReadingsSet(Context context, String key) { diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index bb0f448..8052335 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,13 +1,12 @@ - + android:layout_width="match_parent">--> - - \ No newline at end of file + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/pager" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_margin="0dp"/> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml new file mode 100644 index 0000000..f698907 --- /dev/null +++ b/app/src/main/res/layout/fragment_main.xml @@ -0,0 +1,8 @@ + + \ No newline at end of file diff --git a/app/src/main/res/layout/pager_content.xml b/app/src/main/res/layout/pager_content.xml deleted file mode 100644 index 9a3a6cc..0000000 --- a/app/src/main/res/layout/pager_content.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/pager_content_dailymeditation.xml b/app/src/main/res/layout/pager_content_dailymeditation.xml new file mode 100644 index 0000000..2d096f0 --- /dev/null +++ b/app/src/main/res/layout/pager_content_dailymeditation.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/pager_content_dailyreading.xml b/app/src/main/res/layout/pager_content_dailyreading.xml new file mode 100644 index 0000000..2297baa --- /dev/null +++ b/app/src/main/res/layout/pager_content_dailyreading.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + \ No newline at end of file -- cgit v1.2.3