summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFred Quintana <fredq@google.com>2009-11-24 09:47:01 -0800
committerFred Quintana <fredq@google.com>2009-11-24 10:42:00 -0800
commit2464acc6da6393f0163894094468f68b8e496cea (patch)
treec20762f1c00066b974b719c8361cce85f17a81c7
parent82d4b5ccaf5518ed9286d89e60ac9a595239ac35 (diff)
downloadframeworks_base-2464acc6da6393f0163894094468f68b8e496cea.zip
frameworks_base-2464acc6da6393f0163894094468f68b8e496cea.tar.gz
frameworks_base-2464acc6da6393f0163894094468f68b8e496cea.tar.bz2
moved the gdata library to vendor/google
-rw-r--r--Android.mk1
-rw-r--r--core/java/android/provider/Calendar.java56
-rw-r--r--core/java/com/google/android/gdata/client/AndroidGDataClient.java508
-rw-r--r--core/java/com/google/android/gdata/client/AndroidXmlParserFactory.java31
-rw-r--r--core/java/com/google/android/gdata/client/QueryParamsImpl.java102
-rw-r--r--core/java/com/google/android/gdata2/client/AndroidGDataClient.java603
-rw-r--r--core/java/com/google/android/gdata2/client/AndroidXmlParserFactory.java31
-rw-r--r--core/java/com/google/android/gdata2/client/QueryParamsImpl.java99
-rw-r--r--preloaded-classes15
-rw-r--r--tests/AndroidTests/res/raw/calendarjs.txt1
-rw-r--r--tests/AndroidTests/res/raw/calendarjsgz.jsgzbin1956 -> 0 bytes
-rw-r--r--tests/AndroidTests/res/raw/calendarxml.xml38
-rw-r--r--tests/AndroidTests/res/raw/calendarxmlgz.xmlgzbin2412 -> 0 bytes
-rw-r--r--tests/AndroidTests/res/xml/calendar.xml38
-rw-r--r--tests/AndroidTests/src/com/android/unit_tests/GDataParseTest.java162
15 files changed, 1 insertions, 1684 deletions
diff --git a/Android.mk b/Android.mk
index 8d13e3b..be3f569 100644
--- a/Android.mk
+++ b/Android.mk
@@ -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
deleted file mode 100644
index 6f1bf54..0000000
--- a/tests/AndroidTests/res/raw/calendarjsgz.jsgz
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index 6c86462..0000000
--- a/tests/AndroidTests/res/raw/calendarxmlgz.xmlgz
+++ /dev/null
Binary files differ
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();
- }
-}