aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching
diff options
context:
space:
mode:
authorSamuel Tardieu <sam@rfc1149.net>2011-09-22 21:51:09 +0200
committerSamuel Tardieu <sam@rfc1149.net>2011-09-26 08:55:08 +0200
commit8c1c51950a9c7f9bf078fe9dfcc38cd042347bbf (patch)
treecf5eb4c177722dc6713eb2dc3e07f30924b052b7 /main/src/cgeo/geocaching
parentda11c8565da9b9e939b0e93f7e09e0b7b4fdfcdc (diff)
downloadcgeo-8c1c51950a9c7f9bf078fe9dfcc38cd042347bbf.zip
cgeo-8c1c51950a9c7f9bf078fe9dfcc38cd042347bbf.tar.gz
cgeo-8c1c51950a9c7f9bf078fe9dfcc38cd042347bbf.tar.bz2
Use android.net.Uri instead of java.net.URI
android.net.Uri is supposed to be faster than the Java counterpart, at the expense of less checking. Since we build our URI from safe strings, we take little risks in using those fast variants.
Diffstat (limited to 'main/src/cgeo/geocaching')
-rw-r--r--main/src/cgeo/geocaching/LogTemplateProvider.java4
-rw-r--r--main/src/cgeo/geocaching/cgBase.java82
-rw-r--r--main/src/cgeo/geocaching/cgGeo.java4
-rw-r--r--main/src/cgeo/geocaching/cgeocaches.java3
-rw-r--r--main/src/cgeo/geocaching/cgeoinit.java3
-rw-r--r--main/src/cgeo/geocaching/cgeotouch.java4
-rw-r--r--main/src/cgeo/geocaching/cgeovisit.java6
-rw-r--r--main/src/cgeo/geocaching/connector/GCConnector.java4
8 files changed, 48 insertions, 62 deletions
diff --git a/main/src/cgeo/geocaching/LogTemplateProvider.java b/main/src/cgeo/geocaching/LogTemplateProvider.java
index 76ba0e0..bfcfc63 100644
--- a/main/src/cgeo/geocaching/LogTemplateProvider.java
+++ b/main/src/cgeo/geocaching/LogTemplateProvider.java
@@ -2,9 +2,9 @@ package cgeo.geocaching;
import org.apache.commons.lang3.StringUtils;
+import android.net.Uri;
import android.util.Log;
-import java.net.URI;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
@@ -15,7 +15,7 @@ import java.util.regex.Pattern;
*
*/
public class LogTemplateProvider {
- private static final URI URI_GC_EMAIL = cgBase.buildURI(false, "www.geocaching.com", "/email/");
+ private static final Uri URI_GC_EMAIL = cgBase.buildURI(false, "www.geocaching.com", "/email/");
public static abstract class LogTemplate {
private String template;
diff --git a/main/src/cgeo/geocaching/cgBase.java b/main/src/cgeo/geocaching/cgBase.java
index a2b2207..eb61a05 100644
--- a/main/src/cgeo/geocaching/cgBase.java
+++ b/main/src/cgeo/geocaching/cgBase.java
@@ -44,8 +44,6 @@ import java.net.HttpURLConnection;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
-import java.net.URI;
-import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLDecoder;
@@ -131,16 +129,16 @@ public class cgBase {
private final static Pattern PATTERN_TRACKABLE_Distance = Pattern.compile("<h4[^>]*\\W*Tracking History \\(([0-9.,]+(km|mi))[^\\)]*\\)", Pattern.CASE_INSENSITIVE);
private final static Pattern PATTERN_TRACKABLE_Log = Pattern.compile("<tr class=\"Data.+?src=\"/images/icons/([^.]+)\\.gif[^>]+>&nbsp;([^<]+)</td>.+?guid.+?>([^<]+)</a>.+?(?:guid=([^\"]+)\">([^<]+)</a>.+?)?<td colspan=\"4\">(.+?)(?:<ul.+?ul>)?\\s*</td>\\s*</tr>", Pattern.CASE_INSENSITIVE);
- private static final URI URI_GC_LOGIN_DEFAULT = buildURI(true, "www.geocaching.com", "/login/default.aspx");
- private static final URI URI_GC_DEFAULT = buildURI(false, "www.geocaching.com", "/default.aspx");
- private static final URI URI_GOOGLE_RECAPTCHA = buildURI(false, "www.google.com", "/recaptcha/api/challenge");
- private static final URI URI_GC_MAP_DEFAULT = buildURI(false, "www.geocaching.com", "/map/default.aspx");
- private static final URI URI_GC_SEEK_NEAREST = buildURI(false, "www.geocaching.com", "/seek/nearest.aspx");
- private static final URI URI_GC_SEEK_LOGBOOK = buildURI(false, "www.geocaching.com", "/seek/geocache.logbook");
- private static final URI URI_GC_PREFERENCES = buildURI(false, "www.geocaching.com", "/account/ManagePreferences.aspx");
- private static final URI URI_GCVOTE_GETVOTES = buildURI(false, "gcvote.com", "/getVotes.php");
- private static final URI URI_GO4CACHE_GET = buildURI(false, "api.go4cache.com", "/get.php");
- private static final URI URI_GC_TRACK_DETAILS = buildURI(false, "www.geocaching.com", "/track/details.aspx");
+ private static final Uri URI_GC_LOGIN_DEFAULT = buildURI(true, "www.geocaching.com", "/login/default.aspx");
+ private static final Uri URI_GC_DEFAULT = buildURI(false, "www.geocaching.com", "/default.aspx");
+ private static final Uri URI_GOOGLE_RECAPTCHA = buildURI(false, "www.google.com", "/recaptcha/api/challenge");
+ private static final Uri URI_GC_MAP_DEFAULT = buildURI(false, "www.geocaching.com", "/map/default.aspx");
+ private static final Uri URI_GC_SEEK_NEAREST = buildURI(false, "www.geocaching.com", "/seek/nearest.aspx");
+ private static final Uri URI_GC_SEEK_LOGBOOK = buildURI(false, "www.geocaching.com", "/seek/geocache.logbook");
+ private static final Uri URI_GC_PREFERENCES = buildURI(false, "www.geocaching.com", "/account/ManagePreferences.aspx");
+ private static final Uri URI_GCVOTE_GETVOTES = buildURI(false, "gcvote.com", "/getVotes.php");
+ private static final Uri URI_GO4CACHE_GET = buildURI(false, "api.go4cache.com", "/get.php");
+ private static final Uri URI_GC_TRACK_DETAILS = buildURI(false, "www.geocaching.com", "/track/details.aspx");
public final static Map<String, String> cacheTypes = new HashMap<String, String>();
public final static Map<String, String> cacheIDs = new HashMap<String, String>();
@@ -972,7 +970,7 @@ public class cgBase {
return caches;
}
- public static cgCacheWrap parseMapJSON(final URI uri, final String data) {
+ public static cgCacheWrap parseMapJSON(final Uri uri, final String data) {
if (StringUtils.isEmpty(data)) {
Log.e(cgSettings.tag, "cgeoBase.parseMapJSON: No page given");
return null;
@@ -2525,7 +2523,7 @@ public class cgBase {
params.put("__EVENTTARGET", "ctl00$ContentBody$pgrBottom$ctl08");
params.put("__EVENTARGUMENT", "");
- final URI uri = buildURI(false, host, path);
+ final Uri uri = buildURI(false, host, path);
String page = request(uri, method, params, false, false, true).getData();
if (checkLogin(page) == false) {
int loginState = login();
@@ -2675,7 +2673,7 @@ public class cgBase {
params.put("lng", longitude);
final String url = "http://" + host + path + "?" + prepareParameters(params, false, true);
- final URI uri = buildURI(false, host, path);
+ final Uri uri = buildURI(false, host, path);
String page = requestLogged(uri, method, params, false, false, true);
if (StringUtils.isBlank(page)) {
@@ -2726,7 +2724,7 @@ public class cgBase {
params.put("key", keyword);
final String url = "http://" + host + path + "?" + prepareParameters(params, false, true);
- final URI uri = cgBase.buildURI(false, host, path);
+ final Uri uri = cgBase.buildURI(false, host, path);
String page = requestLogged(uri, method, params, false, false, true);
if (StringUtils.isBlank(page)) {
@@ -2783,7 +2781,7 @@ public class cgBase {
}
final String url = "http://" + host + path + "?" + prepareParameters(params, my, true);
- final URI uri = buildURI(false, host, path);
+ final Uri uri = buildURI(false, host, path);
String page = requestLogged(uri, method, params, false, my, true);
if (StringUtils.isBlank(page)) {
@@ -2834,7 +2832,7 @@ public class cgBase {
params.put("u", userName);
final String url = "http://" + host + path + "?" + prepareParameters(params, false, true);
- final URI uri = buildURI(false, host, path);
+ final Uri uri = buildURI(false, host, path);
String page = requestLogged(uri, method, params, false, false, true);
if (StringUtils.isBlank(page)) {
@@ -2885,7 +2883,7 @@ public class cgBase {
String params = "{\"dto\":{\"data\":{\"c\":1,\"m\":\"\",\"d\":\"" + latMax + "|" + latMin + "|" + lonMax + "|" + lonMin + "\"},\"ut\":\"" + usertoken + "\"}}";
- final URI uri = buildURI(false, host, path);
+ final Uri uri = buildURI(false, host, path);
page = requestJSONgc(uri, params);
if (StringUtils.isBlank(page)) {
@@ -3105,7 +3103,7 @@ public class cgBase {
params.put("ctl00$ContentBody$LogBookPanel1$uxTrackables$hdnCurrentFilter", "");
}
- final URI uri = buildURI(false, "www.geocaching.com", "/seek/log.aspx", "ID=" + cacheid);
+ final Uri uri = buildURI(false, "www.geocaching.com", "/seek/log.aspx", "ID=" + cacheid);
String page = request(uri, "POST", params, false, false, false).getData();
if (checkLogin(page) == false) {
int loginState = login();
@@ -3235,7 +3233,7 @@ public class cgBase {
params.put("ctl00$ContentBody$LogBookPanel1$LogButton", "Submit Log Entry");
params.put("ctl00$ContentBody$uxVistOtherListingGC", "");
- final URI uri = buildURI(false, "www.geocaching.com", "/track/log.aspx", "wid=" + tbid);
+ final Uri uri = buildURI(false, "www.geocaching.com", "/track/log.aspx", "wid=" + tbid);
String page = request(uri, "POST", params, false, false, false).getData();
if (checkLogin(page) == false) {
int loginState = login();
@@ -3275,7 +3273,7 @@ public class cgBase {
* @return -1: error occured
*/
public int addToWatchlist(cgCache cache) {
- final URI uri = buildURI(false, "www.geocaching.com", "/my/watchlist.aspx", "w=" + cache.cacheId);
+ final Uri uri = buildURI(false, "www.geocaching.com", "/my/watchlist.aspx", "w=" + cache.cacheId);
String page = requestLogged(uri,
"POST", null, false, false, false);
@@ -3302,7 +3300,7 @@ public class cgBase {
* @return -1: error occured
*/
public int removeFromWatchlist(cgCache cache) {
- final URI uri = buildURI(false, "www.geocaching.com", "/my/watchlist.aspx", "ds=1&action=rem&id=" + cache.cacheId);
+ final Uri uri = buildURI(false, "www.geocaching.com", "/my/watchlist.aspx", "ds=1&action=rem&id=" + cache.cacheId);
String page = requestLogged(uri, "POST", null, false, false, false);
if (StringUtils.isBlank(page)) {
@@ -3547,28 +3545,22 @@ public class cgBase {
return paramsDone;
}
- public static URI buildURI(final boolean secure, final String host, final String path, final String query) {
- try {
- return new URI(secure ? "https" : "http", host, path, query, null);
- } catch (URISyntaxException e) {
- // This should never happen as we only use trusted URI components.
- Log.e(cgSettings.tag, "buildURI", e);
- return null;
- }
+ public static Uri buildURI(final boolean secure, final String host, final String path, final String query) {
+ return new Uri.Builder().scheme(secure ? "https" : "http").authority(host).path(path).encodedQuery(query).build();
}
- public static URI buildURI(boolean secure, String host, String path) {
+ public static Uri buildURI(boolean secure, String host, String path) {
final String pathComponents[] = StringUtils.split(path, "?", 2);
return buildURI(secure, host, pathComponents[0], pathComponents.length > 1 ? pathComponents[1] : null);
}
- public String[] requestViewstates(final URI uri, String method, Map<String, String> params, boolean xContentType, boolean my) {
+ public String[] requestViewstates(final Uri uri, String method, Map<String, String> params, boolean xContentType, boolean my) {
final cgResponse response = request(uri, method, params, xContentType, my, false);
return getViewstates(response.getData());
}
- public String requestLogged(final URI uri, String method, Map<String, String> params, boolean xContentType, boolean my, boolean addF) {
+ public String requestLogged(final Uri uri, String method, Map<String, String> params, boolean xContentType, boolean my, boolean addF) {
cgResponse response = request(uri, method, params, xContentType, my, addF);
String data = response.getData();
@@ -3585,22 +3577,21 @@ public class cgBase {
return data;
}
- public cgResponse request(final URI uri, String method, Map<String, String> params, boolean xContentType, boolean my, boolean addF) {
+ public cgResponse request(final Uri uri, String method, Map<String, String> params, boolean xContentType, boolean my, boolean addF) {
// prepare parameters
final String paramsDone = prepareParameters(params, my, addF);
return request(uri, method, paramsDone, 0, xContentType);
}
- public cgResponse request(final URI uri, String method, Map<String, String> params, int requestId, boolean xContentType, boolean my, boolean addF) {
+ public cgResponse request(final Uri uri, String method, Map<String, String> params, int requestId, boolean xContentType, boolean my, boolean addF) {
final String paramsDone = prepareParameters(params, my, addF);
return request(uri, method, paramsDone, requestId, xContentType);
}
- public cgResponse request(final URI uri, String method, String params, int requestId, Boolean xContentType) {
+ public cgResponse request(final Uri uri, String method, String params, int requestId, Boolean xContentType) {
URL u = null;
int httpCode = -1;
String httpMessage = null;
- String httpLocation = null;
if (requestId == 0) {
requestId = (int) (Math.random() * 1000);
@@ -3630,7 +3621,7 @@ public class cgBase {
try {
if (method.equals("GET")) {
// GET
- u = new URI(uri.getScheme(), uri.getAuthority(), uri.getPath(), params, null).toURL();
+ u = new URL(uri.buildUpon().encodedQuery(params).build().toString());
uc = u.openConnection();
uc.setRequestProperty("Host", uri.getHost());
@@ -3657,7 +3648,7 @@ public class cgBase {
connection.setDoOutput(false);
} else {
// POST
- u = uri.toURL();
+ u = new URL(uri.toString());
uc = u.openConnection();
uc.setRequestProperty("Host", uri.getHost());
@@ -3700,10 +3691,9 @@ public class cgBase {
httpCode = connection.getResponseCode();
httpMessage = connection.getResponseMessage();
- httpLocation = uc.getHeaderField("Location");
final String paramsLog = params.replaceAll(passMatch, "password=***");
- Log.i(cgSettings.tag + "|" + requestId, "[" + method + " " + (int) (params.length() / 1024) + "k | " + httpCode + " | " + (int) (buffer.length() / 1024) + "k] Downloaded " + uri + "?" + paramsLog);
+ Log.i(cgSettings.tag + "|" + requestId, "[" + method + " " + (params.length() / 1024) + "k | " + httpCode + " | " + (buffer.length() / 1024) + "k] Downloaded " + uri + "?" + paramsLog);
connection.disconnect();
br.close();
@@ -3771,9 +3761,8 @@ public class cgBase {
buffer.append(chars);
}
- public String requestJSONgc(final URI uri, String params) {
+ public String requestJSONgc(final Uri uri, String params) {
int httpCode = -1;
- String httpLocation = null;
final String cookiesDone = CookieJar.getCookiesAsString(prefs);
@@ -3792,7 +3781,7 @@ public class cgBase {
try {
// POST
- final URL u = uri.toURL();
+ final URL u = new URL(uri.toString());
uc = u.openConnection();
uc.setRequestProperty("Host", uri.getHost());
@@ -3832,10 +3821,9 @@ public class cgBase {
readIntoBuffer(br, buffer);
httpCode = connection.getResponseCode();
- httpLocation = uc.getHeaderField("Location");
final String paramsLog = params.replaceAll(passMatch, "password=***");
- Log.i(cgSettings.tag + " | JSON", "[POST " + (int) (params.length() / 1024) + "k | " + httpCode + " | " + (int) (buffer.length() / 1024) + "k] Downloaded " + uri.toString() + "?" + paramsLog);
+ Log.i(cgSettings.tag + " | JSON", "[POST " + (params.length() / 1024) + "k | " + httpCode + " | " + (buffer.length() / 1024) + "k] Downloaded " + uri.toString() + "?" + paramsLog);
connection.disconnect();
br.close();
diff --git a/main/src/cgeo/geocaching/cgGeo.java b/main/src/cgeo/geocaching/cgGeo.java
index c458108..b23d0d5 100644
--- a/main/src/cgeo/geocaching/cgGeo.java
+++ b/main/src/cgeo/geocaching/cgGeo.java
@@ -12,10 +12,10 @@ import android.location.GpsStatus;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
+import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
-import java.net.URI;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Locale;
@@ -52,7 +52,7 @@ public class cgGeo {
public Integer satellitesFixed = null;
public double distanceNow = 0d;
- private static final URI URI_GO4CACHE = cgBase.buildURI(false, "api.go4cache.com", "/");
+ private static final Uri URI_GO4CACHE = cgBase.buildURI(false, "api.go4cache.com", "/");
public cgGeo(Context contextIn, cgeoapplication appIn, cgUpdateLoc geoUpdateIn, cgBase baseIn, cgSettings settingsIn, int timeIn, int distanceIn) {
context = contextIn;
diff --git a/main/src/cgeo/geocaching/cgeocaches.java b/main/src/cgeo/geocaching/cgeocaches.java
index 3e12b2d..5499861 100644
--- a/main/src/cgeo/geocaching/cgeocaches.java
+++ b/main/src/cgeo/geocaching/cgeocaches.java
@@ -61,7 +61,6 @@ import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
-import java.net.URI;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
@@ -141,7 +140,7 @@ public class cgeocaches extends AbstractListActivity {
private static final int CONTEXT_MENU_MOVE_TO_LIST = 1000;
private static final int MENU_MOVE_SELECTED_OR_ALL_TO_LIST = 1200;
- private static final URI URI_SEND2CGEO_READ = cgBase.buildURI(false, "send2.cgeo.org", "/read.html");
+ private static final Uri URI_SEND2CGEO_READ = cgBase.buildURI(false, "send2.cgeo.org", "/read.html");
private String action = null;
private String type = null;
diff --git a/main/src/cgeo/geocaching/cgeoinit.java b/main/src/cgeo/geocaching/cgeoinit.java
index cbce65a..3f32cef 100644
--- a/main/src/cgeo/geocaching/cgeoinit.java
+++ b/main/src/cgeo/geocaching/cgeoinit.java
@@ -31,13 +31,12 @@ import android.widget.Spinner;
import android.widget.TextView;
import java.io.File;
-import java.net.URI;
public class cgeoinit extends AbstractActivity {
private final int SELECT_MAPFILE_REQUEST = 1;
- private static final URI URI_SEND2CGEO_AUTH = cgBase.buildURI(false, "send2.cgeo.org", "/auth.html");
+ private static final Uri URI_SEND2CGEO_AUTH = cgBase.buildURI(false, "send2.cgeo.org", "/auth.html");
private ProgressDialog loginDialog = null;
private ProgressDialog webDialog = null;
diff --git a/main/src/cgeo/geocaching/cgeotouch.java b/main/src/cgeo/geocaching/cgeotouch.java
index 5c62087..9533911 100644
--- a/main/src/cgeo/geocaching/cgeotouch.java
+++ b/main/src/cgeo/geocaching/cgeotouch.java
@@ -5,6 +5,7 @@ import org.apache.commons.lang3.StringUtils;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.res.Configuration;
+import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
@@ -20,7 +21,6 @@ import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
-import java.net.URI;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
@@ -28,7 +28,7 @@ import java.util.List;
import java.util.Map;
public class cgeotouch extends cgLogForm {
- private static final URI URI_GC_TRACK_LOG = cgBase.buildURI(false, "www.geocaching.com", "/track/log.aspx");
+ private static final Uri URI_GC_TRACK_LOG = cgBase.buildURI(false, "www.geocaching.com", "/track/log.aspx");
private cgTrackable trackable = null;
private List<Integer> types = new ArrayList<Integer>();
diff --git a/main/src/cgeo/geocaching/cgeovisit.java b/main/src/cgeo/geocaching/cgeovisit.java
index 9689e96..943eeb7 100644
--- a/main/src/cgeo/geocaching/cgeovisit.java
+++ b/main/src/cgeo/geocaching/cgeovisit.java
@@ -9,6 +9,7 @@ import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.res.Configuration;
+import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
@@ -25,7 +26,6 @@ import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
-import java.net.URI;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
@@ -43,7 +43,8 @@ public class cgeovisit extends cgLogForm {
private static final int MENU_SIGNATURE = 1;
private static final int SUBMENU_VOTE = 2;
- private static final URI URI_GC_SEEK_LOG = cgBase.buildURI(false, "www.geocaching.com", "/seek/log.aspx");
+ private static final Uri URI_GC_SEEK_LOG = cgBase.buildURI(false, "www.geocaching.com", "/seek/log.aspx");
+ private static final Uri URI_GCVOTE_SETVOTE = cgBase.buildURI(false, "gcvote.com", "/setVote.php");
private LayoutInflater inflater = null;
private cgCache cache = null;
@@ -223,7 +224,6 @@ public class cgeovisit extends cgLogForm {
}
}
};
- private static final URI URI_GCVOTE_SETVOTE = cgBase.buildURI(false, "gcvote.com", "/setVote.php");
public cgeovisit() {
super("c:geo-log");
diff --git a/main/src/cgeo/geocaching/connector/GCConnector.java b/main/src/cgeo/geocaching/connector/GCConnector.java
index 3aca3d7..f51897e 100644
--- a/main/src/cgeo/geocaching/connector/GCConnector.java
+++ b/main/src/cgeo/geocaching/connector/GCConnector.java
@@ -9,9 +9,9 @@ import cgeo.geocaching.cgeoapplication;
import org.apache.commons.lang3.StringUtils;
+import android.net.Uri;
import android.util.Log;
-import java.net.URI;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -20,7 +20,7 @@ import java.util.UUID;
public class GCConnector extends AbstractConnector implements IConnector {
- private static final URI URI_GC_SEEK_CACHE_DETAILS = cgBase.buildURI(false, "www.geocaching.com", "/seek/cache_details.aspx");
+ private static final Uri URI_GC_SEEK_CACHE_DETAILS = cgBase.buildURI(false, "www.geocaching.com", "/seek/cache_details.aspx");
@Override
public boolean canHandle(String geocode) {