diff options
author | Fred Quintana <fredq@google.com> | 2009-11-24 09:47:01 -0800 |
---|---|---|
committer | Fred Quintana <fredq@google.com> | 2009-11-24 10:42:00 -0800 |
commit | 2464acc6da6393f0163894094468f68b8e496cea (patch) | |
tree | c20762f1c00066b974b719c8361cce85f17a81c7 | |
parent | 82d4b5ccaf5518ed9286d89e60ac9a595239ac35 (diff) | |
download | frameworks_base-2464acc6da6393f0163894094468f68b8e496cea.zip frameworks_base-2464acc6da6393f0163894094468f68b8e496cea.tar.gz frameworks_base-2464acc6da6393f0163894094468f68b8e496cea.tar.bz2 |
moved the gdata library to vendor/google
-rw-r--r-- | Android.mk | 1 | ||||
-rw-r--r-- | core/java/android/provider/Calendar.java | 56 | ||||
-rw-r--r-- | core/java/com/google/android/gdata/client/AndroidGDataClient.java | 508 | ||||
-rw-r--r-- | core/java/com/google/android/gdata/client/AndroidXmlParserFactory.java | 31 | ||||
-rw-r--r-- | core/java/com/google/android/gdata/client/QueryParamsImpl.java | 102 | ||||
-rw-r--r-- | core/java/com/google/android/gdata2/client/AndroidGDataClient.java | 603 | ||||
-rw-r--r-- | core/java/com/google/android/gdata2/client/AndroidXmlParserFactory.java | 31 | ||||
-rw-r--r-- | core/java/com/google/android/gdata2/client/QueryParamsImpl.java | 99 | ||||
-rw-r--r-- | preloaded-classes | 15 | ||||
-rw-r--r-- | tests/AndroidTests/res/raw/calendarjs.txt | 1 | ||||
-rw-r--r-- | tests/AndroidTests/res/raw/calendarjsgz.jsgz | bin | 1956 -> 0 bytes | |||
-rw-r--r-- | tests/AndroidTests/res/raw/calendarxml.xml | 38 | ||||
-rw-r--r-- | tests/AndroidTests/res/raw/calendarxmlgz.xmlgz | bin | 2412 -> 0 bytes | |||
-rw-r--r-- | tests/AndroidTests/res/xml/calendar.xml | 38 | ||||
-rw-r--r-- | tests/AndroidTests/src/com/android/unit_tests/GDataParseTest.java | 162 |
15 files changed, 1 insertions, 1684 deletions
@@ -525,7 +525,6 @@ include $(BUILD_DROIDDOC) ext_dirs := \ ../../external/apache-http/src \ - ../../external/gdata/src \ ../../external/tagsoup/src ext_src_files := $(call all-java-files-under,$(ext_dirs)) diff --git a/core/java/android/provider/Calendar.java b/core/java/android/provider/Calendar.java index b8cf6c2..1652ebd 100644 --- a/core/java/android/provider/Calendar.java +++ b/core/java/android/provider/Calendar.java @@ -33,17 +33,6 @@ import android.text.format.Time; import android.util.Config; import android.util.Log; import android.accounts.Account; -import com.android.internal.database.ArrayListCursor; -import com.google.android.gdata.client.AndroidGDataClient; -import com.google.android.gdata.client.AndroidXmlParserFactory; -import com.google.wireless.gdata.calendar.client.CalendarClient; -import com.google.wireless.gdata.calendar.data.EventEntry; -import com.google.wireless.gdata.calendar.data.Who; -import com.google.wireless.gdata.calendar.parser.xml.XmlCalendarGDataParserFactory; -import com.google.wireless.gdata.data.StringUtils; - -import java.util.ArrayList; -import java.util.Vector; /** * The Calendar provider contains all calendar events. @@ -547,8 +536,6 @@ public final class Calendar { AttendeesColumns.ATTENDEE_TYPE, AttendeesColumns.ATTENDEE_STATUS }; - private static CalendarClient sCalendarClient = null; - public static final Cursor query(ContentResolver cr, String[] projection) { return cr.query(CONTENT_URI, projection, null, null, DEFAULT_SORT_ORDER); } @@ -600,7 +587,7 @@ public final class Calendar { // where String where = extractValue(event, "LOCATION"); - if (!StringUtils.isEmpty(where)) { + if (!TextUtils.isEmpty(where)) { values.put(EVENT_LOCATION, where); } @@ -687,47 +674,6 @@ public final class Calendar { } /** - * Returns a singleton instance of the CalendarClient used to fetch entries from the - * calendar server. - * @param cr The ContentResolver used to lookup the address of the calendar server in the - * settings database. - * @return The singleton instance of the CalendarClient used to fetch entries from the - * calendar server. - */ - private static synchronized CalendarClient getCalendarClient(ContentResolver cr) { - if (sCalendarClient == null) { - sCalendarClient = new CalendarClient( - new AndroidGDataClient(cr), - new XmlCalendarGDataParserFactory(new AndroidXmlParserFactory())); - } - return sCalendarClient; - } - - /** - * Extracts the attendees information out of event and adds it to a new ArrayList of columns - * within the supplied ArrayList of rows. These rows are expected to be used within an - * {@link ArrayListCursor}. - */ - private static final void extractAttendeesIntoArrayList(EventEntry event, - ArrayList<ArrayList> rows) { - Log.d(TAG, "EVENT: " + event.toString()); - Vector<Who> attendees = (Vector<Who>) event.getAttendees(); - - int numAttendees = attendees == null ? 0 : attendees.size(); - - for (int i = 0; i < numAttendees; ++i) { - Who attendee = attendees.elementAt(i); - ArrayList row = new ArrayList(); - row.add(attendee.getValue()); - row.add(attendee.getEmail()); - row.add(attendee.getRelationship()); - row.add(attendee.getType()); - row.add(attendee.getStatus()); - rows.add(row); - } - } - - /** * The content:// style URL for this table */ public static final Uri CONTENT_URI = diff --git a/core/java/com/google/android/gdata/client/AndroidGDataClient.java b/core/java/com/google/android/gdata/client/AndroidGDataClient.java deleted file mode 100644 index 9a2a51d..0000000 --- a/core/java/com/google/android/gdata/client/AndroidGDataClient.java +++ /dev/null @@ -1,508 +0,0 @@ -// Copyright 2007 The Android Open Source Project - -package com.google.android.gdata.client; - -import com.google.android.net.GoogleHttpClient; -import com.google.wireless.gdata.client.GDataClient; -import com.google.wireless.gdata.client.HttpException; -import com.google.wireless.gdata.client.QueryParams; -import com.google.wireless.gdata.data.StringUtils; -import com.google.wireless.gdata.parser.ParseException; -import com.google.wireless.gdata.serializer.GDataSerializer; - -import org.apache.http.Header; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.StatusLine; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.client.methods.HttpUriRequest; -import org.apache.http.entity.InputStreamEntity; -import org.apache.http.entity.AbstractHttpEntity; -import org.apache.http.entity.ByteArrayEntity; - -import android.content.ContentResolver; -import android.content.Context; -import android.net.http.AndroidHttpClient; -import android.text.TextUtils; -import android.util.Config; -import android.util.Log; -import android.os.SystemProperties; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.UnsupportedEncodingException; -import java.io.BufferedInputStream; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URLEncoder; - -/** - * Implementation of a GDataClient using GoogleHttpClient to make HTTP - * requests. Always issues GETs and POSTs, using the X-HTTP-Method-Override - * header when a PUT or DELETE is desired, to avoid issues with firewalls, etc., - * that do not allow methods other than GET or POST. - */ -public class AndroidGDataClient implements GDataClient { - - private static final String TAG = "GDataClient"; - private static final boolean DEBUG = false; - private static final boolean LOCAL_LOGV = DEBUG ? Config.LOGD : Config.LOGV; - - private static final String X_HTTP_METHOD_OVERRIDE = - "X-HTTP-Method-Override"; - - private static final String DEFAULT_USER_AGENT_APP_VERSION = "Android-GData/1.1"; - - private static final int MAX_REDIRECTS = 10; - - // boolean system property that can be used to control whether or not - // requests/responses are gzip'd. - private static final String NO_GZIP_SYSTEM_PROPERTY = "sync.nogzip"; - - private final GoogleHttpClient mHttpClient; - private ContentResolver mResolver; - - /** - * Interface for creating HTTP requests. Used by - * {@link AndroidGDataClient#createAndExecuteMethod}, since HttpUriRequest does not allow for - * changing the URI after creation, e.g., when you want to follow a redirect. - */ - private interface HttpRequestCreator { - HttpUriRequest createRequest(URI uri); - } - - private static class GetRequestCreator implements HttpRequestCreator { - public GetRequestCreator() { - } - - public HttpUriRequest createRequest(URI uri) { - HttpGet get = new HttpGet(uri); - return get; - } - } - - private static class PostRequestCreator implements HttpRequestCreator { - private final String mMethodOverride; - private final HttpEntity mEntity; - public PostRequestCreator(String methodOverride, HttpEntity entity) { - mMethodOverride = methodOverride; - mEntity = entity; - } - - public HttpUriRequest createRequest(URI uri) { - HttpPost post = new HttpPost(uri); - if (mMethodOverride != null) { - post.addHeader(X_HTTP_METHOD_OVERRIDE, mMethodOverride); - } - post.setEntity(mEntity); - return post; - } - } - - // MAJOR TODO: make this work across redirects (if we can reset the InputStream). - // OR, read the bits into a local buffer (yuck, the media could be large). - private static class MediaPutRequestCreator implements HttpRequestCreator { - private final InputStream mMediaInputStream; - private final String mContentType; - public MediaPutRequestCreator(InputStream mediaInputStream, String contentType) { - mMediaInputStream = mediaInputStream; - mContentType = contentType; - } - - public HttpUriRequest createRequest(URI uri) { - HttpPost post = new HttpPost(uri); - post.addHeader(X_HTTP_METHOD_OVERRIDE, "PUT"); - // mMediaInputStream.reset(); - InputStreamEntity entity = new InputStreamEntity(mMediaInputStream, - -1 /* read until EOF */); - entity.setContentType(mContentType); - post.setEntity(entity); - return post; - } - } - - /** - * @deprecated Use AndroidGDAtaClient(Context) instead. - */ - public AndroidGDataClient(ContentResolver resolver) { - mHttpClient = new GoogleHttpClient(resolver, DEFAULT_USER_AGENT_APP_VERSION, - true /* gzip capable */); - mHttpClient.enableCurlLogging(TAG, Log.VERBOSE); - mResolver = resolver; - } - - /** - * Creates a new AndroidGDataClient. - * - * @param context The ContentResolver to get URL rewriting rules from - * through the Android proxy server, using null to indicate not using proxy. - * The context will also be used by GoogleHttpClient for configuration of - * SSL session persistence. - */ - public AndroidGDataClient(Context context) { - this(context, DEFAULT_USER_AGENT_APP_VERSION); - } - - /** - * Creates a new AndroidGDataClient. - * - * @param context The ContentResolver to get URL rewriting rules from - * through the Android proxy server, using null to indicate not using proxy. - * The context will also be used by GoogleHttpClient for configuration of - * SSL session persistence. - * @param appAndVersion The application name and version to be used as the basis of the - * User-Agent. e.g., Android-GData/1.5.0. - */ - public AndroidGDataClient(Context context, String appAndVersion) { - mHttpClient = new GoogleHttpClient(context, appAndVersion, - true /* gzip capable */); - mHttpClient.enableCurlLogging(TAG, Log.VERBOSE); - mResolver = context.getContentResolver(); - } - - public void close() { - mHttpClient.close(); - } - - /* - * (non-Javadoc) - * @see GDataClient#encodeUri(java.lang.String) - */ - public String encodeUri(String uri) { - String encodedUri; - try { - encodedUri = URLEncoder.encode(uri, "UTF-8"); - } catch (UnsupportedEncodingException uee) { - // should not happen. - Log.e("JakartaGDataClient", - "UTF-8 not supported -- should not happen. " - + "Using default encoding.", uee); - encodedUri = URLEncoder.encode(uri); - } - return encodedUri; - } - - /* - * (non-Javadoc) - * @see com.google.wireless.gdata.client.GDataClient#createQueryParams() - */ - public QueryParams createQueryParams() { - return new QueryParamsImpl(); - } - - // follows redirects - private InputStream createAndExecuteMethod(HttpRequestCreator creator, - String uriString, - String authToken) - throws HttpException, IOException { - - HttpResponse response = null; - int status = 500; - int redirectsLeft = MAX_REDIRECTS; - - URI uri; - try { - uri = new URI(uriString); - } catch (URISyntaxException use) { - Log.w(TAG, "Unable to parse " + uriString + " as URI.", use); - throw new IOException("Unable to parse " + uriString + " as URI: " - + use.getMessage()); - } - - // we follow redirects ourselves, since we want to follow redirects even on POSTs, which - // the HTTP library does not do. following redirects ourselves also allows us to log - // the redirects using our own logging. - while (redirectsLeft > 0) { - - HttpUriRequest request = creator.createRequest(uri); - - if (!SystemProperties.getBoolean(NO_GZIP_SYSTEM_PROPERTY, false)) { - AndroidHttpClient.modifyRequestToAcceptGzipResponse(request); - } - - // only add the auth token if not null (to allow for GData feeds that do not require - // authentication.) - if (!TextUtils.isEmpty(authToken)) { - request.addHeader("Authorization", "GoogleLogin auth=" + authToken); - } - if (LOCAL_LOGV) { - for (Header h : request.getAllHeaders()) { - Log.v(TAG, h.getName() + ": " + h.getValue()); - } - } - - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, "Executing " + request.getRequestLine().toString()); - } - - response = null; - - try { - response = mHttpClient.execute(request); - } catch (IOException ioe) { - Log.w(TAG, "Unable to execute HTTP request." + ioe); - throw ioe; - } - - StatusLine statusLine = response.getStatusLine(); - if (statusLine == null) { - Log.w(TAG, "StatusLine is null."); - throw new NullPointerException("StatusLine is null -- should not happen."); - } - - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, response.getStatusLine().toString()); - for (Header h : response.getAllHeaders()) { - Log.d(TAG, h.getName() + ": " + h.getValue()); - } - } - status = statusLine.getStatusCode(); - - HttpEntity entity = response.getEntity(); - - if ((status >= 200) && (status < 300) && entity != null) { - InputStream in = AndroidHttpClient.getUngzippedContent(entity); - if (Log.isLoggable(TAG, Log.DEBUG)) { - in = logInputStreamContents(in); - } - return in; - } - - // TODO: handle 301, 307? - // TODO: let the http client handle the redirects, if we can be sure we'll never get a - // redirect on POST. - if (status == 302) { - // consume the content, so the connection can be closed. - entity.consumeContent(); - Header location = response.getFirstHeader("Location"); - if (location == null) { - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, "Redirect requested but no Location " - + "specified."); - } - break; - } - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, "Following redirect to " + location.getValue()); - } - try { - uri = new URI(location.getValue()); - } catch (URISyntaxException use) { - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, "Unable to parse " + location.getValue() + " as URI.", use); - throw new IOException("Unable to parse " + location.getValue() - + " as URI."); - } - break; - } - --redirectsLeft; - } else { - break; - } - } - - if (Log.isLoggable(TAG, Log.VERBOSE)) { - Log.v(TAG, "Received " + status + " status code."); - } - String errorMessage = null; - HttpEntity entity = response.getEntity(); - try { - if (response != null && entity != null) { - InputStream in = AndroidHttpClient.getUngzippedContent(entity); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - byte[] buf = new byte[8192]; - int bytesRead = -1; - while ((bytesRead = in.read(buf)) != -1) { - baos.write(buf, 0, bytesRead); - } - // TODO: use appropriate encoding, picked up from Content-Type. - errorMessage = new String(baos.toByteArray()); - if (Log.isLoggable(TAG, Log.VERBOSE)) { - Log.v(TAG, errorMessage); - } - } - } finally { - if (entity != null) { - entity.consumeContent(); - } - } - String exceptionMessage = "Received " + status + " status code"; - if (errorMessage != null) { - exceptionMessage += (": " + errorMessage); - } - throw new HttpException(exceptionMessage, status, null /* InputStream */); - } - - /* - * (non-Javadoc) - * @see GDataClient#getFeedAsStream(java.lang.String, java.lang.String) - */ - public InputStream getFeedAsStream(String feedUrl, - String authToken) - throws HttpException, IOException { - - InputStream in = createAndExecuteMethod(new GetRequestCreator(), feedUrl, authToken); - if (in != null) { - return in; - } - throw new IOException("Unable to access feed."); - } - - /** - * Log the contents of the input stream. - * The original input stream is consumed, so the caller must use the - * BufferedInputStream that is returned. - * @param in InputStream - * @return replacement input stream for caller to use - * @throws IOException - */ - private InputStream logInputStreamContents(InputStream in) throws IOException { - if (in == null) { - return in; - } - // bufferSize is the (arbitrary) maximum amount to log. - // The original InputStream is wrapped in a - // BufferedInputStream with a 16K buffer. This lets - // us read up to 16K, write it to the log, and then - // reset the stream so the the original client can - // then read the data. The BufferedInputStream - // provides the mark and reset support, even when - // the original InputStream does not. - final int bufferSize = 16384; - BufferedInputStream bin = new BufferedInputStream(in, bufferSize); - bin.mark(bufferSize); - int wanted = bufferSize; - int totalReceived = 0; - byte buf[] = new byte[wanted]; - while (wanted > 0) { - int got = bin.read(buf, totalReceived, wanted); - if (got <= 0) break; // EOF - wanted -= got; - totalReceived += got; - } - Log.d(TAG, new String(buf, 0, totalReceived, "UTF-8")); - bin.reset(); - return bin; - } - - public InputStream getMediaEntryAsStream(String mediaEntryUrl, String authToken) - throws HttpException, IOException { - - InputStream in = createAndExecuteMethod(new GetRequestCreator(), mediaEntryUrl, authToken); - - if (in != null) { - return in; - } - throw new IOException("Unable to access media entry."); - } - - /* (non-Javadoc) - * @see GDataClient#createEntry - */ - public InputStream createEntry(String feedUrl, - String authToken, - GDataSerializer entry) - throws HttpException, IOException { - - HttpEntity entity = createEntityForEntry(entry, GDataSerializer.FORMAT_CREATE); - InputStream in = createAndExecuteMethod( - new PostRequestCreator(null /* override */, entity), - feedUrl, - authToken); - if (in != null) { - return in; - } - throw new IOException("Unable to create entry."); - } - - /* (non-Javadoc) - * @see GDataClient#updateEntry - */ - public InputStream updateEntry(String editUri, - String authToken, - GDataSerializer entry) - throws HttpException, IOException { - HttpEntity entity = createEntityForEntry(entry, GDataSerializer.FORMAT_UPDATE); - InputStream in = createAndExecuteMethod( - new PostRequestCreator("PUT", entity), - editUri, - authToken); - if (in != null) { - return in; - } - throw new IOException("Unable to update entry."); - } - - /* (non-Javadoc) - * @see GDataClient#deleteEntry - */ - public void deleteEntry(String editUri, String authToken) - throws HttpException, IOException { - if (StringUtils.isEmpty(editUri)) { - throw new IllegalArgumentException( - "you must specify an non-empty edit url"); - } - InputStream in = - createAndExecuteMethod( - new PostRequestCreator("DELETE", null /* entity */), - editUri, - authToken); - if (in == null) { - throw new IOException("Unable to delete entry."); - } - try { - in.close(); - } catch (IOException ioe) { - // ignore - } - } - - public InputStream updateMediaEntry(String editUri, String authToken, - InputStream mediaEntryInputStream, String contentType) - throws HttpException, IOException { - InputStream in = createAndExecuteMethod( - new MediaPutRequestCreator(mediaEntryInputStream, contentType), - editUri, - authToken); - if (in != null) { - return in; - } - throw new IOException("Unable to write media entry."); - } - - private HttpEntity createEntityForEntry(GDataSerializer entry, int format) throws IOException { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - try { - entry.serialize(baos, format); - } catch (IOException ioe) { - Log.e(TAG, "Unable to serialize entry.", ioe); - throw ioe; - } catch (ParseException pe) { - Log.e(TAG, "Unable to serialize entry.", pe); - throw new IOException("Unable to serialize entry: " + pe.getMessage()); - } - - byte[] entryBytes = baos.toByteArray(); - - if (entryBytes != null && Log.isLoggable(TAG, Log.DEBUG)) { - try { - Log.d(TAG, "Serialized entry: " + new String(entryBytes, "UTF-8")); - } catch (UnsupportedEncodingException uee) { - // should not happen - throw new IllegalStateException("UTF-8 should be supported!", - uee); - } - } - - AbstractHttpEntity entity; - if (SystemProperties.getBoolean(NO_GZIP_SYSTEM_PROPERTY, false)) { - entity = new ByteArrayEntity(entryBytes); - } else { - entity = AndroidHttpClient.getCompressedEntity(entryBytes, mResolver); - } - entity.setContentType(entry.getContentType()); - return entity; - } -} diff --git a/core/java/com/google/android/gdata/client/AndroidXmlParserFactory.java b/core/java/com/google/android/gdata/client/AndroidXmlParserFactory.java deleted file mode 100644 index a308fc0..0000000 --- a/core/java/com/google/android/gdata/client/AndroidXmlParserFactory.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.google.android.gdata.client; - -import com.google.wireless.gdata.parser.xml.XmlParserFactory; - -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; -import org.xmlpull.v1.XmlSerializer; - -import android.util.Xml; - -/** - * XmlParserFactory for the Android platform. - */ -public class AndroidXmlParserFactory implements XmlParserFactory { - - /* - * (non-javadoc) - * @see XmlParserFactory#createParser - */ - public XmlPullParser createParser() throws XmlPullParserException { - return Xml.newPullParser(); - } - - /* - * (non-javadoc) - * @see XmlParserFactory#createSerializer - */ - public XmlSerializer createSerializer() throws XmlPullParserException { - return Xml.newSerializer(); - } -} diff --git a/core/java/com/google/android/gdata/client/QueryParamsImpl.java b/core/java/com/google/android/gdata/client/QueryParamsImpl.java deleted file mode 100644 index fbe0d22..0000000 --- a/core/java/com/google/android/gdata/client/QueryParamsImpl.java +++ /dev/null @@ -1,102 +0,0 @@ -package com.google.android.gdata.client; - -import com.google.wireless.gdata.client.QueryParams; - -import android.text.TextUtils; -import android.util.Log; - -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - -/** - * Simple implementation of the QueryParams interface. - */ -// TODO: deal with categories -public class QueryParamsImpl extends QueryParams { - - private final Map<String,String> mParams = new HashMap<String,String>(); - - /** - * Creates a new empty QueryParamsImpl. - */ - public QueryParamsImpl() { - } - - @Override - public void clear() { - setEntryId(null); - mParams.clear(); - } - - @Override - public String generateQueryUrl(String feedUrl) { - - if (TextUtils.isEmpty(getEntryId()) && - mParams.isEmpty()) { - // nothing to do - return feedUrl; - } - - // handle entry IDs - if (!TextUtils.isEmpty(getEntryId())) { - if (!mParams.isEmpty()) { - throw new IllegalStateException("Cannot set both an entry ID " - + "and other query paramters."); - } - return feedUrl + '/' + getEntryId(); - } - - // otherwise, append the querystring params. - StringBuilder sb = new StringBuilder(); - sb.append(feedUrl); - Set<String> params = mParams.keySet(); - boolean first = true; - if (feedUrl.contains("?")) { - first = false; - } else { - sb.append('?'); - } - for (String param : params) { - String value = mParams.get(param); - if (value == null) continue; - if (first) { - first = false; - } else { - sb.append('&'); - } - sb.append(param); - sb.append('='); - - String encodedValue = null; - - try { - encodedValue = URLEncoder.encode(value, "UTF-8"); - } catch (UnsupportedEncodingException uee) { - // should not happen. - Log.w("QueryParamsImpl", - "UTF-8 not supported -- should not happen. " - + "Using default encoding.", uee); - encodedValue = URLEncoder.encode(value); - } - sb.append(encodedValue); - } - return sb.toString(); - } - - @Override - public String getParamValue(String param) { - if (!(mParams.containsKey(param))) { - return null; - } - return mParams.get(param); - } - - @Override - public void setParamValue(String param, String value) { - mParams.put(param, value); - } - -} diff --git a/core/java/com/google/android/gdata2/client/AndroidGDataClient.java b/core/java/com/google/android/gdata2/client/AndroidGDataClient.java deleted file mode 100644 index 3721fa4..0000000 --- a/core/java/com/google/android/gdata2/client/AndroidGDataClient.java +++ /dev/null @@ -1,603 +0,0 @@ -// Copyright 2007 The Android Open Source Project - -package com.google.android.gdata2.client; - -import com.google.android.net.GoogleHttpClient; -import com.google.wireless.gdata2.client.GDataClient; -import com.google.wireless.gdata2.client.HttpException; -import com.google.wireless.gdata2.client.QueryParams; -import com.google.wireless.gdata2.data.StringUtils; -import com.google.wireless.gdata2.parser.ParseException; -import com.google.wireless.gdata2.serializer.GDataSerializer; -import com.google.android.gdata2.client.QueryParamsImpl; - -import org.apache.http.Header; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.StatusLine; -import org.apache.http.params.HttpParams; -import org.apache.http.params.BasicHttpParams; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.client.methods.HttpUriRequest; -import org.apache.http.entity.InputStreamEntity; -import org.apache.http.entity.AbstractHttpEntity; -import org.apache.http.entity.ByteArrayEntity; - -import android.content.ContentResolver; -import android.content.Context; -import android.net.http.AndroidHttpClient; -import android.text.TextUtils; -import android.util.Config; -import android.util.Log; -import android.os.SystemProperties; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.UnsupportedEncodingException; -import java.io.BufferedInputStream; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URLEncoder; - -/** - * Implementation of a GDataClient using GoogleHttpClient to make HTTP - * requests. Always issues GETs and POSTs, using the X-HTTP-Method-Override - * header when a PUT or DELETE is desired, to avoid issues with firewalls, etc., - * that do not allow methods other than GET or POST. - */ -public class AndroidGDataClient implements GDataClient { - - private static final String TAG = "GDataClient"; - private static final boolean DEBUG = false; - private static final boolean LOCAL_LOGV = DEBUG ? Config.LOGD : Config.LOGV; - - private static final String X_HTTP_METHOD_OVERRIDE = - "X-HTTP-Method-Override"; - - private static final String DEFAULT_USER_AGENT_APP_VERSION = "Android-GData/1.2"; - - private static final int MAX_REDIRECTS = 10; - private static String DEFAULT_GDATA_VERSION = "2.0"; - - // boolean system property that can be used to control whether or not - // requests/responses are gzip'd. - private static final String NO_GZIP_SYSTEM_PROPERTY = "sync.nogzip"; - - private String mGDataVersion; - private final GoogleHttpClient mHttpClient; - private ContentResolver mResolver; - - /** - * Interface for creating HTTP requests. Used by - * {@link AndroidGDataClient#createAndExecuteMethod}, since HttpUriRequest does not allow for - * changing the URI after creation, e.g., when you want to follow a redirect. - */ - private interface HttpRequestCreator { - HttpUriRequest createRequest(URI uri); - } - - private static class GetRequestCreator implements HttpRequestCreator { - public GetRequestCreator() { - } - - public HttpUriRequest createRequest(URI uri) { - HttpGet get = new HttpGet(uri); - return get; - } - } - - private static class PostRequestCreator implements HttpRequestCreator { - private final String mMethodOverride; - private final HttpEntity mEntity; - public PostRequestCreator(String methodOverride, HttpEntity entity) { - mMethodOverride = methodOverride; - mEntity = entity; - } - - public HttpUriRequest createRequest(URI uri) { - HttpPost post = new HttpPost(uri); - if (mMethodOverride != null) { - post.addHeader(X_HTTP_METHOD_OVERRIDE, mMethodOverride); - } - post.setEntity(mEntity); - return post; - } - } - - // MAJOR TODO: make this work across redirects (if we can reset the InputStream). - // OR, read the bits into a local buffer (yuck, the media could be large). - private static class MediaPutRequestCreator implements HttpRequestCreator { - private final InputStream mMediaInputStream; - private final String mContentType; - public MediaPutRequestCreator(InputStream mediaInputStream, String contentType) { - mMediaInputStream = mediaInputStream; - mContentType = contentType; - } - - public HttpUriRequest createRequest(URI uri) { - HttpPost post = new HttpPost(uri); - post.addHeader(X_HTTP_METHOD_OVERRIDE, "PUT"); - // mMediaInputStream.reset(); - InputStreamEntity entity = new InputStreamEntity(mMediaInputStream, - -1 /* read until EOF */); - entity.setContentType(mContentType); - post.setEntity(entity); - return post; - } - } - - - /** - * Creates a new AndroidGDataClient. - * - * @param context The ContentResolver to get URL rewriting rules from - * through the Android proxy server, using null to indicate not using proxy. - * The context will also be used by GoogleHttpClient for configuration of - * SSL session persistence. - */ - public AndroidGDataClient(Context context) { - this(context, DEFAULT_USER_AGENT_APP_VERSION); - } - - /** - * Creates a new AndroidGDataClient. - * - * @param context The ContentResolver to get URL rewriting rules from - * through the Android proxy server, using null to indicate not using proxy. - * The context will also be used by GoogleHttpClient for configuration of - * SSL session persistence. - * @param appAndVersion The application name and version to be used as the basis of the - * User-Agent. e.g., Android-GData/1.5.0. - */ - public AndroidGDataClient(Context context, String appAndVersion) { - this(context, appAndVersion, DEFAULT_GDATA_VERSION); - } - - /** - * Creates a new AndroidGDataClient. - * - * @param context The ContentResolver to get URL rewriting rules from - * through the Android proxy server, using null to indicate not using proxy. - * The context will also be used by GoogleHttpClient for configuration of - * SSL session persistence. - * @param appAndVersion The application name and version to be used as the basis of the - * User-Agent. e.g., Android-GData/1.5.0. - * @param gdataVersion The gdata service version that should be - * used, e.g. "2.0" - * - */ - public AndroidGDataClient(Context context, String appAndVersion, String gdataVersion) { - mHttpClient = new GoogleHttpClient(context, appAndVersion, - true /* gzip capable */); - mHttpClient.enableCurlLogging(TAG, Log.VERBOSE); - mResolver = context.getContentResolver(); - mGDataVersion = gdataVersion; - } - - - public void close() { - mHttpClient.close(); - } - - /* - * (non-Javadoc) - * @see GDataClient#encodeUri(java.lang.String) - */ - public String encodeUri(String uri) { - String encodedUri; - try { - encodedUri = URLEncoder.encode(uri, "UTF-8"); - } catch (UnsupportedEncodingException uee) { - // should not happen. - Log.e("JakartaGDataClient", - "UTF-8 not supported -- should not happen. " - + "Using default encoding.", uee); - encodedUri = URLEncoder.encode(uri); - } - return encodedUri; - } - - /* - * (non-Javadoc) - * @see com.google.wireless.gdata.client.GDataClient#createQueryParams() - */ - public QueryParams createQueryParams() { - return new QueryParamsImpl(); - } - - // follows redirects - private InputStream createAndExecuteMethod(HttpRequestCreator creator, - String uriString, - String authToken, - String eTag, - String protocolVersion) - throws HttpException, IOException { - - HttpResponse response = null; - int status = 500; - int redirectsLeft = MAX_REDIRECTS; - - URI uri; - try { - uri = new URI(uriString); - } catch (URISyntaxException use) { - Log.w(TAG, "Unable to parse " + uriString + " as URI.", use); - throw new IOException("Unable to parse " + uriString + " as URI: " - + use.getMessage()); - } - - // we follow redirects ourselves, since we want to follow redirects even on POSTs, which - // the HTTP library does not do. following redirects ourselves also allows us to log - // the redirects using our own logging. - while (redirectsLeft > 0) { - - HttpUriRequest request = creator.createRequest(uri); - - if (!SystemProperties.getBoolean(NO_GZIP_SYSTEM_PROPERTY, false)) { - AndroidHttpClient.modifyRequestToAcceptGzipResponse(request); - } - - // only add the auth token if not null (to allow for GData feeds that do not require - // authentication.) - if (!TextUtils.isEmpty(authToken)) { - request.addHeader("Authorization", "GoogleLogin auth=" + authToken); - } - - // while by default we have a 2.0 in this variable, it is possible to construct - // a client that has an empty version field, to work with 1.0 services. - if (!TextUtils.isEmpty(mGDataVersion)) { - request.addHeader("GDataVersion", mGDataVersion); - } - - // if we have a passed down eTag value, we need to add several headers - if (!TextUtils.isEmpty(eTag)) { - String method = request.getMethod(); - Header overrideMethodHeader = request.getFirstHeader(X_HTTP_METHOD_OVERRIDE); - if (overrideMethodHeader != null) { - method = overrideMethodHeader.getValue(); - } - if ("GET".equals(method)) { - // add the none match header, if the resource is not changed - // this request will result in a 304 now. - request.addHeader("If-None-Match", eTag); - } else if ("DELETE".equals(method) - || "PUT".equals(method)) { - // now we send an if-match, but only if the passed in eTag is a strong eTag - // as this only makes sense for a strong eTag - if (!eTag.startsWith("W/")) { - request.addHeader("If-Match", eTag); - } - } - } - - if (LOCAL_LOGV) { - for (Header h : request.getAllHeaders()) { - Log.v(TAG, h.getName() + ": " + h.getValue()); - } - } - - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, "Executing " + request.getRequestLine().toString()); - } - - response = null; - - try { - response = mHttpClient.execute(request); - } catch (IOException ioe) { - Log.w(TAG, "Unable to execute HTTP request." + ioe); - throw ioe; - } - - StatusLine statusLine = response.getStatusLine(); - if (statusLine == null) { - Log.w(TAG, "StatusLine is null."); - throw new NullPointerException("StatusLine is null -- should not happen."); - } - - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, response.getStatusLine().toString()); - for (Header h : response.getAllHeaders()) { - Log.d(TAG, h.getName() + ": " + h.getValue()); - } - } - status = statusLine.getStatusCode(); - - HttpEntity entity = response.getEntity(); - - if ((status >= 200) && (status < 300) && entity != null) { - InputStream in = AndroidHttpClient.getUngzippedContent(entity); - if (Log.isLoggable(TAG, Log.DEBUG)) { - in = logInputStreamContents(in); - } - return in; - } - - // TODO: handle 301, 307? - // TODO: let the http client handle the redirects, if we can be sure we'll never get a - // redirect on POST. - if (status == 302) { - // consume the content, so the connection can be closed. - entity.consumeContent(); - Header location = response.getFirstHeader("Location"); - if (location == null) { - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, "Redirect requested but no Location " - + "specified."); - } - break; - } - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, "Following redirect to " + location.getValue()); - } - try { - uri = new URI(location.getValue()); - } catch (URISyntaxException use) { - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, "Unable to parse " + location.getValue() + " as URI.", use); - throw new IOException("Unable to parse " + location.getValue() - + " as URI."); - } - break; - } - --redirectsLeft; - } else { - break; - } - } - - if (Log.isLoggable(TAG, Log.VERBOSE)) { - Log.v(TAG, "Received " + status + " status code."); - } - String errorMessage = null; - HttpEntity entity = response.getEntity(); - try { - if (response != null && entity != null) { - InputStream in = AndroidHttpClient.getUngzippedContent(entity); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - byte[] buf = new byte[8192]; - int bytesRead = -1; - while ((bytesRead = in.read(buf)) != -1) { - baos.write(buf, 0, bytesRead); - } - // TODO: use appropriate encoding, picked up from Content-Type. - errorMessage = new String(baos.toByteArray()); - if (Log.isLoggable(TAG, Log.VERBOSE)) { - Log.v(TAG, errorMessage); - } - } - } finally { - if (entity != null) { - entity.consumeContent(); - } - } - String exceptionMessage = "Received " + status + " status code"; - if (errorMessage != null) { - exceptionMessage += (": " + errorMessage); - } - throw new HttpException(exceptionMessage, status, null /* InputStream */); - } - - /* - * (non-Javadoc) - * @see GDataClient#getFeedAsStream(java.lang.String, java.lang.String) - */ - public InputStream getFeedAsStream(String feedUrl, - String authToken, - String eTag, - String protocolVersion) - throws HttpException, IOException { - - InputStream in = createAndExecuteMethod(new GetRequestCreator(), feedUrl, authToken, eTag, protocolVersion); - if (in != null) { - return in; - } - throw new IOException("Unable to access feed."); - } - - /** - * Log the contents of the input stream. - * The original input stream is consumed, so the caller must use the - * BufferedInputStream that is returned. - * @param in InputStream - * @return replacement input stream for caller to use - * @throws IOException - */ - private InputStream logInputStreamContents(InputStream in) throws IOException { - if (in == null) { - return in; - } - // bufferSize is the (arbitrary) maximum amount to log. - // The original InputStream is wrapped in a - // BufferedInputStream with a 16K buffer. This lets - // us read up to 16K, write it to the log, and then - // reset the stream so the the original client can - // then read the data. The BufferedInputStream - // provides the mark and reset support, even when - // the original InputStream does not. - final int bufferSize = 16384; - BufferedInputStream bin = new BufferedInputStream(in, bufferSize); - bin.mark(bufferSize); - int wanted = bufferSize; - int totalReceived = 0; - byte buf[] = new byte[wanted]; - while (wanted > 0) { - int got = bin.read(buf, totalReceived, wanted); - if (got <= 0) break; // EOF - wanted -= got; - totalReceived += got; - } - Log.d(TAG, new String(buf, 0, totalReceived, "UTF-8")); - bin.reset(); - return bin; - } - - public InputStream getMediaEntryAsStream(String mediaEntryUrl, String authToken, String eTag, String protocolVersion) - throws HttpException, IOException { - - InputStream in = createAndExecuteMethod(new GetRequestCreator(), mediaEntryUrl, authToken, eTag, protocolVersion); - - if (in != null) { - return in; - } - throw new IOException("Unable to access media entry."); - } - - /* (non-Javadoc) - * @see GDataClient#createEntry - */ - public InputStream createEntry(String feedUrl, - String authToken, - String protocolVersion, - GDataSerializer entry) - throws HttpException, IOException { - - HttpEntity entity = createEntityForEntry(entry, GDataSerializer.FORMAT_CREATE); - InputStream in = createAndExecuteMethod( - new PostRequestCreator(null /* override */, entity), - feedUrl, - authToken, - null, - protocolVersion); - if (in != null) { - return in; - } - throw new IOException("Unable to create entry."); - } - - /* (non-Javadoc) - * @see GDataClient#updateEntry - */ - public InputStream updateEntry(String editUri, - String authToken, - String eTag, - String protocolVersion, - GDataSerializer entry) - throws HttpException, IOException { - HttpEntity entity = createEntityForEntry(entry, GDataSerializer.FORMAT_UPDATE); - final String method = entry.getSupportsPartial() ? "PATCH" : "PUT"; - InputStream in = createAndExecuteMethod( - new PostRequestCreator(method, entity), - editUri, - authToken, - eTag, - protocolVersion); - if (in != null) { - return in; - } - throw new IOException("Unable to update entry."); - } - - /* (non-Javadoc) - * @see GDataClient#deleteEntry - */ - public void deleteEntry(String editUri, String authToken, String eTag) - throws HttpException, IOException { - if (StringUtils.isEmpty(editUri)) { - throw new IllegalArgumentException( - "you must specify an non-empty edit url"); - } - InputStream in = - createAndExecuteMethod( - new PostRequestCreator("DELETE", null /* entity */), - editUri, - authToken, - eTag, - null /* protocolVersion, not required for a delete */); - if (in == null) { - throw new IOException("Unable to delete entry."); - } - try { - in.close(); - } catch (IOException ioe) { - // ignore - } - } - - public InputStream updateMediaEntry(String editUri, String authToken, String eTag, - String protocolVersion, InputStream mediaEntryInputStream, String contentType) - throws HttpException, IOException { - InputStream in = createAndExecuteMethod( - new MediaPutRequestCreator(mediaEntryInputStream, contentType), - editUri, - authToken, - eTag, - protocolVersion); - if (in != null) { - return in; - } - throw new IOException("Unable to write media entry."); - } - - private HttpEntity createEntityForEntry(GDataSerializer entry, int format) throws IOException { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - try { - entry.serialize(baos, format); - } catch (IOException ioe) { - Log.e(TAG, "Unable to serialize entry.", ioe); - throw ioe; - } catch (ParseException pe) { - Log.e(TAG, "Unable to serialize entry.", pe); - throw new IOException("Unable to serialize entry: " + pe.getMessage()); - } - - byte[] entryBytes = baos.toByteArray(); - - if (entryBytes != null && Log.isLoggable(TAG, Log.DEBUG)) { - try { - Log.d(TAG, "Serialized entry: " + new String(entryBytes, "UTF-8")); - } catch (UnsupportedEncodingException uee) { - // should not happen - throw new IllegalStateException("UTF-8 should be supported!", - uee); - } - } - - AbstractHttpEntity entity; - if (SystemProperties.getBoolean(NO_GZIP_SYSTEM_PROPERTY, false)) { - entity = new ByteArrayEntity(entryBytes); - } else { - entity = AndroidHttpClient.getCompressedEntity(entryBytes, mResolver); - } - - entity.setContentType(entry.getContentType()); - return entity; - } - - /** - * Connects to a GData server (specified by the batchUrl) and submits a - * batch for processing. The response from the server is returned as an - * {@link InputStream}. The caller is responsible for calling - * {@link InputStream#close()} on the returned {@link InputStream}. - * - * @param batchUrl The batch url to which the batch is submitted. - * @param authToken the authentication token that should be used when - * submitting the batch. - * @param protocolVersion The version of the protocol that - * should be used for this request. - * @param batch The batch of entries to submit. - * @throws IOException Thrown if an io error occurs while communicating with - * the service. - * @throws HttpException if the service returns an error response. - */ - public InputStream submitBatch(String batchUrl, - String authToken, - String protocolVersion, - GDataSerializer batch) - throws HttpException, IOException - { - HttpEntity entity = createEntityForEntry(batch, GDataSerializer.FORMAT_BATCH); - InputStream in = createAndExecuteMethod( - new PostRequestCreator("POST", entity), - batchUrl, - authToken, - null, - protocolVersion); - if (in != null) { - return in; - } - throw new IOException("Unable to process batch request."); - } -} diff --git a/core/java/com/google/android/gdata2/client/AndroidXmlParserFactory.java b/core/java/com/google/android/gdata2/client/AndroidXmlParserFactory.java deleted file mode 100644 index f097706..0000000 --- a/core/java/com/google/android/gdata2/client/AndroidXmlParserFactory.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.google.android.gdata2.client; - -import com.google.wireless.gdata2.parser.xml.XmlParserFactory; - -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; -import org.xmlpull.v1.XmlSerializer; - -import android.util.Xml; - -/** - * XmlParserFactory for the Android platform. - */ -public class AndroidXmlParserFactory implements XmlParserFactory { - - /* - * (non-javadoc) - * @see XmlParserFactory#createParser - */ - public XmlPullParser createParser() throws XmlPullParserException { - return Xml.newPullParser(); - } - - /* - * (non-javadoc) - * @see XmlParserFactory#createSerializer - */ - public XmlSerializer createSerializer() throws XmlPullParserException { - return Xml.newSerializer(); - } -} diff --git a/core/java/com/google/android/gdata2/client/QueryParamsImpl.java b/core/java/com/google/android/gdata2/client/QueryParamsImpl.java deleted file mode 100644 index a26f4ce..0000000 --- a/core/java/com/google/android/gdata2/client/QueryParamsImpl.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.google.android.gdata2.client; -import com.google.wireless.gdata2.client.QueryParams; - -import android.text.TextUtils; -import android.util.Log; - -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - -/** - * Simple implementation of the QueryParams interface. - */ -// TODO: deal with categories -public class QueryParamsImpl extends QueryParams { - - private final Map<String,String> mParams = new HashMap<String,String>(); - - /** - * Creates a new empty QueryParamsImpl. - */ - public QueryParamsImpl() { - } - - @Override - public void clear() { - setEntryId(null); - mParams.clear(); - } - - @Override - public String generateQueryUrl(String feedUrl) { - - if (TextUtils.isEmpty(getEntryId()) && - mParams.isEmpty()) { - // nothing to do - return feedUrl; - } - - // handle entry IDs - if (!TextUtils.isEmpty(getEntryId())) { - if (!mParams.isEmpty()) { - throw new IllegalStateException("Cannot set both an entry ID " - + "and other query paramters."); - } - return feedUrl + '/' + getEntryId(); - } - - // otherwise, append the querystring params. - StringBuilder sb = new StringBuilder(); - sb.append(feedUrl); - Set<String> params = mParams.keySet(); - boolean first = true; - if (feedUrl.contains("?")) { - first = false; - } else { - sb.append('?'); - } - for (String param : params) { - if (first) { - first = false; - } else { - sb.append('&'); - } - sb.append(param); - sb.append('='); - String value = mParams.get(param); - String encodedValue = null; - - try { - encodedValue = URLEncoder.encode(value, "UTF-8"); - } catch (UnsupportedEncodingException uee) { - // should not happen. - Log.w("QueryParamsImpl", - "UTF-8 not supported -- should not happen. " - + "Using default encoding.", uee); - encodedValue = URLEncoder.encode(value); - } - sb.append(encodedValue); - } - return sb.toString(); - } - - @Override - public String getParamValue(String param) { - if (!(mParams.containsKey(param))) { - return null; - } - return mParams.get(param); - } - - @Override - public void setParamValue(String param, String value) { - mParams.put(param, value); - } - -} diff --git a/preloaded-classes b/preloaded-classes index ab83b67..08fc2a1 100644 --- a/preloaded-classes +++ b/preloaded-classes @@ -1097,10 +1097,6 @@ com.android.internal.widget.NumberPicker$NumberRangeKeyListener com.android.internal.widget.NumberPickerButton com.android.internal.widget.RotarySelector com.android.internal.widget.Smileys -com.google.android.gdata.client.AndroidGDataClient -com.google.android.gdata.client.AndroidGDataClient$GetRequestCreator -com.google.android.gdata.client.AndroidGDataClient$PostRequestCreator -com.google.android.gdata.client.QueryParamsImpl com.google.android.gles_jni.EGLDisplayImpl com.google.android.gles_jni.EGLImpl com.google.android.gles_jni.EGLSurfaceImpl @@ -1115,17 +1111,6 @@ com.google.android.net.ParentalControlState com.google.android.net.ParentalControlState$1 com.google.android.net.UrlRules com.google.android.net.UrlRules$Rule -com.google.wireless.gdata.calendar.client.CalendarClient -com.google.wireless.gdata.calendar.data.CalendarEntry -com.google.wireless.gdata.calendar.data.CalendarsFeed -com.google.wireless.gdata.calendar.data.EventEntry -com.google.wireless.gdata.calendar.data.Who -com.google.wireless.gdata.calendar.parser.xml.XmlCalendarGDataParserFactory -com.google.wireless.gdata.calendar.serializer.xml.XmlEventEntryGDataSerializer -com.google.wireless.gdata.client.GDataServiceClient -com.google.wireless.gdata.client.QueryParams -com.google.wireless.gdata.data.Entry -com.google.wireless.gdata.parser.xml.XmlGDataParser com.ibm.icu4jni.charset.CharsetDecoderICU com.ibm.icu4jni.charset.CharsetEncoderICU com.ibm.icu4jni.charset.CharsetICU diff --git a/tests/AndroidTests/res/raw/calendarjs.txt b/tests/AndroidTests/res/raw/calendarjs.txt deleted file mode 100644 index 15f7bab..0000000 --- a/tests/AndroidTests/res/raw/calendarjs.txt +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","encoding":"UTF-8","feed":{"xmlns":"http://www.w3.org/2005/Atom","xmlns$openSearch":"http://a9.com/-/spec/opensearchrss/1.0/","xmlns$gd":"http://schemas.google.com/g/2005","xmlns$gCal":"http://schemas.google.com/gCal/2005","id":{"$t":"http://www.google.com/calendar/feeds/wg%40voiceme.net/public/basic"},"updated":{"$t":"2007-02-06T02:55:15.000Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/g/2005#event"}],"title":{"type":"text","$t":"w g"},"subtitle":{"type":"text","$t":"w g"},"link":[{"rel":"http://schemas.google.com/g/2005#feed","type":"application/atom+xml","href":"http://www.google.com/calendar/feeds/wg%40voiceme.net/public/basic"},{"rel":"self","type":"application/atom+xml","href":"http://www.google.com/calendar/feeds/wg%40voiceme.net/public/basic?alt\u003Djson\u0026max-results\u003D25"}],"author":[{"name":{"$t":"w g"},"email":{"$t":"wg@voiceme.net"}}],"generator":{"version":"1.0","uri":"http://www.google.com/calendar","$t":"Google Calendar"},"openSearch$totalResults":{"$t":"13"},"openSearch$startIndex":{"$t":"1"},"openSearch$itemsPerPage":{"$t":"25"},"gCal$timezone":{"value":"America/Los_Angeles"},"entry":[{"id":{"$t":"http://www.google.com/calendar/feeds/wg%40voiceme.net/public/basic/7iqc1ro0ihc69vhsiq3uabooig"},"published":{"$t":"2007-02-05T22:04:50.000Z"},"updated":{"$t":"2007-02-05T22:04:50.000Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/g/2005#event"}],"title":{"type":"text","$t":"skate"},"summary":{"type":"html","$t":"When: Wed Feb 7, 2007 13:30 to Wed Feb 7, 2007 16:00\u0026nbsp; PST\u003Cbr\u003E \u003Cbr\u003EEvent Status: confirmed"},"content":{"type":"text","$t":"When: Wed Feb 7, 2007 13:30 to Wed Feb 7, 2007 16:00\u0026nbsp; PST\u003Cbr\u003E \u003Cbr\u003EEvent Status: confirmed"},"link":[{"rel":"alternate","type":"text/html","href":"http://www.google.com/calendar/event?eid\u003DN2lxYzFybzBpaGM2OXZoc2lxM3VhYm9vaWcgd2dAdm9pY2VtZS5uZXQ","title":"alternate"},{"rel":"self","type":"application/atom+xml","href":"http://www.google.com/calendar/feeds/wg%40voiceme.net/public/basic/7iqc1ro0ihc69vhsiq3uabooig"}],"author":[{"name":{"$t":"w g"},"email":{"$t":"wg@voiceme.net"}}],"gCal$sendEventNotifications":{"value":"false"}},{"id":{"$t":"http://www.google.com/calendar/feeds/wg%40voiceme.net/public/basic/kp4gil76n2vcrkt9kaotj3s12c"},"published":{"$t":"2007-02-05T22:04:42.000Z"},"updated":{"$t":"2007-02-05T22:04:42.000Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/g/2005#event"}],"title":{"type":"text","$t":"skate"},"summary":{"type":"html","$t":"When: Fri Feb 9, 2007 15:30 to Fri Feb 9, 2007 18:00\u0026nbsp; PST\u003Cbr\u003E \u003Cbr\u003EEvent Status: confirmed"},"content":{"type":"text","$t":"When: Fri Feb 9, 2007 15:30 to Fri Feb 9, 2007 18:00\u0026nbsp; PST\u003Cbr\u003E \u003Cbr\u003EEvent Status: confirmed"},"link":[{"rel":"alternate","type":"text/html","href":"http://www.google.com/calendar/event?eid\u003Da3A0Z2lsNzZuMnZjcmt0OWthb3RqM3MxMmMgd2dAdm9pY2VtZS5uZXQ","title":"alternate"},{"rel":"self","type":"application/atom+xml","href":"http://www.google.com/calendar/feeds/wg%40voiceme.net/public/basic/kp4gil76n2vcrkt9kaotj3s12c"}],"author":[{"name":{"$t":"w g"},"email":{"$t":"wg@voiceme.net"}}],"gCal$sendEventNotifications":{"value":"false"}},{"id":{"$t":"http://www.google.com/calendar/feeds/wg%40voiceme.net/public/basic/gkhb48fj68lcp15fd1k03tjbj0"},"published":{"$t":"2007-02-05T22:04:35.000Z"},"updated":{"$t":"2007-02-05T22:04:35.000Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/g/2005#event"}],"title":{"type":"text","$t":"test event 6"},"summary":{"type":"html","$t":"When: Sat Feb 10, 2007 14:00 to Sat Feb 10, 2007 17:00\u0026nbsp; PST\u003Cbr\u003E \u003Cbr\u003EEvent Status: confirmed"},"content":{"type":"text","$t":"When: Sat Feb 10, 2007 14:00 to Sat Feb 10, 2007 17:00\u0026nbsp; PST\u003Cbr\u003E \u003Cbr\u003EEvent Status: confirmed"},"link":[{"rel":"alternate","type":"text/html","href":"http://www.google.com/calendar/event?eid\u003DZ2toYjQ4Zmo2OGxjcDE1ZmQxazAzdGpiajAgd2dAdm9pY2VtZS5uZXQ","title":"alternate"},{"rel":"self","type":"application/atom+xml","href":"http://www.google.com/calendar/feeds/wg%40voiceme.net/public/basic/gkhb48fj68lcp15fd1k03tjbj0"}],"author":[{"name":{"$t":"w g"},"email":{"$t":"wg@voiceme.net"}}],"gCal$sendEventNotifications":{"value":"false"}},{"id":{"$t":"http://www.google.com/calendar/feeds/wg%40voiceme.net/public/basic/32p5g68cpean3p2ol7kanj38sg"},"published":{"$t":"2007-02-05T22:04:29.000Z"},"updated":{"$t":"2007-02-05T22:04:29.000Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/g/2005#event"}],"title":{"type":"text","$t":"test event 5"},"summary":{"type":"html","$t":"When: Fri Feb 9, 2007 09:00 to 10:30\u0026nbsp; PST\u003Cbr\u003E \u003Cbr\u003EEvent Status: confirmed"},"content":{"type":"text","$t":"When: Fri Feb 9, 2007 09:00 to 10:30\u0026nbsp; PST\u003Cbr\u003E \u003Cbr\u003EEvent Status: confirmed"},"link":[{"rel":"alternate","type":"text/html","href":"http://www.google.com/calendar/event?eid\u003DMzJwNWc2OGNwZWFuM3Ayb2w3a2FuajM4c2cgd2dAdm9pY2VtZS5uZXQ","title":"alternate"},{"rel":"self","type":"application/atom+xml","href":"http://www.google.com/calendar/feeds/wg%40voiceme.net/public/basic/32p5g68cpean3p2ol7kanj38sg"}],"author":[{"name":{"$t":"w g"},"email":{"$t":"wg@voiceme.net"}}],"gCal$sendEventNotifications":{"value":"false"}},{"id":{"$t":"http://www.google.com/calendar/feeds/wg%40voiceme.net/public/basic/tfqpth26conshdmav0apje1tf4"},"published":{"$t":"2007-02-05T22:04:19.000Z"},"updated":{"$t":"2007-02-05T22:04:19.000Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/g/2005#event"}],"title":{"type":"text","$t":"skate"},"summary":{"type":"html","$t":"When: Thu Feb 8, 2007 15:00 to Thu Feb 8, 2007 17:00\u0026nbsp; PST\u003Cbr\u003E \u003Cbr\u003EEvent Status: confirmed"},"content":{"type":"text","$t":"When: Thu Feb 8, 2007 15:00 to Thu Feb 8, 2007 17:00\u0026nbsp; PST\u003Cbr\u003E \u003Cbr\u003EEvent Status: confirmed"},"link":[{"rel":"alternate","type":"text/html","href":"http://www.google.com/calendar/event?eid\u003DdGZxcHRoMjZjb25zaGRtYXYwYXBqZTF0ZjQgd2dAdm9pY2VtZS5uZXQ","title":"alternate"},{"rel":"self","type":"application/atom+xml","href":"http://www.google.com/calendar/feeds/wg%40voiceme.net/public/basic/tfqpth26conshdmav0apje1tf4"}],"author":[{"name":{"$t":"w g"},"email":{"$t":"wg@voiceme.net"}}],"gCal$sendEventNotifications":{"value":"false"}},{"id":{"$t":"http://www.google.com/calendar/feeds/wg%40voiceme.net/public/basic/onbo9mhbr5m6mo356nog7uel4s"},"published":{"$t":"2007-02-05T22:04:07.000Z"},"updated":{"$t":"2007-02-05T22:04:07.000Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/g/2005#event"}],"title":{"type":"text","$t":"Sharks at Anaheim"},"summary":{"type":"html","$t":"When: Wed Feb 7, 2007 19:00 to 22:00\u0026nbsp; PST\u003Cbr\u003E \u003Cbr\u003EEvent Status: confirmed"},"content":{"type":"text","$t":"When: Wed Feb 7, 2007 19:00 to 22:00\u0026nbsp; PST\u003Cbr\u003E \u003Cbr\u003EEvent Status: confirmed"},"link":[{"rel":"alternate","type":"text/html","href":"http://www.google.com/calendar/event?eid\u003Db25ibzltaGJyNW02bW8zNTZub2c3dWVsNHMgd2dAdm9pY2VtZS5uZXQ","title":"alternate"},{"rel":"self","type":"application/atom+xml","href":"http://www.google.com/calendar/feeds/wg%40voiceme.net/public/basic/onbo9mhbr5m6mo356nog7uel4s"}],"author":[{"name":{"$t":"w g"},"email":{"$t":"wg@voiceme.net"}}],"gCal$sendEventNotifications":{"value":"true"}},{"id":{"$t":"http://www.google.com/calendar/feeds/wg%40voiceme.net/public/basic/tjqrd9fve576hieh3sa67nql5k"},"published":{"$t":"2007-02-05T22:04:02.000Z"},"updated":{"$t":"2007-02-05T22:04:02.000Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/g/2005#event"}],"title":{"type":"text","$t":"Sharks vs. ANAHEIM"},"summary":{"type":"html","$t":"When: Tue Feb 6, 2007 19:30 to 22:30\u0026nbsp; PST\u003Cbr\u003E \u003Cbr\u003EEvent Status: confirmed"},"content":{"type":"text","$t":"When: Tue Feb 6, 2007 19:30 to 22:30\u0026nbsp; PST\u003Cbr\u003E \u003Cbr\u003EEvent Status: confirmed"},"link":[{"rel":"alternate","type":"text/html","href":"http://www.google.com/calendar/event?eid\u003DdGpxcmQ5ZnZlNTc2aGllaDNzYTY3bnFsNWsgd2dAdm9pY2VtZS5uZXQ","title":"alternate"},{"rel":"self","type":"application/atom+xml","href":"http://www.google.com/calendar/feeds/wg%40voiceme.net/public/basic/tjqrd9fve576hieh3sa67nql5k"}],"author":[{"name":{"$t":"w g"},"email":{"$t":"wg@voiceme.net"}}],"gCal$sendEventNotifications":{"value":"true"}},{"id":{"$t":"http://www.google.com/calendar/feeds/wg%40voiceme.net/public/basic/or6dtpn065f9mntond4jh2docc"},"published":{"$t":"2007-02-05T22:03:52.000Z"},"updated":{"$t":"2007-02-05T22:03:52.000Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/g/2005#event"}],"title":{"type":"text","$t":"skate"},"summary":{"type":"html","$t":"When: Tue Feb 6, 2007 14:00 to 15:00\u0026nbsp; PST\u003Cbr\u003E \u003Cbr\u003EEvent Status: confirmed"},"content":{"type":"text","$t":"When: Tue Feb 6, 2007 14:00 to 15:00\u0026nbsp; PST\u003Cbr\u003E \u003Cbr\u003EEvent Status: confirmed"},"link":[{"rel":"alternate","type":"text/html","href":"http://www.google.com/calendar/event?eid\u003Db3I2ZHRwbjA2NWY5bW50b25kNGpoMmRvY2Mgd2dAdm9pY2VtZS5uZXQ","title":"alternate"},{"rel":"self","type":"application/atom+xml","href":"http://www.google.com/calendar/feeds/wg%40voiceme.net/public/basic/or6dtpn065f9mntond4jh2docc"}],"author":[{"name":{"$t":"w g"},"email":{"$t":"wg@voiceme.net"}}],"gCal$sendEventNotifications":{"value":"false"}},{"id":{"$t":"http://www.google.com/calendar/feeds/wg%40voiceme.net/public/basic/k70v8o4jt1afi17hg2spavq1c0"},"published":{"$t":"2007-02-05T22:03:36.000Z"},"updated":{"$t":"2007-02-05T22:03:36.000Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/g/2005#event"}],"title":{"type":"text","$t":"lunch"},"summary":{"type":"html","$t":"Recurring Event\u003Cbr\u003E First start: 2007-02-06 12:00:00 PST \u003Cbr\u003E Duration: 3600 \u003Cbr\u003EEvent Status: confirmed"},"content":{"type":"text","$t":"Recurring Event\u003Cbr\u003E First start: 2007-02-06 12:00:00 PST \u003Cbr\u003E Duration: 3600 \u003Cbr\u003EEvent Status: confirmed"},"link":[{"rel":"alternate","type":"text/html","href":"http://www.google.com/calendar/event?eid\u003DazcwdjhvNGp0MWFmaTE3aGcyc3BhdnExYzBfMjAwNzAyMDZUMjAwMDAwWiB3Z0B2b2ljZW1lLm5ldA","title":"alternate"},{"rel":"self","type":"application/atom+xml","href":"http://www.google.com/calendar/feeds/wg%40voiceme.net/public/basic/k70v8o4jt1afi17hg2spavq1c0"}],"author":[{"name":{"$t":"w g"},"email":{"$t":"wg@voiceme.net"}}],"gCal$sendEventNotifications":{"value":"true"}},{"id":{"$t":"http://www.google.com/calendar/feeds/wg%40voiceme.net/public/basic/6ee7b8nohdt03tv0gknm4v7124"},"published":{"$t":"2007-02-05T22:03:19.000Z"},"updated":{"$t":"2007-02-05T22:03:19.000Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/g/2005#event"}],"title":{"type":"text","$t":"test event 4"},"summary":{"type":"html","$t":"When: Tue Feb 6, 2007 09:00 to 11:00\u0026nbsp; PST\u003Cbr\u003E \u003Cbr\u003EEvent Status: confirmed"},"content":{"type":"text","$t":"When: Tue Feb 6, 2007 09:00 to 11:00\u0026nbsp; PST\u003Cbr\u003E \u003Cbr\u003EEvent Status: confirmed"},"link":[{"rel":"alternate","type":"text/html","href":"http://www.google.com/calendar/event?eid\u003DNmVlN2I4bm9oZHQwM3R2MGdrbm00djcxMjQgd2dAdm9pY2VtZS5uZXQ","title":"alternate"},{"rel":"self","type":"application/atom+xml","href":"http://www.google.com/calendar/feeds/wg%40voiceme.net/public/basic/6ee7b8nohdt03tv0gknm4v7124"}],"author":[{"name":{"$t":"w g"},"email":{"$t":"wg@voiceme.net"}}],"gCal$sendEventNotifications":{"value":"false"}},{"id":{"$t":"http://www.google.com/calendar/feeds/wg%40voiceme.net/public/basic/of1vh1r2q5aqdplo65i8bqbn3o"},"published":{"$t":"2007-02-05T22:03:11.000Z"},"updated":{"$t":"2007-02-05T22:03:11.000Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/g/2005#event"}],"title":{"type":"text","$t":"test event 3"},"summary":{"type":"html","$t":"When: Mon Feb 5, 2007 18:00 to 19:00\u0026nbsp; PST\u003Cbr\u003E \u003Cbr\u003EEvent Status: confirmed"},"content":{"type":"text","$t":"When: Mon Feb 5, 2007 18:00 to 19:00\u0026nbsp; PST\u003Cbr\u003E \u003Cbr\u003EEvent Status: confirmed"},"link":[{"rel":"alternate","type":"text/html","href":"http://www.google.com/calendar/event?eid\u003Db2YxdmgxcjJxNWFxZHBsbzY1aThicWJuM28gd2dAdm9pY2VtZS5uZXQ","title":"alternate"},{"rel":"self","type":"application/atom+xml","href":"http://www.google.com/calendar/feeds/wg%40voiceme.net/public/basic/of1vh1r2q5aqdplo65i8bqbn3o"}],"author":[{"name":{"$t":"w g"},"email":{"$t":"wg@voiceme.net"}}],"gCal$sendEventNotifications":{"value":"false"}},{"id":{"$t":"http://www.google.com/calendar/feeds/wg%40voiceme.net/public/basic/s7ahgfomlgii9qbkgpfbinr9u8"},"published":{"$t":"2007-02-05T22:02:40.000Z"},"updated":{"$t":"2007-02-05T22:03:04.000Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/g/2005#event"}],"title":{"type":"text","$t":"test event 2"},"summary":{"type":"html","$t":"When: Mon Feb 5, 2007 16:30 to 17:30\u0026nbsp; PST\u003Cbr\u003E \u003Cbr\u003EEvent Status: confirmed"},"content":{"type":"text","$t":"When: Mon Feb 5, 2007 16:30 to 17:30\u0026nbsp; PST\u003Cbr\u003E \u003Cbr\u003EEvent Status: confirmed"},"link":[{"rel":"alternate","type":"text/html","href":"http://www.google.com/calendar/event?eid\u003DczdhaGdmb21sZ2lpOXFia2dwZmJpbnI5dTggd2dAdm9pY2VtZS5uZXQ","title":"alternate"},{"rel":"self","type":"application/atom+xml","href":"http://www.google.com/calendar/feeds/wg%40voiceme.net/public/basic/s7ahgfomlgii9qbkgpfbinr9u8"}],"author":[{"name":{"$t":"w g"},"email":{"$t":"wg@voiceme.net"}}],"gCal$sendEventNotifications":{"value":"false"}},{"id":{"$t":"http://www.google.com/calendar/feeds/wg%40voiceme.net/public/basic/rl8focglfe6jndql4u8lg73q5k"},"published":{"$t":"2007-02-05T22:02:28.000Z"},"updated":{"$t":"2007-02-05T22:02:53.000Z"},"category":[{"scheme":"http://schemas.google.com/g/2005#kind","term":"http://schemas.google.com/g/2005#event"}],"title":{"type":"text","$t":"test event 1"},"summary":{"type":"html","$t":"When: Mon Feb 5, 2007 15:00 to Mon Feb 5, 2007 16:00\u0026nbsp; PST\u003Cbr\u003E \u003Cbr\u003EEvent Status: confirmed"},"content":{"type":"text","$t":"When: Mon Feb 5, 2007 15:00 to Mon Feb 5, 2007 16:00\u0026nbsp; PST\u003Cbr\u003E \u003Cbr\u003EEvent Status: confirmed"},"link":[{"rel":"alternate","type":"text/html","href":"http://www.google.com/calendar/event?eid\u003Dcmw4Zm9jZ2xmZTZqbmRxbDR1OGxnNzNxNWsgd2dAdm9pY2VtZS5uZXQ","title":"alternate"},{"rel":"self","type":"application/atom+xml","href":"http://www.google.com/calendar/feeds/wg%40voiceme.net/public/basic/rl8focglfe6jndql4u8lg73q5k"}],"author":[{"name":{"$t":"w g"},"email":{"$t":"wg@voiceme.net"}}],"gCal$sendEventNotifications":{"value":"false"}}]}}
\ No newline at end of file diff --git a/tests/AndroidTests/res/raw/calendarjsgz.jsgz b/tests/AndroidTests/res/raw/calendarjsgz.jsgz Binary files differdeleted file mode 100644 index 6f1bf54..0000000 --- a/tests/AndroidTests/res/raw/calendarjsgz.jsgz +++ /dev/null diff --git a/tests/AndroidTests/res/raw/calendarxml.xml b/tests/AndroidTests/res/raw/calendarxml.xml deleted file mode 100644 index 1adcd74..0000000 --- a/tests/AndroidTests/res/raw/calendarxml.xml +++ /dev/null @@ -1,38 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2007 The Android Open Source Project - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> - -<feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:gd='http://schemas.google.com/g/2005' xmlns:gCal='http://schemas.google.com/gCal/2005'><id>http://www.google.com/calendar/feeds/default/private/full</id><updated>2007-02-05T22:04:50.000Z</updated><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>w g</title><subtitle type='text'>w g</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full'></link><link rel='http://schemas.google.com/g/2005#post' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full?max-results=25'></link><author><name>w g</name><email>wg@voiceme.net</email></author><generator version='1.0' uri='http://www.google.com/calendar'>Google Calendar</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><gCal:timezone value='America/Los_Angeles'></gCal:timezone><entry><id>http://www.google.com/calendar/feeds/default/private/full/7iqc1ro0ihc69vhsiq3uabooig</id><published>2007-02-05T22:04:50.000Z</published><updated>2007-02-05T22:04:50.000Z</updated><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>skate</title><content type='text'></content><link rel='alternate' type='text/html' href='http://www.google.com/calendar/hosted/voiceme.net/event?eid=N2lxYzFybzBpaGM2OXZoc2lxM3VhYm9vaWcgd2dAdm9pY2VtZS5uZXQ' title='alternate'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/7iqc1ro0ihc69vhsiq3uabooig'></link><link rel='edit' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/7iqc1ro0ihc69vhsiq3uabooig/63306396290'></link><author><name>w g</name><email>wg@voiceme.net</email></author><gd:comments><gd:feedLink href='http://www.google.com/calendar/feeds/default/private/full/7iqc1ro0ihc69vhsiq3uabooig/comments'></gd:feedLink></gd:comments><gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus><gd:visibility value='http://schemas.google.com/g/2005#event.default'></gd:visibility><gCal:sendEventNotifications value='false'></gCal:sendEventNotifications><gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency><gd:where></gd:where><gd:when startTime='2007-02-07T13:30:00.000-08:00' endTime='2007-02-07T16:00:00.000-08:00'><gd:reminder minutes='10'></gd:reminder></gd:when></entry><entry><id>http://www.google.com/calendar/feeds/default/private/full/kp4gil76n2vcrkt9kaotj3s12c</id><published>2007-02-05T22:04:42.000Z</published><updated>2007-02-05T22:04:42.000Z</updated><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>skate</title><content type='text'></content><link rel='alternate' type='text/html' href='http://www.google.com/calendar/hosted/voiceme.net/event?eid=a3A0Z2lsNzZuMnZjcmt0OWthb3RqM3MxMmMgd2dAdm9pY2VtZS5uZXQ' title='alternate'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/kp4gil76n2vcrkt9kaotj3s12c'></link><link rel='edit' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/kp4gil76n2vcrkt9kaotj3s12c/63306396282'></link><author><name>w g</name><email>wg@voiceme.net</email></author><gd:comments><gd:feedLink href='http://www.google.com/calendar/feeds/default/private/full/kp4gil76n2vcrkt9kaotj3s12c/comments'></gd:feedLink></gd:comments><gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus><gd:visibility value='http://schemas.google.com/g/2005#event.default'></gd:visibility><gCal:sendEventNotifications value='false'></gCal:sendEventNotifications><gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency><gd:where></gd:where><gd:when startTime='2007-02-09T15:30:00.000-08:00' endTime='2007-02-09T18:00:00.000-08:00'><gd:reminder minutes='10'></gd:reminder></gd:when></entry><entry><id>http://www.google.com/calendar/feeds/default/private/full/gkhb48fj68lcp15fd1k03tjbj0</id><published>2007-02-05T22:04:35.000Z</published><updated>2007-02-05T22:04:35.000Z</updated><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>test event 6</title><content type='text'></content><link rel='alternate' type='text/html' href='http://www.google.com/calendar/hosted/voiceme.net/event?eid=Z2toYjQ4Zmo2OGxjcDE1ZmQxazAzdGpiajAgd2dAdm9pY2VtZS5uZXQ' title='alternate'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/gkhb48fj68lcp15fd1k03tjbj0'></link><link rel='edit' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/gkhb48fj68lcp15fd1k03tjbj0/63306396275'></link><author><name>w g</name><email>wg@voiceme.net</email></author><gd:comments><gd:feedLink href='http://www.google.com/calendar/feeds/default/private/full/gkhb48fj68lcp15fd1k03tjbj0/comments'></gd:feedLink></gd:comments><gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus><gd:visibility value='http://schemas.google.com/g/2005#event.default'></gd:visibility><gCal:sendEventNotifications value='false'></gCal:sendEventNotifications><gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency><gd:where></gd:where><gd:when startTime='2007-02-10T14:00:00.000-08:00' endTime='2007-02-10T17:00:00.000-08:00'><gd:reminder minutes='10'></gd:reminder></gd:when></entry><entry><id>http://www.google.com/calendar/feeds/default/private/full/32p5g68cpean3p2ol7kanj38sg</id><published>2007-02-05T22:04:29.000Z</published><updated>2007-02-05T22:04:29.000Z</updated><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>test event 5</title><content type='text'></content><link rel='alternate' type='text/html' href='http://www.google.com/calendar/hosted/voiceme.net/event?eid=MzJwNWc2OGNwZWFuM3Ayb2w3a2FuajM4c2cgd2dAdm9pY2VtZS5uZXQ' title='alternate'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/32p5g68cpean3p2ol7kanj38sg'></link><link rel='edit' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/32p5g68cpean3p2ol7kanj38sg/63306396269'></link><author><name>w g</name><email>wg@voiceme.net</email></author><gd:comments><gd:feedLink href='http://www.google.com/calendar/feeds/default/private/full/32p5g68cpean3p2ol7kanj38sg/comments'></gd:feedLink></gd:comments><gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus><gd:visibility value='http://schemas.google.com/g/2005#event.default'></gd:visibility><gCal:sendEventNotifications value='false'></gCal:sendEventNotifications><gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency><gd:where></gd:where><gd:when startTime='2007-02-09T09:00:00.000-08:00' endTime='2007-02-09T10:30:00.000-08:00'><gd:reminder minutes='10'></gd:reminder></gd:when></entry><entry><id>http://www.google.com/calendar/feeds/default/private/full/tfqpth26conshdmav0apje1tf4</id><published>2007-02-05T22:04:19.000Z</published><updated>2007-02-05T22:04:19.000Z</updated><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>skate</title><content type='text'></content><link rel='alternate' type='text/html' href='http://www.google.com/calendar/hosted/voiceme.net/event?eid=dGZxcHRoMjZjb25zaGRtYXYwYXBqZTF0ZjQgd2dAdm9pY2VtZS5uZXQ' title='alternate'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/tfqpth26conshdmav0apje1tf4'></link><link rel='edit' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/tfqpth26conshdmav0apje1tf4/63306396259'></link><author><name>w g</name><email>wg@voiceme.net</email></author><gd:comments><gd:feedLink href='http://www.google.com/calendar/feeds/default/private/full/tfqpth26conshdmav0apje1tf4/comments'></gd:feedLink></gd:comments><gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus><gd:visibility value='http://schemas.google.com/g/2005#event.default'></gd:visibility><gCal:sendEventNotifications value='false'></gCal:sendEventNotifications><gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency><gd:where></gd:where><gd:when startTime='2007-02-08T15:00:00.000-08:00' endTime='2007-02-08T17:00:00.000-08:00'><gd:reminder minutes='10'></gd:reminder></gd:when></entry><entry><id>http://www.google.com/calendar/feeds/default/private/full/onbo9mhbr5m6mo356nog7uel4s</id><published>2007-02-05T22:04:07.000Z</published><updated>2007-02-05T22:04:07.000Z</updated><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>Sharks at Anaheim</title><content type='text'></content><link rel='alternate' type='text/html' href='http://www.google.com/calendar/hosted/voiceme.net/event?eid=b25ibzltaGJyNW02bW8zNTZub2c3dWVsNHMgd2dAdm9pY2VtZS5uZXQ' title='alternate'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/onbo9mhbr5m6mo356nog7uel4s'></link><link rel='edit' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/onbo9mhbr5m6mo356nog7uel4s/63306396247'></link><author><name>w g</name><email>wg@voiceme.net</email></author><gd:comments><gd:feedLink href='http://www.google.com/calendar/feeds/default/private/full/onbo9mhbr5m6mo356nog7uel4s/comments'></gd:feedLink></gd:comments><gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus><gd:visibility value='http://schemas.google.com/g/2005#event.default'></gd:visibility><gCal:sendEventNotifications value='true'></gCal:sendEventNotifications><gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency><gd:where valueString=''></gd:where><gd:when startTime='2007-02-07T19:00:00.000-08:00' endTime='2007-02-07T22:00:00.000-08:00'><gd:reminder minutes='10'></gd:reminder></gd:when></entry><entry><id>http://www.google.com/calendar/feeds/default/private/full/tjqrd9fve576hieh3sa67nql5k</id><published>2007-02-05T22:04:02.000Z</published><updated>2007-02-05T22:04:02.000Z</updated><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>Sharks vs. ANAHEIM</title><content type='text'></content><link rel='alternate' type='text/html' href='http://www.google.com/calendar/hosted/voiceme.net/event?eid=dGpxcmQ5ZnZlNTc2aGllaDNzYTY3bnFsNWsgd2dAdm9pY2VtZS5uZXQ' title='alternate'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/tjqrd9fve576hieh3sa67nql5k'></link><link rel='edit' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/tjqrd9fve576hieh3sa67nql5k/63306396242'></link><author><name>w g</name><email>wg@voiceme.net</email></author><gd:comments><gd:feedLink href='http://www.google.com/calendar/feeds/default/private/full/tjqrd9fve576hieh3sa67nql5k/comments'></gd:feedLink></gd:comments><gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus><gd:visibility value='http://schemas.google.com/g/2005#event.default'></gd:visibility><gCal:sendEventNotifications value='true'></gCal:sendEventNotifications><gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency><gd:where valueString=''></gd:where><gd:when startTime='2007-02-06T19:30:00.000-08:00' endTime='2007-02-06T22:30:00.000-08:00'><gd:reminder minutes='10'></gd:reminder></gd:when></entry><entry><id>http://www.google.com/calendar/feeds/default/private/full/or6dtpn065f9mntond4jh2docc</id><published>2007-02-05T22:03:52.000Z</published><updated>2007-02-05T22:03:52.000Z</updated><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>skate</title><content type='text'></content><link rel='alternate' type='text/html' href='http://www.google.com/calendar/hosted/voiceme.net/event?eid=b3I2ZHRwbjA2NWY5bW50b25kNGpoMmRvY2Mgd2dAdm9pY2VtZS5uZXQ' title='alternate'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/or6dtpn065f9mntond4jh2docc'></link><link rel='edit' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/or6dtpn065f9mntond4jh2docc/63306396232'></link><author><name>w g</name><email>wg@voiceme.net</email></author><gd:comments><gd:feedLink href='http://www.google.com/calendar/feeds/default/private/full/or6dtpn065f9mntond4jh2docc/comments'></gd:feedLink></gd:comments><gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus><gd:visibility value='http://schemas.google.com/g/2005#event.default'></gd:visibility><gCal:sendEventNotifications value='false'></gCal:sendEventNotifications><gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency><gd:where></gd:where><gd:when startTime='2007-02-06T14:00:00.000-08:00' endTime='2007-02-06T15:00:00.000-08:00'><gd:reminder minutes='10'></gd:reminder></gd:when></entry><entry><id>http://www.google.com/calendar/feeds/default/private/full/k70v8o4jt1afi17hg2spavq1c0</id><published>2007-02-05T22:03:36.000Z</published><updated>2007-02-05T22:03:36.000Z</updated><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>lunch</title><content type='text'></content><link rel='alternate' type='text/html' href='http://www.google.com/calendar/hosted/voiceme.net/event?eid=azcwdjhvNGp0MWFmaTE3aGcyc3BhdnExYzBfMjAwNzAyMDZUMjAwMDAwWiB3Z0B2b2ljZW1lLm5ldA' title='alternate'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/k70v8o4jt1afi17hg2spavq1c0'></link><link rel='edit' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/k70v8o4jt1afi17hg2spavq1c0/63306396216'></link><author><name>w g</name><email>wg@voiceme.net</email></author><gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus><gd:visibility value='http://schemas.google.com/g/2005#event.default'></gd:visibility><gCal:sendEventNotifications value='true'></gCal:sendEventNotifications><gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency><gd:recurrence>DTSTART;TZID=America/Los_Angeles:20070206T120000 -DURATION:PT3600S -RRULE:FREQ=DAILY;WKST=SU -BEGIN:VTIMEZONE -TZID:America/Los_Angeles -X-LIC-LOCATION:America/Los_Angeles -BEGIN:STANDARD -TZOFFSETFROM:-0700 -TZOFFSETTO:-0800 -TZNAME:PST -DTSTART:19701025T020000 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU -END:STANDARD -BEGIN:DAYLIGHT -TZOFFSETFROM:-0800 -TZOFFSETTO:-0700 -TZNAME:PDT -DTSTART:19700405T020000 -RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU -END:DAYLIGHT -END:VTIMEZONE -</gd:recurrence><gd:where valueString=''></gd:where><gd:reminder minutes='10'></gd:reminder></entry><entry><id>http://www.google.com/calendar/feeds/default/private/full/6ee7b8nohdt03tv0gknm4v7124</id><published>2007-02-05T22:03:19.000Z</published><updated>2007-02-05T22:03:19.000Z</updated><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>test event 4</title><content type='text'></content><link rel='alternate' type='text/html' href='http://www.google.com/calendar/hosted/voiceme.net/event?eid=NmVlN2I4bm9oZHQwM3R2MGdrbm00djcxMjQgd2dAdm9pY2VtZS5uZXQ' title='alternate'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/6ee7b8nohdt03tv0gknm4v7124'></link><link rel='edit' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/6ee7b8nohdt03tv0gknm4v7124/63306396199'></link><author><name>w g</name><email>wg@voiceme.net</email></author><gd:comments><gd:feedLink href='http://www.google.com/calendar/feeds/default/private/full/6ee7b8nohdt03tv0gknm4v7124/comments'></gd:feedLink></gd:comments><gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus><gd:visibility value='http://schemas.google.com/g/2005#event.default'></gd:visibility><gCal:sendEventNotifications value='false'></gCal:sendEventNotifications><gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency><gd:where></gd:where><gd:when startTime='2007-02-06T09:00:00.000-08:00' endTime='2007-02-06T11:00:00.000-08:00'><gd:reminder minutes='10'></gd:reminder></gd:when></entry><entry><id>http://www.google.com/calendar/feeds/default/private/full/of1vh1r2q5aqdplo65i8bqbn3o</id><published>2007-02-05T22:03:11.000Z</published><updated>2007-02-05T22:03:11.000Z</updated><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>test event 3</title><content type='text'></content><link rel='alternate' type='text/html' href='http://www.google.com/calendar/hosted/voiceme.net/event?eid=b2YxdmgxcjJxNWFxZHBsbzY1aThicWJuM28gd2dAdm9pY2VtZS5uZXQ' title='alternate'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/of1vh1r2q5aqdplo65i8bqbn3o'></link><link rel='edit' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/of1vh1r2q5aqdplo65i8bqbn3o/63306396191'></link><author><name>w g</name><email>wg@voiceme.net</email></author><gd:comments><gd:feedLink href='http://www.google.com/calendar/feeds/default/private/full/of1vh1r2q5aqdplo65i8bqbn3o/comments'></gd:feedLink></gd:comments><gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus><gd:visibility value='http://schemas.google.com/g/2005#event.default'></gd:visibility><gCal:sendEventNotifications value='false'></gCal:sendEventNotifications><gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency><gd:where></gd:where><gd:when startTime='2007-02-05T18:00:00.000-08:00' endTime='2007-02-05T19:00:00.000-08:00'><gd:reminder minutes='10'></gd:reminder></gd:when></entry><entry><id>http://www.google.com/calendar/feeds/default/private/full/s7ahgfomlgii9qbkgpfbinr9u8</id><published>2007-02-05T22:02:40.000Z</published><updated>2007-02-05T22:03:04.000Z</updated><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>test event 2</title><content type='text'></content><link rel='alternate' type='text/html' href='http://www.google.com/calendar/hosted/voiceme.net/event?eid=czdhaGdmb21sZ2lpOXFia2dwZmJpbnI5dTggd2dAdm9pY2VtZS5uZXQ' title='alternate'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/s7ahgfomlgii9qbkgpfbinr9u8'></link><link rel='edit' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/s7ahgfomlgii9qbkgpfbinr9u8/63306396184'></link><author><name>w g</name><email>wg@voiceme.net</email></author><gd:comments><gd:feedLink href='http://www.google.com/calendar/feeds/default/private/full/s7ahgfomlgii9qbkgpfbinr9u8/comments'></gd:feedLink></gd:comments><gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus><gd:visibility value='http://schemas.google.com/g/2005#event.default'></gd:visibility><gCal:sendEventNotifications value='false'></gCal:sendEventNotifications><gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency><gd:where valueString=''></gd:where><gd:when startTime='2007-02-05T16:30:00.000-08:00' endTime='2007-02-05T17:30:00.000-08:00'><gd:reminder minutes='10'></gd:reminder></gd:when></entry><entry><id>http://www.google.com/calendar/feeds/default/private/full/rl8focglfe6jndql4u8lg73q5k</id><published>2007-02-05T22:02:28.000Z</published><updated>2007-02-05T22:02:53.000Z</updated><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>test event 1</title><content type='text'></content><link rel='alternate' type='text/html' href='http://www.google.com/calendar/hosted/voiceme.net/event?eid=cmw4Zm9jZ2xmZTZqbmRxbDR1OGxnNzNxNWsgd2dAdm9pY2VtZS5uZXQ' title='alternate'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/rl8focglfe6jndql4u8lg73q5k'></link><link rel='edit' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/rl8focglfe6jndql4u8lg73q5k/63306396173'></link><author><name>w g</name><email>wg@voiceme.net</email></author><gd:comments><gd:feedLink href='http://www.google.com/calendar/feeds/default/private/full/rl8focglfe6jndql4u8lg73q5k/comments'></gd:feedLink></gd:comments><gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus><gd:visibility value='http://schemas.google.com/g/2005#event.default'></gd:visibility><gCal:sendEventNotifications value='false'></gCal:sendEventNotifications><gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency><gd:where></gd:where><gd:when startTime='2007-02-05T15:00:00.000-08:00' endTime='2007-02-05T16:00:00.000-08:00'><gd:reminder minutes='10'></gd:reminder></gd:when></entry></feed> diff --git a/tests/AndroidTests/res/raw/calendarxmlgz.xmlgz b/tests/AndroidTests/res/raw/calendarxmlgz.xmlgz Binary files differdeleted file mode 100644 index 6c86462..0000000 --- a/tests/AndroidTests/res/raw/calendarxmlgz.xmlgz +++ /dev/null diff --git a/tests/AndroidTests/res/xml/calendar.xml b/tests/AndroidTests/res/xml/calendar.xml deleted file mode 100644 index 1adcd74..0000000 --- a/tests/AndroidTests/res/xml/calendar.xml +++ /dev/null @@ -1,38 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2007 The Android Open Source Project - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> - -<feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:gd='http://schemas.google.com/g/2005' xmlns:gCal='http://schemas.google.com/gCal/2005'><id>http://www.google.com/calendar/feeds/default/private/full</id><updated>2007-02-05T22:04:50.000Z</updated><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>w g</title><subtitle type='text'>w g</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full'></link><link rel='http://schemas.google.com/g/2005#post' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full?max-results=25'></link><author><name>w g</name><email>wg@voiceme.net</email></author><generator version='1.0' uri='http://www.google.com/calendar'>Google Calendar</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><gCal:timezone value='America/Los_Angeles'></gCal:timezone><entry><id>http://www.google.com/calendar/feeds/default/private/full/7iqc1ro0ihc69vhsiq3uabooig</id><published>2007-02-05T22:04:50.000Z</published><updated>2007-02-05T22:04:50.000Z</updated><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>skate</title><content type='text'></content><link rel='alternate' type='text/html' href='http://www.google.com/calendar/hosted/voiceme.net/event?eid=N2lxYzFybzBpaGM2OXZoc2lxM3VhYm9vaWcgd2dAdm9pY2VtZS5uZXQ' title='alternate'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/7iqc1ro0ihc69vhsiq3uabooig'></link><link rel='edit' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/7iqc1ro0ihc69vhsiq3uabooig/63306396290'></link><author><name>w g</name><email>wg@voiceme.net</email></author><gd:comments><gd:feedLink href='http://www.google.com/calendar/feeds/default/private/full/7iqc1ro0ihc69vhsiq3uabooig/comments'></gd:feedLink></gd:comments><gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus><gd:visibility value='http://schemas.google.com/g/2005#event.default'></gd:visibility><gCal:sendEventNotifications value='false'></gCal:sendEventNotifications><gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency><gd:where></gd:where><gd:when startTime='2007-02-07T13:30:00.000-08:00' endTime='2007-02-07T16:00:00.000-08:00'><gd:reminder minutes='10'></gd:reminder></gd:when></entry><entry><id>http://www.google.com/calendar/feeds/default/private/full/kp4gil76n2vcrkt9kaotj3s12c</id><published>2007-02-05T22:04:42.000Z</published><updated>2007-02-05T22:04:42.000Z</updated><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>skate</title><content type='text'></content><link rel='alternate' type='text/html' href='http://www.google.com/calendar/hosted/voiceme.net/event?eid=a3A0Z2lsNzZuMnZjcmt0OWthb3RqM3MxMmMgd2dAdm9pY2VtZS5uZXQ' title='alternate'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/kp4gil76n2vcrkt9kaotj3s12c'></link><link rel='edit' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/kp4gil76n2vcrkt9kaotj3s12c/63306396282'></link><author><name>w g</name><email>wg@voiceme.net</email></author><gd:comments><gd:feedLink href='http://www.google.com/calendar/feeds/default/private/full/kp4gil76n2vcrkt9kaotj3s12c/comments'></gd:feedLink></gd:comments><gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus><gd:visibility value='http://schemas.google.com/g/2005#event.default'></gd:visibility><gCal:sendEventNotifications value='false'></gCal:sendEventNotifications><gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency><gd:where></gd:where><gd:when startTime='2007-02-09T15:30:00.000-08:00' endTime='2007-02-09T18:00:00.000-08:00'><gd:reminder minutes='10'></gd:reminder></gd:when></entry><entry><id>http://www.google.com/calendar/feeds/default/private/full/gkhb48fj68lcp15fd1k03tjbj0</id><published>2007-02-05T22:04:35.000Z</published><updated>2007-02-05T22:04:35.000Z</updated><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>test event 6</title><content type='text'></content><link rel='alternate' type='text/html' href='http://www.google.com/calendar/hosted/voiceme.net/event?eid=Z2toYjQ4Zmo2OGxjcDE1ZmQxazAzdGpiajAgd2dAdm9pY2VtZS5uZXQ' title='alternate'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/gkhb48fj68lcp15fd1k03tjbj0'></link><link rel='edit' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/gkhb48fj68lcp15fd1k03tjbj0/63306396275'></link><author><name>w g</name><email>wg@voiceme.net</email></author><gd:comments><gd:feedLink href='http://www.google.com/calendar/feeds/default/private/full/gkhb48fj68lcp15fd1k03tjbj0/comments'></gd:feedLink></gd:comments><gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus><gd:visibility value='http://schemas.google.com/g/2005#event.default'></gd:visibility><gCal:sendEventNotifications value='false'></gCal:sendEventNotifications><gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency><gd:where></gd:where><gd:when startTime='2007-02-10T14:00:00.000-08:00' endTime='2007-02-10T17:00:00.000-08:00'><gd:reminder minutes='10'></gd:reminder></gd:when></entry><entry><id>http://www.google.com/calendar/feeds/default/private/full/32p5g68cpean3p2ol7kanj38sg</id><published>2007-02-05T22:04:29.000Z</published><updated>2007-02-05T22:04:29.000Z</updated><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>test event 5</title><content type='text'></content><link rel='alternate' type='text/html' href='http://www.google.com/calendar/hosted/voiceme.net/event?eid=MzJwNWc2OGNwZWFuM3Ayb2w3a2FuajM4c2cgd2dAdm9pY2VtZS5uZXQ' title='alternate'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/32p5g68cpean3p2ol7kanj38sg'></link><link rel='edit' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/32p5g68cpean3p2ol7kanj38sg/63306396269'></link><author><name>w g</name><email>wg@voiceme.net</email></author><gd:comments><gd:feedLink href='http://www.google.com/calendar/feeds/default/private/full/32p5g68cpean3p2ol7kanj38sg/comments'></gd:feedLink></gd:comments><gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus><gd:visibility value='http://schemas.google.com/g/2005#event.default'></gd:visibility><gCal:sendEventNotifications value='false'></gCal:sendEventNotifications><gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency><gd:where></gd:where><gd:when startTime='2007-02-09T09:00:00.000-08:00' endTime='2007-02-09T10:30:00.000-08:00'><gd:reminder minutes='10'></gd:reminder></gd:when></entry><entry><id>http://www.google.com/calendar/feeds/default/private/full/tfqpth26conshdmav0apje1tf4</id><published>2007-02-05T22:04:19.000Z</published><updated>2007-02-05T22:04:19.000Z</updated><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>skate</title><content type='text'></content><link rel='alternate' type='text/html' href='http://www.google.com/calendar/hosted/voiceme.net/event?eid=dGZxcHRoMjZjb25zaGRtYXYwYXBqZTF0ZjQgd2dAdm9pY2VtZS5uZXQ' title='alternate'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/tfqpth26conshdmav0apje1tf4'></link><link rel='edit' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/tfqpth26conshdmav0apje1tf4/63306396259'></link><author><name>w g</name><email>wg@voiceme.net</email></author><gd:comments><gd:feedLink href='http://www.google.com/calendar/feeds/default/private/full/tfqpth26conshdmav0apje1tf4/comments'></gd:feedLink></gd:comments><gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus><gd:visibility value='http://schemas.google.com/g/2005#event.default'></gd:visibility><gCal:sendEventNotifications value='false'></gCal:sendEventNotifications><gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency><gd:where></gd:where><gd:when startTime='2007-02-08T15:00:00.000-08:00' endTime='2007-02-08T17:00:00.000-08:00'><gd:reminder minutes='10'></gd:reminder></gd:when></entry><entry><id>http://www.google.com/calendar/feeds/default/private/full/onbo9mhbr5m6mo356nog7uel4s</id><published>2007-02-05T22:04:07.000Z</published><updated>2007-02-05T22:04:07.000Z</updated><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>Sharks at Anaheim</title><content type='text'></content><link rel='alternate' type='text/html' href='http://www.google.com/calendar/hosted/voiceme.net/event?eid=b25ibzltaGJyNW02bW8zNTZub2c3dWVsNHMgd2dAdm9pY2VtZS5uZXQ' title='alternate'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/onbo9mhbr5m6mo356nog7uel4s'></link><link rel='edit' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/onbo9mhbr5m6mo356nog7uel4s/63306396247'></link><author><name>w g</name><email>wg@voiceme.net</email></author><gd:comments><gd:feedLink href='http://www.google.com/calendar/feeds/default/private/full/onbo9mhbr5m6mo356nog7uel4s/comments'></gd:feedLink></gd:comments><gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus><gd:visibility value='http://schemas.google.com/g/2005#event.default'></gd:visibility><gCal:sendEventNotifications value='true'></gCal:sendEventNotifications><gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency><gd:where valueString=''></gd:where><gd:when startTime='2007-02-07T19:00:00.000-08:00' endTime='2007-02-07T22:00:00.000-08:00'><gd:reminder minutes='10'></gd:reminder></gd:when></entry><entry><id>http://www.google.com/calendar/feeds/default/private/full/tjqrd9fve576hieh3sa67nql5k</id><published>2007-02-05T22:04:02.000Z</published><updated>2007-02-05T22:04:02.000Z</updated><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>Sharks vs. ANAHEIM</title><content type='text'></content><link rel='alternate' type='text/html' href='http://www.google.com/calendar/hosted/voiceme.net/event?eid=dGpxcmQ5ZnZlNTc2aGllaDNzYTY3bnFsNWsgd2dAdm9pY2VtZS5uZXQ' title='alternate'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/tjqrd9fve576hieh3sa67nql5k'></link><link rel='edit' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/tjqrd9fve576hieh3sa67nql5k/63306396242'></link><author><name>w g</name><email>wg@voiceme.net</email></author><gd:comments><gd:feedLink href='http://www.google.com/calendar/feeds/default/private/full/tjqrd9fve576hieh3sa67nql5k/comments'></gd:feedLink></gd:comments><gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus><gd:visibility value='http://schemas.google.com/g/2005#event.default'></gd:visibility><gCal:sendEventNotifications value='true'></gCal:sendEventNotifications><gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency><gd:where valueString=''></gd:where><gd:when startTime='2007-02-06T19:30:00.000-08:00' endTime='2007-02-06T22:30:00.000-08:00'><gd:reminder minutes='10'></gd:reminder></gd:when></entry><entry><id>http://www.google.com/calendar/feeds/default/private/full/or6dtpn065f9mntond4jh2docc</id><published>2007-02-05T22:03:52.000Z</published><updated>2007-02-05T22:03:52.000Z</updated><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>skate</title><content type='text'></content><link rel='alternate' type='text/html' href='http://www.google.com/calendar/hosted/voiceme.net/event?eid=b3I2ZHRwbjA2NWY5bW50b25kNGpoMmRvY2Mgd2dAdm9pY2VtZS5uZXQ' title='alternate'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/or6dtpn065f9mntond4jh2docc'></link><link rel='edit' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/or6dtpn065f9mntond4jh2docc/63306396232'></link><author><name>w g</name><email>wg@voiceme.net</email></author><gd:comments><gd:feedLink href='http://www.google.com/calendar/feeds/default/private/full/or6dtpn065f9mntond4jh2docc/comments'></gd:feedLink></gd:comments><gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus><gd:visibility value='http://schemas.google.com/g/2005#event.default'></gd:visibility><gCal:sendEventNotifications value='false'></gCal:sendEventNotifications><gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency><gd:where></gd:where><gd:when startTime='2007-02-06T14:00:00.000-08:00' endTime='2007-02-06T15:00:00.000-08:00'><gd:reminder minutes='10'></gd:reminder></gd:when></entry><entry><id>http://www.google.com/calendar/feeds/default/private/full/k70v8o4jt1afi17hg2spavq1c0</id><published>2007-02-05T22:03:36.000Z</published><updated>2007-02-05T22:03:36.000Z</updated><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>lunch</title><content type='text'></content><link rel='alternate' type='text/html' href='http://www.google.com/calendar/hosted/voiceme.net/event?eid=azcwdjhvNGp0MWFmaTE3aGcyc3BhdnExYzBfMjAwNzAyMDZUMjAwMDAwWiB3Z0B2b2ljZW1lLm5ldA' title='alternate'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/k70v8o4jt1afi17hg2spavq1c0'></link><link rel='edit' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/k70v8o4jt1afi17hg2spavq1c0/63306396216'></link><author><name>w g</name><email>wg@voiceme.net</email></author><gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus><gd:visibility value='http://schemas.google.com/g/2005#event.default'></gd:visibility><gCal:sendEventNotifications value='true'></gCal:sendEventNotifications><gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency><gd:recurrence>DTSTART;TZID=America/Los_Angeles:20070206T120000 -DURATION:PT3600S -RRULE:FREQ=DAILY;WKST=SU -BEGIN:VTIMEZONE -TZID:America/Los_Angeles -X-LIC-LOCATION:America/Los_Angeles -BEGIN:STANDARD -TZOFFSETFROM:-0700 -TZOFFSETTO:-0800 -TZNAME:PST -DTSTART:19701025T020000 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU -END:STANDARD -BEGIN:DAYLIGHT -TZOFFSETFROM:-0800 -TZOFFSETTO:-0700 -TZNAME:PDT -DTSTART:19700405T020000 -RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU -END:DAYLIGHT -END:VTIMEZONE -</gd:recurrence><gd:where valueString=''></gd:where><gd:reminder minutes='10'></gd:reminder></entry><entry><id>http://www.google.com/calendar/feeds/default/private/full/6ee7b8nohdt03tv0gknm4v7124</id><published>2007-02-05T22:03:19.000Z</published><updated>2007-02-05T22:03:19.000Z</updated><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>test event 4</title><content type='text'></content><link rel='alternate' type='text/html' href='http://www.google.com/calendar/hosted/voiceme.net/event?eid=NmVlN2I4bm9oZHQwM3R2MGdrbm00djcxMjQgd2dAdm9pY2VtZS5uZXQ' title='alternate'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/6ee7b8nohdt03tv0gknm4v7124'></link><link rel='edit' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/6ee7b8nohdt03tv0gknm4v7124/63306396199'></link><author><name>w g</name><email>wg@voiceme.net</email></author><gd:comments><gd:feedLink href='http://www.google.com/calendar/feeds/default/private/full/6ee7b8nohdt03tv0gknm4v7124/comments'></gd:feedLink></gd:comments><gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus><gd:visibility value='http://schemas.google.com/g/2005#event.default'></gd:visibility><gCal:sendEventNotifications value='false'></gCal:sendEventNotifications><gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency><gd:where></gd:where><gd:when startTime='2007-02-06T09:00:00.000-08:00' endTime='2007-02-06T11:00:00.000-08:00'><gd:reminder minutes='10'></gd:reminder></gd:when></entry><entry><id>http://www.google.com/calendar/feeds/default/private/full/of1vh1r2q5aqdplo65i8bqbn3o</id><published>2007-02-05T22:03:11.000Z</published><updated>2007-02-05T22:03:11.000Z</updated><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>test event 3</title><content type='text'></content><link rel='alternate' type='text/html' href='http://www.google.com/calendar/hosted/voiceme.net/event?eid=b2YxdmgxcjJxNWFxZHBsbzY1aThicWJuM28gd2dAdm9pY2VtZS5uZXQ' title='alternate'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/of1vh1r2q5aqdplo65i8bqbn3o'></link><link rel='edit' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/of1vh1r2q5aqdplo65i8bqbn3o/63306396191'></link><author><name>w g</name><email>wg@voiceme.net</email></author><gd:comments><gd:feedLink href='http://www.google.com/calendar/feeds/default/private/full/of1vh1r2q5aqdplo65i8bqbn3o/comments'></gd:feedLink></gd:comments><gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus><gd:visibility value='http://schemas.google.com/g/2005#event.default'></gd:visibility><gCal:sendEventNotifications value='false'></gCal:sendEventNotifications><gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency><gd:where></gd:where><gd:when startTime='2007-02-05T18:00:00.000-08:00' endTime='2007-02-05T19:00:00.000-08:00'><gd:reminder minutes='10'></gd:reminder></gd:when></entry><entry><id>http://www.google.com/calendar/feeds/default/private/full/s7ahgfomlgii9qbkgpfbinr9u8</id><published>2007-02-05T22:02:40.000Z</published><updated>2007-02-05T22:03:04.000Z</updated><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>test event 2</title><content type='text'></content><link rel='alternate' type='text/html' href='http://www.google.com/calendar/hosted/voiceme.net/event?eid=czdhaGdmb21sZ2lpOXFia2dwZmJpbnI5dTggd2dAdm9pY2VtZS5uZXQ' title='alternate'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/s7ahgfomlgii9qbkgpfbinr9u8'></link><link rel='edit' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/s7ahgfomlgii9qbkgpfbinr9u8/63306396184'></link><author><name>w g</name><email>wg@voiceme.net</email></author><gd:comments><gd:feedLink href='http://www.google.com/calendar/feeds/default/private/full/s7ahgfomlgii9qbkgpfbinr9u8/comments'></gd:feedLink></gd:comments><gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus><gd:visibility value='http://schemas.google.com/g/2005#event.default'></gd:visibility><gCal:sendEventNotifications value='false'></gCal:sendEventNotifications><gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency><gd:where valueString=''></gd:where><gd:when startTime='2007-02-05T16:30:00.000-08:00' endTime='2007-02-05T17:30:00.000-08:00'><gd:reminder minutes='10'></gd:reminder></gd:when></entry><entry><id>http://www.google.com/calendar/feeds/default/private/full/rl8focglfe6jndql4u8lg73q5k</id><published>2007-02-05T22:02:28.000Z</published><updated>2007-02-05T22:02:53.000Z</updated><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title type='text'>test event 1</title><content type='text'></content><link rel='alternate' type='text/html' href='http://www.google.com/calendar/hosted/voiceme.net/event?eid=cmw4Zm9jZ2xmZTZqbmRxbDR1OGxnNzNxNWsgd2dAdm9pY2VtZS5uZXQ' title='alternate'></link><link rel='self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/rl8focglfe6jndql4u8lg73q5k'></link><link rel='edit' type='application/atom+xml' href='http://www.google.com/calendar/feeds/default/private/full/rl8focglfe6jndql4u8lg73q5k/63306396173'></link><author><name>w g</name><email>wg@voiceme.net</email></author><gd:comments><gd:feedLink href='http://www.google.com/calendar/feeds/default/private/full/rl8focglfe6jndql4u8lg73q5k/comments'></gd:feedLink></gd:comments><gd:eventStatus value='http://schemas.google.com/g/2005#event.confirmed'></gd:eventStatus><gd:visibility value='http://schemas.google.com/g/2005#event.default'></gd:visibility><gCal:sendEventNotifications value='false'></gCal:sendEventNotifications><gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency><gd:where></gd:where><gd:when startTime='2007-02-05T15:00:00.000-08:00' endTime='2007-02-05T16:00:00.000-08:00'><gd:reminder minutes='10'></gd:reminder></gd:when></entry></feed> diff --git a/tests/AndroidTests/src/com/android/unit_tests/GDataParseTest.java b/tests/AndroidTests/src/com/android/unit_tests/GDataParseTest.java deleted file mode 100644 index af85483..0000000 --- a/tests/AndroidTests/src/com/android/unit_tests/GDataParseTest.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright (C) 2006 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.unit_tests; - -import android.content.res.XmlResourceParser; -import android.test.AndroidTestCase; -import android.test.PerformanceTestCase; -import android.test.suitebuilder.annotation.MediumTest; -import android.test.suitebuilder.annotation.SmallTest; -import android.util.Xml; -import com.google.wireless.gdata.data.Entry; -import com.google.wireless.gdata.data.Feed; -import com.google.wireless.gdata.parser.ParseException; -import com.google.wireless.gdata.parser.xml.XmlGDataParser; -import org.json.JSONObject; -import org.json.JSONTokener; -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.zip.GZIPInputStream; - -/** - * Tests timing on parsing various formats of GData. - */ -public class GDataParseTest extends AndroidTestCase implements PerformanceTestCase { - - private static void parseXml(InputStream is) throws ParseException, IOException { - XmlPullParser xmlParser = Xml.newPullParser(); - XmlGDataParser parser = new XmlGDataParser(is, xmlParser); - Feed feed = parser.init(); - Entry entry = null; - while (parser.hasMoreData()) { - entry = parser.readNextEntry(entry); - } - } - - private static void parseXml(XmlPullParser xmlP) throws ParseException, IOException { - XmlGDataParser parser = new XmlGDataParser(null /* in */, xmlP); - Feed feed = parser.init(); - Entry entry = null; - while (parser.hasMoreData()) { - entry = parser.readNextEntry(entry); - } - } - - private static void dumpXml(XmlPullParser parser) throws - XmlPullParserException, IOException { - int eventType = parser.nextTag(); - while (eventType != XmlPullParser.END_DOCUMENT) { - switch (eventType) { - case XmlPullParser.START_TAG: - parser.getName(); - // System.out.print("<" + parser.getName()); - int nattrs = parser.getAttributeCount(); - for (int i = 0; i < nattrs; ++i) { - parser.getAttributeName(i); - parser.getAttributeValue(i); - // System.out.print(" " + parser.getAttributeName(i) + "=\"" - // + parser.getAttributeValue(i) + "\""); - } - // System.out.print(">"); - break; - case XmlPullParser.END_TAG: - parser.getName(); - // System.out.print("</" + parser.getName() + ">"); - break; - case XmlPullParser.TEXT: - parser.getText(); - // System.out.print(parser.getText()); - break; - default: - // do nothing - } - eventType = parser.next(); - } - } - - private byte[] getBytesForResource(int resid) throws Exception { - // all resources are written into a zip file, so the InputStream we - // get for a resource is on top of zipped - // data. in order to compare performance of parsing unzipped vs. - // zipped content, we first read the data into an in-memory buffer. - InputStream zipIs = null; - try { - zipIs = mContext.getResources().openRawResource(resid); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - byte buf[] = new byte[1024]; - int bytesRead = zipIs.read(buf); - while (bytesRead > 0) { - baos.write(buf, 0, bytesRead); - bytesRead = zipIs.read(buf); - } - return baos.toByteArray(); - } finally { - if (zipIs != null) { - zipIs.close(); - } - } - } - - public boolean isPerformanceOnly() { - return true; - } - - public int startPerformance(PerformanceTestCase.Intermediates intermediates) { - return 0; - } - - @MediumTest - public void testXml() throws Exception { - InputStream is = new ByteArrayInputStream(getBytesForResource(R.raw.calendarxml)); - try { - is.reset(); - parseXml(is); - } finally { - is.close(); - } - } - - @MediumTest - public void testXmlGzip() throws Exception { - InputStream gzIs = new GZIPInputStream( - new ByteArrayInputStream(getBytesForResource(R.raw.calendarxmlgz))); - try { - parseXml(gzIs); - } finally { - gzIs.close(); - } - } - - @MediumTest - public void testJson() throws Exception { - String jsonString = new String(getBytesForResource(R.raw.calendarjs), "UTF-8"); - JSONTokener tokens = new JSONTokener(jsonString); - assertNotNull(new JSONObject(tokens)); - } - - @SmallTest - public void testBinaryXml() throws Exception { - XmlResourceParser parser = mContext.getResources().getXml(R.xml.calendar); - parseXml(parser); - parser.close(); - } -} |