/** * ORcycle, Copyright 2014, 2015, PSU Transportation, Technology, and People Lab. * * @author Robin Murray <robin5@pdx.edu> (code) * @author Miguel Figliozzi <figliozzi@pdx.edu> and ORcycle team (general app * design and features, report questionnaires and new ORcycle features) * * For more information on the project, go to * http://www.pdx.edu/transportation-lab/orcycle and http://www.pdx.edu/transportation-lab/app-development * * Updated/modified for Oregon pilot study and app deployment. * * ORcycle is free software: you can redistribute it and/or modify it under the * terms of the GNU General Public License as published by the Free Software * Foundation, either version 3 of the License, or any later version. * ORcycle is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR * A PARTICULAR PURPOSE. See the GNU General Public License for more details. * You should have received a copy of the GNU General Public License along with * ORcycle. If not, see <http://www.gnu.org/licenses/>. * */ package edu.pdx.cecs.orcycle; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.RelativeLayout; import android.widget.TimePicker; public class EditReminderActivity extends Activity { private static final String MODULE_TAG = "EditReminderActivity"; public static final String EXTRA_NEW_REMINDER = "new_reminder"; public static final String EXTRA_REMINDER_ID = "reminder_id"; public static final String EXTRA_REMINDER_NAME = "reminder_name"; public static final String EXTRA_REMINDER_DAYS = "reminder_days"; public static final String EXTRA_REMINDER_HOURS = "reminder_hours"; public static final String EXTRA_REMINDER_MINUTES = "reminder_minutes"; public static final String EXTRA_REMINDER_ENABLED = "reminder_enabled"; // UI Elements private EditText etName; private Button buttonSave; private Button buttonCancel; private CheckBox chkSunday; private CheckBox chkMonday; private CheckBox chkTuesday; private CheckBox chkWednesday; private CheckBox chkThursday; private CheckBox chkFriday; private CheckBox chkSaturday; private TimePicker timePicker; private RelativeLayout rlEnabled; private CheckBox chkEnabled; private long reminderId; private String reminderName; private int reminderDays; private boolean reminderEnabled; private int reminderHours; private int reminderMinutes; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); try { setContentView(R.layout.activity_edit_reminder); etName = (EditText) findViewById(R.id.et_aer_name); // Setup the save button buttonSave = (Button) findViewById(R.id.btn_aer_save); buttonSave.setOnClickListener(new ButtonSave_OnClickListener()); // Setup the cancel button buttonCancel = (Button) findViewById(R.id.btn_aer_cancel); buttonCancel.setOnClickListener(new ButtonCancel_OnClickListener()); // Get references to the checkboxes chkSunday = (CheckBox) findViewById(R.id.chk_aer_sun); chkMonday = (CheckBox) findViewById(R.id.chk_aer_mon); chkTuesday = (CheckBox) findViewById(R.id.chk_aer_tue); chkWednesday = (CheckBox) findViewById(R.id.chk_aer_wed); chkThursday = (CheckBox) findViewById(R.id.chk_aer_thu); chkFriday = (CheckBox) findViewById(R.id.chk_aer_fri); chkSaturday = (CheckBox) findViewById(R.id.chk_aer_sat); timePicker = (TimePicker) findViewById(R.id.time_picker_aer); rlEnabled = (RelativeLayout) findViewById(R.id.rl_aer_enabled); chkEnabled = (CheckBox) findViewById(R.id.chk_aer_enabled); LoadReminderVars(savedInstanceState); } catch(Exception ex) { Log.e(MODULE_TAG, ex.getMessage()); } } @Override public void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); try { LoadReminderVars(savedInstanceState); } catch(Exception ex) { Log.e(MODULE_TAG, ex.getMessage()); } } @Override public void onResume() { super.onResume(); try { } catch(Exception ex) { Log.e(MODULE_TAG, ex.getMessage()); } } @Override public void onSaveInstanceState(Bundle savedInstanceState) { try { SaveReminderVars(savedInstanceState); super.onSaveInstanceState(savedInstanceState); } catch(Exception ex) { Log.e(MODULE_TAG, ex.getMessage()); } } // ********************************************************************************* // * Button Handlers // ********************************************************************************* /** * Class: ButtonSave_OnClickListener * * Description: Callback to be invoked when saveButton button is clicked */ private final class ButtonSave_OnClickListener implements View.OnClickListener { /** * Description: Handles onClick for view */ public void onClick(View v) { try { if (EntriesValidated()) { saveReminder(); finish(); } } catch(Exception ex) { Log.e(MODULE_TAG, ex.getMessage()); } } } /** * Class: ButtonCancel_OnClickListener * * Description: Callback to be invoked when cancelButton button is clicked */ private final class ButtonCancel_OnClickListener implements View.OnClickListener { /** * Description: Handles onClick for view */ public void onClick(View v) { try { finish(); } catch(Exception ex) { Log.e(MODULE_TAG, ex.getMessage()); } } } // ********************************************************************************* // * Misc Methods // ********************************************************************************* private void LoadReminderVars(Bundle savedInstanceState) { // Default reminder values for a new reminder reminderId = -1; reminderName = ""; reminderDays = 0; reminderHours = 0; reminderMinutes = 0; reminderEnabled = true; // Searched the bundle for the values if (null == savedInstanceState) { // then this is being called from OnCreate Bundle extras = getIntent().getExtras(); if ((null != extras) && (extras.containsKey(EXTRA_REMINDER_ID))) { reminderId = extras.getLong(EXTRA_REMINDER_ID); } if(reminderId > 0) { ReminderHelper rh = new ReminderHelper(this, reminderId); reminderName = rh.getName(); reminderDays = rh.getDays(); reminderHours = rh.getHours(); reminderMinutes = rh.getMinutes(); reminderEnabled = rh.getEnabled(); } } else { // Search then extras for the values if (savedInstanceState.containsKey(EXTRA_REMINDER_ID)) { reminderId = savedInstanceState.getLong(EXTRA_REMINDER_ID); } if (savedInstanceState.containsKey(EXTRA_REMINDER_NAME)) { reminderName = savedInstanceState.getString(EXTRA_REMINDER_NAME); } if (savedInstanceState.containsKey(EXTRA_REMINDER_DAYS)) { reminderDays = savedInstanceState.getInt(EXTRA_REMINDER_DAYS, 0); } if (savedInstanceState.containsKey(EXTRA_REMINDER_HOURS)) { reminderHours = savedInstanceState.getInt(EXTRA_REMINDER_HOURS); } if (savedInstanceState.containsKey(EXTRA_REMINDER_MINUTES)) { reminderMinutes = savedInstanceState.getInt(EXTRA_REMINDER_MINUTES); } if (savedInstanceState.containsKey(EXTRA_REMINDER_ENABLED)) { reminderEnabled = (savedInstanceState.getInt(EXTRA_REMINDER_ENABLED) != 0); } } // Set reminder name etName.setText(reminderName); // Set reminder days selected ReminderHelper rh = new ReminderHelper(); rh.setDays(reminderDays); chkSunday.setChecked(rh.getSunday()); chkMonday.setChecked(rh.getMonday()); chkTuesday.setChecked(rh.getTuesday()); chkWednesday.setChecked(rh.getWednesday()); chkThursday.setChecked(rh.getThursday()); chkFriday.setChecked(rh.getFriday()); chkSaturday.setChecked(rh.getSaturday()); // Set reminder time timePicker.setCurrentHour(reminderHours); timePicker.setCurrentMinute(reminderMinutes); // Set enabled value chkEnabled.setChecked(reminderEnabled); // Only show enabled checkbox when editing an existing reminder if(reminderId > 0) { rlEnabled.setVisibility(View.VISIBLE); } else { rlEnabled.setVisibility(View.GONE); } } private void SaveReminderVars(Bundle savedInstanceState) { ReminderHelper rh = new ReminderHelper(); rh.setSunday(chkSunday.isChecked()) .setMonday(chkMonday.isChecked()) .setTuesday(chkTuesday.isChecked()) .setWednesday(chkWednesday.isChecked()) .setThursday(chkThursday.isChecked()) .setFriday(chkFriday.isChecked()) .setSaturday(chkSaturday.isChecked()); savedInstanceState.putLong(EXTRA_REMINDER_ID, reminderId); savedInstanceState.putString(EXTRA_REMINDER_NAME, reminderName); savedInstanceState.putInt(EXTRA_REMINDER_DAYS, rh.getDays()); savedInstanceState.putInt(EXTRA_REMINDER_HOURS, reminderHours); savedInstanceState.putInt(EXTRA_REMINDER_MINUTES, reminderMinutes); savedInstanceState.putInt(EXTRA_REMINDER_ENABLED, reminderEnabled ? 1 : 0); } private boolean EntriesValidated() { // Get the name in the edit text entry field reminderName = etName.getText().toString().trim(); // Check the name for a blank entry if ((null == reminderName) || (reminderName.equalsIgnoreCase(""))) { AlertUserMandatoryAnswers(R.string.aer_error_no_name); return false; } // Check that at least one day has been selected if (!(chkSunday.isChecked() || chkMonday.isChecked() || chkTuesday.isChecked() || chkWednesday.isChecked() || chkThursday.isChecked() || chkFriday.isChecked() || chkSaturday.isChecked())) { AlertUserMandatoryAnswers(R.string.aer_error_no_days); return false; } return true; } private void AlertUserMandatoryAnswers(int messageId) { final AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage(getResources().getString(messageId)) .setCancelable(true) .setTitle(R.string.aer_error_dialog_title) .setPositiveButton(getResources().getString(R.string.aer_alert_OK), new DialogInterface.OnClickListener() { public void onClick(final DialogInterface dialog, final int id) { dialog.cancel(); } }); final AlertDialog alert = builder.create(); alert.show(); } private void saveReminder() { ReminderHelper rh = new ReminderHelper(this); rh.setId(reminderId) .setName(reminderName) .setSunday(chkSunday.isChecked()) .setMonday(chkMonday.isChecked()) .setTuesday(chkTuesday.isChecked()) .setWednesday(chkWednesday.isChecked()) .setThursday(chkThursday.isChecked()) .setFriday(chkFriday.isChecked()) .setSaturday(chkSaturday.isChecked()) .setHours(timePicker.getCurrentHour()) .setMinutes(timePicker.getCurrentMinute()) .setEnabled(chkEnabled.isChecked()) .update(); Reminder reminder = new Reminder(this, rh); if(chkEnabled.isChecked()) { reminder.schedule(); } else { reminder.cancel(); } } }