diff --git a/app/src/main/java/com/blanyal/remindme/ReminderAddActivity.java b/app/src/main/java/com/blanyal/remindme/ReminderAddActivity.java index f09ee87..441c227 100644 --- a/app/src/main/java/com/blanyal/remindme/ReminderAddActivity.java +++ b/app/src/main/java/com/blanyal/remindme/ReminderAddActivity.java @@ -25,6 +25,7 @@ import android.text.Editable; import android.text.InputType; import android.text.TextWatcher; +import android.text.format.DateFormat; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -39,6 +40,7 @@ import com.wdullaer.materialdatetimepicker.time.TimePickerDialog; import java.util.Calendar; +import java.util.Date; public class ReminderAddActivity extends AppCompatActivity implements @@ -200,7 +202,7 @@ public void setTime(View v){ this, now.get(Calendar.HOUR_OF_DAY), now.get(Calendar.MINUTE), - false + DateFormat.is24HourFormat(getApplicationContext()) ); tpd.setThemeDark(false); tpd.show(getFragmentManager(), "Timepickerdialog"); @@ -214,6 +216,7 @@ public void setDate(View v){ now.get(Calendar.YEAR), now.get(Calendar.MONTH), now.get(Calendar.DAY_OF_MONTH) + ); dpd.show(getFragmentManager(), "Datepickerdialog"); } @@ -315,8 +318,7 @@ public void onClick(DialogInterface dialog, int whichButton) { mRepeatNo = Integer.toString(1); mRepeatNoText.setText(mRepeatNo); mRepeatText.setText("Every " + mRepeatNo + " " + mRepeatType + "(s)"); - } - else { + } else { mRepeatNo = input.getText().toString().trim(); mRepeatNoText.setText(mRepeatNo); mRepeatText.setText("Every " + mRepeatNo + " " + mRepeatType + "(s)"); @@ -331,48 +333,71 @@ public void onClick(DialogInterface dialog, int whichButton) { alert.show(); } + // Check that date is after current date + public boolean afterCurrentTimeDate(){ + Date now = new Date(); + Calendar me = Calendar.getInstance(); + me.set(Calendar.MONTH, mMonth-1); + me.set(Calendar.YEAR, mYear); + me.set(Calendar.DAY_OF_MONTH, mDay); + me.set(Calendar.HOUR_OF_DAY, mHour); + me.set(Calendar.MINUTE, mMinute); + me.set(Calendar.SECOND, 0); + if(now.compareTo(me.getTime())<0){ + return true; + } else { + return false; + } + } + // On clicking the save button public void saveReminder(){ - ReminderDatabase rb = new ReminderDatabase(this); - - // Creating Reminder - int ID = rb.addReminder(new Reminder(mTitle, mDate, mTime, mRepeat, mRepeatNo, mRepeatType, mActive)); - - // Set up calender for creating the notification - mCalendar.set(Calendar.MONTH, --mMonth); - mCalendar.set(Calendar.YEAR, mYear); - mCalendar.set(Calendar.DAY_OF_MONTH, mDay); - mCalendar.set(Calendar.HOUR_OF_DAY, mHour); - mCalendar.set(Calendar.MINUTE, mMinute); - mCalendar.set(Calendar.SECOND, 0); - - // Check repeat type - if (mRepeatType.equals("Minute")) { - mRepeatTime = Integer.parseInt(mRepeatNo) * milMinute; - } else if (mRepeatType.equals("Hour")) { - mRepeatTime = Integer.parseInt(mRepeatNo) * milHour; - } else if (mRepeatType.equals("Day")) { - mRepeatTime = Integer.parseInt(mRepeatNo) * milDay; - } else if (mRepeatType.equals("Week")) { - mRepeatTime = Integer.parseInt(mRepeatNo) * milWeek; - } else if (mRepeatType.equals("Month")) { - mRepeatTime = Integer.parseInt(mRepeatNo) * milMonth; - } + if(afterCurrentTimeDate()) { + ReminderDatabase rb = new ReminderDatabase(this); + + // Creating Reminder + int ID = rb.addReminder(new Reminder(mTitle, mDate, mTime, mRepeat, mRepeatNo, mRepeatType, mActive)); + + // Set up calender for creating the notification + mCalendar.set(Calendar.MONTH, --mMonth); + mCalendar.set(Calendar.YEAR, mYear); + mCalendar.set(Calendar.DAY_OF_MONTH, mDay); + mCalendar.set(Calendar.HOUR_OF_DAY, mHour); + mCalendar.set(Calendar.MINUTE, mMinute); + mCalendar.set(Calendar.SECOND, 0); + + // Check repeat type + if (mRepeatType.equals("Minute")) { + mRepeatTime = Integer.parseInt(mRepeatNo) * milMinute; + } else if (mRepeatType.equals("Hour")) { + mRepeatTime = Integer.parseInt(mRepeatNo) * milHour; + } else if (mRepeatType.equals("Day")) { + mRepeatTime = Integer.parseInt(mRepeatNo) * milDay; + } else if (mRepeatType.equals("Week")) { + mRepeatTime = Integer.parseInt(mRepeatNo) * milWeek; + } else if (mRepeatType.equals("Month")) { + mRepeatTime = Integer.parseInt(mRepeatNo) * milMonth; + } - // Create a new notification - if (mActive.equals("true")) { - if (mRepeat.equals("true")) { - new AlarmReceiver().setRepeatAlarm(getApplicationContext(), mCalendar, ID, mRepeatTime); - } else if (mRepeat.equals("false")) { - new AlarmReceiver().setAlarm(getApplicationContext(), mCalendar, ID); + // Create a new notification + if (mActive.equals("true")) { + if (mRepeat.equals("true")) { + new AlarmReceiver().setRepeatAlarm(getApplicationContext(), mCalendar, ID, mRepeatTime); + } else if (mRepeat.equals("false")) { + new AlarmReceiver().setAlarm(getApplicationContext(), mCalendar, ID); + } } - } - // Create toast to confirm new reminder - Toast.makeText(getApplicationContext(), "Saved", - Toast.LENGTH_SHORT).show(); + // Create toast to confirm new reminder + Toast.makeText(getApplicationContext(), "Saved", + Toast.LENGTH_SHORT).show(); - onBackPressed(); + onBackPressed(); + } else { + // Create toast to notify that Alarm is not a valid future date + Toast.makeText(getApplicationContext(), "Alarm Time and Date Must Be After Current Time and Date", + Toast.LENGTH_LONG).show(); + } } // On pressing the back button diff --git a/app/src/main/java/com/blanyal/remindme/ReminderDatabase.java b/app/src/main/java/com/blanyal/remindme/ReminderDatabase.java index f71c517..a635785 100644 --- a/app/src/main/java/com/blanyal/remindme/ReminderDatabase.java +++ b/app/src/main/java/com/blanyal/remindme/ReminderDatabase.java @@ -98,6 +98,19 @@ public int addReminder(Reminder reminder){ return (int) ID; } + // Determines if the id exists in the reminder database + public boolean checkForID(int id) { + SQLiteDatabase db = this.getReadableDatabase(); + String Query = "Select * from " + TABLE_REMINDERS + " where " + KEY_ID + " = " + id; + Cursor cursor = db.rawQuery(Query, null); + if(cursor.getCount() <= 0){ + cursor.close(); + return false; + } + cursor.close(); + return true; + } + // Getting single Reminder public Reminder getReminder(int id){ SQLiteDatabase db = this.getReadableDatabase(); diff --git a/app/src/main/java/com/blanyal/remindme/ReminderEditActivity.java b/app/src/main/java/com/blanyal/remindme/ReminderEditActivity.java index 09ab557..4d18428 100644 --- a/app/src/main/java/com/blanyal/remindme/ReminderEditActivity.java +++ b/app/src/main/java/com/blanyal/remindme/ReminderEditActivity.java @@ -26,6 +26,7 @@ import android.text.Editable; import android.text.InputType; import android.text.TextWatcher; +import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -40,6 +41,7 @@ import com.wdullaer.materialdatetimepicker.time.TimePickerDialog; import java.util.Calendar; +import java.util.Date; public class ReminderEditActivity extends AppCompatActivity implements @@ -132,6 +134,12 @@ public void afterTextChanged(Editable s) {} // Get reminder using reminder id rb = new ReminderDatabase(this); + if (!rb.checkForID(mReceivedID)){ + Toast.makeText(getApplicationContext(), "Alarm Does Not Exist Anymore", + Toast.LENGTH_SHORT).show(); + finish(); + return; + } mReceivedReminder = rb.getReminder(mReceivedID); // Get values from reminder @@ -354,8 +362,7 @@ public void onClick(DialogInterface dialog, int whichButton) { mRepeatNo = Integer.toString(1); mRepeatNoText.setText(mRepeatNo); mRepeatText.setText("Every " + mRepeatNo + " " + mRepeatType + "(s)"); - } - else { + } else { mRepeatNo = input.getText().toString().trim(); mRepeatNoText.setText(mRepeatNo); mRepeatText.setText("Every " + mRepeatNo + " " + mRepeatType + "(s)"); @@ -370,57 +377,80 @@ public void onClick(DialogInterface dialog, int whichButton) { alert.show(); } + // Check that date is after current date + public boolean afterCurrentTimeDate(){ + Date now = new Date(); + Calendar me = Calendar.getInstance(); + me.set(Calendar.MONTH, mMonth-1); + me.set(Calendar.YEAR, mYear); + me.set(Calendar.DAY_OF_MONTH, mDay); + me.set(Calendar.HOUR_OF_DAY, mHour); + me.set(Calendar.MINUTE, mMinute); + me.set(Calendar.SECOND, 0); + if(now.compareTo(me.getTime())<0){ + return true; + } else { + return false; + } + } + // On clicking the update button public void updateReminder(){ // Set new values in the reminder - mReceivedReminder.setTitle(mTitle); - mReceivedReminder.setDate(mDate); - mReceivedReminder.setTime(mTime); - mReceivedReminder.setRepeat(mRepeat); - mReceivedReminder.setRepeatNo(mRepeatNo); - mReceivedReminder.setRepeatType(mRepeatType); - mReceivedReminder.setActive(mActive); - - // Update reminder - rb.updateReminder(mReceivedReminder); - - // Set up calender for creating the notification - mCalendar.set(Calendar.MONTH, --mMonth); - mCalendar.set(Calendar.YEAR, mYear); - mCalendar.set(Calendar.DAY_OF_MONTH, mDay); - mCalendar.set(Calendar.HOUR_OF_DAY, mHour); - mCalendar.set(Calendar.MINUTE, mMinute); - mCalendar.set(Calendar.SECOND, 0); - - // Cancel existing notification of the reminder by using its ID - mAlarmReceiver.cancelAlarm(getApplicationContext(), mReceivedID); - - // Check repeat type - if (mRepeatType.equals("Minute")) { - mRepeatTime = Integer.parseInt(mRepeatNo) * milMinute; - } else if (mRepeatType.equals("Hour")) { - mRepeatTime = Integer.parseInt(mRepeatNo) * milHour; - } else if (mRepeatType.equals("Day")) { - mRepeatTime = Integer.parseInt(mRepeatNo) * milDay; - } else if (mRepeatType.equals("Week")) { - mRepeatTime = Integer.parseInt(mRepeatNo) * milWeek; - } else if (mRepeatType.equals("Month")) { - mRepeatTime = Integer.parseInt(mRepeatNo) * milMonth; - } + if (afterCurrentTimeDate()) { + mReceivedReminder.setTitle(mTitle); + mReceivedReminder.setDate(mDate); + mReceivedReminder.setTime(mTime); + mReceivedReminder.setRepeat(mRepeat); + mReceivedReminder.setRepeatNo(mRepeatNo); + mReceivedReminder.setRepeatType(mRepeatType); + mReceivedReminder.setActive(mActive); - // Create a new notification - if (mActive.equals("true")) { - if (mRepeat.equals("true")) { - mAlarmReceiver.setRepeatAlarm(getApplicationContext(), mCalendar, mReceivedID, mRepeatTime); - } else if (mRepeat.equals("false")) { - mAlarmReceiver.setAlarm(getApplicationContext(), mCalendar, mReceivedID); + // Update reminder + rb.updateReminder(mReceivedReminder); + + // Set up calender for creating the notification + mCalendar.set(Calendar.MONTH, --mMonth); + mCalendar.set(Calendar.YEAR, mYear); + mCalendar.set(Calendar.DAY_OF_MONTH, mDay); + mCalendar.set(Calendar.HOUR_OF_DAY, mHour); + mCalendar.set(Calendar.MINUTE, mMinute); + mCalendar.set(Calendar.SECOND, 0); + + // Cancel existing notification of the reminder by using its ID + mAlarmReceiver.cancelAlarm(getApplicationContext(), mReceivedID); + + // Check repeat type + if (mRepeatType.equals("Minute")) { + mRepeatTime = Integer.parseInt(mRepeatNo) * milMinute; + } else if (mRepeatType.equals("Hour")) { + mRepeatTime = Integer.parseInt(mRepeatNo) * milHour; + } else if (mRepeatType.equals("Day")) { + mRepeatTime = Integer.parseInt(mRepeatNo) * milDay; + } else if (mRepeatType.equals("Week")) { + mRepeatTime = Integer.parseInt(mRepeatNo) * milWeek; + } else if (mRepeatType.equals("Month")) { + mRepeatTime = Integer.parseInt(mRepeatNo) * milMonth; } - } - // Create toast to confirm update - Toast.makeText(getApplicationContext(), "Edited", - Toast.LENGTH_SHORT).show(); - onBackPressed(); + // Create a new notification + if (mActive.equals("true")) { + if (mRepeat.equals("true")) { + mAlarmReceiver.setRepeatAlarm(getApplicationContext(), mCalendar, mReceivedID, mRepeatTime); + } else if (mRepeat.equals("false")) { + mAlarmReceiver.setAlarm(getApplicationContext(), mCalendar, mReceivedID); + } + } + + // Create toast to confirm update + Toast.makeText(getApplicationContext(), "Edited", + Toast.LENGTH_SHORT).show(); + onBackPressed(); + } else { + // Create toast to notify that Alarm is not a valid future date + Toast.makeText(getApplicationContext(), "Alarm Time and Date Must Be After Current Time and Date", + Toast.LENGTH_LONG).show(); + } } // On pressing the back button