1 package com.sudogeeks.talking_reminder;
3 import android.app.AlertDialog;
4 import android.app.DatePickerDialog;
5 import android.app.TimePickerDialog;
6 import android.content.DialogInterface;
7 import android.content.Intent;
8 import android.os.Bundle;
9 import android.text.Editable;
10 import android.text.InputType;
11 import android.text.TextWatcher;
12 import android.view.Menu;
13 import android.view.MenuItem;
14 import android.view.View;
15 import android.widget.DatePicker;
16 import android.widget.EditText;
17 import android.widget.Switch;
18 import android.widget.TextView;
19 import android.widget.TimePicker;
20 import android.widget.Toast;
22 import androidx.appcompat.app.AppCompatActivity;
23 import androidx.appcompat.widget.Toolbar;
25 import com.google.android.material.floatingactionbutton.FloatingActionButton;
27 import java.util.Calendar;
35 public static final String EXTRA_REMINDER_ID =
"Reminder_ID";
37 private static final String KEY_TITLE =
"title_key";
38 private static final String KEY_TIME =
"time_key";
39 private static final String KEY_DATE =
"date_key";
40 private static final String KEY_REPEAT =
"repeat_key";
41 private static final String KEY_REPEAT_NO =
"repeat_no_key";
42 private static final String KEY_REPEAT_TYPE =
"repeat_type_key";
43 private static final String KEY_ACTIVE =
"active_key";
45 private static final long milMinute = 60000L;
46 private static final long milHour = 3600000L;
47 private static final long milDay = 86400000L;
48 private static final long milWeek = 604800000L;
49 private static final long milMonth = 2592000000L;
50 private Toolbar mToolbar;
51 private EditText mTitleText;
52 private TextView mDateText, mTimeText, mRepeatText, mRepeatNoText, mRepeatTypeText;
53 private FloatingActionButton mFAB1;
54 private FloatingActionButton mFAB2;
55 private Switch mRepeatSwitch;
56 private String mTitle;
59 private String mRepeatNo;
60 private String mRepeatType;
61 private String mActive;
62 private String mRepeat;
63 private String[] mDateSplit;
64 private String[] mTimeSplit;
65 private int mReceivedID;
66 private int mYear, mMonth, mHour, mMinute, mDay;
67 private long mRepeatTime;
68 private Calendar mCalendar;
78 protected void onCreate(Bundle savedInstanceState) {
79 super.onCreate(savedInstanceState);
80 setContentView(R.layout.activity_add_reminder);
83 mToolbar = findViewById(R.id.toolbar);
84 mTitleText = findViewById(R.id.reminder_title);
85 mDateText = findViewById(R.id.set_date);
86 mTimeText = findViewById(R.id.set_time);
87 mRepeatText = findViewById(R.id.set_repeat);
88 mRepeatNoText = findViewById(R.id.set_repeat_no);
89 mRepeatTypeText = findViewById(R.id.set_repeat_type);
91 mRepeatSwitch = findViewById(R.id.repeat_switch);
94 setSupportActionBar(mToolbar);
95 getSupportActionBar().setTitle(R.string.activity_edit_reminder_label);
96 getSupportActionBar().setDisplayHomeAsUpEnabled(
true);
97 getSupportActionBar().setHomeButtonEnabled(
true);
100 mTitleText.addTextChangedListener(
new TextWatcher() {
102 public void beforeTextChanged(CharSequence s,
int start,
int count,
int after) {
106 public void onTextChanged(CharSequence s,
int start,
int before,
int count) {
107 mTitle = s.toString().trim();
108 mTitleText.setError(
null);
112 public void afterTextChanged(Editable s) {
117 mReceivedID = Integer.parseInt(getIntent().getStringExtra(EXTRA_REMINDER_ID));
135 mTitle = mReceivedReminderDO.getTitle();
136 mDate = mReceivedReminderDO.getDate();
137 mTime = mReceivedReminderDO.getTime();
138 mRepeat = mReceivedReminderDO.getRepeat();
139 mRepeatNo = mReceivedReminderDO.getRepeatNo();
140 mRepeatType = mReceivedReminderDO.getRepeatType();
141 mActive = mReceivedReminderDO.getActive();
144 mTitleText.setText(mTitle);
145 mDateText.setText(mDate);
146 mTimeText.setText(mTime);
147 mRepeatNoText.setText(mRepeatNo);
148 mRepeatTypeText.setText(mRepeatType);
149 mRepeatText.setText(
"Every " + mRepeatNo +
" " + mRepeatType +
"(s)");
152 if (savedInstanceState !=
null) {
153 String savedTitle = savedInstanceState.getString(KEY_TITLE);
154 mTitleText.setText(savedTitle);
157 String savedTime = savedInstanceState.getString(KEY_TIME);
158 mTimeText.setText(savedTime);
161 String savedDate = savedInstanceState.getString(KEY_DATE);
162 mDateText.setText(savedDate);
165 String saveRepeat = savedInstanceState.getString(KEY_REPEAT);
166 mRepeatText.setText(saveRepeat);
167 mRepeat = saveRepeat;
169 String savedRepeatNo = savedInstanceState.getString(KEY_REPEAT_NO);
170 mRepeatNoText.setText(savedRepeatNo);
171 mRepeatNo = savedRepeatNo;
173 String savedRepeatType = savedInstanceState.getString(KEY_REPEAT_TYPE);
174 mRepeatTypeText.setText(savedRepeatType);
175 mRepeatType = savedRepeatType;
177 mActive = savedInstanceState.getString(KEY_ACTIVE);
181 if (mRepeat.equals(
"false")) {
182 mRepeatSwitch.setChecked(
false);
183 mRepeatText.setText(R.string.repeat_off);
185 }
else if (mRepeat.equals(
"true")) {
186 mRepeatSwitch.setChecked(
true);
190 mCalendar = Calendar.getInstance();
193 mDateSplit = mDate.split(
"/");
194 mTimeSplit = mTime.split(
":");
196 mDay = Integer.parseInt(mDateSplit[0]);
197 mMonth = Integer.parseInt(mDateSplit[1]);
198 mYear = Integer.parseInt(mDateSplit[2]);
199 mHour = Integer.parseInt(mTimeSplit[0]);
200 mMinute = Integer.parseInt(mTimeSplit[1]);
205 protected void onSaveInstanceState(Bundle outState) {
206 super.onSaveInstanceState(outState);
208 outState.putCharSequence(KEY_TITLE, mTitleText.getText());
209 outState.putCharSequence(KEY_TIME, mTimeText.getText());
210 outState.putCharSequence(KEY_DATE, mDateText.getText());
211 outState.putCharSequence(KEY_REPEAT, mRepeatText.getText());
212 outState.putCharSequence(KEY_REPEAT_NO, mRepeatNoText.getText());
213 outState.putCharSequence(KEY_REPEAT_TYPE, mRepeatTypeText.getText());
214 outState.putCharSequence(KEY_ACTIVE, mActive);
218 public void onActivityResult(
int requestCode,
int resultCode, Intent data) {
219 super.onActivityResult(requestCode, resultCode, data);
227 Calendar now = Calendar.getInstance();
228 TimePickerDialog timePickerDialog =
new TimePickerDialog(
this,
229 new TimePickerDialog.OnTimeSetListener() {
232 public void onTimeSet(TimePicker view,
int hourOfDay,
237 mTime = hourOfDay +
":" +
"0" + minute;
239 mTime = hourOfDay +
":" + minute;
241 mTimeText.setText(mTime);
243 }, mHour, mMinute,
false);
244 timePickerDialog.show();
253 Calendar now = Calendar.getInstance();
254 DatePickerDialog datePickerDialog =
new DatePickerDialog(
this,
255 new DatePickerDialog.OnDateSetListener() {
258 public void onDateSet(DatePicker view,
int year,
259 int monthOfYear,
int dayOfMonth) {
261 mMonth = monthOfYear + 1;
263 mDate = mDay +
"/" + mMonth +
"/" + mYear;
264 mDateText.setText(mDate);
266 }, mYear, mMonth, mDay);
267 datePickerDialog.show();
277 boolean on = ((Switch) view).isChecked();
280 mRepeatText.setText(
"Every " + mRepeatNo +
" " + mRepeatType +
"(s)");
284 mRepeatText.setText(R.string.repeat_off);
293 final String[] items =
new String[5];
302 AlertDialog.Builder builder =
new AlertDialog.Builder(
this);
303 builder.setTitle(
"Select Type");
304 builder.setItems(items,
new DialogInterface.OnClickListener() {
306 public void onClick(DialogInterface dialog,
int item) {
308 mRepeatType = items[item];
309 mRepeatTypeText.setText(mRepeatType);
310 mRepeatText.setText(
"Every " + mRepeatNo +
" " + mRepeatType +
"(s)");
313 AlertDialog alert = builder.create();
323 AlertDialog.Builder alert =
new AlertDialog.Builder(
this);
324 alert.setTitle(
"Enter Number");
327 final EditText input =
new EditText(
this);
328 input.setInputType(InputType.TYPE_CLASS_NUMBER);
329 alert.setView(input);
330 alert.setPositiveButton(
"Ok",
331 new DialogInterface.OnClickListener() {
332 public void onClick(DialogInterface dialog,
int whichButton) {
334 if (input.getText().toString().length() == 0) {
335 mRepeatNo = Integer.toString(1);
336 mRepeatNoText.setText(mRepeatNo);
337 mRepeatText.setText(
"Every " + mRepeatNo +
" " + mRepeatType +
"(s)");
339 mRepeatNo = input.getText().toString().trim();
340 mRepeatNoText.setText(mRepeatNo);
341 mRepeatText.setText(
"Every " + mRepeatNo +
" " + mRepeatType +
"(s)");
345 alert.setNegativeButton(
"Cancel",
new DialogInterface.OnClickListener() {
346 public void onClick(DialogInterface dialog,
int whichButton) {
359 mReceivedReminderDO.setTitle(mTitle);
360 mReceivedReminderDO.setDate(mDate);
361 mReceivedReminderDO.setTime(mTime);
362 mReceivedReminderDO.setRepeat(mRepeat);
363 mReceivedReminderDO.setRepeatNo(mRepeatNo);
364 mReceivedReminderDO.setRepeatType(mRepeatType);
365 mReceivedReminderDO.setActive(mActive);
371 mCalendar.set(Calendar.MONTH, --mMonth);
372 mCalendar.set(Calendar.YEAR, mYear);
373 mCalendar.set(Calendar.DAY_OF_MONTH, mDay);
374 mCalendar.set(Calendar.HOUR_OF_DAY, mHour);
375 mCalendar.set(Calendar.MINUTE, mMinute);
376 mCalendar.set(Calendar.SECOND, 0);
379 mAlarmReceiver.
cancelAlarm(getApplicationContext(), mReceivedID);
382 if (mRepeatType.equals(
"Minute")) {
383 mRepeatTime = Integer.parseInt(mRepeatNo) * milMinute;
384 }
else if (mRepeatType.equals(
"Hour")) {
385 mRepeatTime = Integer.parseInt(mRepeatNo) * milHour;
386 }
else if (mRepeatType.equals(
"Day")) {
387 mRepeatTime = Integer.parseInt(mRepeatNo) * milDay;
388 }
else if (mRepeatType.equals(
"Week")) {
389 mRepeatTime = Integer.parseInt(mRepeatNo) * milWeek;
390 }
else if (mRepeatType.equals(
"Month")) {
391 mRepeatTime = Integer.parseInt(mRepeatNo) * milMonth;
395 if (mActive.equals(
"true")) {
396 if (mRepeat.equals(
"true")) {
397 mAlarmReceiver.
setRepeatAlarm(getApplicationContext(), mCalendar, mReceivedID, mRepeatTime);
398 }
else if (mRepeat.equals(
"false")) {
399 mAlarmReceiver.
setAlarm(getApplicationContext(), mCalendar, mReceivedID);
404 Toast.makeText(getApplicationContext(),
"Edited",
405 Toast.LENGTH_SHORT).show();
413 super.onBackPressed();
422 getMenuInflater().inflate(R.menu.menu_add_reminder, menu);
432 switch (item.getItemId()) {
436 case android.R.id.home:
442 case R.id.save_reminder:
443 mTitleText.setText(mTitle);
445 if (mTitleText.getText().toString().length() == 0)
446 mTitleText.setError(
"ReminderDO Title cannot be blank!");
455 case R.id.discard_reminder:
456 Toast.makeText(getApplicationContext(),
"Changes Discarded",
457 Toast.LENGTH_SHORT).show();
463 return super.onOptionsItemSelected(item);