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.PagerAdapter; import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.PopupMenu; import com.camilstaps.common.DisablableViewPager; import com.camilstaps.common.Sharable; public class MainActivity extends ActionBarActivity { DisablableViewPager viewPager; PagerAdapter pagerAdapter; ActionBar.TabListener tabListener; private ActionBar actionBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Taize.cleanTextSets(this); setContentView(R.layout.activity_main); pagerAdapter = new TaizePagerAdapter(getSupportFragmentManager()); viewPager = (DisablableViewPager) findViewById(R.id.pager); viewPager.setAdapter(pagerAdapter); viewPager.setOffscreenPageLimit(3); actionBar = getSupportActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); tabListener = new ActionBar.TabListener() { @Override public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { switch (tab.getPosition()) { case 0: viewPager.setCurrentItem(TaizePagerAdapter.DAILYREADING_TODAY, false); break; case 1: viewPager.setCurrentItem(TaizePagerAdapter.DAILYMEDITATION_TODAY, false); break; case 2: viewPager.setCurrentItem(TaizePagerAdapter.PODCAST_TODAY, false); findViewById(R.id.action_share).setVisibility(View.GONE); break; } } @Override public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { switch (tab.getPosition()) { case 2: viewPager.setPagingEnabled(true); findViewById(R.id.action_share).setVisibility(View.VISIBLE); break; } } @Override public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { } }; 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 super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { Intent intent; switch (item.getItemId()) { case R.id.action_settings: intent = new Intent(this, SettingsActivity.class); startActivity(intent); return true; case R.id.action_share: final Sharable sharable = (Sharable) pagerAdapter.instantiateItem(viewPager, viewPager.getCurrentItem()); if (sharable.getMenuId() == -1) { intent = new Intent(); intent.setAction(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_TEXT, sharable.getItem(item.getItemId())); startActivity(intent); } else { PopupMenu popup = new PopupMenu(this, findViewById(R.id.action_share)); MenuInflater inflater = popup.getMenuInflater(); inflater.inflate(sharable.getMenuId(), popup.getMenu()); popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_TEXT, sharable.getItem(item.getItemId())); startActivity(intent); return false; } }); popup.show(); } return true; } return super.onOptionsItemSelected(item); } private class TaizePagerAdapter extends FragmentStatePagerAdapter { 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 = 500, PODCAST_FUTURE_LIMIT = 500; public static final int COUNT = 501; public TaizePagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int i) { Fragment fragment = null; viewPager.setPagingEnabled(true); 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) { viewPager.setPagingEnabled(false); fragment = new PodcastFragment(); } return fragment; } @Override public int getCount() { return COUNT; } @Override public Object instantiateItem(ViewGroup container, int position) { return super.instantiateItem(container, fakePosition(position)); } @Override public void destroyItem(ViewGroup container, int position, Object object) { super.destroyItem(container, fakePosition(position), object); } private int fakePosition(int requestedPosition) { if (requestedPosition < 2) { return DAILYREADING_TODAY; } else { return requestedPosition; } } public int getItemPosition(Object object) { return POSITION_NONE; } } }