From f2324763a3da4fc4a85069602cccc82b7f7a7fc5 Mon Sep 17 00:00:00 2001 From: Tod Fitch Date: Tue, 17 May 2016 02:59:09 -0700 Subject: [PATCH 1/2] Allow user to enter API key MapQuest now requires a developer API key to be used when querying their Nominatim server. This change allows the end user to enter a key that they can get without charge from the MapQuest developer site at https://developer.mapquest.com Signed-off-by: Tod Fitch --- build.gradle | 1 + src/main/AndroidManifest.xml | 33 +++++++--- .../nlp/backend/nominatim/BackendService.java | 22 +++++-- .../backend/nominatim/SettingsActivity.java | 65 +++++++++++++++++++ src/main/res/values/strings.xml | 7 +- src/main/res/xml/preferences.xml | 16 +++++ 6 files changed, 128 insertions(+), 16 deletions(-) create mode 100644 src/main/java/org/microg/nlp/backend/nominatim/SettingsActivity.java create mode 100644 src/main/res/xml/preferences.xml diff --git a/build.gradle b/build.gradle index 39e4b4e..bb91247 100644 --- a/build.gradle +++ b/build.gradle @@ -31,6 +31,7 @@ repositories { dependencies { compile 'org.microg:unifiednlp-api:1.3.2' + compile 'com.android.support:appcompat-v7:22.2.1' } android { diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index 15a7e95..aa183c5 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -1,14 +1,19 @@ - - + package="org.microg.nlp.backend.nominatim" + android:versionCode="10101" + android:versionName="1.1.1"> + android:minSdkVersion="11" + android:targetSdkVersion="22" /> + + + + + + + - + + + + + + + + - + + \ No newline at end of file diff --git a/src/main/java/org/microg/nlp/backend/nominatim/BackendService.java b/src/main/java/org/microg/nlp/backend/nominatim/BackendService.java index 0a4ec07..4f14148 100644 --- a/src/main/java/org/microg/nlp/backend/nominatim/BackendService.java +++ b/src/main/java/org/microg/nlp/backend/nominatim/BackendService.java @@ -1,10 +1,12 @@ package org.microg.nlp.backend.nominatim; import android.content.Context; +import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.location.Address; import android.net.Uri; import android.os.Build; +import android.preference.PreferenceManager; import android.util.Log; import org.json.JSONArray; @@ -28,11 +30,11 @@ public class BackendService extends GeocoderBackendService { private static final String SERVICE_URL_MAPQUEST = "http://open.mapquestapi.com/nominatim/v1/"; private static final String SERVICE_URL_OSM = " http://nominatim.openstreetmap.org/"; private static final String REVERSE_GEOCODE_URL = - "%sreverse?format=json&accept-language=%s&lat=%f&lon=%f"; + "%sreverse?format=json&key=%s&accept-language=%s&lat=%f&lon=%f"; private static final String SEARCH_GEOCODE_URL = - "%ssearch?format=json&accept-language=%s&addressdetails=1&bounded=1&q=%s&limit=%d"; + "%ssearch?format=json&key=%s&accept-language=%s&addressdetails=1&bounded=1&q=%s&limit=%d"; private static final String SEARCH_GEOCODE_WITH_BOX_URL = - "%ssearch?format=json&accept-language=%s&addressdetails=1&bounded=1&q=%s&limit=%d" + + "%ssearch?format=json&key=%s&accept-language=%s&addressdetails=1&bounded=1&q=%s&limit=%d" + "&viewbox=%f,%f,%f,%f"; private static final String WIRE_LATITUDE = "lat"; private static final String WIRE_LONGITUDE = "lon"; @@ -51,8 +53,12 @@ public class BackendService extends GeocoderBackendService { @Override protected List
getFromLocation(double latitude, double longitude, int maxResults, String locale) { + + SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); + String mapquestApiKey = SP.getString("api_preference", "NA"); + String url = String.format(Locale.US, REVERSE_GEOCODE_URL, SERVICE_URL_MAPQUEST, - locale.split("_")[0], latitude, longitude); + mapquestApiKey, locale.split("_")[0], latitude, longitude); try { JSONObject result = new JSONObject(new AsyncGetRequest(this, url).asyncStart().retrieveString()); @@ -84,15 +90,19 @@ private static Locale localeFromLocaleString(String localeString) { protected List
getFromLocationName(String locationName, int maxResults, double lowerLeftLatitude, double lowerLeftLongitude, double upperRightLatitude, double upperRightLongitude, String locale) { + + SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); + String mapquestApiKey = SP.getString("api_preference", "NA"); + String query = Uri.encode(locationName); String url; if (lowerLeftLatitude == 0 && lowerLeftLongitude == 0 && upperRightLatitude == 0 && upperRightLongitude == 0) { url = String.format(Locale.US, SEARCH_GEOCODE_URL, SERVICE_URL_MAPQUEST, - locale.split("_")[0], query, maxResults); + mapquestApiKey, locale.split("_")[0], query, maxResults); } else { url = String.format(Locale.US, SEARCH_GEOCODE_WITH_BOX_URL, SERVICE_URL_MAPQUEST, - locale.split("_")[0], query, maxResults, lowerLeftLongitude, + mapquestApiKey, locale.split("_")[0], query, maxResults, lowerLeftLongitude, upperRightLatitude, upperRightLongitude, lowerLeftLatitude); } try { diff --git a/src/main/java/org/microg/nlp/backend/nominatim/SettingsActivity.java b/src/main/java/org/microg/nlp/backend/nominatim/SettingsActivity.java new file mode 100644 index 0000000..6316f78 --- /dev/null +++ b/src/main/java/org/microg/nlp/backend/nominatim/SettingsActivity.java @@ -0,0 +1,65 @@ +package org.microg.nlp.backend.nominatim; + +import android.app.FragmentManager; +import android.app.FragmentTransaction; +import android.content.SharedPreferences; +import android.preference.ListPreference; +import android.preference.Preference; +import android.preference.PreferenceActivity; +import android.preference.PreferenceFragment; +import android.preference.PreferenceManager; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; + +import java.util.List; + + +public class SettingsActivity extends PreferenceActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Display the fragment as the main content. + getFragmentManager().beginTransaction() + .replace(android.R.id.content, new PrefsFragment()).commit(); + + } + + public static class PrefsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener { + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Load the preferences from an XML resource + addPreferencesFromResource(R.xml.preferences); + setSummaries(); + getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); + } + + @Override + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { + updatePreference(findPreference(key), key); + } + + private void setSummaries(){ + + final SharedPreferences sh = getPreferenceManager().getSharedPreferences() ; + + Preference stylePref = findPreference("api_preference"); + stylePref.setSummary(sh.getString("api_preference", "")); + + } + private void updatePreference(Preference preference, String key) { + if (preference == null) return; + if (preference instanceof ListPreference) { + ListPreference listPreference = (ListPreference) preference; + listPreference.setSummary(listPreference.getEntry()); + return; + } + SharedPreferences sharedPrefs = getPreferenceManager().getSharedPreferences(); + preference.setSummary(sharedPrefs.getString(key, "Default")); + } + } + +} \ No newline at end of file diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index ec5cbfd..db6198f 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -1,5 +1,10 @@ - NominatimGeocoderBackend + Nominatim Geocoder Backend Nominatim + + MapQuest Server Access + MapQuest Developer API Key + MapQuest Developer API Key + Enter your MapQuest developer API key. diff --git a/src/main/res/xml/preferences.xml b/src/main/res/xml/preferences.xml new file mode 100644 index 0000000..5c3a854 --- /dev/null +++ b/src/main/res/xml/preferences.xml @@ -0,0 +1,16 @@ + + + + + + + + + + \ No newline at end of file From bf40335b5934a6823d4e975590ddff9ae88e4d54 Mon Sep 17 00:00:00 2001 From: Tod Fitch Date: Tue, 17 May 2016 07:59:48 -0700 Subject: [PATCH 2/2] Revert unneeded changes Android Studio was too helpful in suggesting changes and automatically editing the manifest. Signed-off-by: Tod Fitch --- build.gradle | 1 - src/main/AndroidManifest.xml | 14 +++++--------- .../nlp/backend/nominatim/SettingsActivity.java | 7 ------- 3 files changed, 5 insertions(+), 17 deletions(-) diff --git a/build.gradle b/build.gradle index bb91247..39e4b4e 100644 --- a/build.gradle +++ b/build.gradle @@ -31,7 +31,6 @@ repositories { dependencies { compile 'org.microg:unifiednlp-api:1.3.2' - compile 'com.android.support:appcompat-v7:22.2.1' } android { diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index aa183c5..dcb7525 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -1,19 +1,15 @@ + package="org.microg.nlp.backend.nominatim"> + + - - - - - - - \ No newline at end of file + diff --git a/src/main/java/org/microg/nlp/backend/nominatim/SettingsActivity.java b/src/main/java/org/microg/nlp/backend/nominatim/SettingsActivity.java index 6316f78..354d41e 100644 --- a/src/main/java/org/microg/nlp/backend/nominatim/SettingsActivity.java +++ b/src/main/java/org/microg/nlp/backend/nominatim/SettingsActivity.java @@ -1,19 +1,12 @@ package org.microg.nlp.backend.nominatim; -import android.app.FragmentManager; -import android.app.FragmentTransaction; import android.content.SharedPreferences; import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceFragment; -import android.preference.PreferenceManager; -import android.support.v7.app.AppCompatActivity; import android.os.Bundle; -import java.util.List; - - public class SettingsActivity extends PreferenceActivity { @Override protected void onCreate(Bundle savedInstanceState) {