package org.ohmage.activity; import android.app.Dialog; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import com.commonsware.cwac.wakeful.WakefulIntentService; import org.ohmage.ConfigHelper; import org.ohmage.R; import org.ohmage.adapters.ResponseListCursorAdapter; import org.ohmage.adapters.UploadingResponseListCursorAdapter; import org.ohmage.db.DbContract.Campaigns; import org.ohmage.db.DbContract.Responses; import org.ohmage.db.DbHelper.Tables; import org.ohmage.db.Models.Campaign; import org.ohmage.db.Models.Response; import org.ohmage.fragments.ResponseListFragment; import org.ohmage.fragments.ResponseListFragment.OnResponseActionListener; import org.ohmage.service.UploadService; import org.ohmage.logprobe.Analytics; import org.ohmage.ui.CampaignFilterActivity; import org.ohmage.ui.ResponseActivityHelper; public class UploadQueueActivity extends CampaignFilterActivity implements OnResponseActionListener { private static final String TAG = "UploadQueueActivity"; private Button mUploadAll; private ResponseActivityHelper mResponseHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.upload_queue_layout); mResponseHelper = new ResponseActivityHelper(this); mUploadAll = (Button) findViewById(R.id.upload_button); mUploadAll.setOnClickListener(mUploadAllListener); // Show the upload button immediately in single campaign mode since we don't query for the campaign if(ConfigHelper.isSingleCampaignMode()) ensureButtons(); } @Override protected void onCampaignFilterChanged(String filter) { if (getUploadingResponseListFragment() != null) { getUploadingResponseListFragment().setCampaignUrn(filter); } } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { super.onLoadFinished(loader, data); ensureButtons(); } private void ensureButtons() { findViewById(R.id.upload_all_container).setVisibility(View.VISIBLE); } @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_READY, null, Campaigns.CAMPAIGN_NAME); } private ResponseListFragment getUploadingResponseListFragment() { return (UploadingResponseListFragment) getSupportFragmentManager().findFragmentById(R.id.upload_queue_response_list_fragment); } public static class UploadingResponseListFragment extends ResponseListFragment { @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // Set the empty text setEmptyText(getString(R.string.upload_queue_empty)); } @Override protected ResponseListCursorAdapter createAdapter() { return new UploadingResponseListCursorAdapter(getActivity(), null, this, 0); } @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { CursorLoader loader = (CursorLoader) super.onCreateLoader(id, args); StringBuilder selection = new StringBuilder(loader.getSelection()); if(selection.length() != 0) selection.append(" AND "); selection.append(Tables.RESPONSES + "." + Responses.RESPONSE_STATUS + "!=" + Response.STATUS_UPLOADED + " AND " + Tables.RESPONSES + "." + Responses.RESPONSE_STATUS + "!=" + Response.STATUS_DOWNLOADED); loader.setSelection(selection.toString()); return loader; } @Override protected boolean ignoreTimeBounds() { return true; } } private final OnClickListener mUploadAllListener = new OnClickListener() { @Override public void onClick(View v) { Analytics.widget(v); Intent intent = new Intent(UploadQueueActivity.this, UploadService.class); intent.setData(Responses.CONTENT_URI); WakefulIntentService.sendWakefulWork(UploadQueueActivity.this, intent); } }; @Override public void onResponseActionView(Uri responseUri) { startActivity(new Intent(Intent.ACTION_VIEW, responseUri)); } @Override public void onResponseActionUpload(Uri responseUri) { mResponseHelper.queueForUpload(responseUri); } @Override public void onResponseActionError(Uri responseUri, int status) { Bundle bundle = new Bundle(); bundle.putParcelable(ResponseActivityHelper.KEY_URI, responseUri); showDialog(status, bundle); } @Override protected void onPrepareDialog(int id, Dialog dialog, Bundle args) { mResponseHelper.onPrepareDialog(id, dialog, args); } @Override protected Dialog onCreateDialog(int id, Bundle args) { return mResponseHelper.onCreateDialog(id, args); } }