package com.camilstaps.taize; import android.content.Intent; 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.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 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) { super.onCreate(savedInstanceState); Taize.cleanTextSets(this); 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); goToToday(); final ActionBar actionBar = getSupportActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); ActionBar.TabListener tabListener = new ActionBar.TabListener() { @Override public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {} @Override public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {} @Override 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)); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.global, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); 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() { @Override public void success(DailyReading data) { decreaseRefreshQueue(); } @Override public void failure() { decreaseRefreshQueue(); } }); 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); } } 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 + LOOKAHEAD); fragment.setArguments(args); return fragment; } @Override public int getCount() { return COUNT; } @Override public CharSequence getPageTitle(int position) { return "OBJECT " + (position + 1); } @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, 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, COUNT - position - 1, object); } } public int getItemPosition(Object object) { return POSITION_NONE; } } }