package org.ohmage.activity; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.support.v4.content.Loader; import android.view.View; import android.widget.Toast; import org.ohmage.R; import org.ohmage.adapters.ResponseListCursorAdapter; import org.ohmage.controls.DateFilterControl; import org.ohmage.controls.DateFilterControl.DateFilterChangeListener; import org.ohmage.fragments.ResponseListFragment; import org.ohmage.fragments.ResponseListFragment.OnResponseActionListener; import org.ohmage.logprobe.Log; import org.ohmage.ui.CampaignSurveyFilterActivity; import org.ohmage.ui.OhmageFilterable.CampaignFilterable; import org.ohmage.ui.OhmageFilterable.SurveyFilterable; import org.ohmage.ui.OhmageFilterable.TimeFilter; import java.util.Calendar; /** * The ResponseListActivity will show a list of responses using the {@link ResponseListFragment} and the * {@link ResponseListCursorAdapter}. * * It can handle different extras to specify a filter * {@link CampaignFilterable#EXTRA_CAMPAIGN_URN}, {@link SurveyFilterable#EXTRA_SURVEY_ID}, {@link TimeFilter#EXTRA_DAY}, {@link TimeFilter#EXTRA_MONTH}, {@link TimeFilter#EXTRA_YEAR} * * TODO: allow the activity to start based on different uris as well as different extras * * @author cketcham * */ public class ResponseListActivity extends CampaignSurveyFilterActivity implements OnResponseActionListener { static final String TAG = "ResponseListActivitiy"; private DateFilterControl mDateFilter; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.response_list_layout); if (savedInstanceState == null) { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); Fragment newFragment = new ResponseListFragment(); newFragment.setArguments(intentToFragmentArguments(getIntent())); ft.add(R.id.response_list_fragment, newFragment); ft.commit(); } setupFilters(); } private ResponseListFragment getResponseListFragment() { return (ResponseListFragment) getSupportFragmentManager().findFragmentById(R.id.response_list_fragment); } @Override protected void onCampaignFilterChanged(String filter) { super.onCampaignFilterChanged(filter); getResponseListFragment().setCampaignUrn(filter); } @Override protected void onSurveyFilterChanged(String filter) { super.onSurveyFilterChanged(filter); getResponseListFragment().setSurveyId(filter); } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { super.onLoadFinished(loader, data); mDateFilter.setVisibility(View.VISIBLE); } public void setupFilters(){ //Set filters mDateFilter = (DateFilterControl)findViewById(R.id.date_filter); mDateFilter.setVisibility(View.INVISIBLE); // Set the date if it was specified. If not, we default to showing the current date mDateFilter.setDate(getIntent().getIntExtra(TimeFilter.EXTRA_DAY, -1), getIntent().getIntExtra(TimeFilter.EXTRA_MONTH, -1), getIntent().getIntExtra(TimeFilter.EXTRA_YEAR, -1)); mDateFilter.setOnChangeListener(new DateFilterChangeListener() { @Override public void onFilterChanged(Calendar curValue) { ResponseListFragment f = getResponseListFragment(); if(f != null) f.setDate(curValue.get(Calendar.DATE), curValue.get(Calendar.MONTH), curValue.get(Calendar.YEAR)); } }); } @Override public void onResponseActionView(Uri responseUri) { startActivity(new Intent(Intent.ACTION_VIEW, responseUri)); } @Override public void onResponseActionUpload(Uri responseUri) { Toast.makeText(this, R.string.response_list_upload_action_invalid, Toast.LENGTH_SHORT).show(); Log.w(TAG, "onResponseActionUpload should not be exposed in this activity."); } @Override public void onResponseActionError(Uri responseUri, int status) { Toast.makeText(this, R.string.response_list_error_action_invalid, Toast.LENGTH_SHORT).show(); Log.w(TAG, "onResponseActionError should not be exposed in this activity."); } }