From 2f3438bd7bea9b0a2904107495dfa4b449093e9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Mauduit?= Date: Fri, 27 Jan 2017 14:07:21 +0100 Subject: [PATCH 01/14] TAG cannot be > 23 chars --- .../java/org/microg/nlp/backend/nominatim/BackendService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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..08784cd 100644 --- a/src/main/java/org/microg/nlp/backend/nominatim/BackendService.java +++ b/src/main/java/org/microg/nlp/backend/nominatim/BackendService.java @@ -24,9 +24,10 @@ import java.util.concurrent.atomic.AtomicBoolean; public class BackendService extends GeocoderBackendService { - private static final String TAG = "NominatimGeocoderBackend"; + private static final String TAG = "NominatimGeocoder"; 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"; private static final String SEARCH_GEOCODE_URL = From 30447837f287f7a62b6cb49430e853f8e478c060 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Mauduit?= Date: Fri, 27 Jan 2017 12:24:33 +0100 Subject: [PATCH 02/14] Change API url to https --- .../org/microg/nlp/backend/nominatim/BackendService.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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 08784cd..8887682 100644 --- a/src/main/java/org/microg/nlp/backend/nominatim/BackendService.java +++ b/src/main/java/org/microg/nlp/backend/nominatim/BackendService.java @@ -25,8 +25,9 @@ public class BackendService extends GeocoderBackendService { private static final String TAG = "NominatimGeocoder"; - 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 SERVICE_URL_MAPQUEST = "https://open.mapquestapi.com/nominatim/v1/"; + private static final String SERVICE_URL_OSM = "https://nominatim.openstreetmap.org/"; private static final String REVERSE_GEOCODE_URL = "%sreverse?format=json&accept-language=%s&lat=%f&lon=%f"; From a156299f76cbf973ec8d8483784228330a83607a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Mauduit?= Date: Fri, 27 Jan 2017 14:51:15 +0100 Subject: [PATCH 03/14] Change to HttpsURLConnection --- .../org/microg/nlp/backend/nominatim/BackendService.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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 8887682..306013b 100644 --- a/src/main/java/org/microg/nlp/backend/nominatim/BackendService.java +++ b/src/main/java/org/microg/nlp/backend/nominatim/BackendService.java @@ -15,7 +15,6 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; -import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; @@ -23,6 +22,8 @@ import java.util.Locale; import java.util.concurrent.atomic.AtomicBoolean; +import javax.net.ssl.HttpsURLConnection; + public class BackendService extends GeocoderBackendService { private static final String TAG = "NominatimGeocoder"; @@ -184,7 +185,7 @@ public void run() { synchronized (done) { try { Log.d(TAG, "Requesting " + url); - HttpURLConnection connection = (HttpURLConnection) new URL(url) + HttpsURLConnection connection = (HttpsURLConnection) new URL(url) .openConnection(); setUserAgentOnConnection(connection); connection.setDoInput(true); From 0099b356822835f4542d60500c099c23a3f4986b Mon Sep 17 00:00:00 2001 From: Tod Fitch Date: Tue, 17 May 2016 02:59:09 -0700 Subject: [PATCH 04/14] 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 306013b..0d7cabc 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; @@ -31,11 +33,11 @@ public class BackendService extends GeocoderBackendService { private static final String SERVICE_URL_OSM = "https://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"; @@ -54,8 +56,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()); @@ -87,15 +93,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 d305d041f0b0b112a400c97f5c947b529a2b5d53 Mon Sep 17 00:00:00 2001 From: Tod Fitch Date: Tue, 17 May 2016 07:59:48 -0700 Subject: [PATCH 05/14] 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) { From da5e6822322dad713a0ce8bb635e3e846078b1b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Mauduit?= Date: Sat, 28 Jan 2017 13:44:00 +0100 Subject: [PATCH 06/14] Update gradle --- build.gradle | 6 +++--- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index 39e4b4e..e0747ed 100644 --- a/build.gradle +++ b/build.gradle @@ -16,10 +16,10 @@ buildscript { repositories { - mavenCentral() + jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:1.1.3' + classpath 'com.android.tools.build:gradle:2.2.3' } } @@ -35,7 +35,7 @@ dependencies { android { compileSdkVersion 22 - buildToolsVersion "22.0.0" + buildToolsVersion "22.0.1" } if (file('user.gradle').exists()) { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index f383232..7dff301 100755 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Jan 14 11:55:04 CET 2015 +#Fri Jan 27 15:08:17 CET 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip From 611e0b83f4343dcc932fdb545601d0a7fbecb4f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Mauduit?= Date: Sat, 28 Jan 2017 13:44:29 +0100 Subject: [PATCH 07/14] Update targetSdk to 25 --- src/main/AndroidManifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index dcb7525..e6775c3 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -8,7 +8,7 @@ + android:targetSdkVersion="25" /> Date: Sat, 28 Jan 2017 13:47:07 +0100 Subject: [PATCH 08/14] Allow user to choose between OSM and MapQuest API server * MapQuest server needs a developper API key. See : https://developer.mapquest.com/ --- .../nlp/backend/nominatim/BackendService.java | 47 ++++++++----- .../backend/nominatim/SettingsActivity.java | 66 ++++++++++++++----- src/main/res/values/arrays.xml | 7 ++ src/main/res/values/strings.xml | 1 + src/main/res/xml/preferences.xml | 13 +++- 5 files changed, 99 insertions(+), 35 deletions(-) create mode 100644 src/main/res/values/arrays.xml 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 0d7cabc..dc93604 100644 --- a/src/main/java/org/microg/nlp/backend/nominatim/BackendService.java +++ b/src/main/java/org/microg/nlp/backend/nominatim/BackendService.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Locale; +import java.util.Objects; import java.util.concurrent.atomic.AtomicBoolean; import javax.net.ssl.HttpsURLConnection; @@ -33,12 +34,12 @@ public class BackendService extends GeocoderBackendService { private static final String SERVICE_URL_OSM = "https://nominatim.openstreetmap.org/"; private static final String REVERSE_GEOCODE_URL = - "%sreverse?format=json&key=%s&accept-language=%s&lat=%f&lon=%f"; + "%s/reverse?%sformat=json&accept-language=%s&lat=%f&lon=%f"; private static final String SEARCH_GEOCODE_URL = - "%ssearch?format=json&key=%s&accept-language=%s&addressdetails=1&bounded=1&q=%s&limit=%d"; + "%s/search?%sformat=json&accept-language=%s&addressdetails=1&bounded=1&q=%s&limit=%d"; private static final String SEARCH_GEOCODE_WITH_BOX_URL = - "%ssearch?format=json&key=%s&accept-language=%s&addressdetails=1&bounded=1&q=%s&limit=%d" + - "&viewbox=%f,%f,%f,%f"; + SEARCH_GEOCODE_URL + "&viewbox=%f,%f,%f,%f"; + private static final String WIRE_LATITUDE = "lat"; private static final String WIRE_LONGITUDE = "lon"; private static final String WIRE_ADDRESS = "address"; @@ -53,15 +54,31 @@ public class BackendService extends GeocoderBackendService { private static final String WIRE_COUNTRYNAME = "country"; private static final String WIRE_COUNTRYCODE = "country_code"; + private String mApiUrl; + private String mAPIKey; + + private void readPrefs() { + SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); + + if (sp.getString(SettingsActivity.PrefsFragment.apiChoiceToken, "OSM").equals("OSM")) { + mApiUrl = SERVICE_URL_OSM; + // No API key for OSM + mAPIKey = ""; + } else { + mApiUrl = SERVICE_URL_MAPQUEST; + mAPIKey = "key=" + sp.getString(SettingsActivity.PrefsFragment.mapQuestApiKeyToken, "NA") + + "&"; + } + } + + @Override protected List
getFromLocation(double latitude, double longitude, int maxResults, String locale) { + readPrefs(); - SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); - String mapquestApiKey = SP.getString("api_preference", "NA"); - - String url = String.format(Locale.US, REVERSE_GEOCODE_URL, SERVICE_URL_MAPQUEST, - mapquestApiKey, locale.split("_")[0], latitude, longitude); + String url = String.format(Locale.US, REVERSE_GEOCODE_URL, mApiUrl, mAPIKey, + locale.split("_")[0], latitude, longitude); try { JSONObject result = new JSONObject(new AsyncGetRequest(this, url).asyncStart().retrieveString()); @@ -93,19 +110,17 @@ 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"); + readPrefs(); 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, - mapquestApiKey, locale.split("_")[0], query, maxResults); + url = String.format(Locale.US, SEARCH_GEOCODE_URL, mApiUrl, mAPIKey, + locale.split("_")[0], query, maxResults); } else { - url = String.format(Locale.US, SEARCH_GEOCODE_WITH_BOX_URL, SERVICE_URL_MAPQUEST, - mapquestApiKey, locale.split("_")[0], query, maxResults, lowerLeftLongitude, + url = String.format(Locale.US, SEARCH_GEOCODE_WITH_BOX_URL, mApiUrl, mAPIKey, + 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 index 354d41e..1a1399c 100644 --- a/src/main/java/org/microg/nlp/backend/nominatim/SettingsActivity.java +++ b/src/main/java/org/microg/nlp/backend/nominatim/SettingsActivity.java @@ -7,6 +7,8 @@ import android.preference.PreferenceFragment; import android.os.Bundle; +import java.util.Objects; + public class SettingsActivity extends PreferenceActivity { @Override protected void onCreate(Bundle savedInstanceState) { @@ -18,41 +20,71 @@ protected void onCreate(Bundle savedInstanceState) { } - public static class PrefsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener { + public static class PrefsFragment extends PreferenceFragment { + public static final String catApiKeyToken = "cat_api_preference"; + public static final String apiChoiceToken = "api_server_choice"; + public static final String mapQuestApiKeyToken = "api_preference"; + + private SharedPreferences shPref; + private SharedPreferences.OnSharedPreferenceChangeListener listener; + + private Preference mApiChoicePref; + private Preference mCatAPIKeyPref; + private Preference mMapQuestApiKeyPref; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + shPref = getPreferenceManager().getSharedPreferences(); + // 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); - } + mApiChoicePref = findPreference(apiChoiceToken); + mCatAPIKeyPref = findPreference(catApiKeyToken); + mMapQuestApiKeyPref = findPreference(mapQuestApiKeyToken); - private void setSummaries(){ + refreshPrefs(); - final SharedPreferences sh = getPreferenceManager().getSharedPreferences() ; + // Need explicit reference. + // See : + // http://stackoverflow.com/a/3104265 + listener = new SharedPreferences.OnSharedPreferenceChangeListener() { + @Override + public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { + updatePreference(findPreference(key), key); + } + }; + shPref.registerOnSharedPreferenceChangeListener(listener); - Preference stylePref = findPreference("api_preference"); - stylePref.setSummary(sh.getString("api_preference", "")); + mApiChoicePref.setSummary(shPref.getString(apiChoiceToken, "OSM")); + mMapQuestApiKeyPref.setSummary(shPref.getString(mapQuestApiKeyToken, "")); + } + private void refreshPrefs() { + String apiServer = shPref.getString(apiChoiceToken, "OSM"); + if (apiServer.equals("OSM")) { + getPreferenceScreen().removePreference(mCatAPIKeyPref); + } else { + getPreferenceScreen().addPreference(mCatAPIKeyPref); + } } + private void updatePreference(Preference preference, String key) { - if (preference == null) return; + refreshPrefs(); + + 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")); + + preference.setSummary(shPref.getString(key, "Default")); } } - -} \ No newline at end of file +} diff --git a/src/main/res/values/arrays.xml b/src/main/res/values/arrays.xml new file mode 100644 index 0000000..320730f --- /dev/null +++ b/src/main/res/values/arrays.xml @@ -0,0 +1,7 @@ + + + + OSM + MapQuest + + diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index db6198f..d81b026 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -3,6 +3,7 @@ Nominatim Geocoder Backend Nominatim + Choose Nominatim API Server MapQuest Server Access MapQuest Developer API Key MapQuest Developer API Key diff --git a/src/main/res/xml/preferences.xml b/src/main/res/xml/preferences.xml index 5c3a854..5b781b7 100644 --- a/src/main/res/xml/preferences.xml +++ b/src/main/res/xml/preferences.xml @@ -1,15 +1,24 @@ + + + android:defaultValue="" + /> From f6ca893c0868a453640247591dca74af1c426461 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Mauduit?= Date: Sat, 28 Jan 2017 14:42:29 +0100 Subject: [PATCH 09/14] Fix extra / in url --- .../java/org/microg/nlp/backend/nominatim/BackendService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 dc93604..6da9ca6 100644 --- a/src/main/java/org/microg/nlp/backend/nominatim/BackendService.java +++ b/src/main/java/org/microg/nlp/backend/nominatim/BackendService.java @@ -30,8 +30,8 @@ public class BackendService extends GeocoderBackendService { private static final String TAG = "NominatimGeocoder"; - private static final String SERVICE_URL_MAPQUEST = "https://open.mapquestapi.com/nominatim/v1/"; - private static final String SERVICE_URL_OSM = "https://nominatim.openstreetmap.org/"; + private static final String SERVICE_URL_MAPQUEST = "https://open.mapquestapi.com/nominatim/v1"; + private static final String SERVICE_URL_OSM = "https://nominatim.openstreetmap.org"; private static final String REVERSE_GEOCODE_URL = "%s/reverse?%sformat=json&accept-language=%s&lat=%f&lon=%f"; From 7f6fdbb01b0fc933e7e0b17da558900daffd9f5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Mauduit?= Date: Sun, 29 Jan 2017 14:21:27 +0100 Subject: [PATCH 10/14] Use PreferenceFragmentCompat to keep compatibility --- build.gradle | 5 ++-- src/main/AndroidManifest.xml | 4 ++- .../backend/nominatim/SettingsActivity.java | 29 ++++++++++--------- src/main/res/values/themes.xml | 6 ++++ 4 files changed, 28 insertions(+), 16 deletions(-) create mode 100644 src/main/res/values/themes.xml diff --git a/build.gradle b/build.gradle index e0747ed..dad5f8a 100644 --- a/build.gradle +++ b/build.gradle @@ -31,11 +31,12 @@ repositories { dependencies { compile 'org.microg:unifiednlp-api:1.3.2' + compile 'com.android.support:preference-v7:25.1.0' } android { - compileSdkVersion 22 - buildToolsVersion "22.0.1" + compileSdkVersion 25 + buildToolsVersion "25.0.2" } if (file('user.gradle').exists()) { diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index e6775c3..0d78ea8 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -25,7 +25,9 @@ android:value="org.microg.nlp.backend.nominatim.SettingsActivity" /> - + 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 1a1399c..5387039 100644 --- a/src/main/java/org/microg/nlp/backend/nominatim/SettingsActivity.java +++ b/src/main/java/org/microg/nlp/backend/nominatim/SettingsActivity.java @@ -1,26 +1,31 @@ package org.microg.nlp.backend.nominatim; import android.content.SharedPreferences; -import android.preference.ListPreference; -import android.preference.Preference; -import android.preference.PreferenceActivity; -import android.preference.PreferenceFragment; import android.os.Bundle; -import java.util.Objects; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.preference.ListPreference; +import android.support.v7.preference.Preference; +import android.support.v7.preference.PreferenceFragmentCompat; -public class SettingsActivity extends PreferenceActivity { +public class SettingsActivity extends AppCompatActivity { @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(); + if (getSupportActionBar() != null) { + getSupportActionBar().setTitle(R.string.app_name); + getSupportActionBar().show(); + } + // Display the fragment as the main content. + getSupportFragmentManager() + .beginTransaction() + .replace(android.R.id.content, new PrefsFragment()) + .commit(); } - public static class PrefsFragment extends PreferenceFragment { + public static class PrefsFragment extends PreferenceFragmentCompat { public static final String catApiKeyToken = "cat_api_preference"; public static final String apiChoiceToken = "api_server_choice"; public static final String mapQuestApiKeyToken = "api_preference"; @@ -33,9 +38,7 @@ public static class PrefsFragment extends PreferenceFragment { private Preference mMapQuestApiKeyPref; @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { shPref = getPreferenceManager().getSharedPreferences(); // Load the preferences from an XML resource diff --git a/src/main/res/values/themes.xml b/src/main/res/values/themes.xml new file mode 100644 index 0000000..e3090d8 --- /dev/null +++ b/src/main/res/values/themes.xml @@ -0,0 +1,6 @@ + + + + From 4715649e545f0bdd3356fcf574c9849198e88e16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Mauduit?= Date: Sun, 29 Jan 2017 14:22:55 +0100 Subject: [PATCH 11/14] Re-set minimum Sdk Version to 9 --- src/main/AndroidManifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index 0d78ea8..b250e75 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -7,7 +7,7 @@ Date: Sun, 29 Jan 2017 14:24:00 +0100 Subject: [PATCH 12/14] Call readPrefs() with onOpen() instead --- .../nlp/backend/nominatim/BackendService.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) 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 6da9ca6..2fb615a 100644 --- a/src/main/java/org/microg/nlp/backend/nominatim/BackendService.java +++ b/src/main/java/org/microg/nlp/backend/nominatim/BackendService.java @@ -57,6 +57,18 @@ public class BackendService extends GeocoderBackendService { private String mApiUrl; private String mAPIKey; + @Override + public void onCreate() { + super.onCreate(); + readPrefs(); + } + + @Override + protected void onOpen() { + super.onOpen(); + readPrefs(); + } + private void readPrefs() { SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); @@ -75,8 +87,6 @@ private void readPrefs() { @Override protected List
getFromLocation(double latitude, double longitude, int maxResults, String locale) { - readPrefs(); - String url = String.format(Locale.US, REVERSE_GEOCODE_URL, mApiUrl, mAPIKey, locale.split("_")[0], latitude, longitude); try { @@ -110,8 +120,6 @@ private static Locale localeFromLocaleString(String localeString) { protected List
getFromLocationName(String locationName, int maxResults, double lowerLeftLatitude, double lowerLeftLongitude, double upperRightLatitude, double upperRightLongitude, String locale) { - readPrefs(); - String query = Uri.encode(locationName); String url; if (lowerLeftLatitude == 0 && lowerLeftLongitude == 0 && upperRightLatitude == 0 && From fb4fccd998dd26757ac26c57d72aa36ddf437d93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Mauduit?= Date: Sun, 29 Jan 2017 14:24:33 +0100 Subject: [PATCH 13/14] Make package locale --- .../microg/nlp/backend/nominatim/BackendService.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) 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 2fb615a..e3e25e8 100644 --- a/src/main/java/org/microg/nlp/backend/nominatim/BackendService.java +++ b/src/main/java/org/microg/nlp/backend/nominatim/BackendService.java @@ -201,8 +201,8 @@ private Address parseResponse(Locale locale, JSONObject result) throws JSONExcep } private class AsyncGetRequest extends Thread { - public static final String USER_AGENT = "User-Agent"; - public static final String USER_AGENT_TEMPLATE = "UnifiedNlp/%s (Linux; Android %s)"; + static final String USER_AGENT = "User-Agent"; + static final String USER_AGENT_TEMPLATE = "UnifiedNlp/%s (Linux; Android %s)"; private final AtomicBoolean done = new AtomicBoolean(false); private final Context context; private final String url; @@ -232,12 +232,12 @@ public void run() { } } - public AsyncGetRequest asyncStart() { + AsyncGetRequest asyncStart() { start(); return this; } - public byte[] retrieveAllBytes() { + byte[] retrieveAllBytes() { if (!done.get()) { synchronized (done) { while (!done.get()) { @@ -252,7 +252,7 @@ public byte[] retrieveAllBytes() { return result; } - public String retrieveString() { + String retrieveString() { return new String(retrieveAllBytes()); } From 12135b928aa423cafd517ca2287651b967d32d26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Mauduit?= Date: Sun, 29 Jan 2017 15:15:54 +0100 Subject: [PATCH 14/14] Revert "Change to HttpsURLConnection" This reverts commit a156299f76cbf973ec8d8483784228330a83607a. --- .../org/microg/nlp/backend/nominatim/BackendService.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) 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 e3e25e8..9a32c5d 100644 --- a/src/main/java/org/microg/nlp/backend/nominatim/BackendService.java +++ b/src/main/java/org/microg/nlp/backend/nominatim/BackendService.java @@ -17,6 +17,7 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; +import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; @@ -25,8 +26,6 @@ import java.util.Objects; import java.util.concurrent.atomic.AtomicBoolean; -import javax.net.ssl.HttpsURLConnection; - public class BackendService extends GeocoderBackendService { private static final String TAG = "NominatimGeocoder"; @@ -218,7 +217,7 @@ public void run() { synchronized (done) { try { Log.d(TAG, "Requesting " + url); - HttpsURLConnection connection = (HttpsURLConnection) new URL(url) + HttpURLConnection connection = (HttpURLConnection) new URL(url) .openConnection(); setUserAgentOnConnection(connection); connection.setDoInput(true);