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();
 }
예제 #2
0
  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();
    }
  }