Skip to content

Commit

Permalink
Send User-Agent (#412)
Browse files Browse the repository at this point in the history
* Send User-Agent for MapzenMap requests & create generic http handler

* Send User-Agent for MapzenSearch requests

* Send User-Agent for all MapzenRouter requests

* Rm trailing ;
  • Loading branch information
sarahsnow1 committed Jun 30, 2017
1 parent 670556c commit 0a40f84
Show file tree
Hide file tree
Showing 26 changed files with 877 additions and 215 deletions.
1 change: 1 addition & 0 deletions config/checkstyle/checkstyle-suppressions.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,5 @@
<suppress checks="TypeName" files="R.java" />
<suppress checks="ConstantName" files="R.java" />
<suppress checks="ParameterNumberCheck" files="src/main/java/com/mapzen/android/graphics/MapzenMap.java"/>
<suppress checks="[a-zA-Z0-9]*" files="src/main/java/com/mapzen/android/graphics/TmpHttpHandler.java"/>
</suppressions>
3 changes: 3 additions & 0 deletions core/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ project.archivesBaseName = POM_ARTIFACT_ID

ext.tangram_version = "0.6.3"

def SDK_VERSION = hasProperty('version') ? '"' + version + '"' : "null";

android {
compileSdkVersion 25
buildToolsVersion '25.0.2'
Expand All @@ -31,6 +33,7 @@ android {
versionCode 1
versionName "1.0"
resValue "string", "tangram_version", "${tangram_version}"
buildConfigField "String", "SDK_VERSION", SDK_VERSION
}

buildTypes {
Expand Down
18 changes: 14 additions & 4 deletions core/src/main/java/com/mapzen/android/core/CoreAndroidModule.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package com.mapzen.android.core;

import com.mapzen.android.graphics.TileHttpHandler;
import com.mapzen.android.graphics.MapzenMapHttpHandler;
import com.mapzen.android.search.SearchInitializer;

import android.content.Context;
import android.content.res.Resources;

import java.util.Map;

import javax.inject.Singleton;

import dagger.Module;
Expand Down Expand Up @@ -42,10 +44,18 @@
}

/**
* Provides HTTP handler to append API key to outgoing vector tile requests.
* Provides HTTP handler to configure User-Agent for outgoing vector tile requests.
*/
@Provides @Singleton public TileHttpHandler provideTileHttpHandler() {
return new TileHttpHandler();
@Provides @Singleton public MapzenMapHttpHandler provideTileHttpHandler() {
return new MapzenMapHttpHandler() {
@Override public Map<String, String> queryParamsForRequest() {
return null;
}

@Override public Map<String, String> headersForRequest() {
return null;
}
};
}

/**
Expand Down
28 changes: 28 additions & 0 deletions core/src/main/java/com/mapzen/android/core/GenericHttpHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.mapzen.android.core;

import com.mapzen.BuildConfig;

import android.os.Build;

import java.util.Map;

/**
* Generic SDK interface for service-specific handlers to implement.
*/
public interface GenericHttpHandler {

String HEADER_USER_AGENT = "User-Agent";
String USER_AGENT = "android-sdk;" + BuildConfig.SDK_VERSION + ";" + Build.VERSION.RELEASE;

/**
* Return query parameters to be appended to every request.
* @return
*/
Map<String, String> queryParamsForRequest();

/**
* Return headers to be added to every request.
* @return
*/
Map<String, String> headersForRequest();
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public class MapInitializer {

private Context context;

private TileHttpHandler tileHttpHandler;
private MapzenMapHttpHandler mapzenMapHttpHandler;

private MapDataManager mapDataManager;

Expand All @@ -34,11 +34,11 @@ public class MapInitializer {
/**
* Creates a new instance.
*/
@Inject MapInitializer(Context context, TileHttpHandler tileHttpHandler,
@Inject MapInitializer(Context context, MapzenMapHttpHandler mapzenMapHttpHandler,
MapDataManager mapDataManager, MapStateManager mapStateManager,
SceneUpdateManager sceneUpdateManager) {
this.context = context;
this.tileHttpHandler = tileHttpHandler;
this.mapzenMapHttpHandler = mapzenMapHttpHandler;
this.mapDataManager = mapDataManager;
this.mapStateManager = mapStateManager;
this.sceneUpdateManager = sceneUpdateManager;
Expand Down Expand Up @@ -92,7 +92,7 @@ private void loadMap(final MapView mapView, String sceneFile, final OnMapReadyCa
mapStateManager.isPathOverlayEnabled());
getTangramView(mapView).getMapAsync(new com.mapzen.tangram.MapView.OnMapReadyCallback() {
@Override public void onMapReady(MapController mapController) {
mapController.setHttpHandler(tileHttpHandler);
mapController.setHttpHandler(mapzenMapHttpHandler.httpHandler());
MapzenManager mapzenManager = MapzenManager.instance(mapView.getContext());
callback.onMapReady(
new MapzenMap(mapView, mapController, new OverlayManager(mapView, mapController,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
package com.mapzen.android.graphics;

import com.mapzen.android.core.GenericHttpHandler;
import com.mapzen.tangram.HttpHandler;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

import okhttp3.Callback;
import okhttp3.Headers;
import okhttp3.OkHttpClient;
import okhttp3.Request;

/**
* Base class for HTTP requests made by {@link MapzenMap}.
*/
public abstract class MapzenMapHttpHandler implements GenericHttpHandler {

private HttpHandler httpHandler;
RequestEnqueuer requestEnqueuer;

/**
* Public constructor with no cache configured.
*/
public MapzenMapHttpHandler() {
this(null, 0);
}

/**
* Public constructor with cache configured.
* @param directory cache directory
* @param maxSize max cache directory size in bytes
*/
public MapzenMapHttpHandler(File directory, long maxSize) {
httpHandler = new InternalHttpHandler(directory, maxSize);
requestEnqueuer = new RequestEnqueuer();
}

/**
* Underlying Tangram handler.
* @return
*/
HttpHandler httpHandler() {
return httpHandler;
}

private class InternalHttpHandler extends TmpHttpHandler {

public InternalHttpHandler(File directory, long maxSize) {
super(directory, maxSize);
}

@Override public boolean onRequest(String url, Callback cb) {
Map<String, String> customParams = queryParamsForRequest();
if (customParams != null) {
for (String key : customParams.keySet()) {
url = url.concat(key + "=" + customParams.get(key) + "&");
}
}

Map<String, String> headers = new HashMap<>();
headers.put(HEADER_USER_AGENT, USER_AGENT);
Map<String, String> customHeaders = headersForRequest();
if (customHeaders != null) {
headers.putAll(customHeaders);
}

requestEnqueuer.enqueueRequest(okClient, cb, url, headers);
return true;
}

@Override public void onCancel(String url) {
super.onCancel(url);
}
}

/**
* Class to handle creating and enqueuing requests.
*/
class RequestEnqueuer {
/**
* Creates and enqueues a {@link Request}.
* @param client
* @param callback
* @param url
* @param headers
*/
void enqueueRequest(OkHttpClient client, Callback callback, String url,
Map<String, String> headers) {
Request request = new Request.Builder()
.url(url)
.headers(Headers.of(headers))
.build();
client.newCall(request).enqueue(callback);
}
}
}

This file was deleted.

0 comments on commit 0a40f84

Please sign in to comment.