package org.ohmage.activity; import com.commonsware.cwac.wakeful.WakefulIntentService; import org.ohmage.R; import org.ohmage.controls.ActionBarControl; import org.ohmage.controls.ActionBarControl.ActionListener; import org.ohmage.controls.DateFilterControl; import org.ohmage.fragments.ResponseHistoryCalendarFragment; import org.ohmage.fragments.ResponseMapFragment; import org.ohmage.responsesync.ResponseSyncService; import org.ohmage.ui.CampaignSurveyFilterActivity; import org.ohmage.ui.OhmageFilterable.CampaignFilter; import org.ohmage.ui.OhmageFilterable.CampaignFilterable; import org.ohmage.ui.OhmageFilterable.CampaignSurveyFilter; import org.ohmage.ui.OhmageFilterable.SurveyFilterable; import org.ohmage.ui.OhmageFilterable.TimeFilter; import org.ohmage.ui.OhmageFilterable.TimeFilterable; import org.ohmage.ui.TabManager; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.widget.TabHost; import android.widget.TextView; import java.util.Calendar; /** * <p>The {@link ResponseHistoryActivity} shows a tab view which lets users switch between a calendar * and map view to show the response history</p> * * <p>The {@link ResponseHistoryActivity} accepts {@link CampaignFilter#EXTRA_CAMPAIGN_URN}, {@link CampaignSurveyFilter# EXTRA_SURVEY_ID}, * {@link TimeFilter#EXTRA_MONTH}, and {@link TimeFilter#EXTRA_YEAR} as extras</p> * @author cketcham * */ public class ResponseHistoryActivity extends CampaignSurveyFilterActivity { private static final String TAG = "RHTabHost"; // action bar actions private static final int ACTION_RESPONSESYNC = 1; TabHost mTabHost; TabManager mTabManager; private DateFilterControl mTimeFilter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.response_history_layout); mTimeFilter = (DateFilterControl) findViewById(R.id.date_filter); mTimeFilter.setMonth(getIntent().getIntExtra(TimeFilter.EXTRA_MONTH, -1), getIntent().getIntExtra(TimeFilter.EXTRA_YEAR, -1)); mTimeFilter.setOnChangeListener(new DateFilterControl.DateFilterChangeListener() { @Override public void onFilterChanged(Calendar curValue) { ((TimeFilterable)mTabManager.getCurrentTab().getFragment()).setMonth(curValue.get(Calendar.MONTH), curValue.get(Calendar.YEAR)); } }); mTabHost = (TabHost)findViewById(android.R.id.tabhost); mTabHost.setup(); mTabManager = new TabManager(this, mTabHost, R.id.realtabcontent); mTabManager.setOnTabChangedListener(new TabManager.TabChangedListener() { @Override public void onTabChanged(String tabId) { ((CampaignFilterable) mTabManager.getCurrentTab().getFragment()).setCampaignUrn(getCampaignUrn()); ((SurveyFilterable) mTabManager.getCurrentTab().getFragment()).setSurveyId(getSurveyId()); ((TimeFilterable)mTabManager.getCurrentTab().getFragment()).setMonth(getCurrentMonth(), getCurrentYear()); mTimeFilter.setCalendarUnit(Calendar.MONTH); } }); Bundle calendarBundle = intentToFragmentArguments(getIntent()); calendarBundle.remove(TimeFilter.EXTRA_DAY); mTabManager.addTab(mTabHost.newTabSpec("calendar").setIndicator(createTabView(R.string.response_history_calendar_tab)), ResponseHistoryCalendarFragment.class, calendarBundle); mTabManager.addTab(mTabHost.newTabSpec("map").setIndicator(createTabView(R.string.response_history_map_tab)), ResponseMapFragment.class, intentToFragmentArguments(getIntent())); if (savedInstanceState != null) { mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab")); } // store context so we can access it from the actionbar handler final Context context = this; // add a sync command to the response history action bar ActionBarControl actionBar = getActionBarControl(); actionBar.clearActionBarCommands(); actionBar.addActionBarCommand(ACTION_RESPONSESYNC, "sync responses", R.drawable.btn_title_refresh); actionBar.setOnActionListener(new ActionListener() { @Override public void onActionClicked(int commandID) { switch (commandID) { case ACTION_RESPONSESYNC: Intent i = new Intent(context, ResponseSyncService.class); i.putExtra(ResponseSyncService.EXTRA_INTERACTIVE, true); WakefulIntentService.sendWakefulWork(context, i); break; } } }); } private View createTabView(final int textResource){ TextView view = (TextView) LayoutInflater.from(this).inflate(R.layout.tab_indicator, mTabHost.getTabWidget(), false); view.setText(getString(textResource).toUpperCase()); return view; } protected int getCurrentMonth() { return mTimeFilter.getValue().get(Calendar.MONTH); } protected int getCurrentYear() { return mTimeFilter.getValue().get(Calendar.YEAR); } @Override protected void onCampaignFilterChanged(String filter) { super.onCampaignFilterChanged(filter); ((CampaignFilterable) mTabManager.getCurrentTab().getFragment()).setCampaignUrn(filter); } @Override protected void onSurveyFilterChanged(String filter) { super.onSurveyFilterChanged(filter); ((SurveyFilterable) mTabManager.getCurrentTab().getFragment()).setSurveyId(filter); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString("tab", mTabHost.getCurrentTabTag()); } public Fragment getCurrentFragment() { return mTabManager.getCurrentTab().getFragment(); } }