From f11fd1c97693a6a584ce798e68fb3dc977dd8f2b Mon Sep 17 00:00:00 2001 From: Nicco Kunzmann Date: Thu, 22 Aug 2019 21:40:03 +0200 Subject: [PATCH 1/5] add option to settings layout --- app/src/main/res/layout/activity_settings.xml | 26 +++++++++++++++++++ app/src/main/res/values/strings.xml | 4 +++ 2 files changed, 30 insertions(+) diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index fb24d91..0533a15 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -297,6 +297,32 @@ android:layout_weight="1" android:text="@string/settings_use_na_ovoce" /> + + + + + + + If this is enabled, this app publishes the plants to Na-Ovoce.cz. + If this is enabled, this app publishes the plants to a self-hosted Na-Ovoce server. + + na-ovoce.cz + If this is enabled, this app publishes the plants to FruitMap.org. If this is enabled, this app does not publish the plants but instead simulates a local API for testing. From 1a56c12c827f25bb73af1023a180abd6fcecd2ab Mon Sep 17 00:00:00 2001 From: Nicco Kunzmann Date: Fri, 23 Aug 2019 18:44:19 +0200 Subject: [PATCH 2/5] create form in the settings to contain the domain of the self-hosted na-ovoce server --- .../mundraub/activities/SettingsActivity.java | 19 +++++++++-- .../java/eu/quelltext/mundraub/api/API.java | 9 +++-- .../mundraub/api/CustomNaOvoceAPI.java | 34 +++++++++++++++++++ .../eu/quelltext/mundraub/api/NaOvoceAPI.java | 2 +- .../quelltext/mundraub/common/Settings.java | 15 ++++++++ app/src/main/res/layout/activity_settings.xml | 3 +- app/src/main/res/values/strings.xml | 4 +-- 7 files changed, 77 insertions(+), 9 deletions(-) create mode 100644 app/src/main/java/eu/quelltext/mundraub/api/CustomNaOvoceAPI.java diff --git a/app/src/main/java/eu/quelltext/mundraub/activities/SettingsActivity.java b/app/src/main/java/eu/quelltext/mundraub/activities/SettingsActivity.java index 60fb1a5..05c0b14 100644 --- a/app/src/main/java/eu/quelltext/mundraub/activities/SettingsActivity.java +++ b/app/src/main/java/eu/quelltext/mundraub/activities/SettingsActivity.java @@ -231,7 +231,19 @@ public void onClick(View v) { }); updateProgressMap = (ProgressBar) findViewById(R.id.update_progress_map); updateMapOfflineButtons(); - + EditText customNaOvoceDomain = (EditText) findViewById(R.id.my_na_ovoce_server_domain); + customNaOvoceDomain.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) {} + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) {} + @Override + public void afterTextChanged(Editable s) { + String url = s.toString(); + Settings.setCustomNaOvoceHost(url.isEmpty() ? Settings.DEFAULT_CUSTOM_NA_OVOCE_DOMAIN : url); + } + }); + customNaOvoceDomain.setHint(Settings.DEFAULT_CUSTOM_NA_OVOCE_DOMAIN); } private void buttonStartMapDownloadClicked(){ @@ -410,7 +422,8 @@ protected void onPause() { } private void update() { - apiRadioGroup.check(API.instance().radioButtonId()); + API api = API.instance(); + apiRadioGroup.check(api.radioButtonId()); apiRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { @@ -422,6 +435,8 @@ public void onCheckedChanged(RadioGroup group, int checkedId) { update(); } }); + View customInputs = findViewById(R.id.custom_na_ovoce_inputs); + customInputs.setVisibility(api.isCustomNaOvoceAPI() ? View.VISIBLE : View.GONE); synchronizeBooleanSetting(R.id.toggle_secure_connection, new Toggled() { @Override public int onToggle(boolean checked) { diff --git a/app/src/main/java/eu/quelltext/mundraub/api/API.java b/app/src/main/java/eu/quelltext/mundraub/api/API.java index 1b38979..1ecf85d 100644 --- a/app/src/main/java/eu/quelltext/mundraub/api/API.java +++ b/app/src/main/java/eu/quelltext/mundraub/api/API.java @@ -25,7 +25,10 @@ public abstract class API extends AsyncNetworkInteraction implements BackgroundD private boolean isLoggedIn; public static API[] all() { - return new API[]{DUMMY, MUNDRAUB, FRUITMAP, NA_OVOCE}; + return new API[]{ + DUMMY, MUNDRAUB, FRUITMAP, NA_OVOCE, + new CustomNaOvoceAPI(Settings.getCustomNaOvoceHost()) + }; } public static API instance() { @@ -157,5 +160,7 @@ public Set getDownloadUrls() { public abstract String getPlantUrl(String id); public abstract int nameResourceId(); - + public boolean isCustomNaOvoceAPI() { + return false; + } } diff --git a/app/src/main/java/eu/quelltext/mundraub/api/CustomNaOvoceAPI.java b/app/src/main/java/eu/quelltext/mundraub/api/CustomNaOvoceAPI.java new file mode 100644 index 0000000..50d04e9 --- /dev/null +++ b/app/src/main/java/eu/quelltext/mundraub/api/CustomNaOvoceAPI.java @@ -0,0 +1,34 @@ +package eu.quelltext.mundraub.api; + +import eu.quelltext.mundraub.R; +import eu.quelltext.mundraub.common.Settings; + +public class CustomNaOvoceAPI extends NaOvoceAPI { + + + private final String host; + + public CustomNaOvoceAPI(String host) { + this.host = host; + } + + @Override + protected String host() { + return host; + } + + @Override + public String id() { + return Settings.API_ID_MY_NA_OVOCE; + } + + @Override + public int nameResourceId() { + return R.string.login_api_name_my_na_ovoce; + } + + @Override + public boolean isCustomNaOvoceAPI() { + return true; + } +} diff --git a/app/src/main/java/eu/quelltext/mundraub/api/NaOvoceAPI.java b/app/src/main/java/eu/quelltext/mundraub/api/NaOvoceAPI.java index bad8ec7..36e14c2 100644 --- a/app/src/main/java/eu/quelltext/mundraub/api/NaOvoceAPI.java +++ b/app/src/main/java/eu/quelltext/mundraub/api/NaOvoceAPI.java @@ -232,7 +232,7 @@ public int radioButtonId(){ } public String getPlantUrl(String id) { - return "https://na-ovoce.cz/fruit/detail/" + id + "/"; + return host() + "/fruit/detail/" + id + "/"; }; @Override diff --git a/app/src/main/java/eu/quelltext/mundraub/common/Settings.java b/app/src/main/java/eu/quelltext/mundraub/common/Settings.java index 3ea96ae..fcc4a11 100644 --- a/app/src/main/java/eu/quelltext/mundraub/common/Settings.java +++ b/app/src/main/java/eu/quelltext/mundraub/common/Settings.java @@ -48,12 +48,14 @@ public class Settings { public static final String API_ID_MUNDRAUB = "mundraub"; public static final String API_ID_NA_OVOCE = "na-ovoce"; + public static final String API_ID_MY_NA_OVOCE = "my-na-ovoce"; public static final String API_ID_DUMMY = "dummy"; public static final String API_ID_FRUITMAP = "fruitmap"; public static final String API_ID_COMMUNITY = "community"; // only for markers public static final String TILES_OSM = "osm"; public static final String TILES_SATELLITE = "satellite"; + public static final String DEFAULT_CUSTOM_NA_OVOCE_DOMAIN = "http://na-ovoce.cz"; private static final String PLANT_STORAGE_DIRECTORY_NAME = "eu.quelltext.mundraub"; public static final String INVALID_HASH = "0000000000000000000000000000000000000000"; @@ -139,6 +141,7 @@ public void setChecked(String apiId, boolean checked) { * https://github.com/niccokunzmann/mundraub-android/commit/1d8bf40aa68d71cd35eb65e0e25986f6a8a1913e#diff-6cf4fcc1ccb27f70ca10a1b54612d568 */ private static String useAPIId = API_ID_MUNDRAUB; + private static String customNaOvoceHost = DEFAULT_CUSTOM_NA_OVOCE_DOMAIN; private static boolean useInsecureConnections = false; private static boolean useCacheForPlants = true; private static File persistentPathForPlants = new File(Environment.getExternalStorageDirectory(), PLANT_STORAGE_DIRECTORY_NAME); @@ -181,6 +184,7 @@ public static void print() { log.d("Permissions.CAN_ASK_FOR_PERMISSIONS", Permissions.CAN_ASK_FOR_PERMISSIONS); log.d("useInsecureConnections", useInsecureConnections); log.d("useAPIId", useAPIId); + log.d("customNaOvoceHost", customNaOvoceHost); log.d("useCacheForPlants", useCacheForPlants); log.d("useErrorReport", useErrorReport); log.d("useOfflineMapAPI", useOfflineMapAPI); @@ -213,6 +217,7 @@ private static void load() { useOfflineMapAPI = preferences.getBoolean("useOfflineMapAPI", useOfflineMapAPI); debugMundraubMapAPI = preferences.getBoolean("debugMundraubMapAPI", debugMundraubMapAPI); vibrateWhenPlantIsInRange = preferences.getBoolean("vibrateWhenPlantIsInRange", vibrateWhenPlantIsInRange); + customNaOvoceHost = preferences.getString("customNaOvoceHost", customNaOvoceHost); useFruitRadarNotifications = preferences.getBoolean("useFruitRadarNotifications", useFruitRadarNotifications); maximumDisplayedMarkers = preferences.getInt("maximumDisplayedMarkers", maximumDisplayedMarkers); radarPlantRangeMeters = preferences.getInt("radarPlantRangeMeters", radarPlantRangeMeters); @@ -248,6 +253,7 @@ private static int commit() { editor.putBoolean("useOfflineMapAPI", useOfflineMapAPI); editor.putBoolean("debugMundraubMapAPI", debugMundraubMapAPI); editor.putBoolean("vibrateWhenPlantIsInRange", vibrateWhenPlantIsInRange); + editor.putString("customNaOvoceHost", customNaOvoceHost); editor.putBoolean("useFruitRadarNotifications", useFruitRadarNotifications); editor.putInt("maximumDisplayedMarkers", maximumDisplayedMarkers); editor.putInt("radarPlantRangeMeters", radarPlantRangeMeters); @@ -366,6 +372,15 @@ public static int vibrateWhenPlantIsInRange(boolean isChecked) { return commit(); } + public static String getCustomNaOvoceHost() { + return customNaOvoceHost; + } + + public static int setCustomNaOvoceHost(String customNaOvoceHost) { + Settings.customNaOvoceHost = customNaOvoceHost; + return commit(); + } + public static boolean useCacheForPlants() { return useCacheForPlants; } diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 0533a15..4c8ec74 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -319,8 +319,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:ems="10" - android:inputType="textUri" - android:text="@string/default_custom_na_ovoce_domain" /> + android:inputType="textUri" /> Mundraub.org Na-Ovoce.cz + + Custom Na-Ovoce Server Local Dummy API @@ -413,8 +415,6 @@ If this is enabled, this app publishes the plants to Na-Ovoce.cz. If this is enabled, this app publishes the plants to a self-hosted Na-Ovoce server. - - na-ovoce.cz If this is enabled, this app publishes the plants to FruitMap.org. From 1a81d2208e95ebff35ca2c3ba49d28fd8a45204e Mon Sep 17 00:00:00 2001 From: Nicco Kunzmann Date: Sat, 24 Aug 2019 09:30:17 +0200 Subject: [PATCH 3/5] select radio button of custom na-ovoce server - contributes to https://github.com/niccokunzmann/mundraub-android/issues/269 --- .../java/eu/quelltext/mundraub/api/CustomNaOvoceAPI.java | 5 +++++ app/src/main/res/layout/activity_settings.xml | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/eu/quelltext/mundraub/api/CustomNaOvoceAPI.java b/app/src/main/java/eu/quelltext/mundraub/api/CustomNaOvoceAPI.java index 50d04e9..50ead74 100644 --- a/app/src/main/java/eu/quelltext/mundraub/api/CustomNaOvoceAPI.java +++ b/app/src/main/java/eu/quelltext/mundraub/api/CustomNaOvoceAPI.java @@ -31,4 +31,9 @@ public int nameResourceId() { public boolean isCustomNaOvoceAPI() { return true; } + + @Override + public int radioButtonId() { + return R.id.radioButton_my_na_ovoce; + } } diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 4c8ec74..bac501e 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -298,7 +298,7 @@ android:text="@string/settings_use_na_ovoce" /> Date: Sat, 24 Aug 2019 09:40:38 +0200 Subject: [PATCH 4/5] allow opening the source code of the server --- .../quelltext/mundraub/activities/SettingsActivity.java | 9 +++++++++ app/src/main/res/layout/activity_settings.xml | 7 +++++++ app/src/main/res/values/strings.xml | 2 ++ 3 files changed, 18 insertions(+) diff --git a/app/src/main/java/eu/quelltext/mundraub/activities/SettingsActivity.java b/app/src/main/java/eu/quelltext/mundraub/activities/SettingsActivity.java index 05c0b14..882bf35 100644 --- a/app/src/main/java/eu/quelltext/mundraub/activities/SettingsActivity.java +++ b/app/src/main/java/eu/quelltext/mundraub/activities/SettingsActivity.java @@ -47,6 +47,7 @@ public class SettingsActivity extends MundraubBaseActivity { private static BackgroundDownloadTask mapDownload = null; + private static final String NA_OVOCE_GITHUB_URL = "https://github.com/jsmesami/naovoce"; private ProgressBar updateProgress; final Handler handler = new Handler(); @@ -244,6 +245,14 @@ public void afterTextChanged(Editable s) { } }); customNaOvoceDomain.setHint(Settings.DEFAULT_CUSTOM_NA_OVOCE_DOMAIN); + + Button setupNaOvoce = (Button) findViewById(R.id.button_setup_na_ovoce); + setupNaOvoce.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + openURLInBrowser(NA_OVOCE_GITHUB_URL); + } + }); } private void buttonStartMapDownloadClicked(){ diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index bac501e..59ee4f2 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -320,6 +320,13 @@ android:layout_weight="1" android:ems="10" android:inputType="textUri" /> + +