From: srowen Date: Sat, 7 Aug 2010 13:21:35 +0000 (+0000) Subject: Preserve query in geo URI X-Git-Url: http://git.rot13.org/?p=zxing.git;a=commitdiff_plain;h=ec1ee85493764108d96cac8270ce70c6a8d72f48 Preserve query in geo URI git-svn-id: http://zxing.googlecode.com/svn/trunk@1514 59b500cc-1b3d-0410-9834-0bbf25fbcc57 --- diff --git a/core/src/com/google/zxing/client/result/GeoParsedResult.java b/core/src/com/google/zxing/client/result/GeoParsedResult.java index 947b9e8d..dc50e8a6 100644 --- a/core/src/com/google/zxing/client/result/GeoParsedResult.java +++ b/core/src/com/google/zxing/client/result/GeoParsedResult.java @@ -24,12 +24,14 @@ public final class GeoParsedResult extends ParsedResult { private final double latitude; private final double longitude; private final double altitude; + private final String query; - GeoParsedResult(double latitude, double longitude, double altitude) { + GeoParsedResult(double latitude, double longitude, double altitude, String query) { super(ParsedResultType.GEO); this.latitude = latitude; this.longitude = longitude; this.altitude = altitude; + this.query = query; } public String getGeoURI() { @@ -42,6 +44,10 @@ public final class GeoParsedResult extends ParsedResult { result.append(','); result.append(altitude); } + if (query != null) { + result.append('?'); + result.append(query); + } return result.toString(); } @@ -66,8 +72,15 @@ public final class GeoParsedResult extends ParsedResult { return altitude; } + /** + * @return query string associated with geo URI or null if none exists + */ + public String getQuery() { + return query; + } + public String getDisplayResult() { - StringBuffer result = new StringBuffer(); + StringBuffer result = new StringBuffer(20); result.append(latitude); result.append(", "); result.append(longitude); @@ -76,6 +89,11 @@ public final class GeoParsedResult extends ParsedResult { result.append(altitude); result.append('m'); } + if (query != null) { + result.append(" ("); + result.append(query); + result.append(')'); + } return result.toString(); } diff --git a/core/src/com/google/zxing/client/result/GeoResultParser.java b/core/src/com/google/zxing/client/result/GeoResultParser.java index 3d21bf36..8459ddcb 100644 --- a/core/src/com/google/zxing/client/result/GeoResultParser.java +++ b/core/src/com/google/zxing/client/result/GeoResultParser.java @@ -38,7 +38,15 @@ final class GeoResultParser extends ResultParser { } // Drop geo, query portion int queryStart = rawText.indexOf('?', 4); - String geoURIWithoutQuery = queryStart < 0 ? rawText.substring(4) : rawText.substring(4, queryStart); + String query; + String geoURIWithoutQuery; + if (queryStart < 0) { + query = null; + geoURIWithoutQuery = rawText.substring(4); + } else { + query = rawText.substring(queryStart + 1); + geoURIWithoutQuery = rawText.substring(4, queryStart); + } int latitudeEnd = geoURIWithoutQuery.indexOf(','); if (latitudeEnd < 0) { return null; @@ -63,7 +71,7 @@ final class GeoResultParser extends ResultParser { } catch (NumberFormatException nfe) { return null; } - return new GeoParsedResult(latitude, longitude, altitude); + return new GeoParsedResult(latitude, longitude, altitude, query); } } \ No newline at end of file diff --git a/core/test/src/com/google/zxing/client/result/GeoParsedResultTestCase.java b/core/test/src/com/google/zxing/client/result/GeoParsedResultTestCase.java index 77c56ccf..9ae2e76f 100644 --- a/core/test/src/com/google/zxing/client/result/GeoParsedResultTestCase.java +++ b/core/test/src/com/google/zxing/client/result/GeoParsedResultTestCase.java @@ -28,12 +28,17 @@ import junit.framework.TestCase; public final class GeoParsedResultTestCase extends TestCase { public void testGeo() { - doTest("geo:1,2", 1.0, 2.0, 0.0); - doTest("geo:80.33,-32.3344,3.35", 80.33, -32.3344, 3.35); - doTest("geo:-20.33,132.3344,0.01", -20.33, 132.3344, 0.01); + doTest("geo:1,2", 1.0, 2.0, 0.0, null); + doTest("geo:80.33,-32.3344,3.35", 80.33, -32.3344, 3.35, null); + doTest("geo:-20.33,132.3344,0.01", -20.33, 132.3344, 0.01, null); + doTest("geo:-20.33,132.3344,0.01?q=foobar", -20.33, 132.3344, 0.01, "q=foobar"); } - private static void doTest(String contents, double latitude, double longitude, double altitude) { + private static void doTest(String contents, + double latitude, + double longitude, + double altitude, + String query) { Result fakeResult = new Result(contents, null, null, BarcodeFormat.QR_CODE); ParsedResult result = ResultParser.parseResult(fakeResult); assertSame(ParsedResultType.GEO, result.getType());