// this method is meant to be called just by AlarmReceiver class! public static void registerNextReminder(int currentVocabularyId, boolean doesTriggersNext) { Vocabulary current = Vocabularies.select(currentVocabularyId); if (current == null) { // exception occurred. return; } current.setLearned(true); Vocabularies.update(current); if (!doesTriggersNext) { return; } ReminderSettings settings = ReminderManager.getReminderSettings(); Vocabulary next = Vocabularies.next(currentVocabularyId); if (next == null) { settings.setStatus(ReminderSettings.Status.FINISHED); settings.setReminder(null); ReminderManager.applyReminderSettings(settings); return; } Reminder reminder = new Reminder(next.getId(), null, next.getVocabulary(), next.getVocabEnglishDef(), true); int todaySentWords = getTodaySentWords(); if (todaySentWords < settings.getWordsPerDay()) { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.MINUTE, settings.getIntervals()); reminder.setTime(calendar.getTime()); settings.setReminder(reminder); addAlarm(reminder); applyReminderSettings(settings); } else { settings.setReminder(reminder); applyReminderSettings(settings); start(false); } }