Skip to content

Commit 93b8385

Browse files
authored
Pull API Key (#448)
* Add ApiKeyChangeListener interface * migrate RouterHttpHandler to pull api key * Migrate SearchHttpHandler to pull api key * Rm TmpHttpHandler class * Update map api key when updates in MapzenManager * better listener api
1 parent bf93f44 commit 93b8385

21 files changed

+265
-287
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.mapzen.android.core;
2+
3+
/**
4+
* Listener for handling changes to API key.
5+
*/
6+
public interface ApiKeyChangeListener {
7+
/**
8+
* Called when the {@link MapzenManager}'s API key is changed.
9+
* @param apiKey the current API key
10+
*/
11+
void onApiKeyChanged(String apiKey);
12+
}

core/src/main/java/com/mapzen/android/core/CoreAndroidModule.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
* Provide initializer for configuring {@link com.mapzen.android.search.MapzenSearch} objects.
6363
* @return
6464
*/
65-
@Provides @Singleton public SearchInitializer provideSearchInitializer() {
66-
return new SearchInitializer();
65+
@Provides @Singleton public SearchInitializer provideSearchInitializer(Context context) {
66+
return new SearchInitializer(context);
6767
}
6868
}

core/src/main/java/com/mapzen/android/core/MapzenManager.java

+27
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@
55
import android.content.Context;
66
import android.content.res.Resources;
77

8+
import java.lang.ref.WeakReference;
9+
import java.util.ArrayList;
10+
import java.util.Collections;
11+
import java.util.List;
12+
813
/**
914
* {@code MapzenManager} assists with Mapzen API key management. When created it reads the API key
1015
* set in string resources if one has been declared by the application.
@@ -33,6 +38,8 @@ public class MapzenManager {
3338

3439
static MapzenManager instance;
3540

41+
private List<WeakReference<ApiKeyChangeListener>> listeners = new ArrayList<>();
42+
3643
/**
3744
* Get singleton instance.
3845
*/
@@ -80,6 +87,7 @@ public String getApiKey() {
8087
*/
8188
public void setApiKey(String apiKey) {
8289
this.apiKey = apiKey;
90+
notifyListeners();
8391
}
8492

8593
/**
@@ -89,4 +97,23 @@ public void setApiKey(String apiKey) {
8997
public static String getSdkVersion() {
9098
return BuildConfig.SDK_VERSION;
9199
}
100+
101+
/**
102+
* Adds listener to list of managed callbacks so that it can be notified when API key changes
103+
* occur.
104+
* @param listenerReference
105+
*/
106+
public void addApiKeyChangeListener(WeakReference<ApiKeyChangeListener> listenerReference) {
107+
Collections.synchronizedList(listeners).add(listenerReference);
108+
}
109+
110+
private void notifyListeners() {
111+
for (WeakReference<ApiKeyChangeListener> weakReference : Collections.synchronizedList(
112+
listeners)) {
113+
ApiKeyChangeListener listener = weakReference.get();
114+
if (listener != null) {
115+
listener.onApiKeyChanged(apiKey);
116+
}
117+
}
118+
}
92119
}

core/src/main/java/com/mapzen/android/graphics/MapzenMap.java

+12
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.mapzen.android.graphics;
22

3+
import com.mapzen.android.core.ApiKeyChangeListener;
34
import com.mapzen.android.core.MapzenManager;
45
import com.mapzen.android.graphics.internal.StyleStringGenerator;
56
import com.mapzen.android.graphics.model.BitmapMarker;
@@ -27,6 +28,7 @@
2728
import android.support.annotation.Nullable;
2829
import android.view.View;
2930

31+
import java.lang.ref.WeakReference;
3032
import java.util.ArrayList;
3133
import java.util.Arrays;
3234
import java.util.HashMap;
@@ -147,6 +149,15 @@ public boolean onRotate(float x, float y, float rotation) {
147149
}
148150
};
149151

152+
WeakReference<ApiKeyChangeListener> apiKeyChangeListener = new WeakReference(
153+
new ApiKeyChangeListener() {
154+
@Override public void onApiKeyChanged(String apiKey) {
155+
List<SceneUpdate> updates = new ArrayList<>();
156+
updates.add(sceneUpdateManager.getApiKeyUpdate(apiKey));
157+
mapController.updateSceneAsync(updates);
158+
}
159+
});
160+
150161
/**
151162
* Creates a new map based on the given {@link MapView} and {@link MapController}.
152163
*/
@@ -164,6 +175,7 @@ public boolean onRotate(float x, float y, float rotation) {
164175
this.sceneUpdateManager = sceneUpdateManager;
165176
this.locale = locale;
166177
this.mapzenManager = mapzenManager;
178+
this.mapzenManager.addApiKeyChangeListener(apiKeyChangeListener);
167179
mapView.setMapzenMap(this);
168180
mapController.setPanResponder(internalPanResponder);
169181
mapController.setRotateResponder(internalRotateResponder);

core/src/main/java/com/mapzen/android/graphics/MapzenMapHttpHandler.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ HttpHandler httpHandler() {
4545
return httpHandler;
4646
}
4747

48-
private class InternalHttpHandler extends TmpHttpHandler {
48+
private class InternalHttpHandler extends HttpHandler {
4949

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

core/src/main/java/com/mapzen/android/graphics/SceneUpdateManager.java

+10-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class SceneUpdateManager {
2626
List<SceneUpdate> getUpdatesFor(String apiKey, Locale locale, boolean transitOverlayEnabled,
2727
boolean bikeOverlayEnabled, boolean pathOverlayEnabled) {
2828
final ArrayList<SceneUpdate> sceneUpdates = new ArrayList<>(2);
29-
sceneUpdates.add(new SceneUpdate(STYLE_GLOBAL_VAR_API_KEY, apiKey));
29+
sceneUpdates.add(getApiKeyUpdate(apiKey));
3030
sceneUpdates.add(new SceneUpdate(STYLE_GLOBAL_VAR_LANGUAGE, locale.getLanguage()));
3131
sceneUpdates.add(getTransitOverlayUpdate(transitOverlayEnabled));
3232
sceneUpdates.add(getBikeOverlayUpdate(bikeOverlayEnabled));
@@ -63,4 +63,13 @@ SceneUpdate getPathOverlayUpdate(boolean pathOverlayEnabled) {
6363
return new SceneUpdate(STYLE_GLOBAL_VAR_PATH_OVERLAY, String.valueOf(
6464
pathOverlayEnabled));
6565
}
66+
67+
/**
68+
* Creates a {@link SceneUpdate} for the API key.
69+
* @param apiKey
70+
* @return
71+
*/
72+
SceneUpdate getApiKeyUpdate(String apiKey) {
73+
return new SceneUpdate(STYLE_GLOBAL_VAR_API_KEY, apiKey);
74+
}
6675
}

core/src/main/java/com/mapzen/android/graphics/TmpHttpHandler.java

-184
This file was deleted.

core/src/main/java/com/mapzen/android/search/MapzenSearch.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public class MapzenSearch {
2727
public MapzenSearch(Context context) {
2828
initDI(context);
2929
internalSearch = new Pelias();
30-
searchInitializer.initSearch(this, context);
30+
searchInitializer.initSearch(this);
3131
}
3232

3333
/**
@@ -37,7 +37,7 @@ public MapzenSearch(Context context) {
3737
public MapzenSearch(Context context, Pelias pelias) {
3838
initDI(context);
3939
internalSearch = pelias;
40-
searchInitializer.initSearch(this, context);
40+
searchInitializer.initSearch(this);
4141
}
4242

4343
private void initDI(Context context) {

core/src/main/java/com/mapzen/android/search/MapzenSearchHttpHandler.java

+14-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
package com.mapzen.android.search;
22

3+
import com.mapzen.android.core.ApiKeyChangeListener;
34
import com.mapzen.android.core.GenericHttpHandler;
45
import com.mapzen.android.core.MapzenManager;
56
import com.mapzen.pelias.PeliasRequestHandler;
67

8+
import android.content.Context;
9+
10+
import java.lang.ref.WeakReference;
711
import java.util.HashMap;
812
import java.util.Map;
913

@@ -13,12 +17,21 @@
1317
public abstract class MapzenSearchHttpHandler implements GenericHttpHandler {
1418

1519
private SearchRequestHandler searchHandler;
20+
WeakReference<ApiKeyChangeListener> apiKeyChangeListener = new WeakReference(
21+
new ApiKeyChangeListener() {
22+
@Override public void onApiKeyChanged(String apiKey) {
23+
searchHandler.setApiKey(apiKey);
24+
}
25+
});
1626

1727
/**
1828
* Public constructor.
1929
*/
20-
public MapzenSearchHttpHandler() {
30+
public MapzenSearchHttpHandler(Context context) {
2131
searchHandler = new SearchRequestHandler();
32+
MapzenManager mapzenManager = MapzenManager.instance(context);
33+
mapzenManager.addApiKeyChangeListener(apiKeyChangeListener);
34+
searchHandler.setApiKey(mapzenManager.getApiKey());
2235
}
2336

2437
/**

0 commit comments

Comments
 (0)