diff options
author | Camil Staps | 2015-04-11 23:30:39 +0200 |
---|---|---|
committer | Camil Staps | 2015-04-11 23:30:39 +0200 |
commit | dbc2ea6cc842ade3fd48cc8457916e39443de77e (patch) | |
tree | 560fc8efe18b3cacbd2f1ce52d44d462b51c9411 /app/src/main | |
parent | General improvements & continuation of development (diff) |
General continuation of development
Diffstat (limited to 'app/src/main')
-rw-r--r-- | app/src/main/java/com/camilstaps/common/Date.java | 8 | ||||
-rw-r--r-- | app/src/main/java/com/camilstaps/common/DatedStringPreferenceSet.java | 13 | ||||
-rw-r--r-- | app/src/main/java/com/camilstaps/taize/DailyReadingFragment.java | 33 | ||||
-rw-r--r-- | app/src/main/java/com/camilstaps/taize/MainActivity.java | 134 | ||||
-rw-r--r-- | app/src/main/java/com/camilstaps/taize/Taize.java | 3 | ||||
-rw-r--r-- | app/src/main/res/layout/activity_main.xml | 11 | ||||
-rw-r--r-- | app/src/main/res/layout/pager_content.xml | 3 | ||||
-rw-r--r-- | app/src/main/res/menu/global.xml | 5 | ||||
-rw-r--r-- | app/src/main/res/values-nl/strings.xml | 3 | ||||
-rw-r--r-- | app/src/main/res/values/preference_values.xml | 8 | ||||
-rw-r--r-- | app/src/main/res/values/strings.xml | 5 |
11 files changed, 171 insertions, 55 deletions
diff --git a/app/src/main/java/com/camilstaps/common/Date.java b/app/src/main/java/com/camilstaps/common/Date.java index c01cc0d..8e5d6f4 100644 --- a/app/src/main/java/com/camilstaps/common/Date.java +++ b/app/src/main/java/com/camilstaps/common/Date.java @@ -110,6 +110,14 @@ public class Date implements Comparable<Date> { } } + public void addOrSubtractDays(int n) { + if (n < 0) { + subtractDays(-n); + } else { + addDays(n); + } + } + public boolean equals(Date date) { return year == date.year && month == date.month && day == date.day; } diff --git a/app/src/main/java/com/camilstaps/common/DatedStringPreferenceSet.java b/app/src/main/java/com/camilstaps/common/DatedStringPreferenceSet.java index d61ba37..d17bc90 100644 --- a/app/src/main/java/com/camilstaps/common/DatedStringPreferenceSet.java +++ b/app/src/main/java/com/camilstaps/common/DatedStringPreferenceSet.java @@ -87,4 +87,17 @@ public class DatedStringPreferenceSet { put(context, key, new HashSet<DatedString>()); } + public static void remove(Context context, String key, Date date) { + Set<DatedString> set = (Set) get(context, key, DatedString.class); + Iterator<DatedString> iterator = set.iterator(); + boolean add = false; + while (iterator.hasNext()) { + DatedString this_object = iterator.next(); + if (this_object.getDate().equals(date)) { + iterator.remove(); + } + } + put(context, key, set); + } + } diff --git a/app/src/main/java/com/camilstaps/taize/DailyReadingFragment.java b/app/src/main/java/com/camilstaps/taize/DailyReadingFragment.java index b5cde3c..e3b93e8 100644 --- a/app/src/main/java/com/camilstaps/taize/DailyReadingFragment.java +++ b/app/src/main/java/com/camilstaps/taize/DailyReadingFragment.java @@ -5,14 +5,17 @@ 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.widget.TextView; +import android.widget.Toast; import com.camilstaps.common.Date; import com.camilstaps.common.Listener; +import com.camilstaps.common.NullListener; /** * Created by camilstaps on 8-4-15. @@ -24,6 +27,8 @@ public class DailyReadingFragment extends Fragment { private Context context; private Date date; + private String reading; + private String bibleText; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -37,7 +42,7 @@ public class DailyReadingFragment extends Fragment { int dateOffset = args.getInt("dateOffset", 0); date = new Date(); - date.subtractDays(dateOffset); + date.addOrSubtractDays(dateOffset); setupContent(); @@ -62,24 +67,36 @@ public class DailyReadingFragment extends Fragment { PreferenceManager.getDefaultSharedPreferences(context).registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); } + public String getReading() { + return reading; + } + + public String getBibleText() { + return bibleText; + } + protected void setupContent() { - setDailyReading(); - setDailyReadingBibleText(); + setDailyReading(new NullListener<DailyReading>()); + setDailyReadingBibleText(new NullListener<String>()); } - private void setDailyReading() { + public void setDailyReading(final Listener<DailyReading> listener) { Taize.getDailyReading(context, new Listener<DailyReading>() { @Override public void success(DailyReading data) { ((TextView) rootView.findViewById(R.id.textDailyReading)).setText(data.getTextWithoutReference()); + reading = data.getString(); BibleText bt = data.getBibleReference(); - if (bt != null) + if (bt != null) { ((TextView) rootView.findViewById(R.id.refDailyReadingBibleText)).setText(bt.toString()); + } + listener.success(data); } @Override public void failure() { ((TextView) rootView.findViewById(R.id.textDailyReading)).setText("No reading found."); + listener.failure(); } }, date); @@ -88,18 +105,20 @@ public class DailyReadingFragment extends Fragment { ((TextView) rootView.findViewById(R.id.dateDailyReading)).setText(niceDate); } - private void setDailyReadingBibleText() { + public void setDailyReadingBibleText(final Listener<String> listener) { Taize.getDailyReadingBibleText(context, new Listener<String>() { @Override public void success(String data) { ((TextView) rootView.findViewById(R.id.textDailyReadingBibleText)).setText(data); + bibleText = data; + listener.success(data); } @Override public void failure() { ((TextView) rootView.findViewById(R.id.textDailyReadingBibleText)).setText("No bible text found."); + listener.failure(); } }, date); } - } diff --git a/app/src/main/java/com/camilstaps/taize/MainActivity.java b/app/src/main/java/com/camilstaps/taize/MainActivity.java index c7ca14c..5ce8b5f 100644 --- a/app/src/main/java/com/camilstaps/taize/MainActivity.java +++ b/app/src/main/java/com/camilstaps/taize/MainActivity.java @@ -5,23 +5,26 @@ 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.MotionEvent; -import android.view.View; import android.view.ViewGroup; -public class MainActivity extends ActionBarActivity { +import com.camilstaps.common.Listener; + +public class MainActivity extends ActionBarActivity implements SwipeRefreshLayout.OnRefreshListener { ViewPager pager; PagerAdapter pagerAdapter; + SwipeRefreshLayout swipeRefreshLayout; + int itemsInRefreshQueue = 0; @Override protected void onCreate(Bundle savedInstanceState) { @@ -31,81 +34,134 @@ public class MainActivity extends ActionBarActivity { 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(Integer.MAX_VALUE, false); + goToToday(); final ActionBar actionBar = getSupportActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); - //actionBar.setDisplayShowTitleEnabled(true); ActionBar.TabListener tabListener = new ActionBar.TabListener() { @Override - public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { - - } + public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {} @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)); } - public void onBackPressed() { - if (pager.getCurrentItem() == 0) { - super.onBackPressed(); - } else { - pager.setCurrentItem(pager.getCurrentItem() - 1); - } - } - @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.global, menu); return true; - //return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); - //noinspection SimplifiableIfStatement - if (id == R.id.action_settings) { - Intent intent = new Intent(this, SettingsActivity.class); - startActivity(intent); - return true; + Intent intent; + switch (id) { + case R.id.action_settings: + intent = new Intent(this, SettingsActivity.class); + startActivity(intent); + return true; + case R.id.action_share: + intent = new Intent(); + intent.setAction(Intent.ACTION_SEND); + intent.putExtra(Intent.EXTRA_TEXT, ((DailyReadingFragment) pagerAdapter.instantiateItem(pager, pager.getCurrentItem())).getReading()); + intent.setType("text/plain"); + startActivity(intent); + return true; + case R.id.action_today: + goToToday(); + return true; } 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(); + } + + @Override + public void failure() { + decreaseRefreshQueue(); + } + }); + + 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); + } + } + + protected void goToToday() { + Log.d("MAIN", "Going to scroll from " + pager.getCurrentItem() + " to " + (PagerAdapter.COUNT - PagerAdapter.LOOKAHEAD - 1) + "..."); + pager.setCurrentItem(PagerAdapter.COUNT - PagerAdapter.LOOKAHEAD - 1, false); + + } + private class PagerAdapter extends FragmentStatePagerAdapter { + public static final int COUNT = Integer.MAX_VALUE; + public static final int LOOKAHEAD = 31; + public PagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int i) { + Log.d("PA", "Get " + i); + Fragment fragment = new DailyReadingFragment(); Bundle args = new Bundle(); - args.putInt("dateOffset", i); + args.putInt("dateOffset", -i + LOOKAHEAD); fragment.setArguments(args); return fragment; @@ -113,7 +169,7 @@ public class MainActivity extends ActionBarActivity { @Override public int getCount() { - return Integer.MAX_VALUE; + return COUNT; } @Override @@ -123,21 +179,27 @@ public class MainActivity extends ActionBarActivity { @Override public Object instantiateItem(ViewGroup container, int position) { + Log.d("PA", "Instantiate " + position); if (position < 2) { return super.instantiateItem(container, position); } else { - return super.instantiateItem(container, Integer.MAX_VALUE - position - 1); + return super.instantiateItem(container, COUNT - position - 1); } } @Override public void destroyItem(ViewGroup container, int position, Object object) { + Log.d("PA", "Destroy " + position); if (position < 2) { super.destroyItem(container, position, object); } else { - super.destroyItem(container, Integer.MAX_VALUE - position - 1, object); + super.destroyItem(container, COUNT - position - 1, object); } } + + public int getItemPosition(Object object) { + return POSITION_NONE; + } } } diff --git a/app/src/main/java/com/camilstaps/taize/Taize.java b/app/src/main/java/com/camilstaps/taize/Taize.java index c9e912f..2510946 100644 --- a/app/src/main/java/com/camilstaps/taize/Taize.java +++ b/app/src/main/java/com/camilstaps/taize/Taize.java @@ -82,6 +82,7 @@ public class Taize { @Override public void failure() { listener.failure(); + DatedStringPreferenceSet.remove(context, "dailyreadingbibletexts", date); } }, date); } @@ -130,7 +131,7 @@ public class Taize { }); try { - retrieve.execute(url_reading_feed + "?lang=en&date=" + date.toString()).get(); + retrieve.execute(url_reading_feed_en + "&date=" + date.toString()).get(); } catch (Exception e) { e.printStackTrace(); listener.failure(); diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 7d924ef..d11f106 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,7 +1,12 @@ -<android.support.v4.view.ViewPager +<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/swiperefresh" + android:layout_height="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"/>
\ No newline at end of file + android:layout_margin="0dp"/> +</android.support.v4.widget.SwipeRefreshLayout>
\ 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 index 0f53c69..9a3a6cc 100644 --- a/app/src/main/res/layout/pager_content.xml +++ b/app/src/main/res/layout/pager_content.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> -<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" +<ScrollView + xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/content" android:layout_width="match_parent" android:layout_height="match_parent" diff --git a/app/src/main/res/menu/global.xml b/app/src/main/res/menu/global.xml index cd094ff..a2c2ee2 100644 --- a/app/src/main/res/menu/global.xml +++ b/app/src/main/res/menu/global.xml @@ -10,4 +10,9 @@ android:title="@string/action_share" android:orderInCategory="50" app:showAsAction="ifRoom"/> + <item + android:id="@+id/action_today" + android:title="@string/action_today" + android:orderInCategory="30" + app:showAsAction="ifRoom"/> </menu> diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 2de50b8..cb56a78 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <resources> - <string name="app_name">Taizé</string> <string name="action_settings">Instellingen</string> + <string name="action_share">Delen</string> + <string name="action_today">Vandaag</string> </resources> diff --git a/app/src/main/res/values/preference_values.xml b/app/src/main/res/values/preference_values.xml index 71138ba..fbf01fd 100644 --- a/app/src/main/res/values/preference_values.xml +++ b/app/src/main/res/values/preference_values.xml @@ -2,8 +2,8 @@ <resources> <!-- Strings related to Settings --> <string name="pref_title_language_dailyreading">Language of the readings</string> - <string name="pref_language_dailyreading_default">en</string> - <string name="pref_language_dailyreading_default_entry">English</string> + <string name="pref_language_dailyreading_default" translatable="false">en</string> + <string name="pref_language_dailyreading_default_entry" translatable="false">English</string> <string-array name="pref_languages_dailyreading_entries"> <item>čeština</item> <item>dansk</item> @@ -58,8 +58,8 @@ </string-array> <string name="pref_title_version_bible">Bible</string> - <string name="pref_version_bible_default">kjv</string> - <string name="pref_version_bible_default_entry">King James Version</string> + <string name="pref_version_bible_default" translatable="false">kjv</string> + <string name="pref_version_bible_default_entry" translatable="false">King James Version</string> <string-array name="pref_bibles_entries"> <item>Afrikaans: Ou Vertaling</item> <item>Albanian: Albanian</item> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9e415e0..8d7d9c9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,8 +1,9 @@ <resources> - <string name="app_name">Taizé</string> + <string name="app_name" translatable="false">Taizé</string> <string name="action_settings">Settings</string> <string name="action_share">Share</string> + <string name="action_today">Today</string> - <string name="title_activity_settings">@string/action_settings</string> + <string name="title_activity_settings" translatable="false">@string/action_settings</string> </resources> |