package com.eugene.fithealthmaingit.UI.NavFragments;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.widget.Toolbar;
import android.text.format.DateFormat;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.eugene.fithealthmaingit.Custom.TextViewFont;
import com.eugene.fithealthmaingit.R;
import com.eugene.fithealthmaingit.Utilities.DateCompare;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
/**
* Currently in production.
* <p/>
* Facing some errors with having a fragment within a fragment and the savestate
*/
public class FragmentNutritionPager extends Fragment {
View v;
ViewPager viewPager;
private Toolbar mToolbarDaily;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
v = inflater.inflate(R.layout.testing_nutrition_pager, container, false);
return v;
}
Date mDate = new Date();
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setRetainInstance(true);
viewPager = (ViewPager) v.findViewById(R.id.pager);
InitializePagerTabs();
mToolbarDaily = (Toolbar) v.findViewById(R.id.toolbar_daily);
mToolbarDaily.setNavigationIcon(R.mipmap.ic_menu);
mToolbarDaily.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mCallbacks.openNavigationDrawer();
}
});
mToolbarDaily.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
if (menuItem.getItemId() == R.id.action_today) {
viewPager.setCurrentItem(26);
}
return false;
}
});
ImageView mDatePrev = (ImageView) v.findViewById(R.id.datePrevious);
ImageView mDateNext = (ImageView) v.findViewById(R.id.dateNext);
mDatePrev.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDate = DateCompare.previousDate(mDate);
handleDateChanges(mDate);
viewPager.setCurrentItem(viewPager.getCurrentItem() - 1);
}
});
mDateNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDate = DateCompare.nextDate(mDate);
handleDateChanges(mDate);
viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
}
});
handleDateChanges(mDate);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
private void InitializePagerTabs() {
viewPager.setAdapter(
new FragmentStatePagerAdapter(getActivity().getSupportFragmentManager()) {
@Override
public Fragment getItem(int position) {
// Here to configure the date.
int pos = position - 26;
return FragmentNutritionHolder.newInstance(handlePagerDate(pos));
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
try {
super.destroyItem(container, position, object);
} catch (IllegalStateException ex) {
ex.printStackTrace();
}
}
@Override
public int getCount() {
return 51;
}
}
);
viewPager.setCurrentItem(26);
viewPager.addOnPageChangeListener(
new ViewPager.OnPageChangeListener()
{
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
int pos = position - 26;
mDate = handlePagerDate(pos);
handleDateChanges(mDate);
}
@Override
public void onPageScrollStateChanged(int state) {
}
}
);
}
/**
* Update text and menu based on date change
*
* @param date current Date or updated date
*/
private void handleDateChanges(Date date) {
TextViewFont mDateText = (TextViewFont) v.findViewById(R.id.tbDate);
if (DateCompare.areDatesEqual(new Date(), date)) { // Are Dates Equal Today
mToolbarDaily.getMenu().clear();
mDateText.setText("Today");
} else if (DateCompare.areDatesEqualYesterday(new Date(), date)) { // Are Dates Equal Yesterday
mToolbarDaily.getMenu().clear();
mToolbarDaily.inflateMenu(R.menu.menu_today);
mDateText.setText("Yesterday");
} else if (DateCompare.areDatesEqualTomorrow(new Date(), date)) { // Are Dates Equal Yesterday
mToolbarDaily.getMenu().clear();
mToolbarDaily.inflateMenu(R.menu.menu_today);
mDateText.setText("Tomorrow");
} else {
mToolbarDaily.getMenu().clear();
mToolbarDaily.inflateMenu(R.menu.menu_today);
mDateText.setText(DateFormat.format("MMM d, EE", date));
}
}
public static Date handlePagerDate(int pos) {
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
Calendar mCalendar = new GregorianCalendar(year, month, day);
mCalendar.add(Calendar.DATE, pos);
return mCalendar.getTime();
}
private FragmentCallbacks mCallbacks;
public interface FragmentCallbacks {
void openNavigationDrawer();
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mCallbacks = (FragmentCallbacks) activity;
} catch (ClassCastException e) {
throw new ClassCastException("Activity must implement Fragment One.");
}
}
@Override
public void onDetach() {
super.onDetach();
mCallbacks = null;
}
}