package com.commonsensenet.realfarm.actions; import java.util.Calendar; import java.util.List; import android.os.Bundle; import android.view.View; import com.actionbarsherlock.view.MenuItem; import com.commonsensenet.realfarm.DataFormActivity; import com.commonsensenet.realfarm.Global; import com.commonsensenet.realfarm.R; import com.commonsensenet.realfarm.dataaccess.RealFarmDatabase; import com.commonsensenet.realfarm.model.Resource; import com.commonsensenet.realfarm.utils.ApplicationTracker; import com.commonsensenet.realfarm.utils.ApplicationTracker.EventType; public class SowActionActivity extends DataFormActivity { public static final String AMOUNT = "amount"; public static final String DAY = "day"; public static final String DEFAULT_AMOUNT = "0"; public static final String DEFAULT_DAY = "0"; public static final int DEFAULT_INTERCROP = -1; public static final int DEFAULT_MONTH = -1; public static final int DEFAULT_TREATMENT = -1; public static final int DEFAULT_VARIETY = -1; public static final String INTERCROP = "intercrop"; public static final String MONTH = "month"; public static final String TREATMENT = "treatment"; public static final String VARIETY = "variety"; private int mAmount; private int mDay; private int mIntercrop; private List<Resource> mIntercropList; private int mMonth; private List<Resource> mMonthsList; private int mSeedType; private int mTreatment; private List<Resource> mTreatmentList; private List<Resource> mVarietiesList; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState, R.layout.act_sow_action); // loads the data from the database. mVarietiesList = mDataProvider.getVarieties(); mTreatmentList = mDataProvider .getResources(RealFarmDatabase.RESOURCE_TYPE_TREATMENT); mIntercropList = mDataProvider .getResources(RealFarmDatabase.RESOURCE_TYPE_INTERCROP); mMonthsList = mDataProvider .getResources(RealFarmDatabase.RESOURCE_TYPE_MONTH); // adds the fields to validate to the map. mResultsMap.put(VARIETY, DEFAULT_VARIETY); mResultsMap.put(AMOUNT, DEFAULT_AMOUNT); mResultsMap.put(DAY, DEFAULT_DAY); mResultsMap.put(MONTH, DEFAULT_MONTH); mResultsMap.put(TREATMENT, DEFAULT_TREATMENT); mResultsMap.put(INTERCROP, DEFAULT_INTERCROP); playAudio(R.raw.thankyouclickingactionsowing); View varietyLabel = findViewById(R.id.dlg_var_text_sow); View amountLabel = findViewById(R.id.dlg_lbl_amount_sow); View dayLabel = findViewById(R.id.dlg_lbl_day_sow); View monthLabel = findViewById(R.id.dlg_lbl_month_sow); View treatmentLabel = findViewById(R.id.dlg_lbl_treat_sow); View intercropLabel = findViewById(R.id.dlg_lbl_intercrop_sow); varietyLabel.setOnLongClickListener(this); amountLabel.setOnLongClickListener(this); dayLabel.setOnLongClickListener(this); monthLabel.setOnLongClickListener(this); treatmentLabel.setOnLongClickListener(this); intercropLabel.setOnLongClickListener(this); View varietyRow = findViewById(R.id.seed_type_sow_tr); View amountRow = findViewById(R.id.units_sow_tr); View dateRow = findViewById(R.id.day_sow_tr); View treatmentRow = findViewById(R.id.treatment_sow_tr); View intercropRow = findViewById(R.id.intercrop_sow_tr); varietyRow.setOnLongClickListener(this); amountRow.setOnLongClickListener(this); dateRow.setOnLongClickListener(this); treatmentRow.setOnLongClickListener(this); intercropRow.setOnLongClickListener(this); varietyLabel.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { stopAudio(); ApplicationTracker.getInstance().logEvent(EventType.CLICK, Global.userId, getLogTag(), getResources().getResourceEntryName(v.getId())); displayDialog(v, mVarietiesList, VARIETY, "Select the variety", R.raw.select_the_variety, R.id.dlg_var_text_sow, R.id.seed_type_sow_tr, 0); } }); dayLabel.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { stopAudio(); ApplicationTracker.getInstance().logEvent(EventType.CLICK, Global.userId, getLogTag(), getResources().getResourceEntryName(v.getId())); displayDialogNP("Choose the day", DAY, R.raw.dateinfo, 1, 31, Calendar.getInstance().get(Calendar.DAY_OF_MONTH), 1, 0, R.id.dlg_lbl_day_sow, R.id.day_sow_tr, R.raw.ok, R.raw.cancel, R.raw.day_ok, R.raw.day_cancel); } }); treatmentLabel.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { stopAudio(); ApplicationTracker.getInstance().logEvent(EventType.CLICK, Global.userId, getLogTag(), getResources().getResourceEntryName(v.getId())); displayDialog(v, mTreatmentList, TREATMENT, "Select if the seeds were treated", R.raw.treatmenttoseeds1, R.id.dlg_lbl_treat_sow, R.id.treatment_sow_tr, 0); } }); amountLabel.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { stopAudio(); ApplicationTracker.getInstance().logEvent(EventType.CLICK, Global.userId, getLogTag(), getResources().getResourceEntryName(v.getId())); displayDialogNP("Choose the number of serus", AMOUNT, R.raw.choose_serus, 1, 999, 1, 1, 0, R.id.dlg_lbl_amount_sow, R.id.units_sow_tr, R.raw.ok, R.raw.cancel, R.raw.seru_ok, R.raw.seru_cancel); } }); intercropLabel.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { stopAudio(); ApplicationTracker.getInstance().logEvent(EventType.CLICK, Global.userId, getLogTag(), getResources().getResourceEntryName(v.getId())); displayDialog(v, mIntercropList, INTERCROP, "Main crop or intercrop?", R.raw.maincrop_intercrop, R.id.dlg_lbl_intercrop_sow, R.id.intercrop_sow_tr, 0); } }); monthLabel.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { stopAudio(); ApplicationTracker.getInstance().logEvent(EventType.CLICK, Global.userId, getLogTag(), getResources().getResourceEntryName(v.getId())); displayDialog(v, mMonthsList, MONTH, "Select the month", R.raw.choosethemonth, R.id.dlg_lbl_month_sow, R.id.day_sow_tr, 0); } }); } @Override public boolean onLongClick(View v) { ApplicationTracker.getInstance().logEvent(EventType.LONG_CLICK, Global.userId, getLogTag(), getResources().getResourceEntryName(v.getId())); // long click sounds are always forced since they represent // the helping system. // checks which view was clicked. if (v.getId() == R.id.dlg_var_text_sow) { if ((Integer) mResultsMap.get(VARIETY) == DEFAULT_VARIETY) playAudio(R.raw.select_the_variety, true); else playAudio( mVarietiesList .get(((Integer) mResultsMap.get(VARIETY))) .getAudio(), true); } else if (v.getId() == R.id.dlg_lbl_amount_sow) { if (mResultsMap.get(AMOUNT).equals(DEFAULT_AMOUNT)) { playAudio(R.raw.choose_serus, true); } else { playInteger(Integer.valueOf(mResultsMap.get(AMOUNT).toString())); playSound(); } } else if (v.getId() == R.id.dlg_lbl_month_sow) { if ((Integer) mResultsMap.get(MONTH) == DEFAULT_MONTH) { playAudio(R.raw.choosethemonth, true); } else { playAudio(mMonthsList.get(((Integer) mResultsMap.get(MONTH))) .getAudio(), true); } } else if (v.getId() == R.id.dlg_lbl_treat_sow) { if ((Integer) mResultsMap.get(TREATMENT) == DEFAULT_TREATMENT) { playAudio(R.raw.treatmenttoseeds1, true); } else { playAudio( mMonthsList.get(((Integer) mResultsMap.get(TREATMENT))) .getAudio(), true); } } else if (v.getId() == R.id.dlg_lbl_intercrop_sow) { if ((Integer) mResultsMap.get(INTERCROP) == DEFAULT_INTERCROP) { playAudio(R.raw.maincrop_intercrop, true); } else { playAudio( mIntercropList.get( ((Integer) mResultsMap.get(INTERCROP))) .getAudio(), true); } } else if (v.getId() == R.id.dlg_lbl_day_sow) { if (mResultsMap.get(DAY).equals(DEFAULT_DAY)) { playAudio(R.raw.dateinfo, true); } else { playInteger(Integer.valueOf(mResultsMap.get(DAY).toString())); playSound(); } } else if (v.getId() == R.id.seed_type_sow_tr) { playAudio(R.raw.variety, true); } else if (v.getId() == R.id.units_sow_tr) { playAudio(R.raw.amount, true); } else if (v.getId() == R.id.treatment_sow_tr) { playAudio(R.raw.treatmentdone, true); } else if (v.getId() == R.id.intercrop_sow_tr) { playAudio(R.raw.intercrop, true); } else if (v.getId() == R.id.day_sow_tr) { playAudio(R.raw.date, true); } else { // checks if the parent has the sound. return super.onLongClick(v); } // shows the help icon. showHelpIcon(v); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.equals(mHelpItem)) { // tracks the application usage ApplicationTracker.getInstance().logEvent(EventType.CLICK, Global.userId, getLogTag(), item.getTitle()); playAudio(R.raw.sow_help, true); return true; } else { // asks the parent. return super.onOptionsItemSelected(item); } } @Override protected Boolean validateForm() { // gets the current values from the map. mAmount = Integer.valueOf(mResultsMap.get(AMOUNT).toString()); // month corresponds to the id in the resource table. mDay = Integer.valueOf(mResultsMap.get(DAY).toString()); // flag that indicates if the form is valid. boolean isValid = true; if ((Integer) mResultsMap.get(VARIETY) != DEFAULT_VARIETY) { highlightField(R.id.seed_type_sow_tr, false); } else { ApplicationTracker.getInstance().logEvent(EventType.ERROR, Global.userId, VARIETY); isValid = false; highlightField(R.id.seed_type_sow_tr, true); } if (mAmount > Integer.parseInt(DEFAULT_AMOUNT)) { highlightField(R.id.units_sow_tr, false); } else { ApplicationTracker.getInstance().logEvent(EventType.ERROR, Global.userId, AMOUNT); isValid = false; highlightField(R.id.units_sow_tr, true); } if ((Integer) mResultsMap.get(MONTH) != DEFAULT_MONTH && mDay > Integer.parseInt(DEFAULT_DAY) && validDate(mDay, mMonthsList.get((Integer) mResultsMap.get(MONTH)) .getId())) { highlightField(R.id.day_sow_tr, false); } else { ApplicationTracker.getInstance().logEvent(EventType.ERROR, Global.userId, MONTH, DAY); isValid = false; highlightField(R.id.day_sow_tr, true); } if ((Integer) mResultsMap.get(TREATMENT) != DEFAULT_TREATMENT) { highlightField(R.id.treatment_sow_tr, false); } else { ApplicationTracker.getInstance().logEvent(EventType.ERROR, Global.userId, TREATMENT); isValid = false; highlightField(R.id.treatment_sow_tr, true); } if ((Integer) mResultsMap.get(INTERCROP) != DEFAULT_INTERCROP) { highlightField(R.id.intercrop_sow_tr, false); } else { ApplicationTracker.getInstance().logEvent(EventType.ERROR, Global.userId, INTERCROP); isValid = false; highlightField(R.id.intercrop_sow_tr, true); } // if all the fields are valid the data is inserted into the database. if (isValid) { ApplicationTracker.getInstance().logEvent(EventType.CLICK, Global.userId, getLogTag(), "data entered"); mSeedType = mVarietiesList.get((Integer) mResultsMap.get(VARIETY)) .getId(); mMonth = mMonthsList.get((Integer) mResultsMap.get(MONTH)).getId(); mTreatment = mTreatmentList.get( (Integer) mResultsMap.get(TREATMENT)).getId(); mIntercrop = mIntercropList.get( (Integer) mResultsMap.get(INTERCROP)).getId(); // inserts the new plot into the table. long result = mDataProvider.addSowAction(Global.userId, Global.plotId, mAmount, mSeedType, mTreatment, mIntercrop, getDate(mDay, mMonth), Global.isAdmin); // returns true if no error was produced. return result != -1; } return false; } }