// Path: src/com/android/calendarcommon/DateException.java
// public class DateException extends Exception
// {
//     public DateException(String message)
//     {
//         super(message);
//     }
// }
// 
// Path: src/com/android/calendarcommon/Duration.java
// public class Duration
// {
//     public int sign; // 1 or -1
//     public int weeks;
//     public int days;
//     public int hours;
//     public int minutes;
//     public int seconds;
// 
//     public Duration()
//     {
//         sign = 1;
//     }
// 
//     /**
//      * Parse according to RFC2445 ss4.3.6.  (It's actually a little loose with
//      * its parsing, for better or for worse)
//      */
//     public void parse(String str) throws DateException
//     {
//         sign = 1;
//         weeks = 0;
//         days = 0;
//         hours = 0;
//         minutes = 0;
//         seconds = 0;
// 
//         int len = str.length();
//         int index = 0;
//         char c;
// 
//         if (len < 1) {
//             return ;
//         }
// 
//         c = str.charAt(0);
//         if (c == '-') {
//             sign = -1;
//             index++;
//         }
//         else if (c == '+') {
//             index++;
//         }
// 
//         if (len < index) {
//             return ;
//         }
// 
//         c = str.charAt(index);
//         if (c != 'P') {
//             throw new DateException (
//                     "Duration.parse(str='" + str + "') expected 'P' at index="
//                     + index);
//         }
//         index++;
//         c = str.charAt(index);
//         if (c == 'T') {
//             index++;
//         }
// 
//         int n = 0;
//         for (; index < len; index++) {
//             c = str.charAt(index);
//             if (c >= '0' && c <= '9') {
//                 n *= 10;
//                 n += ((int)(c-'0'));
//             }
//             else if (c == 'W') {
//                 weeks = n;
//                 n = 0;
//             }
//             else if (c == 'H') {
//                 hours = n;
//                 n = 0;
//             }
//             else if (c == 'M') {
//                 minutes = n;
//                 n = 0;
//             }
//             else if (c == 'S') {
//                 seconds = n;
//                 n = 0;
//             }
//             else if (c == 'D') {
//                 days = n;
//                 n = 0;
//             }
//             else if (c == 'T') {
//             }
//             else {
//                 throw new DateException (
//                         "Duration.parse(str='" + str + "') unexpected char '"
//                         + c + "' at index=" + index);
//             }
//         }
//     }
// 
//     /**
//      * Add this to the calendar provided, in place, in the calendar.
//      */
//     public void addTo(Calendar cal)
//     {
//         cal.add(Calendar.DAY_OF_MONTH, sign*weeks*7);
//         cal.add(Calendar.DAY_OF_MONTH, sign*days);
//         cal.add(Calendar.HOUR, sign*hours);
//         cal.add(Calendar.MINUTE, sign*minutes);
//         cal.add(Calendar.SECOND, sign*seconds);
//     }
// 
//     public long addTo(long dt) {
//         return dt + getMillis();
//     }
// 
//     public long getMillis() {
//         long factor = 1000 * sign;
//         return factor * ((7*24*60*60*weeks)
//                 + (24*60*60*days)
//                 + (60*60*hours)
//                 + (60*minutes)
//                 + seconds);
//     }
// }


import static android.provider.CalendarContract.Attendees.ATTENDEE_STATUS;
import static android.provider.CalendarContract.Attendees.ATTENDEE_STATUS_ACCEPTED;
import static android.provider.CalendarContract.Attendees.ATTENDEE_STATUS_DECLINED;
import static android.provider.CalendarContract.Attendees.ATTENDEE_STATUS_NONE;
import static android.provider.CalendarContract.Attendees.ATTENDEE_STATUS_TENTATIVE;
import static android.provider.CalendarContract.EXTRA_EVENT_BEGIN_TIME;
import static android.provider.CalendarContract.EXTRA_EVENT_END_TIME;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.ContentUris;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.CalendarContract.Calendars;
import android.provider.CalendarContract.Events;
import android.text.TextUtils;
import android.util.Base64;
import android.util.Log;
import com.android.calendarcommon.DateException;
import com.android.calendarcommon.Duration;
                    if (debug) Log.d(TAG, "selection: " + selection);
                    Cursor eventCursor = getContentResolver().query(Events.CONTENT_URI,
                            EVENT_PROJECTION, selection, null,
                            Calendars.CALENDAR_ACCESS_LEVEL + " desc");
                    if (debug) Log.d(TAG, "Found: " + eventCursor.getCount());

                    if (eventCursor != null && eventCursor.getCount() > 0) {
                        if (eventCursor.getCount() > 1) {
                            Log.i(TAG, "NOTE: found " + eventCursor.getCount()
                                    + " matches on event with id='" + eidParts[0] + "'");
                            // Don't print eidPart[1] as it contains the user's PII
                        }

                        // Get info from Cursor
                        while (eventCursor.moveToNext()) {
                            int eventId = eventCursor.getInt(EVENT_INDEX_ID);
                            long startMillis = eventCursor.getLong(EVENT_INDEX_START);
                            long endMillis = eventCursor.getLong(EVENT_INDEX_END);
                            if (debug) Log.d(TAG, "_id: " + eventCursor.getLong(EVENT_INDEX_ID));
                            if (debug) Log.d(TAG, "startMillis: " + startMillis);
                            if (debug) Log.d(TAG, "endMillis:   " + endMillis);

                            if (endMillis == 0) {
                                String duration = eventCursor.getString(EVENT_INDEX_DURATION);
                                if (debug) Log.d(TAG, "duration:    " + duration);
                                if (TextUtils.isEmpty(duration)) {
                                    continue;
                                }

                                try {
// Path: src/com/android/calendarcommon/DateException.java
// public class DateException extends Exception
// {
//     public DateException(String message)
//     {
//         super(message);
//     }
// }
// 
// Path: src/com/android/calendarcommon/Duration.java
// public class Duration
// {
//     public int sign; // 1 or -1
//     public int weeks;
//     public int days;
//     public int hours;
//     public int minutes;
//     public int seconds;
// 
//     public Duration()
//     {
//         sign = 1;
//     }
// 
//     /**
//      * Parse according to RFC2445 ss4.3.6.  (It's actually a little loose with
//      * its parsing, for better or for worse)
//      */
//     public void parse(String str) throws DateException
//     {
//         sign = 1;
//         weeks = 0;
//         days = 0;
//         hours = 0;
//         minutes = 0;
//         seconds = 0;
// 
//         int len = str.length();
//         int index = 0;
//         char c;
// 
//         if (len < 1) {
//             return ;
//         }
// 
//         c = str.charAt(0);
//         if (c == '-') {
//             sign = -1;
//             index++;
//         }
//         else if (c == '+') {
//             index++;
//         }
// 
//         if (len < index) {
//             return ;
//         }
// 
//         c = str.charAt(index);
//         if (c != 'P') {
//             throw new DateException (
//                     "Duration.parse(str='" + str + "') expected 'P' at index="
//                     + index);
//         }
//         index++;
//         c = str.charAt(index);
//         if (c == 'T') {
//             index++;
//         }
// 
//         int n = 0;
//         for (; index < len; index++) {
//             c = str.charAt(index);
//             if (c >= '0' && c <= '9') {
//                 n *= 10;
//                 n += ((int)(c-'0'));
//             }
//             else if (c == 'W') {
//                 weeks = n;
//                 n = 0;
//             }
//             else if (c == 'H') {
//                 hours = n;
//                 n = 0;
//             }
//             else if (c == 'M') {
//                 minutes = n;
//                 n = 0;
//             }
//             else if (c == 'S') {
//                 seconds = n;
//                 n = 0;
//             }
//             else if (c == 'D') {
//                 days = n;
//                 n = 0;
//             }
//             else if (c == 'T') {
//             }
//             else {
//                 throw new DateException (
//                         "Duration.parse(str='" + str + "') unexpected char '"
//                         + c + "' at index=" + index);
//             }
//         }
//     }
// 
//     /**
//      * Add this to the calendar provided, in place, in the calendar.
//      */
//     public void addTo(Calendar cal)
//     {
//         cal.add(Calendar.DAY_OF_MONTH, sign*weeks*7);
//         cal.add(Calendar.DAY_OF_MONTH, sign*days);
//         cal.add(Calendar.HOUR, sign*hours);
//         cal.add(Calendar.MINUTE, sign*minutes);
//         cal.add(Calendar.SECOND, sign*seconds);
//     }
// 
//     public long addTo(long dt) {
//         return dt + getMillis();
//     }
// 
//     public long getMillis() {
//         long factor = 1000 * sign;
//         return factor * ((7*24*60*60*weeks)
//                 + (24*60*60*days)
//                 + (60*60*hours)
//                 + (60*minutes)
//                 + seconds);
//     }
// }


// Path: src/edu/bupt/calendar/GoogleCalendarUriIntentFilter.java
import static android.provider.CalendarContract.Attendees.ATTENDEE_STATUS;
import static android.provider.CalendarContract.Attendees.ATTENDEE_STATUS_ACCEPTED;
import static android.provider.CalendarContract.Attendees.ATTENDEE_STATUS_DECLINED;
import static android.provider.CalendarContract.Attendees.ATTENDEE_STATUS_NONE;
import static android.provider.CalendarContract.Attendees.ATTENDEE_STATUS_TENTATIVE;
import static android.provider.CalendarContract.EXTRA_EVENT_BEGIN_TIME;
import static android.provider.CalendarContract.EXTRA_EVENT_END_TIME;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.ContentUris;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.CalendarContract.Calendars;
import android.provider.CalendarContract.Events;
import android.text.TextUtils;
import android.util.Base64;
import android.util.Log;
import com.android.calendarcommon.DateException;
import com.android.calendarcommon.Duration;

                    if (debug) Log.d(TAG, "selection: " + selection);
                    Cursor eventCursor = getContentResolver().query(Events.CONTENT_URI,
                            EVENT_PROJECTION, selection, null,
                            Calendars.CALENDAR_ACCESS_LEVEL + " desc");
                    if (debug) Log.d(TAG, "Found: " + eventCursor.getCount());

                    if (eventCursor != null && eventCursor.getCount() > 0) {
                        if (eventCursor.getCount() > 1) {
                            Log.i(TAG, "NOTE: found " + eventCursor.getCount()
                                    + " matches on event with id='" + eidParts[0] + "'");
                            // Don't print eidPart[1] as it contains the user's PII
                        }

                        // Get info from Cursor
                        while (eventCursor.moveToNext()) {
                            int eventId = eventCursor.getInt(EVENT_INDEX_ID);
                            long startMillis = eventCursor.getLong(EVENT_INDEX_START);
                            long endMillis = eventCursor.getLong(EVENT_INDEX_END);
                            if (debug) Log.d(TAG, "_id: " + eventCursor.getLong(EVENT_INDEX_ID));
                            if (debug) Log.d(TAG, "startMillis: " + startMillis);
                            if (debug) Log.d(TAG, "endMillis:   " + endMillis);

                            if (endMillis == 0) {
                                String duration = eventCursor.getString(EVENT_INDEX_DURATION);
                                if (debug) Log.d(TAG, "duration:    " + duration);
                                if (TextUtils.isEmpty(duration)) {
                                    continue;
                                }

                                try {
                                    Duration d = new Duration();