package org.ohmage.ui; import org.ohmage.ConfigHelper; import org.ohmage.R; import org.ohmage.controls.FilterControl; import org.ohmage.db.DbContract.Campaigns; import org.ohmage.db.DbContract.Surveys; import org.ohmage.ui.OhmageFilterable.CampaignSurveyFilter; import android.database.Cursor; import android.os.Bundle; import android.support.v4.app.LoaderManager; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import android.util.Pair; /** * CampaignSurveyFilterActivity can be extended by classes which have campaign and survey filters * @author cketcham * */ public class CampaignSurveyFilterActivity extends CampaignFilterActivity implements LoaderManager.LoaderCallbacks<Cursor> { protected static final int SURVEY_LOADER = 1; protected FilterControl mSurveyFilter; protected String mDefaultSurvey; @Override public void onContentChanged() { super.onContentChanged(); mSurveyFilter = (FilterControl) findViewById(R.id.survey_filter); if(mSurveyFilter == null) throw new RuntimeException("Your activity must have a FilterControl with the id survey_filter"); mSurveyFilter.setOnChangeListener(new FilterControl.FilterChangeListener() { @Override public void onFilterChanged(boolean selfChange, String curValue) { if(!selfChange) onSurveyFilterChanged(curValue); } }); mDefaultSurvey = getIntent().getStringExtra(CampaignSurveyFilter.EXTRA_SURVEY_ID); // mDefaultSurvey = "alcohol"; if(mDefaultCampaign != null || ConfigHelper.isSingleCampaignMode()) { setLoadingVisibility(true); getSupportLoaderManager().initLoader(SURVEY_LOADER, null, this); } else { mSurveyFilter.add(0, new Pair<String, String>(getString(R.string.filter_all_surveys), null)); } } @Override public void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); if(mDefaultSurvey != null) onSurveyFilterChanged(mDefaultSurvey); } public String getSurveyId() { return mSurveyFilter.getValue(); } @Override protected void onCampaignFilterChanged(String filter) { getSupportLoaderManager().restartLoader(SURVEY_LOADER, null, CampaignSurveyFilterActivity.this); } protected void onSurveyFilterChanged(String filter) { // Do whatever when the filter changes } @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { switch(id) { case CAMPAIGN_LOADER: return super.onCreateLoader(id, args); case SURVEY_LOADER: String campaignFilter = mCampaignFilter.getValue(); if(mDefaultCampaign != null) campaignFilter = mDefaultCampaign; if(campaignFilter != null) return new CursorLoader(this, Campaigns.buildSurveysUri(campaignFilter), new String [] { Surveys.SURVEY_ID, Surveys.SURVEY_TITLE }, null, null, Surveys.SURVEY_TITLE); else return new CursorLoader(this, Surveys.CONTENT_URI, new String [] { Surveys.SURVEY_ID, Surveys.SURVEY_TITLE }, null, null, Surveys.SURVEY_TITLE); default: return null; } } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { setLoadingVisibility(false); switch(loader.getId()) { case CAMPAIGN_LOADER: super.onLoadFinished(loader, data); break; case SURVEY_LOADER: // Populate the filter mSurveyFilter.populate(data, Surveys.SURVEY_TITLE, Surveys.SURVEY_ID); mSurveyFilter.add(0, new Pair<String, String>(getString(R.string.filter_all_surveys), null)); if(mDefaultSurvey != null) { mSurveyFilter.setValue(mDefaultSurvey); mDefaultSurvey = null; } break; } } @Override public void onLoaderReset(Loader<Cursor> loader) { if(loader.getId() == SURVEY_LOADER) { mSurveyFilter.clearAll(); } else { super.onLoaderReset(loader); } } }