From 6cce1c6e251f70239a62331755008fa9e6685b21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sim=C3=B3=20Albert=20i=20Beltran?= Date: Tue, 7 Jul 2026 12:03:59 +0200 Subject: [PATCH] Add option to force Google Maps or use geo: URI for navigation --- app/src/main/AndroidManifest.xml | 5 ++ .../activity/main/MainActivity.java | 10 +++ .../activity/settings/SettingsActivity.java | 56 +++++++++++++++ .../nextcloudmaps/utils/IntentGenerator.java | 5 +- .../nextcloudmaps/utils/SettingsManager.java | 11 +++ .../main/res/drawable/ic_settings_grey.xml | 16 +++++ app/src/main/res/layout/activity_settings.xml | 71 +++++++++++++++++++ app/src/main/res/values/strings.xml | 5 ++ 8 files changed, 178 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/it/danieleverducci/nextcloudmaps/activity/settings/SettingsActivity.java create mode 100644 app/src/main/res/drawable/ic_settings_grey.xml create mode 100644 app/src/main/res/layout/activity_settings.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2e7ab77..214bb58 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -111,6 +111,11 @@ + + onGpsPermissionGrantedListener = new ArrayList<>(); @@ -164,6 +166,9 @@ public class MainActivity extends NextcloudMapsStyledActivity { case NAVIGATION_KEY_SHOW_ABOUT: show_about(); break; + case NAVIGATION_KEY_SETTINGS: + show_settings(); + break; case NAVIGATION_KEY_SWITCH_ACCOUNT: switch_account(); break; @@ -173,6 +178,7 @@ public class MainActivity extends NextcloudMapsStyledActivity { navItems.add(new NavigationItem(NAVIGATION_KEY_ADD_GEOFAVORITE_FROM_GPS, getString(R.string.new_geobookmark_gps), R.drawable.ic_add_gps)); navItems.add(new NavigationItem(NAVIGATION_KEY_ADD_GEOFAVORITE_FROM_MAP, getString(R.string.new_geobookmark_map), R.drawable.ic_add_map)); navItems.add(new NavigationItem(NAVIGATION_KEY_SHOW_ABOUT, getString(R.string.about), R.drawable.ic_info_grey)); + navItems.add(new NavigationItem(NAVIGATION_KEY_SETTINGS, getString(R.string.settings), R.drawable.ic_settings_grey)); navItems.add(new NavigationItem(NAVIGATION_KEY_SWITCH_ACCOUNT, getString(R.string.switch_account), R.drawable.ic_logout_grey)); navigationCommonAdapter.setItems(navItems); @@ -192,6 +198,10 @@ public class MainActivity extends NextcloudMapsStyledActivity { ); } + private void show_settings() { + startActivity(new Intent(this, SettingsActivity.class)); + } + private void show_about() { startActivity(new Intent(this, AboutActivity.class)); } diff --git a/app/src/main/java/it/danieleverducci/nextcloudmaps/activity/settings/SettingsActivity.java b/app/src/main/java/it/danieleverducci/nextcloudmaps/activity/settings/SettingsActivity.java new file mode 100644 index 0000000..93068de --- /dev/null +++ b/app/src/main/java/it/danieleverducci/nextcloudmaps/activity/settings/SettingsActivity.java @@ -0,0 +1,56 @@ +/* + * Nextcloud Maps Geofavorites for Android + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package it.danieleverducci.nextcloudmaps.activity.settings; + +import android.os.Bundle; +import android.widget.Switch; + +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.widget.Toolbar; + +import it.danieleverducci.nextcloudmaps.R; +import it.danieleverducci.nextcloudmaps.activity.NextcloudMapsStyledActivity; +import it.danieleverducci.nextcloudmaps.utils.SettingsManager; + +public class SettingsActivity extends NextcloudMapsStyledActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_settings); + + Toolbar toolbar = findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setDisplayShowTitleEnabled(false); + } + + Switch useGoogleMapsSwitch = findViewById(R.id.use_google_maps_switch); + useGoogleMapsSwitch.setChecked(SettingsManager.isUseGoogleMaps(this)); + useGoogleMapsSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> + SettingsManager.setUseGoogleMaps(SettingsActivity.this, isChecked) + ); + } + + @Override + public boolean onSupportNavigateUp() { + finish(); + return true; + } +} diff --git a/app/src/main/java/it/danieleverducci/nextcloudmaps/utils/IntentGenerator.java b/app/src/main/java/it/danieleverducci/nextcloudmaps/utils/IntentGenerator.java index 7f66efc..cb32649 100644 --- a/app/src/main/java/it/danieleverducci/nextcloudmaps/utils/IntentGenerator.java +++ b/app/src/main/java/it/danieleverducci/nextcloudmaps/utils/IntentGenerator.java @@ -24,7 +24,10 @@ public class IntentGenerator { public static Intent newGeoUriIntent(Context context, Geofavorite item) { Intent i = new Intent(); i.setAction(Intent.ACTION_VIEW); - i.setData(isGoogleMapsInstalled(context) ? item.getGmapsUri() : item.getGeoUri()); + i.setData( + SettingsManager.isUseGoogleMaps(context) && isGoogleMapsInstalled(context) + ? item.getGmapsUri() : item.getGeoUri() + ); return i; } diff --git a/app/src/main/java/it/danieleverducci/nextcloudmaps/utils/SettingsManager.java b/app/src/main/java/it/danieleverducci/nextcloudmaps/utils/SettingsManager.java index 97e72a8..af2ee87 100644 --- a/app/src/main/java/it/danieleverducci/nextcloudmaps/utils/SettingsManager.java +++ b/app/src/main/java/it/danieleverducci/nextcloudmaps/utils/SettingsManager.java @@ -12,6 +12,7 @@ public class SettingsManager { static private final String SETTING_LAST_MAP_POSITION_LAT = "SETTING_LAST_MAP_POSITION_LAT"; static private final String SETTING_LAST_MAP_POSITION_LNG = "SETTING_LAST_MAP_POSITION_LNG"; static private final String SETTING_LAST_MAP_POSITION_ZOOM = "SETTING_LAST_MAP_POSITION_ZOOM"; + static private final String SETTING_USE_GOOGLE_MAPS = "SETTING_USE_GOOGLE_MAPS"; public static int getGeofavoriteListSortBy(Context context) { return PreferenceManager.getDefaultSharedPreferences(context) @@ -47,6 +48,16 @@ public class SettingsManager { }; } + public static boolean isUseGoogleMaps(Context context) { + return PreferenceManager.getDefaultSharedPreferences(context) + .getBoolean(SETTING_USE_GOOGLE_MAPS, true); + } + + public static void setUseGoogleMaps(Context context, boolean value) { + PreferenceManager.getDefaultSharedPreferences(context) + .edit().putBoolean(SETTING_USE_GOOGLE_MAPS, value).apply(); + } + public static void setLastMapPosition(Context context, double lat, double lng, double zoom) { PreferenceManager.getDefaultSharedPreferences(context).edit() .putFloat(SETTING_LAST_MAP_POSITION_LAT, (float)lat) diff --git a/app/src/main/res/drawable/ic_settings_grey.xml b/app/src/main/res/drawable/ic_settings_grey.xml new file mode 100644 index 0000000..db4bb38 --- /dev/null +++ b/app/src/main/res/drawable/ic_settings_grey.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml new file mode 100644 index 0000000..8fba2de --- /dev/null +++ b/app/src/main/res/layout/activity_settings.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 93bbad3..4790581 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -99,6 +99,11 @@ https://raw.githubusercontent.com/penguin86/nextcloud-maps-client/master/LICENSE https://donate.openstreetmap.org + + Settings + Always open with Google Maps + When disabled, a generic geo: URI will be used instead + New from current position New from map