package com.realtrackandroid.views.participationsactive;
import java.util.ArrayList;
import java.util.List;
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.view.ViewPager;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;
import com.astuetz.PagerSlidingTabStrip;
import com.realtrackandroid.R;
import com.realtrackandroid.backend.activities.ParticipationDAO;
import com.realtrackandroid.models.activities.Participation;
import com.realtrackandroid.views.help.FrameworkInfoDialog;
import com.realtrackandroid.views.help.GlossaryDialog;
import com.realtrackandroid.views.help.HelpDialog;
/**
* RecordOrEditParticipationActivity is different from RecordQuickParticipationActivity in the
* following ways: 1. RecordOrEditParticipationActivity ALREADY has a participation associated with
* it (created when reminders are served (in NotificationService)). RecordQuickParticipationActivity
* does not have a pre-existing participation. It has to create one. 2. Because
* RecordOrEditParticipationActivity serves an existing participation, it has a date and time
* associated with it. RecordQuickParticipationActivity does not have a date and time a priori, and
* must get these from the user.
*
* @author Raj
*/
public class RecordOrEditParticipationActivity extends SherlockFragmentActivity implements
RecordOrEditParticipationFragmentInterface {
static final int ADD_PARTICIPANTS_REQUEST = 1;
private int participationId;
protected Participation p;
private boolean editParticipation; // true if coming in from ProjectsActivitiesListAdapter
private ParticipationPageAdapter pageAdapter;
List<Fragment> fragments;
private PagerSlidingTabStrip tabs;
private List<String> fragmentTitles;
private OptionalFragmentRecordOrEditParticipation optionalFragment;
private RequiredFragmentRecordOrEditParticipation requiredFragment;
private ParticipationDAO participationDao;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.base_pager);
fragments = createFragments();
requiredFragment = (RequiredFragmentRecordOrEditParticipation) fragments.get(0);
optionalFragment = (OptionalFragmentRecordOrEditParticipation) fragments.get(1);
tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
pageAdapter = new ParticipationPageAdapter(getSupportFragmentManager(), fragments);
ViewPager pager = (ViewPager) findViewById(R.id.viewpager);
pager.setAdapter(pageAdapter);
tabs.setViewPager(pager);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// read in the ID of the activities for which we're recording participation
participationId = getIntent().getExtras().getInt("participationid");
participationDao = new ParticipationDAO(getApplicationContext());
p = participationDao.getParticipationWithId(participationId);
// also note the date and time
requiredFragment.setDateTime(getIntent().getExtras().getLong("datetime"));
editParticipation = getIntent().getExtras().getBoolean("editparticipation");
requiredFragment.setEditParticipation(editParticipation);
optionalFragment.setEditParticipation(editParticipation);
if (editParticipation) {
this.setTitle(getResources().getString(R.string.editparticipationactivity_label));
}
}
private List<Fragment> createFragments() {
fragmentTitles = new ArrayList<String>();
fragmentTitles.add("Required");
fragmentTitles.add("Optional");
List<Fragment> fList = new ArrayList<Fragment>();
fList.add(RequiredFragmentRecordOrEditParticipation.newInstance(fragmentTitles.get(0)));
fList.add(OptionalFragmentRecordOrEditParticipation.newInstance(fragmentTitles.get(1)));
return fList;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getSupportMenuInflater();
inflater.inflate(R.menu.recordoreditparticipationmenu, menu);
if (editParticipation)
menu.findItem(R.id.action_dismiss).setVisible(false);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// provide a back button on the actionbar
finish();
break;
case R.id.action_help:
HelpDialog helpDialog = new HelpDialog();
helpDialog.setStyle(DialogFragment.STYLE_NO_TITLE, 0);
helpDialog.show(getSupportFragmentManager(), "helpdialog");
break;
case R.id.action_framework:
FrameworkInfoDialog frameworkInfoDialog = new FrameworkInfoDialog();
frameworkInfoDialog.setStyle(DialogFragment.STYLE_NO_TITLE, 0);
frameworkInfoDialog.show(getSupportFragmentManager(), "frameworkinfodialog");
break;
case R.id.action_glossary:
GlossaryDialog glossaryDialog = new GlossaryDialog();
glossaryDialog.setStyle(DialogFragment.STYLE_NO_TITLE, 0);
glossaryDialog.show(getSupportFragmentManager(), "glossarydialog");
break;
case R.id.action_save:
saveParticipation();
break;
case R.id.action_dismiss:
dismissParticipation();
break;
default:
return super.onOptionsItemSelected(item);
}
return true;
}
private void dismissParticipation() {
participationDao.deleteParticipation(participationId);
finish();
}
private void saveParticipation() {
if (!requiredFragment.setFields(p))
return;
optionalFragment.setFields(p);
// update the serviced flag for this Reminder in the Reminders table
// so that the next time the NotificationReceiver checks, this participation
// does not show up as unserviced
p.setServiced(true);
participationDao.updateParticipation(p);
finish();
}
@Override
public void onBackPressed() {
super.onBackPressed();
overridePendingTransition(R.anim.animation_slideinleft, R.anim.animation_slideoutright);
finish();
}
private class ParticipationPageAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments;
public ParticipationPageAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}
@Override
public Fragment getItem(int position) {
return this.fragments.get(position);
}
@Override
public CharSequence getPageTitle(int position) {
return fragmentTitles.get(position);
}
@Override
public int getCount() {
return this.fragments.size();
}
}
@Override
public Participation getParticipation() {
return p;
}
}