package com.ese2013.mensaunibe.menu;
import java.util.Calendar;
import java.util.Date;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBar.Tab;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import com.ese2013.mensaunibe.R;
import com.ese2013.mensaunibe.mensa.MensaInfoDialogFragment;
import com.ese2013.mensaunibe.model.Model;
import com.ese2013.mensaunibe.model.api.LanguageChanger;
import com.ese2013.mensaunibe.model.data.ForceReloadTask;
import com.ese2013.mensaunibe.model.mensa.Mensa;
import com.ese2013.mensaunibe.model.menu.MenuDate;
import com.ese2013.mensaunibe.model.utils.AppUtils;
import com.ese2013.mensaunibe.notification.NotificationActivity;
import com.ese2013.mensaunibe.settings.SettingsActivity;
import com.memetix.mst.language.Language;
/**
* @author group7
* @author Sandor Torok
* @author Andreas Hohler
*/
public class MenuActivity extends ActionBarActivity implements ActionBar.TabListener, MenuListAdapter.TitleListener{
private int mMensaId;
TabCollectionPagerAdapter mTabCollectionPagerAdapter;
ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu_list);
mMensaId = getIntent().getIntExtra("int_value", 0);
setTitle( Model.getInstance().getMensaById(mMensaId).getName() );
//setup action bar
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
// set up tabs on working days, except Friday
Calendar cal = Calendar.getInstance();
if(Calendar.FRIDAY != cal.get(Calendar.DAY_OF_WEEK)
&&Calendar.SATURDAY != cal.get(Calendar.DAY_OF_WEEK)
&&Calendar.SUNDAY != cal.get(Calendar.DAY_OF_WEEK)) {
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// swipe
mTabCollectionPagerAdapter = new TabCollectionPagerAdapter(getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mTabCollectionPagerAdapter);
mViewPager.setOnPageChangeListener(
new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// When swiping between pages, select the
// corresponding tab.
getSupportActionBar().setSelectedNavigationItem(position);
}
});
// For each of the sections in the app, add a tab to the action bar.
for (int i = 0; i < mTabCollectionPagerAdapter.getCount(); i++) {
if(i==0){
actionBar.addTab(actionBar.newTab().setText(R.string.today)
.setTabListener(this));
}else{
actionBar.addTab(actionBar.newTab().setText(R.string.soon)
.setTabListener(this));
}
}
}else{// if it's Friday, Saturday or Sunday we don't need tabs
Fragment fragment = getSupportFragmentManager().findFragmentByTag(AppUtils.TAG_CURRENT_DAY_MENU_FRAGMENT);
if (fragment == null) {
fragment = new TabCollectionPagerAdapter(getSupportFragmentManager()).getItem(0);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(android.R.id.content, fragment, AppUtils.TAG_CURRENT_DAY_MENU_FRAGMENT);
ft.commit();
}
}
}
@Override
public void onTabReselected(Tab arg0, FragmentTransaction arg1) {
// TODO Auto-generated method stub
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction arg1) {
mViewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab arg0, FragmentTransaction arg1) {
// TODO Auto-generated method stub
}
public class TabCollectionPagerAdapter extends FragmentPagerAdapter {
protected static final int FRAGMENT_COUNT = 2;
public TabCollectionPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return FRAGMENT_COUNT;
}
@Override
public Fragment getItem(int position) {
Bundle args = new Bundle();
Fragment fragment = null;
switch (position) {
case 0:
fragment = new CurrentDayMenuFragment();
args.putInt(AppUtils.MENSA_ID, mMensaId);
break;
case 1:
fragment = new ComingDaysMenuFragment();
args.putInt(AppUtils.MENSA_ID, mMensaId);
break;
}
fragment.setArguments(args);
return fragment;
}
public int getItemPosition(Object object) {
return POSITION_NONE;
}
}
@Override
public void updateTiteListener(String tabTitle, int firstMenu) {
ActionBar actionBar = getSupportActionBar();
if( actionBar.getNavigationMode() == ActionBar.NAVIGATION_MODE_TABS) {
Tab tab = getSupportActionBar().getTabAt(firstMenu);
tab.setText("");
tab.setText(tabTitle);
}
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
Language lang = Model.getInstance().getMensaById(mMensaId).getLanguage();
MenuItem item = menu.findItem(R.id.action_translate);
//had to check if item is null, because for me in ComingDaysMenuFragment is always null
if(lang != null && lang.compareTo(Language.GERMAN) != 0 && item != null) {
item.setTitle(getString(R.string.action_translate_to_german));
} else if (item != null) {
item.setTitle(getString(R.string.action_translate_to_english));
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.action_translate:
Mensa mensa = Model.getInstance().getMensaById(mMensaId);
if(mensa.getLanguage() != null && mensa.getLanguage().compareTo(Language.ENGLISH) == 0) {
ForceReloadTask task = new ForceReloadTask(this, mTabCollectionPagerAdapter);
task.execute();
} else {
LanguageChanger lc = new LanguageChanger(this, mensa);
lc.setAdapter(mTabCollectionPagerAdapter);
lc.execute();
}
return true;
case R.id.action_mensainfo:
DialogFragment newFragment = new MensaInfoDialogFragment();
Bundle args = new Bundle();
args.putInt(AppUtils.MENSA_ID, mMensaId);
newFragment.setArguments(args);
newFragment.show(getSupportFragmentManager(), AppUtils.TAG_MENSA_INFO_DIALOG);
return true;
case R.id.action_share:
Mensa mensaChoosen = Model.getInstance().getMensaById(mMensaId);
MenuDate md = new MenuDate(new Date());
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, getString(R.string.share_todayimgoing) + " " + mensaChoosen.getName() + getString(R.string.share_todaymenu) + mensaChoosen.getDailyMenu(md) + getString(R.string.share_joinme));
sendIntent.setType("text/plain");
startActivity(sendIntent);
return true;
case R.id.action_notification:
startActivity(new Intent(getApplicationContext(), NotificationActivity.class));
return true;
case R.id.action_settings:
startActivity(new Intent(getApplicationContext(), SettingsActivity.class));
return true;
case android.R.id.home:
onBackPressed();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}