package org.ohmage.activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import org.ohmage.AccountHelper; import org.ohmage.R; import org.ohmage.UserPreferencesHelper; import org.ohmage.async.CampaignReadLoaderCallbacks; import org.ohmage.async.CampaignXmlDownloadTask; import org.ohmage.controls.ActionBarControl.ActionListener; import org.ohmage.db.DbContract.Campaigns; import org.ohmage.db.Models.Campaign; import org.ohmage.fragments.CampaignListFragment.OnCampaignActionListener; import org.ohmage.ui.BaseSingleFragmentActivity; import org.ohmage.ui.OhmageFilterable.CampaignFilter; public class BaseCampaignListActivity extends BaseSingleFragmentActivity implements OnCampaignActionListener, ActionListener{ static final String TAG = "BaseCampaignListActivity"; // action bar commands protected static final int ACTION_REFRESH_CAMPAIGNS = 0; AccountHelper mAccount; private CampaignReadLoaderCallbacks mCampaignReadLoader; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mAccount = new AccountHelper(this); mCampaignReadLoader = new CampaignReadLoaderCallbacks(this); } @Override protected void onResume() { super.onResume(); mCampaignReadLoader.onResume(); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mCampaignReadLoader.onSaveInstanceState(outState); } @Override public void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); mCampaignReadLoader.onRestoreInstanceState(savedInstanceState); } @Override public void onContentChanged() { super.onContentChanged(); mCampaignReadLoader.onCreate(); // throw some actions on it getActionBarControl().addActionBarCommand(ACTION_REFRESH_CAMPAIGNS, getString(R.string.campaign_list_refresh_action_button_description), R.drawable.btn_title_refresh); // and attach handlers for said actions getActionBarControl().setOnActionListener(this); } @Override public void onCampaignActionView(String campaignUrn) { Intent i = new Intent(this, CampaignInfoActivity.class); i.setData(Campaigns.buildCampaignUri(campaignUrn)); startActivity(i); } @Override public void onCampaignActionDownload(final String campaignUrn) { new CampaignXmlDownloadTask(BaseCampaignListActivity.this, campaignUrn, mAccount.getUsername(), mAccount.getAuthToken()).startLoading(); } @Override public void onCampaignActionSurveys(String campaignUrn) { Intent intent = new Intent(this, SurveyListActivity.class); intent.putExtra(CampaignFilter.EXTRA_CAMPAIGN_URN, campaignUrn); startActivity(intent); } @Override public void onCampaignActionError(String campaignUrn, int status) { Bundle bundle = new Bundle(); bundle.putString("campaign_urn", campaignUrn); showDialog(status, bundle); } /* (non-Javadoc) * @see android.app.Activity#onCreateDialog(int, android.os.Bundle) */ @Override protected Dialog onCreateDialog(final int id, Bundle args) { AlertDialog.Builder builder = new AlertDialog.Builder(this); switch (id) { case Campaign.STATUS_STOPPED: builder.setMessage(R.string.campaign_list_campaign_stopped); break; case Campaign.STATUS_OUT_OF_DATE: builder.setMessage(R.string.campaign_list_campaign_out_of_date); break; case Campaign.STATUS_INVALID_USER_ROLE: builder.setMessage(R.string.campaign_list_campaign_invalid_user_role); break; case Campaign.STATUS_NO_EXIST: builder.setMessage(R.string.campaign_list_campaign_no_exist); break; default: builder.setMessage(R.string.campaign_list_campaign_unavailable); } builder.setCancelable(true) .setNegativeButton(R.string.ignore, null) .setPositiveButton(R.string.remove, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Campaign.setRemote(BaseCampaignListActivity.this, campaignUrnForDialogs); } }); return builder.create(); } @Override protected void onPrepareDialog(int id, Dialog dialog, Bundle args) { super.onPrepareDialog(id, dialog, args); campaignUrnForDialogs = args.getString("campaign_urn"); } private String campaignUrnForDialogs; @Override public void onActionClicked(int commandID) { switch(commandID) { case ACTION_REFRESH_CAMPAIGNS: mCampaignReadLoader.forceLoad(); break; } } }