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.Models.Campaign; import org.ohmage.ui.OhmageFilterable.CampaignFilter; 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; import android.view.View; /** * CampaignFilterActivity can be extended by classes which have a campaign filter * @author cketcham * */ public class CampaignFilterActivity extends BaseActivity implements LoaderManager.LoaderCallbacks<Cursor> { protected static final int CAMPAIGN_LOADER = 0; protected FilterControl mCampaignFilter; protected String mDefaultCampaign; @Override public void onContentChanged() { super.onContentChanged(); setLoadingVisibility(true); mCampaignFilter = (FilterControl) findViewById(R.id.campaign_filter); if(mCampaignFilter == null) throw new RuntimeException("Your activity must have a FilterControl with the id campaign_filter"); mCampaignFilter.setOnChangeListener(new FilterControl.FilterChangeListener() { @Override public void onFilterChanged(boolean selfChange, String curValue) { if(!selfChange) onCampaignFilterChanged(curValue); } }); mDefaultCampaign = getIntent().getStringExtra(CampaignFilter.EXTRA_CAMPAIGN_URN); if(mDefaultCampaign == null) mCampaignFilter.add(0, new Pair<String, String>(getString(R.string.filter_all_campaigns), null)); if(!ConfigHelper.isSingleCampaignMode()) getSupportLoaderManager().initLoader(CAMPAIGN_LOADER, null, this); else { setLoadingVisibility(false); mCampaignFilter.setVisibility(View.GONE); } } @Override public void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); if(mDefaultCampaign != null) onCampaignFilterChanged(mDefaultCampaign); } public String getCampaignUrn() { return mCampaignFilter.getValue(); } protected void onCampaignFilterChanged(String filter) { // Do whatever when the filter changes } @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { return new CursorLoader(this, Campaigns.CONTENT_URI, new String [] { Campaigns.CAMPAIGN_URN, Campaigns.CAMPAIGN_NAME }, Campaigns.CAMPAIGN_STATUS + "!=" + Campaign.STATUS_REMOTE, null, Campaigns.CAMPAIGN_NAME); } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { setLoadingVisibility(false); // Populate the filter mCampaignFilter.populate(data, Campaigns.CAMPAIGN_NAME, Campaigns.CAMPAIGN_URN); mCampaignFilter.add(0, new Pair<String,String>(getString(R.string.filter_all_campaigns), null)); if(mDefaultCampaign != null) { mCampaignFilter.setValue(mDefaultCampaign); mDefaultCampaign = null; } } @Override public void onLoaderReset(Loader<Cursor> loader) { mCampaignFilter.clearAll(); } }