团队冲刺第二阶段08
今天对闹钟的提醒功能等进行了完善,继续解决之前的问题:
public class SnoozeActivity extends AppCompatActivity implements OnReminderPickedListener { private Note note; private Note[] notes; public static void setNextRecurrentReminder(Note note) { if (!TextUtils.isEmpty(note.getRecurrenceRule())) { long nextReminder = RecurrenceHelper.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 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getIntent().getParcelableExtra(INTENT_NOTE) != null) { note = getIntent().getParcelableExtra(INTENT_NOTE); manageNotification(getSharedPreferences(PREFS_NAME, MODE_MULTI_PROCESS)); } else { Object[] notesObjs = (Object[]) getIntent().getExtras().get(INTENT_NOTE); notes = Arrays.copyOf(notesObjs, notesObjs.length, Note[].class); postpone(getSharedPreferences(PREFS_NAME, MODE_MULTI_PROCESS), DateUtils.getNextMinute(), null); } } private void manageNotification(SharedPreferences prefs) { if (ACTION_DISMISS.equals(getIntent().getAction())) { setNextRecurrentReminder(note); finish(); } else if (ACTION_SNOOZE.equals(getIntent().getAction())) { String snoozeDelay = prefs.getString("settings_notification_snooze_delay", PREF_SNOOZE_DEFAULT); long newReminder = Calendar.getInstance().getTimeInMillis() + Integer.parseInt(snoozeDelay) * 60 * 1000; updateNoteReminder(newReminder, note); finish(); } else if (ACTION_POSTPONE.equals(getIntent().getAction())) { postpone(prefs, Long.parseLong(note.getAlarm()), note.getRecurrenceRule()); } else { Intent intent = new Intent(this, MainActivity.class); intent.putExtra(INTENT_KEY, note.get_id()); intent.setAction(ACTION_NOTIFICATION_CLICK); startActivity(intent); finish(); } removeNotification(note); } private void postpone(SharedPreferences prefs, Long alarm, String recurrenceRule) { ReminderPickers reminderPicker = new ReminderPickers(this, this); reminderPicker.pick(alarm, recurrenceRule); } 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 (note != null) { note.setAlarm(reminder); } else { for (Note currentNote : notes) { currentNote.setAlarm(reminder); } } } @Override public void onRecurrenceReminderPicked(String recurrenceRule) { if (note != null) { note.setRecurrenceRule(recurrenceRule); setNextRecurrentReminder(note); } else { for (Note processedNotes : notes) { processedNotes.setRecurrenceRule(recurrenceRule); setNextRecurrentReminder(processedNotes); } setResult(RESULT_OK, getIntent()); } finish(); } }