11package org .microg .nlp .backend .nominatim ;
22
33import android .content .Context ;
4+ import android .content .SharedPreferences ;
45import android .content .pm .PackageManager ;
56import android .location .Address ;
67import android .net .Uri ;
78import android .os .Build ;
9+ import android .preference .PreferenceManager ;
810import android .util .Log ;
911
1012import org .json .JSONArray ;
2123import java .util .ArrayList ;
2224import java .util .List ;
2325import java .util .Locale ;
26+ import java .util .Objects ;
2427import java .util .concurrent .atomic .AtomicBoolean ;
2528
2629public class BackendService extends GeocoderBackendService {
27- private static final String TAG = "NominatimGeocoderBackend" ;
28- private static final String SERVICE_URL_MAPQUEST = "http://open.mapquestapi.com/nominatim/v1/" ;
29- private static final String SERVICE_URL_OSM = " http://nominatim.openstreetmap.org/" ;
30+ private static final String TAG = "NominatimGeocoder" ;
31+
32+ private static final String SERVICE_URL_MAPQUEST = "https://open.mapquestapi.com/nominatim/v1" ;
33+ private static final String SERVICE_URL_OSM = "https://nominatim.openstreetmap.org" ;
34+
3035 private static final String REVERSE_GEOCODE_URL =
31- "%sreverse?format =json&accept-language=%s&lat=%f&lon=%f" ;
36+ "%s/reverse?%sformat =json&accept-language=%s&lat=%f&lon=%f" ;
3237 private static final String SEARCH_GEOCODE_URL =
33- "%ssearch?format =json&accept-language=%s&addressdetails=1&bounded=1&q=%s&limit=%d" ;
38+ "%s/search?%sformat =json&accept-language=%s&addressdetails=1&bounded=1&q=%s&limit=%d" ;
3439 private static final String SEARCH_GEOCODE_WITH_BOX_URL =
35- "%ssearch?format=json&accept-language=%s&addressdetails=1&bounded=1&q=%s&limit=%d" +
36- "&viewbox=%f,%f,%f,%f" ;
40+ SEARCH_GEOCODE_URL + "&viewbox=%f,%f,%f,%f" ;
41+
3742 private static final String WIRE_LATITUDE = "lat" ;
3843 private static final String WIRE_LONGITUDE = "lon" ;
3944 private static final String WIRE_ADDRESS = "address" ;
@@ -48,10 +53,40 @@ public class BackendService extends GeocoderBackendService {
4853 private static final String WIRE_COUNTRYNAME = "country" ;
4954 private static final String WIRE_COUNTRYCODE = "country_code" ;
5055
56+ private String mApiUrl ;
57+ private String mAPIKey ;
58+
59+ @ Override
60+ public void onCreate () {
61+ super .onCreate ();
62+ readPrefs ();
63+ }
64+
65+ @ Override
66+ protected void onOpen () {
67+ super .onOpen ();
68+ readPrefs ();
69+ }
70+
71+ private void readPrefs () {
72+ SharedPreferences sp = PreferenceManager .getDefaultSharedPreferences (getApplicationContext ());
73+
74+ if (sp .getString (SettingsActivity .PrefsFragment .apiChoiceToken , "OSM" ).equals ("OSM" )) {
75+ mApiUrl = SERVICE_URL_OSM ;
76+ // No API key for OSM
77+ mAPIKey = "" ;
78+ } else {
79+ mApiUrl = SERVICE_URL_MAPQUEST ;
80+ mAPIKey = "key=" + sp .getString (SettingsActivity .PrefsFragment .mapQuestApiKeyToken , "NA" )
81+ + "&" ;
82+ }
83+ }
84+
85+
5186 @ Override
5287 protected List <Address > getFromLocation (double latitude , double longitude , int maxResults ,
5388 String locale ) {
54- String url = String .format (Locale .US , REVERSE_GEOCODE_URL , SERVICE_URL_MAPQUEST ,
89+ String url = String .format (Locale .US , REVERSE_GEOCODE_URL , mApiUrl , mAPIKey ,
5590 locale .split ("_" )[0 ], latitude , longitude );
5691 try {
5792 JSONObject result = new JSONObject (new AsyncGetRequest (this ,
@@ -88,10 +123,10 @@ protected List<Address> getFromLocationName(String locationName, int maxResults,
88123 String url ;
89124 if (lowerLeftLatitude == 0 && lowerLeftLongitude == 0 && upperRightLatitude == 0 &&
90125 upperRightLongitude == 0 ) {
91- url = String .format (Locale .US , SEARCH_GEOCODE_URL , SERVICE_URL_MAPQUEST ,
126+ url = String .format (Locale .US , SEARCH_GEOCODE_URL , mApiUrl , mAPIKey ,
92127 locale .split ("_" )[0 ], query , maxResults );
93128 } else {
94- url = String .format (Locale .US , SEARCH_GEOCODE_WITH_BOX_URL , SERVICE_URL_MAPQUEST ,
129+ url = String .format (Locale .US , SEARCH_GEOCODE_WITH_BOX_URL , mApiUrl , mAPIKey ,
95130 locale .split ("_" )[0 ], query , maxResults , lowerLeftLongitude ,
96131 upperRightLatitude , upperRightLongitude , lowerLeftLatitude );
97132 }
@@ -165,8 +200,8 @@ private Address parseResponse(Locale locale, JSONObject result) throws JSONExcep
165200 }
166201
167202 private class AsyncGetRequest extends Thread {
168- public static final String USER_AGENT = "User-Agent" ;
169- public static final String USER_AGENT_TEMPLATE = "UnifiedNlp/%s (Linux; Android %s)" ;
203+ static final String USER_AGENT = "User-Agent" ;
204+ static final String USER_AGENT_TEMPLATE = "UnifiedNlp/%s (Linux; Android %s)" ;
170205 private final AtomicBoolean done = new AtomicBoolean (false );
171206 private final Context context ;
172207 private final String url ;
@@ -196,12 +231,12 @@ public void run() {
196231 }
197232 }
198233
199- public AsyncGetRequest asyncStart () {
234+ AsyncGetRequest asyncStart () {
200235 start ();
201236 return this ;
202237 }
203238
204- public byte [] retrieveAllBytes () {
239+ byte [] retrieveAllBytes () {
205240 if (!done .get ()) {
206241 synchronized (done ) {
207242 while (!done .get ()) {
@@ -216,7 +251,7 @@ public byte[] retrieveAllBytes() {
216251 return result ;
217252 }
218253
219- public String retrieveString () {
254+ String retrieveString () {
220255 return new String (retrieveAllBytes ());
221256 }
222257
0 commit comments