package com.stxnext.management.android.ui;
import java.util.ArrayList;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.widget.Toast;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.Window;
import com.stxnext.management.android.R;
import com.stxnext.management.android.dto.postmessage.AbsencePayload;
import com.stxnext.management.android.dto.postmessage.AbstractMessage;
import com.stxnext.management.android.dto.postmessage.LatenessPayload;
import com.stxnext.management.android.ui.dependencies.AsyncTaskEx;
import com.stxnext.management.android.ui.dependencies.ExtendedViewPager;
import com.stxnext.management.android.ui.fragment.AbsenceFormFragment;
import com.stxnext.management.android.ui.fragment.FormActionReceiver;
import com.stxnext.management.android.ui.fragment.FormFragmentAdapter;
import com.stxnext.management.android.ui.fragment.LatenessFormFragment;
import com.stxnext.management.android.web.api.HTTPResponse;
import com.stxnext.management.android.web.api.IntranetApi;
import com.viewpagerindicator.PageIndicator;
public class SubmitFormActivity extends SherlockFragmentActivity implements FormActionReceiver {
public static final int REQUEST_SEND_FORM = 2;
FormFragmentAdapter mAdapter;
ExtendedViewPager mPager;
PageIndicator mIndicator;
IntranetApi api;
AbsenceFormFragment absenceFragment;
LatenessFormFragment latenessFragment;
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
api = IntranetApi.getInstance(getApplication());
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.activity_forms);
getSherlock().setProgressBarIndeterminateVisibility(true);
ArrayList<Fragment> fragments = new ArrayList<Fragment>();
absenceFragment = new AbsenceFormFragment();
latenessFragment = new LatenessFormFragment();
absenceFragment.setSherlock(getSherlock());
latenessFragment.setSherlock(getSherlock());
fragments.add(absenceFragment);
fragments.add(latenessFragment);
mAdapter = new FormFragmentAdapter(this,getSupportFragmentManager(), fragments);
mPager = (ExtendedViewPager) findViewById(R.id.pager);
mPager.setOffscreenPageLimit(3);
mPager.setAdapter(mAdapter);
mIndicator = (PageIndicator) findViewById(R.id.indicator);
mIndicator.setViewPager(mPager);
}
private void setFormsEnabled(boolean enabled) {
absenceFragment.setFormEnabled(enabled);
latenessFragment.setFormEnabled(enabled);
mPager.setPagingEnabled(enabled);
}
@Override
public void onSubmitFormWithMessage(final AbstractMessage message) {
new AlertDialog.Builder(this)
.setTitle(R.string.label_submission_confirmation)
.setMessage(R.string.notification_submission_confirmation)
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
new SubmitTask(message).execute();
}
})
.setNegativeButton(android.R.string.no, null).show();
}
private class SubmitTask extends AsyncTaskEx<Void, Void, HTTPResponse<Boolean>> {
AbstractMessage message;
public SubmitTask(AbstractMessage message) {
this.message = message;
}
@Override
protected void onPreExecute() {
getSherlock().setProgressBarIndeterminateVisibility(true);
setFormsEnabled(false);
super.onPreExecute();
}
@Override
protected HTTPResponse<Boolean> doInBackground(Void... params) {
if (message instanceof LatenessPayload) {
return api.submitLateness((LatenessPayload) message);
}
else if (message instanceof AbsencePayload) {
return api.submitAbsence((AbsencePayload) message);
}
return null;
}
@Override
protected void onPostExecute(HTTPResponse<Boolean> result) {
// please, move to loaders instead of AsyncTask or just use
// robospice library
if (isFinishing())
return;
if (result.ok()) {
setResult(RESULT_OK);
Toast.makeText(SubmitFormActivity.this,
R.string.notification_form_sent, Toast.LENGTH_LONG).show();
finish();
}
else {
getSherlock().setProgressBarIndeterminateVisibility(false);
setFormsEnabled(true);
Toast.makeText(SubmitFormActivity.this,
R.string.notification_form_sent_fail, Toast.LENGTH_SHORT).show();
}
super.onPostExecute(result);
}
}
}