/*
* Copyright (C) 2015 Federico Iosue (federico.iosue@gmail.com)
*
* This program 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
* (at your option) any later version.
*
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
package it.feio.android.omninotes;
import android.app.DatePickerDialog;
import android.app.NotificationManager;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.text.TextUtils;
import android.widget.DatePicker;
import android.widget.TimePicker;
import it.feio.android.omninotes.async.notes.SaveNoteTask;
import it.feio.android.omninotes.helpers.date.DateHelper;
import it.feio.android.omninotes.models.Note;
import it.feio.android.omninotes.models.listeners.OnReminderPickedListener;
import it.feio.android.omninotes.utils.Constants;
import it.feio.android.omninotes.utils.ReminderHelper;
import it.feio.android.omninotes.utils.date.DateUtils;
import it.feio.android.omninotes.utils.date.ReminderPickers;
import java.util.Arrays;
import java.util.Calendar;
public class SnoozeActivity extends ActionBarActivity implements OnReminderPickedListener, DatePickerDialog.OnDateSetListener, TimePickerDialog.OnTimeSetListener {
private Note note;
private Note[] notes;
private ReminderPickers onDateSetListener;
private ReminderPickers onTimeSetListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getIntent().getParcelableExtra(Constants.INTENT_NOTE) != null) {
note = getIntent().getParcelableExtra(Constants.INTENT_NOTE);
manageNotification(getSharedPreferences(Constants.PREFS_NAME, MODE_MULTI_PROCESS));
} else {
Object[] notesObjs = (Object[]) getIntent().getExtras().get(Constants.INTENT_NOTE);
notes = Arrays.copyOf(notesObjs, notesObjs.length, Note[].class);
postpone(getSharedPreferences(Constants.PREFS_NAME, MODE_MULTI_PROCESS), DateUtils.getNextMinute(), null);
}
}
private void manageNotification(SharedPreferences prefs) {
if (Constants.ACTION_DISMISS.equals(getIntent().getAction())) {
setNextRecurrentReminder(note);
finish();
} else if (Constants.ACTION_SNOOZE.equals(getIntent().getAction())) {
String snoozeDelay = prefs.getString("settings_notification_snooze_delay", Constants.PREF_SNOOZE_DEFAULT);
long newReminder = Calendar.getInstance().getTimeInMillis() + Integer.parseInt(snoozeDelay) * 60 * 1000;
updateNoteReminder(newReminder, note);
finish();
} else if (Constants.ACTION_POSTPONE.equals(getIntent().getAction())) {
postpone(prefs, Long.parseLong(note.getAlarm()), note.getRecurrenceRule());
} else {
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra(Constants.INTENT_KEY, note.get_id());
intent.setAction(Constants.ACTION_NOTIFICATION_CLICK);
startActivity(intent);
finish();
}
removeNotification(note);
}
private void postpone(SharedPreferences prefs, Long alarm, String recurrenceRule) {
int pickerType = prefs.getBoolean("settings_simple_calendar", false) ? ReminderPickers.TYPE_AOSP :
ReminderPickers.TYPE_GOOGLE;
ReminderPickers reminderPicker = new ReminderPickers(this, this, pickerType);
reminderPicker.pick(alarm, recurrenceRule);
onDateSetListener = reminderPicker;
onTimeSetListener = reminderPicker;
}
private void removeNotification(Note note) {
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.cancel(String.valueOf(note.get_id()), 0);
}
@Override
public void onReminderPicked(long reminder) {
if (this.note != null) {
this.note.setAlarm(reminder);
} else {
for (Note note : this.notes) {
note.setAlarm(reminder);
}
}
}
@Override
public void onRecurrenceReminderPicked(String recurrenceRule) {
if (this.note != null) {
this.note.setRecurrenceRule(recurrenceRule);
setNextRecurrentReminder(this.note);
} else {
for (Note note : this.notes) {
note.setRecurrenceRule(recurrenceRule);
setNextRecurrentReminder(note);
}
setResult(RESULT_OK, getIntent());
}
finish();
}
public static void setNextRecurrentReminder(Note note) {
if (!TextUtils.isEmpty(note.getRecurrenceRule())) {
long nextReminder = DateHelper.nextReminderFromRecurrenceRule(Long.parseLong(note.getAlarm()), note
.getRecurrenceRule());
if (nextReminder > 0) {
updateNoteReminder(nextReminder, note, true);
}
} else {
new SaveNoteTask(false).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, note);
}
}
private static void updateNoteReminder(long reminder, Note note) {
updateNoteReminder(reminder, note, false);
}
private static void updateNoteReminder(long reminder, Note noteToUpdate, boolean updateNote) {
if (updateNote) {
noteToUpdate.setAlarm(reminder);
new SaveNoteTask(false).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, noteToUpdate);
} else {
ReminderHelper.addReminder(OmniNotes.getAppContext(), noteToUpdate, reminder);
ReminderHelper.showReminderMessage(noteToUpdate.getAlarm());
}
}
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
onDateSetListener.onDateSet(view, year, monthOfYear, dayOfMonth);
}
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
onTimeSetListener.onTimeSet(view, hourOfDay, minute);
}
}