diff options
author | Android (Google) Code Review <android-gerrit@google.com> | 2009-07-10 15:12:57 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2009-07-10 15:12:57 -0700 |
commit | 2d7910555ab6b376e8cd1646db6c329c1cd1adb7 (patch) | |
tree | 1879b38a642c3b2a29dac1e22041ae956b8ae04f | |
parent | 7cd43797ae41406792f70a5623bb6d207e575526 (diff) | |
parent | 5621f0d928dc738cb9bde78f1c23eaf916b8c931 (diff) | |
download | frameworks_base-2d7910555ab6b376e8cd1646db6c329c1cd1adb7.zip frameworks_base-2d7910555ab6b376e8cd1646db6c329c1cd1adb7.tar.gz frameworks_base-2d7910555ab6b376e8cd1646db6c329c1cd1adb7.tar.bz2 |
Merge change 6820 into donut
* changes:
Fixed NPE bugs in Uri. Fixes internal issue #1724719. Modified getQueryParameter() to use the encoded query string. Fixes internal issue #1749094.
-rw-r--r-- | core/java/android/net/Uri.java | 29 | ||||
-rw-r--r-- | tests/AndroidTests/src/com/android/unit_tests/UriTest.java | 33 |
2 files changed, 46 insertions, 16 deletions
diff --git a/core/java/android/net/Uri.java b/core/java/android/net/Uri.java index 6a755c3..421d013 100644 --- a/core/java/android/net/Uri.java +++ b/core/java/android/net/Uri.java @@ -1083,7 +1083,7 @@ public abstract class Uri implements Parcelable, Comparable<Uri> { /** Used in parcelling. */ static final int TYPE_ID = 3; - private final String scheme; + private final String scheme; // can be null private final Part authority; private final PathPart path; private final Part query; @@ -1092,10 +1092,10 @@ public abstract class Uri implements Parcelable, Comparable<Uri> { private HierarchicalUri(String scheme, Part authority, PathPart path, Part query, Part fragment) { this.scheme = scheme; - this.authority = authority; - this.path = path; - this.query = query; - this.fragment = fragment; + this.authority = Part.nonNull(authority); + this.path = path == null ? PathPart.NULL : path; + this.query = Part.nonNull(query); + this.fragment = Part.nonNull(fragment); } static Uri readFrom(Parcel parcel) { @@ -1158,21 +1158,18 @@ public abstract class Uri implements Parcelable, Comparable<Uri> { } private void appendSspTo(StringBuilder builder) { - if (authority != null) { - String encodedAuthority = authority.getEncoded(); - if (encodedAuthority != null) { - // Even if the authority is "", we still want to append "//". - builder.append("//").append(encodedAuthority); - } + String encodedAuthority = authority.getEncoded(); + if (encodedAuthority != null) { + // Even if the authority is "", we still want to append "//". + builder.append("//").append(encodedAuthority); } - // path is never null. String encodedPath = path.getEncoded(); if (encodedPath != null) { builder.append(encodedPath); } - if (query != null && !query.isEmpty()) { + if (!query.isEmpty()) { builder.append('?').append(query.getEncoded()); } } @@ -1232,7 +1229,7 @@ public abstract class Uri implements Parcelable, Comparable<Uri> { appendSspTo(builder); - if (fragment != null && !fragment.isEmpty()) { + if (!fragment.isEmpty()) { builder.append('#').append(fragment.getEncoded()); } @@ -1506,7 +1503,7 @@ public abstract class Uri implements Parcelable, Comparable<Uri> { throw new UnsupportedOperationException(NOT_HIERARCHICAL); } - String query = getQuery(); + String query = getEncodedQuery(); if (query == null) { return Collections.emptyList(); } @@ -1569,7 +1566,7 @@ public abstract class Uri implements Parcelable, Comparable<Uri> { throw new UnsupportedOperationException(NOT_HIERARCHICAL); } - String query = getQuery(); + String query = getEncodedQuery(); if (query == null) { return null; diff --git a/tests/AndroidTests/src/com/android/unit_tests/UriTest.java b/tests/AndroidTests/src/com/android/unit_tests/UriTest.java index e9d3cda..0abbc9a 100644 --- a/tests/AndroidTests/src/com/android/unit_tests/UriTest.java +++ b/tests/AndroidTests/src/com/android/unit_tests/UriTest.java @@ -503,4 +503,37 @@ public class UriTest extends TestCase { public void testEmptyToStringNotNull() { assertNotNull(Uri.EMPTY.toString()); } + + @SmallTest + public void testParcellingWithoutFragment() { + parcelAndUnparcel(Uri.parse("foo:bob%20lee")); + parcelAndUnparcel(Uri.fromParts("foo", "bob lee", "fragment")); + parcelAndUnparcel(new Uri.Builder() + .scheme("http") + .authority("crazybob.org") + .path("/rss/") + .encodedQuery("a=b") + .build()); + } + + public void testGetQueryParameter() { + String nestedUrl = "http://crazybob.org/?a=1&b=2"; + Uri uri = Uri.parse("http://test/").buildUpon() + .appendQueryParameter("foo", "bar") + .appendQueryParameter("nested", nestedUrl).build(); + assertEquals(nestedUrl, uri.getQueryParameter("nested")); + assertEquals(nestedUrl, uri.getQueryParameters("nested").get(0)); + } + + public void testGetQueryParameterWorkaround() { + // This was a workaround for a bug where getQueryParameter called + // getQuery() instead of getEncodedQuery(). + String nestedUrl = "http://crazybob.org/?a=1&b=2"; + Uri uri = Uri.parse("http://test/").buildUpon() + .appendQueryParameter("foo", "bar") + .appendQueryParameter("nested", Uri.encode(nestedUrl)).build(); + assertEquals(nestedUrl, Uri.decode(uri.getQueryParameter("nested"))); + assertEquals(nestedUrl, + Uri.decode(uri.getQueryParameters("nested").get(0))); + } } |