diff options
author | Camil Staps | 2015-04-15 12:59:32 +0200 |
---|---|---|
committer | Camil Staps | 2015-04-15 12:59:32 +0200 |
commit | 88041c0a7fd2c69094f1bb0ab1d15518cd1fd75d (patch) | |
tree | 5ee8cf6d2c3513f9a794ef9ae8dc9303c58b33e1 /app | |
parent | New version readme (diff) |
Working tabs & meditations
Diffstat (limited to 'app')
-rw-r--r-- | app/build.gradle | 2 | ||||
-rw-r--r-- | app/src/main/java/com/camilstaps/common/DatedStringPreferenceSet.java | 2 | ||||
-rw-r--r-- | app/src/main/java/com/camilstaps/taize/Bible.java | 20 | ||||
-rw-r--r-- | app/src/main/java/com/camilstaps/taize/BibleText.java | 47 | ||||
-rw-r--r-- | app/src/main/java/com/camilstaps/taize/DailyMeditation.java | 21 | ||||
-rw-r--r-- | app/src/main/java/com/camilstaps/taize/DailyMeditationFragment.java | 101 | ||||
-rw-r--r-- | app/src/main/java/com/camilstaps/taize/DailyReading.java | 13 | ||||
-rw-r--r-- | app/src/main/java/com/camilstaps/taize/DailyReadingFragment.java | 23 | ||||
-rw-r--r-- | app/src/main/java/com/camilstaps/taize/MainActivity.java | 154 | ||||
-rw-r--r-- | app/src/main/java/com/camilstaps/taize/Taize.java | 80 | ||||
-rw-r--r-- | app/src/main/res/layout/activity_main.xml | 15 | ||||
-rw-r--r-- | app/src/main/res/layout/fragment_main.xml | 8 | ||||
-rw-r--r-- | app/src/main/res/layout/pager_content_dailymeditation.xml | 38 | ||||
-rw-r--r-- | app/src/main/res/layout/pager_content_dailyreading.xml (renamed from app/src/main/res/layout/pager_content.xml) | 2 |
14 files changed, 384 insertions, 142 deletions
diff --git a/app/build.gradle b/app/build.gradle index f5d15eb..a093d65 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,7 +6,7 @@ android { defaultConfig { applicationId "com.camilstaps.taize" - minSdkVersion 11 + minSdkVersion 13 targetSdkVersion 21 versionCode 1 versionName "1.0" 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<String> sortedKeys = new ArrayList<String>(); + 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 @@ -16,6 +17,17 @@ public class BibleText { 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 * @param chapter @@ -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<String> listener, Response.ErrorListener errorListener) { + public void getText(Context context, final Listener<String> 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<String>() { + @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<DailyMeditation>()); + } + + public void setDailyMeditation(final Listener<DailyMeditation> listener) { + Taize.getDailyMeditation(context, new Listener<DailyMeditation>() { + @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<DailyReading>() { - @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<String>() { - @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; } @@ -182,25 +161,20 @@ public class MainActivity extends ActionBarActivity implements SwipeRefreshLayou } @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<String>() { + text.getText(context, new Listener<String>() { @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<DailyMeditation> listener, Date date) { + + Set<DailyMeditation> 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<DailyMeditation> listener, final Date date) { + + RetrieveFeedTask retrieve = new RetrieveFeedTask(); + retrieve.setRssDownloadListener(new Listener<RssParser>() { + @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.support.v4.widget.SwipeRefreshLayout +<!--<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/swiperefresh" android:layout_height="match_parent" - android:layout_width="match_parent"> + android:layout_width="match_parent">--> <android.support.v4.view.ViewPager - android:id="@+id/pager" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_margin="0dp"/> - -</android.support.v4.widget.SwipeRefreshLayout>
\ 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 @@ +<?xml version="1.0" encoding="utf-8"?> +<android.support.v4.view.ViewPager + 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" + android:visibility="gone"/>
\ 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 @@ +<?xml version="1.0" encoding="utf-8"?> +<ScrollView + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/pager_content" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:paddingLeft="10dp" + android:paddingBottom="10dp" + android:paddingTop="10dp" + android:paddingRight="0dp"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" + android:layout_weight="1.0" + android:paddingRight="10dp"> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Date" + android:id="@+id/dateDailyMeditation" + android:layout_gravity="center" + android:layout_marginBottom="6dp" + android:textStyle="bold"/> + + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="Daily Meditation" + android:id="@+id/textDailyMeditation" + android:layout_gravity="left|top" + android:layout_marginBottom="10dp" + android:textIsSelectable="true"/> + + </LinearLayout> +</ScrollView>
\ 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_dailyreading.xml index 9a3a6cc..2297baa 100644 --- a/app/src/main/res/layout/pager_content.xml +++ b/app/src/main/res/layout/pager_content_dailyreading.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+id/content" + android:id="@+id/pager_content" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="10dp" |