diff --git a/core/src/main/java/com/dropbox/core/DbxOAuth1Upgrader.java b/core/src/main/java/com/dropbox/core/DbxOAuth1Upgrader.java index e43ce9cc63..0389254fc9 100644 --- a/core/src/main/java/com/dropbox/core/DbxOAuth1Upgrader.java +++ b/core/src/main/java/com/dropbox/core/DbxOAuth1Upgrader.java @@ -10,8 +10,8 @@ import com.fasterxml.jackson.core.JsonToken; import java.io.IOException; +import java.io.UnsupportedEncodingException; import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; /** @@ -105,7 +105,14 @@ private String buildOAuth1Header(DbxOAuth1AccessToken token) private static String encode(String s) { - return URLEncoder.encode(s, StandardCharsets.UTF_8); + try { + // Use the String overload for Android API compatibility. The Charset overload was + // added to Android much later than the String overload. + return URLEncoder.encode(s, "UTF-8"); + } catch (UnsupportedEncodingException ex) { + // UTF-8 is required by every Java implementation. + throw new AssertionError(ex); + } } /** diff --git a/core/src/main/java/com/dropbox/core/DbxRequestUtil.java b/core/src/main/java/com/dropbox/core/DbxRequestUtil.java index bb562a8f42..0ac9eb5314 100644 --- a/core/src/main/java/com/dropbox/core/DbxRequestUtil.java +++ b/core/src/main/java/com/dropbox/core/DbxRequestUtil.java @@ -1,11 +1,11 @@ package com.dropbox.core; import java.io.IOException; +import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URISyntaxException; import java.net.URLEncoder; import java.nio.charset.CharacterCodingException; -import java.nio.charset.StandardCharsets; import java.util.concurrent.TimeUnit; import java.util.ArrayList; import java.util.List; @@ -38,7 +38,14 @@ public final class DbxRequestUtil { public static DbxGlobalCallbackFactory sharedCallbackFactory; public static String encodeUrlParam(String s) { - return URLEncoder.encode(s, StandardCharsets.UTF_8); + try { + // Use the String overload for Android API compatibility. The Charset overload was + // added to Android much later than the String overload. + return URLEncoder.encode(s, "UTF-8"); + } catch (UnsupportedEncodingException ex) { + // UTF-8 is required by every Java implementation. + throw new AssertionError(ex); + } } public static String buildUrlWithParams(/*@Nullable*/String userLocale, diff --git a/core/src/test/java/com/dropbox/core/DbxRequestUtilTest.java b/core/src/test/java/com/dropbox/core/DbxRequestUtilTest.java new file mode 100644 index 0000000000..2e811a5d6f --- /dev/null +++ b/core/src/test/java/com/dropbox/core/DbxRequestUtilTest.java @@ -0,0 +1,14 @@ +package com.dropbox.core; + +import static com.google.common.truth.Truth.assertThat; + +import org.testng.annotations.Test; + +public class DbxRequestUtilTest { + + @Test + public void testEncodeUrlParam() { + assertThat(DbxRequestUtil.encodeUrlParam("hello world/+")) + .isEqualTo("hello+world%2F%2B"); + } +}