From 113752775453542cbee548019c5acf3f88d260e1 Mon Sep 17 00:00:00 2001 From: Alexandra Tritz Date: Tue, 22 Jul 2014 15:56:01 +0200 Subject: [PATCH 1/3] use query parameters with route --- .gitignore | 1 + MobileDeepLinking-Android-SDK/build.gradle | 10 +--- .../android/MobileDeepLinking.java | 50 +++++++++++++++++++ 3 files changed, 52 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index cc97ef2..acde6ad 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,4 @@ local.properties /local.properties /.idea/workspace.xml .ds_store +MobileDeepLinking-Android-SDK/mobiledeeplinking_lib.iml diff --git a/MobileDeepLinking-Android-SDK/build.gradle b/MobileDeepLinking-Android-SDK/build.gradle index 8a5b123..58de644 100644 --- a/MobileDeepLinking-Android-SDK/build.gradle +++ b/MobileDeepLinking-Android-SDK/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'android-library' android { compileSdkVersion 19 - buildToolsVersion "19.0.1" + buildToolsVersion "19.1" defaultConfig { minSdkVersion 8 @@ -10,12 +10,4 @@ android { versionCode 1 versionName "1.0" } - release { - runProguard false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' - } -} - -dependencies { - compile 'com.android.support:appcompat-v7:+' } diff --git a/MobileDeepLinking-Android-SDK/src/main/java/org/mobiledeeplinking/android/MobileDeepLinking.java b/MobileDeepLinking-Android-SDK/src/main/java/org/mobiledeeplinking/android/MobileDeepLinking.java index cf0508a..8daa9f0 100644 --- a/MobileDeepLinking-Android-SDK/src/main/java/org/mobiledeeplinking/android/MobileDeepLinking.java +++ b/MobileDeepLinking-Android-SDK/src/main/java/org/mobiledeeplinking/android/MobileDeepLinking.java @@ -38,11 +38,14 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.util.Collections; import java.util.HashMap; import java.util.Iterator; +import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Set; public class MobileDeepLinking extends Activity { @@ -103,6 +106,14 @@ private void routeUsingUrl(Uri deeplink) throws JSONException { Map routeParameters = new HashMap(); routeParameters = DeeplinkMatcher.match(route, routeOptions, routeParameters, deeplink); + Set queryParameterNames = getQueryParameterNames(deeplink); + if ( !queryParameterNames.isEmpty() ) + { + for (String paramName : queryParameterNames) + { + routeParameters.put(paramName, deeplink.getQueryParameter(paramName)); + } + } if (routeParameters != null) { handleRoute(routeOptions, routeParameters); @@ -214,4 +225,43 @@ private String readConfigFile() throws IOException } return sb.toString(); } + + /** + * Returns a set of the unique names of all query parameters. Iterating + * over the set will return the names in order of their first occurrence. + * + * @throws UnsupportedOperationException if this isn't a hierarchical URI + * + * @return a set of decoded names + */ + private Set getQueryParameterNames(Uri uri) { + if (uri.isOpaque()) { + throw new UnsupportedOperationException("This isn't a hierarchical URI."); + } + + String query = uri.getEncodedQuery(); + if (query == null) { + return Collections.emptySet(); + } + + Set names = new LinkedHashSet(); + int start = 0; + do { + int next = query.indexOf('&', start); + int end = (next == -1) ? query.length() : next; + + int separator = query.indexOf('=', start); + if (separator > end || separator == -1) { + separator = end; + } + + String name = query.substring(start, separator); + names.add(Uri.decode(name)); + + // Move start to end of name. + start = end + 1; + } while (start < query.length()); + + return Collections.unmodifiableSet(names); + } } From f1c34a08952c26030d86f1dd3d584237f954b73c Mon Sep 17 00:00:00 2001 From: Alexandra Tritz Date: Tue, 22 Jul 2014 17:09:07 +0200 Subject: [PATCH 2/3] Fix match parameters for all routes --- .../java/org/mobiledeeplinking/android/MobileDeepLinking.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MobileDeepLinking-Android-SDK/src/main/java/org/mobiledeeplinking/android/MobileDeepLinking.java b/MobileDeepLinking-Android-SDK/src/main/java/org/mobiledeeplinking/android/MobileDeepLinking.java index 8daa9f0..b6093e7 100644 --- a/MobileDeepLinking-Android-SDK/src/main/java/org/mobiledeeplinking/android/MobileDeepLinking.java +++ b/MobileDeepLinking-Android-SDK/src/main/java/org/mobiledeeplinking/android/MobileDeepLinking.java @@ -105,7 +105,6 @@ private void routeUsingUrl(Uri deeplink) throws JSONException try { Map routeParameters = new HashMap(); - routeParameters = DeeplinkMatcher.match(route, routeOptions, routeParameters, deeplink); Set queryParameterNames = getQueryParameterNames(deeplink); if ( !queryParameterNames.isEmpty() ) { @@ -114,6 +113,7 @@ private void routeUsingUrl(Uri deeplink) throws JSONException routeParameters.put(paramName, deeplink.getQueryParameter(paramName)); } } + routeParameters = DeeplinkMatcher.match(route, routeOptions, routeParameters, deeplink); if (routeParameters != null) { handleRoute(routeOptions, routeParameters); From 603d5e40e06218d43152b03bc4973c0b708db0cc Mon Sep 17 00:00:00 2001 From: Alexandra Tritz Date: Mon, 4 May 2015 16:36:03 +0200 Subject: [PATCH 3/3] Add route parameter in intent extras --- .../java/org/mobiledeeplinking/android/MobileDeepLinking.java | 1 + 1 file changed, 1 insertion(+) diff --git a/MobileDeepLinking-Android-SDK/src/main/java/org/mobiledeeplinking/android/MobileDeepLinking.java b/MobileDeepLinking-Android-SDK/src/main/java/org/mobiledeeplinking/android/MobileDeepLinking.java index b6093e7..7196b9d 100644 --- a/MobileDeepLinking-Android-SDK/src/main/java/org/mobiledeeplinking/android/MobileDeepLinking.java +++ b/MobileDeepLinking-Android-SDK/src/main/java/org/mobiledeeplinking/android/MobileDeepLinking.java @@ -113,6 +113,7 @@ private void routeUsingUrl(Uri deeplink) throws JSONException routeParameters.put(paramName, deeplink.getQueryParameter(paramName)); } } + routeParameters.put("route", deeplink.getHost()); routeParameters = DeeplinkMatcher.match(route, routeOptions, routeParameters, deeplink); if (routeParameters != null) {