Java 类android.provider.CalendarContract.Instances 实例源码

项目:CalendarMute    文件:CalendarProvider.java   
/**
 * Make a WHERE clause to filter selected calendars
 * @return generated WHERE clause, or en empty string if there is no calendar selected
 */
private String getEventCalendarIdsSelectString() {
    LinkedHashMap<Long, Boolean> checkedCalendars = PreferencesManager.getCheckedCalendars(context);

    StringBuilder builder = new StringBuilder();
    boolean first = true;
    for(long idCalendar : checkedCalendars.keySet()) {
        if(first)
            first = false;
        else
            builder.append(" OR ");

        builder.append("(").append(Instances.CALENDAR_ID).append("=").append(idCalendar).append(")");
    }
    return builder.toString();
}
项目:agendawatchfaceAndroid    文件:AgendaCalendarService.java   
protected Uri getContentUri(int numberOfDaysFromNow) {
    Calendar beginTime = Calendar.getInstance();
    beginTime.add(Calendar.DAY_OF_MONTH, -1);
    beginTime.set(Calendar.HOUR_OF_DAY, 23);
    beginTime.set(Calendar.MINUTE, 59);
    long startMillis = beginTime.getTimeInMillis();

    Calendar endTime = Calendar.getInstance();
    endTime.set(Calendar.HOUR_OF_DAY, 23);
    endTime.set(Calendar.MINUTE, 59);
    endTime.add(Calendar.DAY_OF_MONTH, numberOfDaysFromNow-1);
    long endMillis = endTime.getTimeInMillis();

    // Construct the query with the desired date range.
    Uri.Builder builder = Instances.CONTENT_URI.buildUpon();
    ContentUris.appendId(builder, startMillis);
    ContentUris.appendId(builder, endMillis);

    return builder.build();
}
项目:Calendar_lunar    文件:Event.java   
/**
 * Performs a query to return all visible instances in the given range
 * that match the given selection. This is a blocking function and
 * should not be done on the UI thread. This will cause an expansion of
 * recurring events to fill this time range if they are not already
 * expanded and will slow down for larger time ranges with many
 * recurring events.
 *
 * @param cr The ContentResolver to use for the query
 * @param projection The columns to return
 * @param begin The start of the time range to query in UTC millis since
 *            epoch
 * @param end The end of the time range to query in UTC millis since
 *            epoch
 * @param selection Filter on the query as an SQL WHERE statement
 * @param selectionArgs Args to replace any '?'s in the selection
 * @param orderBy How to order the rows as an SQL ORDER BY statement
 * @return A Cursor of instances matching the selection
 */
private static final Cursor instancesQuery(ContentResolver cr, String[] projection,
        int startDay, int endDay, String selection, String[] selectionArgs, String orderBy) {
    String WHERE_CALENDARS_SELECTED = Calendars.VISIBLE + "=?";
    String[] WHERE_CALENDARS_ARGS = {"1"};
    String DEFAULT_SORT_ORDER = "begin ASC";

    Uri.Builder builder = Instances.CONTENT_BY_DAY_URI.buildUpon();
    ContentUris.appendId(builder, startDay);
    ContentUris.appendId(builder, endDay);
    if (TextUtils.isEmpty(selection)) {
        selection = WHERE_CALENDARS_SELECTED;
        selectionArgs = WHERE_CALENDARS_ARGS;
    } else {
        selection = "(" + selection + ") AND " + WHERE_CALENDARS_SELECTED;
        if (selectionArgs != null && selectionArgs.length > 0) {
            selectionArgs = Arrays.copyOf(selectionArgs, selectionArgs.length + 1);
            selectionArgs[selectionArgs.length - 1] = WHERE_CALENDARS_ARGS[0];
        } else {
            selectionArgs = WHERE_CALENDARS_ARGS;
        }
    }
    return cr.query(builder.build(), projection, selection, selectionArgs,
            orderBy == null ? DEFAULT_SORT_ORDER : orderBy);
}
项目:Calendar_lunar    文件:MonthByWeekFragment.java   
/**
 * Updates the uri used by the loader according to the current position of
 * the listview.
 *
 * @return The new Uri to use
 */
private Uri updateUri() {
    SimpleWeekView child = (SimpleWeekView) mListView.getChildAt(0);
    if (child != null) {
        int julianDay = child.getFirstJulianDay();
        mFirstLoadedJulianDay = julianDay;
    }
    // -1 to ensure we get all day events from any time zone
    mTempTime.setJulianDay(mFirstLoadedJulianDay - 1);
    long start = mTempTime.toMillis(true);
    mLastLoadedJulianDay = mFirstLoadedJulianDay + (mNumWeeks + 2 * WEEKS_BUFFER) * 7;
    // +1 to ensure we get all day events from any time zone
    mTempTime.setJulianDay(mLastLoadedJulianDay + 1);
    long end = mTempTime.toMillis(true);

    // Create a new uri with the updated times
    Uri.Builder builder = Instances.CONTENT_URI.buildUpon();
    ContentUris.appendId(builder, start);
    ContentUris.appendId(builder, end);
    return builder.build();
}
项目:siiMobilityAppKit    文件:CalendarProviderAccessor.java   
@Override
 protected EnumMap<KeyIndex, String> initContentProviderKeys() {
   EnumMap<KeyIndex, String> keys = new EnumMap<KeyIndex, String>(
           KeyIndex.class);
   keys.put(KeyIndex.CALENDARS_ID, Calendars._ID);
   keys.put(KeyIndex.CALENDARS_NAME, Calendars.NAME);
keys.put(KeyIndex.CALENDARS_DISPLAY_NAME, Calendars.CALENDAR_DISPLAY_NAME);
   keys.put(KeyIndex.CALENDARS_VISIBLE, Calendars.VISIBLE);
   keys.put(KeyIndex.EVENTS_ID, Events._ID);
   keys.put(KeyIndex.EVENTS_CALENDAR_ID, Events.CALENDAR_ID);
   keys.put(KeyIndex.EVENTS_DESCRIPTION, Events.DESCRIPTION);
   keys.put(KeyIndex.EVENTS_LOCATION, Events.EVENT_LOCATION);
   keys.put(KeyIndex.EVENTS_SUMMARY, Events.TITLE);
   keys.put(KeyIndex.EVENTS_START, Events.DTSTART);
   keys.put(KeyIndex.EVENTS_END, Events.DTEND);
   keys.put(KeyIndex.EVENTS_RRULE, Events.RRULE);
   keys.put(KeyIndex.EVENTS_ALL_DAY, Events.ALL_DAY);
   keys.put(KeyIndex.INSTANCES_ID, Instances._ID);
   keys.put(KeyIndex.INSTANCES_EVENT_ID, Instances.EVENT_ID);
   keys.put(KeyIndex.INSTANCES_BEGIN, Instances.BEGIN);
   keys.put(KeyIndex.INSTANCES_END, Instances.END);
   keys.put(KeyIndex.ATTENDEES_ID, Attendees._ID);
   keys.put(KeyIndex.ATTENDEES_EVENT_ID, Attendees.EVENT_ID);
   keys.put(KeyIndex.ATTENDEES_NAME, Attendees.ATTENDEE_NAME);
   keys.put(KeyIndex.ATTENDEES_EMAIL, Attendees.ATTENDEE_EMAIL);
   keys.put(KeyIndex.ATTENDEES_STATUS, Attendees.ATTENDEE_STATUS);
   return keys;
 }
项目:siiMobilityAppKit    文件:CalendarProviderAccessor.java   
@Override
protected Cursor queryEventInstances(long startFrom, long startTo,
                                     String[] projection, String selection, String[] selectionArgs,
                                     String sortOrder) {
  Uri.Builder builder = Instances.CONTENT_URI.buildUpon();
  ContentUris.appendId(builder, startFrom);
  ContentUris.appendId(builder, startTo);
  return this.cordova.getActivity().getContentResolver().query(
          builder.build(), projection, selection, selectionArgs, sortOrder);
}
项目:siiMobilityAppKit    文件:CalendarProviderAccessor.java   
@Override
 protected EnumMap<KeyIndex, String> initContentProviderKeys() {
   EnumMap<KeyIndex, String> keys = new EnumMap<KeyIndex, String>(
           KeyIndex.class);
   keys.put(KeyIndex.CALENDARS_ID, Calendars._ID);
   keys.put(KeyIndex.CALENDARS_NAME, Calendars.NAME);
keys.put(KeyIndex.CALENDARS_DISPLAY_NAME, Calendars.CALENDAR_DISPLAY_NAME);
   keys.put(KeyIndex.CALENDARS_VISIBLE, Calendars.VISIBLE);
   keys.put(KeyIndex.EVENTS_ID, Events._ID);
   keys.put(KeyIndex.EVENTS_CALENDAR_ID, Events.CALENDAR_ID);
   keys.put(KeyIndex.EVENTS_DESCRIPTION, Events.DESCRIPTION);
   keys.put(KeyIndex.EVENTS_LOCATION, Events.EVENT_LOCATION);
   keys.put(KeyIndex.EVENTS_SUMMARY, Events.TITLE);
   keys.put(KeyIndex.EVENTS_START, Events.DTSTART);
   keys.put(KeyIndex.EVENTS_END, Events.DTEND);
   keys.put(KeyIndex.EVENTS_RRULE, Events.RRULE);
   keys.put(KeyIndex.EVENTS_ALL_DAY, Events.ALL_DAY);
   keys.put(KeyIndex.INSTANCES_ID, Instances._ID);
   keys.put(KeyIndex.INSTANCES_EVENT_ID, Instances.EVENT_ID);
   keys.put(KeyIndex.INSTANCES_BEGIN, Instances.BEGIN);
   keys.put(KeyIndex.INSTANCES_END, Instances.END);
   keys.put(KeyIndex.ATTENDEES_ID, Attendees._ID);
   keys.put(KeyIndex.ATTENDEES_EVENT_ID, Attendees.EVENT_ID);
   keys.put(KeyIndex.ATTENDEES_NAME, Attendees.ATTENDEE_NAME);
   keys.put(KeyIndex.ATTENDEES_EMAIL, Attendees.ATTENDEE_EMAIL);
   keys.put(KeyIndex.ATTENDEES_STATUS, Attendees.ATTENDEE_STATUS);
   return keys;
 }
项目:siiMobilityAppKit    文件:CalendarProviderAccessor.java   
@Override
protected Cursor queryEventInstances(long startFrom, long startTo,
                                     String[] projection, String selection, String[] selectionArgs,
                                     String sortOrder) {
  Uri.Builder builder = Instances.CONTENT_URI.buildUpon();
  ContentUris.appendId(builder, startFrom);
  ContentUris.appendId(builder, startTo);
  return this.cordova.getActivity().getContentResolver().query(
          builder.build(), projection, selection, selectionArgs, sortOrder);
}
项目:medicineReminder    文件:CalendarProviderAccessor.java   
@Override
protected EnumMap<KeyIndex, String> initContentProviderKeys() {
  EnumMap<KeyIndex, String> keys = new EnumMap<KeyIndex, String>(
      KeyIndex.class);
  keys.put(KeyIndex.CALENDARS_ID, Calendars._ID);
  keys.put(KeyIndex.CALENDARS_NAME, Calendars.NAME);
  keys.put(KeyIndex.CALENDARS_VISIBLE, Calendars.VISIBLE);
  keys.put(KeyIndex.EVENTS_ID, Events._ID);
  keys.put(KeyIndex.EVENTS_CALENDAR_ID, Events.CALENDAR_ID);
  keys.put(KeyIndex.EVENTS_DESCRIPTION, Events.DESCRIPTION);
  keys.put(KeyIndex.EVENTS_LOCATION, Events.EVENT_LOCATION);
  keys.put(KeyIndex.EVENTS_SUMMARY, Events.TITLE);
  keys.put(KeyIndex.EVENTS_START, Events.DTSTART);
  keys.put(KeyIndex.EVENTS_END, Events.DTEND);
  keys.put(KeyIndex.EVENTS_RRULE, Events.RRULE);
  keys.put(KeyIndex.EVENTS_ALL_DAY, Events.ALL_DAY);
  keys.put(KeyIndex.INSTANCES_ID, Instances._ID);
  keys.put(KeyIndex.INSTANCES_EVENT_ID, Instances.EVENT_ID);
  keys.put(KeyIndex.INSTANCES_BEGIN, Instances.BEGIN);
  keys.put(KeyIndex.INSTANCES_END, Instances.END);
  keys.put(KeyIndex.ATTENDEES_ID, Attendees._ID);
  keys.put(KeyIndex.ATTENDEES_EVENT_ID, Attendees.EVENT_ID);
  keys.put(KeyIndex.ATTENDEES_NAME, Attendees.ATTENDEE_NAME);
  keys.put(KeyIndex.ATTENDEES_EMAIL, Attendees.ATTENDEE_EMAIL);
  keys.put(KeyIndex.ATTENDEES_STATUS, Attendees.ATTENDEE_STATUS);
  return keys;
}
项目:medicineReminder    文件:CalendarProviderAccessor.java   
@Override
protected Cursor queryEventInstances(long startFrom, long startTo,
                                     String[] projection, String selection, String[] selectionArgs,
                                     String sortOrder) {
  Uri.Builder builder = Instances.CONTENT_URI.buildUpon();
  ContentUris.appendId(builder, startFrom);
  ContentUris.appendId(builder, startTo);
  return this.cordova.getActivity().getContentResolver().query(
      builder.build(), projection, selection, selectionArgs, sortOrder);
}
项目:medicineReminder    文件:CalendarProviderAccessor.java   
@Override
protected EnumMap<KeyIndex, String> initContentProviderKeys() {
  EnumMap<KeyIndex, String> keys = new EnumMap<KeyIndex, String>(
      KeyIndex.class);
  keys.put(KeyIndex.CALENDARS_ID, Calendars._ID);
  keys.put(KeyIndex.CALENDARS_NAME, Calendars.NAME);
  keys.put(KeyIndex.CALENDARS_VISIBLE, Calendars.VISIBLE);
  keys.put(KeyIndex.EVENTS_ID, Events._ID);
  keys.put(KeyIndex.EVENTS_CALENDAR_ID, Events.CALENDAR_ID);
  keys.put(KeyIndex.EVENTS_DESCRIPTION, Events.DESCRIPTION);
  keys.put(KeyIndex.EVENTS_LOCATION, Events.EVENT_LOCATION);
  keys.put(KeyIndex.EVENTS_SUMMARY, Events.TITLE);
  keys.put(KeyIndex.EVENTS_START, Events.DTSTART);
  keys.put(KeyIndex.EVENTS_END, Events.DTEND);
  keys.put(KeyIndex.EVENTS_RRULE, Events.RRULE);
  keys.put(KeyIndex.EVENTS_ALL_DAY, Events.ALL_DAY);
  keys.put(KeyIndex.INSTANCES_ID, Instances._ID);
  keys.put(KeyIndex.INSTANCES_EVENT_ID, Instances.EVENT_ID);
  keys.put(KeyIndex.INSTANCES_BEGIN, Instances.BEGIN);
  keys.put(KeyIndex.INSTANCES_END, Instances.END);
  keys.put(KeyIndex.ATTENDEES_ID, Attendees._ID);
  keys.put(KeyIndex.ATTENDEES_EVENT_ID, Attendees.EVENT_ID);
  keys.put(KeyIndex.ATTENDEES_NAME, Attendees.ATTENDEE_NAME);
  keys.put(KeyIndex.ATTENDEES_EMAIL, Attendees.ATTENDEE_EMAIL);
  keys.put(KeyIndex.ATTENDEES_STATUS, Attendees.ATTENDEE_STATUS);
  return keys;
}
项目:medicineReminder    文件:CalendarProviderAccessor.java   
@Override
protected Cursor queryEventInstances(long startFrom, long startTo,
                                     String[] projection, String selection, String[] selectionArgs,
                                     String sortOrder) {
  Uri.Builder builder = Instances.CONTENT_URI.buildUpon();
  ContentUris.appendId(builder, startFrom);
  ContentUris.appendId(builder, startTo);
  return this.cordova.getActivity().getContentResolver().query(
      builder.build(), projection, selection, selectionArgs, sortOrder);
}
项目:gadgetbridge_artikcloud    文件:CalendarEvents.java   
private boolean fetchSystemEvents(Context mContext) {

        Calendar cal = GregorianCalendar.getInstance();
        Long dtStart = cal.getTime().getTime();
        cal.add(Calendar.DATE, lookahead_days);
        Long dtEnd = cal.getTime().getTime();

        Uri.Builder eventsUriBuilder = CalendarContract.Instances.CONTENT_URI.buildUpon();
        ContentUris.appendId(eventsUriBuilder, dtStart);
        ContentUris.appendId(eventsUriBuilder, dtEnd);
        Uri eventsUri = eventsUriBuilder.build();

        try (Cursor evtCursor = mContext.getContentResolver().query(eventsUri, EVENT_INSTANCE_PROJECTION, null, null, CalendarContract.Instances.BEGIN + " ASC")) {
            if (evtCursor == null || evtCursor.getCount() == 0) {
                return false;
            }
            while (evtCursor.moveToNext()) {
                CalendarEvent calEvent = new CalendarEvent(
                        evtCursor.getLong(1),
                        evtCursor.getLong(2),
                        evtCursor.getLong(3),
                        evtCursor.getString(4),
                        evtCursor.getString(5),
                        evtCursor.getString(6),
                        evtCursor.getString(7)
                );
                calendarEventList.add(calEvent);
            }
            return true;
        }
    }
项目:FHWS-MobileApplikationen    文件:MainActivity.java   
private void listNextCalenderEvents( )
{
    ContentResolver cr = this.getContentResolver( );
    Cursor cursor = null;

    // cursor = cr.query( ContactsContract.Contacts.CONTENT_URI, new String[ ] { PhoneLookup.DISPLAY_NAME,
    // PhoneLookup.PHOTO_URI }, null, null,
    // null );

    long begin = System.currentTimeMillis( ); // starting time in milliseconds
    long end = begin + ( 1000 * 60 * 60 * 2 ); // ending time in milliseconds
    String[ ] proj =
        new String[ ] {
            Instances._ID,
            Instances.BEGIN,
            Instances.END,
            Instances.EVENT_ID };

    cursor = Instances.query( getContentResolver( ), proj, begin, end );

    if ( cursor == null )
    {
        Log.d( "CONTACTS", "keine Kontakte gefunden" );
    }
    else
    {
        cursor.moveToFirst( );
        while ( cursor.isAfterLast( ) == false )
        {
            Log.d( "CONTACTS", cursor.getString( 0 ) + " " + cursor.getString( 1 ) + " " + cursor.getString( 2 ) +
                " " + cursor.getString( 3 ) );
            printEventDetails( Long.parseLong( cursor.getString( 3 ) ) );
            cursor.moveToNext( );
        }
    }
    cursor.close( );
}
项目:CalendarTrigger    文件:CalendarProvider.java   
private Uri getInstancesQueryUri() {
    // Event search window : from one month before to one month after, to be sure
    GregorianCalendar dateDebut = new GregorianCalendar();
    dateDebut.add(GregorianCalendar.MONTH, -1);
    GregorianCalendar dateFin = new GregorianCalendar();
    dateFin.add(GregorianCalendar.MONTH, 1);

    // search URI (contains the search window)
    Uri.Builder builder = Instances.CONTENT_URI.buildUpon();
    ContentUris.appendId(builder, dateDebut.getTimeInMillis());
    ContentUris.appendId(builder, dateFin.getTimeInMillis());

    return builder.build();
}
项目:CalendarMute    文件:CalendarProvider.java   
private Uri getInstancesQueryUri() {
    // Event search window : from one month before to one month after, to be sure
    GregorianCalendar dateDebut = new GregorianCalendar();
    dateDebut.add(GregorianCalendar.MONTH, -1);
    GregorianCalendar dateFin = new GregorianCalendar();
    dateFin.add(GregorianCalendar.MONTH, 1);

    // search URI (contains the search window)
    Uri.Builder builder = Instances.CONTENT_URI.buildUpon();
    ContentUris.appendId(builder, dateDebut.getTimeInMillis());
    ContentUris.appendId(builder, dateFin.getTimeInMillis());

    return builder.build();
}
项目:CalendarMute    文件:CalendarProvider.java   
/**
 * Get the next event in the calendars set in the preferences
 * @param currentTime Time to use to search for events
 * @param early Delay to extend event start time before the real start time
 * @return The first event found, or null if there is none
 */
public CalendarEvent getNextEvent(long currentTime, long early, boolean onlyBusy) {
    ContentResolver cr = context.getContentResolver();

    // Make the calendar ID selection string
    String calIdsSelect = getEventCalendarIdsSelectString();

    if(calIdsSelect.equals(""))
        return null;

    // Selection is inclusive on event start time.
    // This way we are consistent wih getCurrentEvent
    String selection = "(" + calIdsSelect + ") AND "
            + Instances.BEGIN + " >= ? AND " + Instances.ALL_DAY + " = 0";

    if(onlyBusy) {
        selection += " AND " + Instances.AVAILABILITY + " = " + Instances.AVAILABILITY_BUSY;
    }

    // Substract early from Instances.BEGIN -> same as adding early to currentTime when comparing
    String strCurrentTime = String.valueOf(currentTime + early);
    String[] selectionArgs =  new String[] { strCurrentTime };

    Cursor cur = cr.query(getInstancesQueryUri(), INSTANCE_PROJECTION, selection, selectionArgs, Instances.BEGIN); // Sort by start time to get the first event

    CalendarEvent res;
    if(cur != null && cur.moveToNext())
        res = new CalendarEvent(cur.getString(INSTANCE_PROJECTION_TITLE_INDEX), cur.getLong(INSTANCE_PROJECTION_BEGIN_INDEX), cur.getLong(INSTANCE_PROJECTION_END_INDEX));
    else {
        res = null;
    }

    if(cur != null) {
        cur.close();
    }
    return res;
}
项目:CalendarProvider-Lib    文件:EventInfo.java   
/**
 * Commodity method to generate the correct filter string and arguments list according to the owners and visibility defined
 *
 * @param idCalendars          calendar IDs to filter
 * @param calendarDisplayNames calendar display name to filter
 * @return a {@code Pair} containing as first field the selection string and as second field the selection arguments
 */
private static Pair<String, String[]> filterOnCalendarIDAndCalendarDisplayName(Collection<Integer> idCalendars, Collection<String> calendarDisplayNames) {
    String selection = null;
    String selectionArgs[] = null;

    if (idCalendars != null && idCalendars.size() == 0) {
        idCalendars = null;
    }
    if (calendarDisplayNames != null && calendarDisplayNames.size() == 0) {
        calendarDisplayNames = null;
    }

    if (idCalendars != null || calendarDisplayNames != null) {
        // selection will look like
        // calendar_id=? OR calendar_id=? OR calendar_displayName=? OR calendar_displayName=?
        StringBuilder builder = new StringBuilder();
        List<String> arguments = new ArrayList<>();
        if (idCalendars != null) {
            for (Integer idCalendar : idCalendars) {
                builder.append(Instances.CALENDAR_ID).append("=? OR ");
                arguments.add(idCalendar + "");
            }
            builder.setLength(builder.length() - 4);
        }
        if (calendarDisplayNames != null) {
            for (String calendarDisplayName : calendarDisplayNames) {
                builder.append(Instances.CALENDAR_DISPLAY_NAME).append("=? OR ");
                arguments.add(calendarDisplayName);
            }
            builder.setLength(builder.length() - 4);
        }
        selection = builder.toString();
        selectionArgs = arguments.toArray(new String[arguments.size()]);
    }
    return Pair.create(selection, selectionArgs);
}
项目:silent-meeting    文件:AlarmService.java   
private PendingIntent getPendingIntent(Instance instance) {
    Intent muteIntent = new Intent(getApplicationContext(), MutePhoneBroadcastReceiver.class);
    muteIntent.setAction(Actions.MUTE);
    muteIntent.putExtra(Instances.DTEND, instance.getEndDate());
    muteIntent.putExtra(Instances._ID, instance.getId());

    return PendingIntent.getBroadcast(getApplicationContext(), instance.getId(), muteIntent, PendingIntent.FLAG_CANCEL_CURRENT);
}
项目:Calendar_lunar    文件:AgendaWindowAdapter.java   
private String buildQuerySelection() {
    // Respect the preference to show/hide declined events

    if (mHideDeclined) {
        return Calendars.VISIBLE + "=1 AND "
                + Instances.SELF_ATTENDEE_STATUS + "!="
                + Attendees.ATTENDEE_STATUS_DECLINED;
    } else {
        return Calendars.VISIBLE + "=1";
    }
}
项目:Calendar_lunar    文件:AgendaWindowAdapter.java   
private Uri buildQueryUri(int start, int end, String searchQuery) {
    Uri rootUri = searchQuery == null ?
            Instances.CONTENT_BY_DAY_URI :
            Instances.CONTENT_SEARCH_BY_DAY_URI;
    Uri.Builder builder = rootUri.buildUpon();
    ContentUris.appendId(builder, start);
    ContentUris.appendId(builder, end);
    if (searchQuery != null) {
        builder.appendPath(searchQuery);
    }
    return builder.build();
}
项目:Calendar_lunar    文件:MonthByWeekFragment.java   
protected String updateWhere() {
    // TODO fix selection/selection args after b/3206641 is fixed
    String where = WHERE_CALENDARS_VISIBLE;
    if (mHideDeclined || !mShowDetailsInMonth) {
        where += " AND " + Instances.SELF_ATTENDEE_STATUS + "!="
                + Attendees.ATTENDEE_STATUS_DECLINED;
    }
    return where;
}
项目:Calendar_lunar    文件:CalendarAppWidgetService.java   
/**
 * @return The uri for the loader
 */
private Uri createLoaderUri() {
    long now = System.currentTimeMillis();
    // Add a day on either side to catch all-day events
    long begin = now - DateUtils.DAY_IN_MILLIS;
    long end = now + SEARCH_DURATION + DateUtils.DAY_IN_MILLIS;

    Uri uri = Uri.withAppendedPath(Instances.CONTENT_URI, Long.toString(begin) + "/" + end);
    return uri;
}
项目:CalendarTrigger    文件:CalendarProvider.java   
public startAndEnd nextActionTimes(
    Context context, long currentTime, int classNum) {
    int before = PrefsManager.getBeforeMinutes(context, classNum) * 60000;
    int after = PrefsManager.getAfterMinutes(context, classNum) * 60000;
    startAndEnd result = new startAndEnd();
    long triggerEnd =  PrefsManager.getLastTriggerEnd(context, classNum);
    if (triggerEnd > currentTime)
    {
        result.startTime = currentTime;
        result.endTime = triggerEnd;
        result.startEventName = "<immediate>";
        result.endEventName = "<immediate>";
    }
    else
    {
        result.startTime = Long.MAX_VALUE;
        result.endTime = currentTime;
        result.startEventName = "";
        result.endEventName = "";
    }
    ContentResolver cr = context.getContentResolver();
    StringBuilder selClause = selection(context, classNum);
    selClause.append(" AND ( ").append(Instances.END)
             .append(" > ? )");
    String[] selectionArgs = new String[] {
        String.valueOf(currentTime - after)};
    // Do query sorted by start time
    Cursor cur = cr.query(getInstancesQueryUri(), INSTANCE_PROJECTION,
                          selClause.toString(), selectionArgs,
                          Instances.BEGIN);
    while (cur.moveToNext())
    {
        long start = cur.getLong(INSTANCE_PROJECTION_BEGIN_INDEX) - before;
        long end = cur.getLong(INSTANCE_PROJECTION_END_INDEX) + after;
        if (start < result.startTime)
        {
            // This can only happen once, because we sort the
            // query on ascending start time
            result.startTime = start;
            if (end > result.endTime)
            {
                result.endTime = end;
                result.startEventName =
                    cur.getString(INSTANCE_PROJECTION_TITLE_INDEX);
                result.endEventName = result.startEventName;
            }
        }
        else if (start <= result.endTime)
        {
            // This event starts or started before our current end
            if (end > result.endTime)
            {
                // extend end time for overlapping event
                result.endTime = end;
                result.endEventName =
                    cur.getString(INSTANCE_PROJECTION_TITLE_INDEX);
            }
        }
        if (start > currentTime)
        {
            // This event starts in the future
            // We need not consider any later ones, because we will
            // set an alarm for its start time or earlier and look again
            break;
        }
    }
    cur.close();
    return result;
}
项目:CalendarMute    文件:CalendarProvider.java   
/**
 * Get the current event in one of the calendars set in the preferences
 * @param currentTime Time at which the event should be searched
 * @param delay Delay that extends the search interval towards the end
 * @param early Delay that extends the search interval towards the beginning
 * @return The first event found, or null if there is none
 */
public CalendarEvent getCurrentEvent(long currentTime, long delay, long early, boolean onlyBusy) {
    ContentResolver cr = context.getContentResolver();

    // Make the calendar ID selection string
    String calIdsSelect = getEventCalendarIdsSelectString();

    if(calIdsSelect.equals("")) {
           return null;
       }

       int permissionCheck = ContextCompat.checkSelfPermission(context, Manifest.permission.READ_CALENDAR);
       if(permissionCheck != PackageManager.PERMISSION_GRANTED) {
           return null;
       }

    // Selection must be inclusive on the start time, and eclusive on the end time.
    // This way when setting an alarm at the end of the event, this moment is considered outside of the event
    String selection = "(" + calIdsSelect + ") AND "
            + Instances.BEGIN + " <= ? AND "
            + Instances.END + " > ? AND " + Instances.ALL_DAY + " = 0";

    if(onlyBusy) {
        selection += " AND " + Instances.AVAILABILITY + " = " + Instances.AVAILABILITY_BUSY;
    }

    String strCurrentTimeEarly = String.valueOf(currentTime + early);
    String strCurrentTimeDelay = String.valueOf(currentTime - delay);
    String[] selectionArgs =  new String[] { strCurrentTimeEarly, strCurrentTimeDelay };

    Cursor cur = cr.query(getInstancesQueryUri(), INSTANCE_PROJECTION, selection, selectionArgs, Instances.END); // Take the event that ends first

    CalendarEvent res;
    if(cur != null && cur.moveToNext()) {
        res = new CalendarEvent(cur.getString(INSTANCE_PROJECTION_TITLE_INDEX), cur.getLong(INSTANCE_PROJECTION_BEGIN_INDEX), cur.getLong(INSTANCE_PROJECTION_END_INDEX));
    }
    else {
        res = null;
    }

    if(cur != null) {
        cur.close();
    }
    return res;
}
项目:mobilesensor    文件:Plugin.java   
@Override
public void run() {
    clearAllEvents();
    cal = new GregorianCalendar();
    Calendar newCal = new GregorianCalendar();
    //Reset at 12:30am
    int hourOfDay = cal.get(Calendar.HOUR_OF_DAY);
    int minOfDay = cal.get(Calendar.MINUTE);
    if(hourOfDay == 0 && minOfDay < 30){
        newCal.set(Calendar.HOUR_OF_DAY, 0);
        newCal.set(Calendar.MINUTE, 30);
        newCal.set(Calendar.SECOND, 0); 
    } else{
        newCal.add(Calendar.DAY_OF_WEEK, 1); //recalculates calendar if at the end
        newCal.set(Calendar.HOUR_OF_DAY, 0);
        newCal.set(Calendar.MINUTE, 30);
        newCal.set(Calendar.SECOND, 0);
    }
    String[] mSelectionArgs = new String[3];
    String mSelection = "DELETED = ? AND hasAlarm = ? AND allDay = ?";
    long start = cal.getTimeInMillis(); //current time
    long stop = newCal.getTimeInMillis(); //end of day
    mSelectionArgs[0] = "0"; 
    mSelectionArgs[1] = "1"; 
    mSelectionArgs[2] = "0"; 
    Cursor calendar = getContentResolver().query(Events.CONTENT_URI, null, mSelection, mSelectionArgs, Events.DTSTART+" ASC");
    //Go through and grab all events with reminders with our time constraint
    if(calendar != null && calendar.moveToFirst()){
        do{
            String repeating = calendar.getString(calendar.getColumnIndex("rrule"));
            long begin = calendar.getLong(calendar.getColumnIndex(Events.DTSTART));
            long end = calendar.getLong(calendar.getColumnIndex(Events.DTEND));
            if((repeating == null && begin >= start && end <= stop) || (repeating != null)){
                String id = calendar.getString(calendar.getColumnIndex(Events._ID));
                String name = calendar.getString(calendar.getColumnIndex(Events.TITLE));
                //Filter out deleted instances and grab repeating events
                String[] INSTANCE_PROJECTION = new String[] {
                    Instances.EVENT_ID,      // 0
                    Instances.BEGIN,         // 1
                    Instances.END,           // 2
                    Instances.TITLE          // 3
                };
                String selection = Instances.EVENT_ID + " = ?";
                String[] selectionArgs = new String[] {id};
                Cursor instances = null;
                //Uri for events withing start and stop
                Uri.Builder builder = Instances.CONTENT_URI.buildUpon();
                ContentUris.appendId(builder, start);
                ContentUris.appendId(builder, stop);
                instances = getContentResolver().query(builder.build(), INSTANCE_PROJECTION, selection, selectionArgs, null);
                if(instances == null || instances.getCount() > 0 && instances.moveToNext()){
                    //Make sure the instance's begin is after current time (since we didn't check it before)
                    if(instances.getLong(instances.getColumnIndex((Instances.BEGIN))) >= start){
                        begin = instances.getLong(instances.getColumnIndex(Instances.BEGIN));
                        end = instances.getLong(instances.getColumnIndex(Instances.END));
                        String[] toReturn = {""};
                        toReturn[0] = ""+id;
                        int maxReminder = 0;
                        Cursor reminders = getContentResolver().query(Reminders.CONTENT_URI, null, "event_id = ?", toReturn, null);
                        if(reminders != null && reminders.moveToLast()){
                            do{
                                int rem = reminders.getInt(reminders.getColumnIndex(Reminders.MINUTES)) ;
                                if(rem > maxReminder)
                                    maxReminder = rem; 
                            }while(reminders.moveToPrevious());
                        }
                        if(maxReminder >= 1 && maxReminder <= 60){
                            CalendarEvent e = new CalendarEvent(id,name,begin,end,maxReminder);
                            eventList.add(e);
                        }
                    }
                } if(instances != null && ! instances.isClosed() ) instances.close(); 
            }
        }while(calendar.moveToNext());
    } if(calendar != null && ! calendar.isClosed() ) calendar.close();
    //Run this again when you reach 12:30am either today or the next day
    long current = System.currentTimeMillis();
    if(eventList.size() > 0)
        startCalendarAlarm(0);
    thread_calSetup.postDelayed(this, (stop-current));
}
项目:CalendarProvider-Lib    文件:EventInfo.java   
/**
 * Extract an EventInfo object from its representation as ContentValues (value extracted querying the Android Content Provider)
 *
 * @param contentValues information extracted from the content provider
 * @return the EventInfo representation of the {@code contentValues}
 * @throws IllegalArgumentException if the {@code contentValues} cannot be parsed to a EventInfo object
 */
public static EventInfo fromContentValues(ContentValues contentValues) {
    try {
        EventInfo eventInfo = new EventInfo();
        eventInfo.id = contentValues.getAsLong(Instances.EVENT_ID);
        eventInfo.calendarId = contentValues.getAsInteger(Instances.CALENDAR_ID);
        eventInfo.calendarDisplayName = contentValues.getAsString(Instances.CALENDAR_DISPLAY_NAME);
        eventInfo.title = contentValues.getAsString(Instances.TITLE);
        eventInfo.description = contentValues.getAsString(Instances.DESCRIPTION);
        eventInfo.startDate = new Date(JulianDate.toDate(contentValues.getAsLong(Instances.START_DAY)).getTime() + contentValues.getAsInteger(Instances.START_MINUTE) * MINUTE_IN_MILLISECOND);
        eventInfo.endDate = new Date(JulianDate.toDate(contentValues.getAsLong(Instances.END_DAY)).getTime() + contentValues.getAsInteger(Instances.END_MINUTE) * MINUTE_IN_MILLISECOND);
        eventInfo.allDay = contentValues.getAsInteger(Instances.ALL_DAY) == 1;
        eventInfo.location = contentValues.getAsString(Instances.EVENT_LOCATION);
        if (contentValues.getAsString(Instances.RRULE) == null && contentValues.getAsString(Instances.RDATE) == null) {
            eventInfo.recurrenceRule = null;
        } else {
            eventInfo.recurrenceRule = new RecurrenceRule()
                    .setRrule(contentValues.getAsString(Instances.RRULE))
                    .setRdate(contentValues.getAsString(Instances.RDATE))
                    .setExrule(contentValues.getAsString(Instances.EXRULE))
                    .setExdate(contentValues.getAsString(Instances.EXDATE));
        }
        return eventInfo;
    } catch (NullPointerException e) {
        StringBuilder errorString = new StringBuilder();
        StringBuilder missingColumns = new StringBuilder();
        errorString.append("There is NOT all the required parameters in the contentValues\nThe required keys are: ");
        for (String col : COLUMN) {
            errorString.append(col).append(", ");
            if (!contentValues.containsKey(col)) {
                missingColumns.append(col).append(", ");
            }
        }
        errorString.setLength(errorString.length() - 2);
        if (missingColumns.length() > 0) {
            missingColumns.setLength(missingColumns.length() - 2);
        }
        errorString.append("\n the following columns are missing: ").append(missingColumns);
        throw new IllegalArgumentException(errorString.toString());
    }
}
项目:myStress    文件:CalendarHandler.java   
private void getEntry() {
    boolean first = false, calendar = false;
    String ID;
    long begin, end;
    String[] fields = { Instances.TITLE, Instances.BEGIN, Instances.END,
            Instances.EVENT_LOCATION, Instances.CALENDAR_ID };
    long now = System.currentTimeMillis();
    int i, j, calendar_no = calendars.length;
    Cursor eventCursor;

    currentRead = now - polltime;

    // query anything between now-polltime and now
    if (Build.VERSION.SDK_INT >= 14)
        eventCursor = CalendarContract.Instances.query(
                myStress.getContentResolver(), fields, currentRead, now + 24
                        * 60 * 60 * 1000);
    else {
        Uri.Builder builder = Uri.parse(
                "content://com.android.calendar/instances/when")
                .buildUpon();
        ContentUris.appendId(builder, currentRead);
        ContentUris.appendId(builder, now + 24 * 60 * 60 * 1000);
        eventCursor = myStress.getContentResolver().query(
                builder.build(),
                new String[] { "title", "begin", "end", "eventLocation",
                        "calendar_id" }, null, null, null);
    }
    // walk through all returns
    eventCursor.moveToFirst();
    for (i = 0; i < eventCursor.getCount(); i++) {
        begin = eventCursor.getLong(1);
        end = eventCursor.getLong(2);
        ID = eventCursor.getString(4);

        calendar = false;
        // see if the entry is from the calendars I want
        for (j = 0; j < calendar_no; j++)
            if (calendars[j].compareTo(ID) == 0) {
                calendar = true;
                break;
            }

        if (calendar == true)
            // is this something new?
            if (begin > currentRead && begin < now) {
                if (first == false) {
                    reading.append(String.valueOf(begin) + ":"+ String.valueOf(end));
                    first = true;
                } else
                    reading.append("::" + String.valueOf(begin) + ":"
                            + String.valueOf(end));
            }

        eventCursor.moveToNext();
    }

    // free data
    eventCursor.close();

    // have we read anything? -> if not, delete reading string
    if (first == false)
        reading = null;
}
项目:silent-meeting    文件:MutePhoneService.java   
@Override
@TargetApi(KITKAT)
protected void onHandleIntent(Intent intent) {
    InstanceDao instanceDao = new InstanceDao(getApplicationContext());
    int instanceId = intent.getIntExtra(_ID, 0);
    Instance instance = instanceDao.get(instanceId);
    if (instance == null || instance.isRunning()) {
        return;
    }

    AudioManager audioManager = (AudioManager) getApplicationContext().getSystemService(Context.AUDIO_SERVICE);

    Log.d(MutePhoneBroadcastReceiver.class.getCanonicalName(), "Muting phone");

    int currentRingerMode = audioManager.getRingerMode();
    audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);

    long endDate = intent.getLongExtra(Instances.DTEND, 0);
    long activeAfterEvents = Setting.getActiveAfterEvents(getApplicationContext());

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(endDate + activeAfterEvents);

    Intent unmuteIntent = new Intent(getApplicationContext(), UnmutePhoneBroadcastReceiver.class);
    unmuteIntent.setAction(UNMUTE);
    unmuteIntent.putExtra(PREVIOUS_RINGER_MODE, currentRingerMode);
    unmuteIntent.putExtra(_ID, instanceId);

    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), instanceId, unmuteIntent, PendingIntent.FLAG_CANCEL_CURRENT);

    AlarmManager alarmManager = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
    alarmManager.cancel(pendingIntent);

    if (SDK_INT >= KITKAT) {
        alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
    } else {
        alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
    }

    instanceDao.setRunning(instanceId, true);
}
项目:Calendar_lunar    文件:Event.java   
/**
 * Loads <i>days</i> days worth of instances starting at <i>startDay</i>.
 */
public static void loadEvents(Context context, ArrayList<Event> events, int startDay, int days,
        int requestId, AtomicInteger sequenceNumber) {

    if (PROFILE) {
        Debug.startMethodTracing("loadEvents");
    }

    Cursor cEvents = null;
    Cursor cAllday = null;

    events.clear();
    try {
        int endDay = startDay + days - 1;

        // We use the byDay instances query to get a list of all events for
        // the days we're interested in.
        // The sort order is: events with an earlier start time occur
        // first and if the start times are the same, then events with
        // a later end time occur first. The later end time is ordered
        // first so that long rectangles in the calendar views appear on
        // the left side.  If the start and end times of two events are
        // the same then we sort alphabetically on the title.  This isn't
        // required for correctness, it just adds a nice touch.

        // Respect the preference to show/hide declined events
        SharedPreferences prefs = GeneralPreferences.getSharedPreferences(context);
        boolean hideDeclined = prefs.getBoolean(GeneralPreferences.KEY_HIDE_DECLINED,
                false);

        String where = EVENTS_WHERE;
        String whereAllday = ALLDAY_WHERE;
        if (hideDeclined) {
            String hideString = " AND " + Instances.SELF_ATTENDEE_STATUS + "!="
                    + Attendees.ATTENDEE_STATUS_DECLINED;
            where += hideString;
            whereAllday += hideString;
        }

        cEvents = instancesQuery(context.getContentResolver(), EVENT_PROJECTION, startDay,
                endDay, where, null, SORT_EVENTS_BY);
        cAllday = instancesQuery(context.getContentResolver(), EVENT_PROJECTION, startDay,
                endDay, whereAllday, null, SORT_ALLDAY_BY);

        // Check if we should return early because there are more recent
        // load requests waiting.
        if (requestId != sequenceNumber.get()) {
            return;
        }

        buildEventsFromCursor(events, cEvents, context, startDay, endDay);
        buildEventsFromCursor(events, cAllday, context, startDay, endDay);

    } finally {
        if (cEvents != null) {
            cEvents.close();
        }
        if (cAllday != null) {
            cAllday.close();
        }
        if (PROFILE) {
            Debug.stopMethodTracing();
        }
    }
}