summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndroid (Google) Code Review <android-gerrit@google.com>2009-07-10 15:12:57 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2009-07-10 15:12:57 -0700
commit2d7910555ab6b376e8cd1646db6c329c1cd1adb7 (patch)
tree1879b38a642c3b2a29dac1e22041ae956b8ae04f
parent7cd43797ae41406792f70a5623bb6d207e575526 (diff)
parent5621f0d928dc738cb9bde78f1c23eaf916b8c931 (diff)
downloadframeworks_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.java29
-rw-r--r--tests/AndroidTests/src/com/android/unit_tests/UriTest.java33
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)));
+ }
}