private long getYearZeroTimestamp() { final Calendar calendar = Calendar.getInstance(); Calendars.toBeginningOfTheDay(calendar); calendar.set(Calendar.YEAR, 0); calendar.set(Calendar.MONTH, 0); calendar.set(Calendar.DAY_OF_MONTH, 1); return calendar.getTime().getTime(); }
private void showCalReminder(Context context, long eventId, boolean fromPostpone) { ContentResolver cr = context.getContentResolver(); Uri eventUri = Calendars.getCalendarContentUri(Calendars.CALENDAR_CONTENT_EVENTS); if (AndroidUtilities.getSdkVersion() <= 7) return; String[] eventArg = new String[] {Long.toString(eventId)}; Cursor event = cr.query(eventUri, EVENTS_PROJECTION, Calendars.ID_COLUMN_NAME + " = ?", eventArg, null); try { if (event.moveToFirst()) { int dtstartIndex = event.getColumnIndexOrThrow(Calendars.EVENTS_DTSTART_COL); int dtendIndex = event.getColumnIndexOrThrow(Calendars.EVENTS_DTEND_COL); int titleIndex = event.getColumnIndexOrThrow(Calendars.EVENTS_NAME_COL); String title = event.getString(titleIndex); long startTime = event.getLong(dtstartIndex); long endTime = event.getLong(dtendIndex); boolean shouldShowReminder; if (fromPostpone) { long timeAfter = DateUtilities.now() - endTime; shouldShowReminder = (timeAfter > DateUtilities.ONE_MINUTE * 2); } else { long timeUntil = startTime - DateUtilities.now(); shouldShowReminder = (timeUntil > 0 && timeUntil < DateUtilities.ONE_MINUTE * 20); } if (shouldShowReminder) { // Get attendees Cursor attendees = cr.query( Calendars.getCalendarContentUri(Calendars.CALENDAR_CONTENT_ATTENDEES), ATTENDEES_PROJECTION, Calendars.ATTENDEES_EVENT_ID_COL + " = ? ", eventArg, null); try { // Do something with attendees int emailIndex = attendees.getColumnIndexOrThrow(Calendars.ATTENDEES_EMAIL_COL); int nameIndex = attendees.getColumnIndexOrThrow(Calendars.ATTENDEES_NAME_COL); ArrayList<String> names = new ArrayList<String>(); ArrayList<String> emails = new ArrayList<String>(); Account[] accountArray = AccountManager.get(context).getAccounts(); Set<String> phoneAccounts = new HashSet<String>(); for (Account a : accountArray) { phoneAccounts.add(a.name); } String astridUser = ActFmPreferenceService.thisUser().optString("email"); if (!TextUtils.isEmpty(astridUser)) phoneAccounts.add(astridUser); boolean includesMe = false; for (attendees.moveToFirst(); !attendees.isAfterLast(); attendees.moveToNext()) { String name = attendees.getString(nameIndex); String email = attendees.getString(emailIndex); if (!TextUtils.isEmpty(email)) { if (phoneAccounts.contains(email)) { includesMe = true; continue; } if (Constants.DEBUG) Log.w(CalendarAlarmScheduler.TAG, "Attendee: " + name + ", email: " + email); names.add(name); emails.add(email); } } if (emails.size() > 0 && includesMe) { Intent reminderActivity = new Intent(context, CalendarReminderActivity.class); reminderActivity.putStringArrayListExtra(CalendarReminderActivity.TOKEN_NAMES, names); reminderActivity.putStringArrayListExtra( CalendarReminderActivity.TOKEN_EMAILS, emails); reminderActivity.putExtra(CalendarReminderActivity.TOKEN_EVENT_ID, eventId); reminderActivity.putExtra(CalendarReminderActivity.TOKEN_EVENT_NAME, title); reminderActivity.putExtra(CalendarReminderActivity.TOKEN_EVENT_START_TIME, startTime); reminderActivity.putExtra(CalendarReminderActivity.TOKEN_EVENT_END_TIME, endTime); reminderActivity.putExtra(CalendarReminderActivity.TOKEN_FROM_POSTPONE, fromPostpone); reminderActivity.setFlags( Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); context.startActivity(reminderActivity); } } finally { attendees.close(); } } } } finally { event.close(); } }