From 5788f99b208b02c7f6e27595c026fdf2772bb282 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Sun, 25 Aug 2019 22:20:03 +0200 Subject: [PATCH] Catch ActivityNotFound exception for starting geo-data intents. --- .../opentracks/MarkerListActivity.java | 5 +---- .../opentracks/SearchListActivity.java | 3 +-- .../fragments/MarkerDetailFragment.java | 3 +-- .../opentracks/util/IntentUtils.java | 19 ++++++++++++------- src/main/res/values/strings.xml | 7 ++++++- 5 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/MarkerListActivity.java b/src/main/java/de/dennisguse/opentracks/MarkerListActivity.java index ac275e95f..a0f11f5ad 100644 --- a/src/main/java/de/dennisguse/opentracks/MarkerListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/MarkerListActivity.java @@ -42,7 +42,6 @@ import androidx.loader.content.Loader; import de.dennisguse.opentracks.content.ContentProviderUtils; import de.dennisguse.opentracks.content.Track; -import de.dennisguse.opentracks.content.Waypoint; import de.dennisguse.opentracks.content.Waypoint.WaypointType; import de.dennisguse.opentracks.content.WaypointsColumns; import de.dennisguse.opentracks.fragments.DeleteMarkerDialogFragment; @@ -284,9 +283,7 @@ public class MarkerListActivity extends AbstractActivity implements DeleteMarker switch (itemId) { case R.id.list_context_menu_show_on_map: if (markerIds.length == 1) { - Waypoint marker = contentProviderUtils.getWaypoint(markerIds[0]); - intent = IntentUtils.newShowCoordinateOnMapIntent(marker); - startActivity(intent); + IntentUtils.showCoordinateOnMap(this, contentProviderUtils.getWaypoint(markerIds[0])); } return true; case R.id.list_context_menu_edit: diff --git a/src/main/java/de/dennisguse/opentracks/SearchListActivity.java b/src/main/java/de/dennisguse/opentracks/SearchListActivity.java index 85d48a1cf..e63ebe788 100644 --- a/src/main/java/de/dennisguse/opentracks/SearchListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/SearchListActivity.java @@ -316,8 +316,7 @@ public class SearchListActivity extends AbstractListActivity implements DeleteMa Log.e(TAG, "Not implemented"); return true; case R.id.list_context_menu_show_on_map: - intent = IntentUtils.newShowCoordinateOnMapIntent((double) item.get(MARKER_LATITUDE_FIELD), (double) item.get(MARKER_LONGITUDE_FIELD), item.get(NAME_FIELD) + ""); - startActivity(intent); + IntentUtils.showCoordinateOnMap(this, (double) item.get(MARKER_LATITUDE_FIELD), (double) item.get(MARKER_LONGITUDE_FIELD), item.get(NAME_FIELD) + ""); return true; case R.id.list_context_menu_edit: if (markerId != null) { diff --git a/src/main/java/de/dennisguse/opentracks/fragments/MarkerDetailFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/MarkerDetailFragment.java index 91f408602..09313dc78 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/MarkerDetailFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/MarkerDetailFragment.java @@ -190,8 +190,7 @@ public class MarkerDetailFragment extends Fragment { Intent intent; switch (item.getItemId()) { case R.id.marker_detail_show_on_map: - intent = IntentUtils.newShowCoordinateOnMapIntent(waypoint); - startActivity(intent); + IntentUtils.showCoordinateOnMap(getContext(), waypoint); return true; case R.id.marker_detail_edit: intent = IntentUtils.newIntent(fragmentActivity, MarkerEditActivity.class) diff --git a/src/main/java/de/dennisguse/opentracks/util/IntentUtils.java b/src/main/java/de/dennisguse/opentracks/util/IntentUtils.java index a29f9a7cf..921b12e10 100644 --- a/src/main/java/de/dennisguse/opentracks/util/IntentUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/IntentUtils.java @@ -64,10 +64,6 @@ public class IntentUtils { private static final String JPEG_EXTENSION = "jpeg"; - public static Intent newShowCoordinateOnMapIntent(Waypoint waypoint) { - return newShowCoordinateOnMapIntent(waypoint.getLocation().getLatitude(), waypoint.getLocation().getLongitude(), waypoint.getName()); - } - /** * Creates an intent to share a track file with an app. * @@ -90,7 +86,11 @@ public class IntentUtils { .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); } - public static Intent newShowCoordinateOnMapIntent(double latitude, double longitude, String label) { + public static void showCoordinateOnMap(Context context, Waypoint waypoint) { + showCoordinateOnMap(context, waypoint.getLocation().getLatitude(), waypoint.getLocation().getLongitude(), waypoint.getName()); + } + + public static void showCoordinateOnMap(Context context, double latitude, double longitude, String label) { //SEE https://developer.android.com/guide/components/intents-common.html#Maps String uri = "geo:0,0?q=" + latitude + "," + longitude; if (label != null && label.length() > 0) { @@ -98,7 +98,12 @@ public class IntentUtils { } Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(uri)); - return intent; + + try { + context.startActivity(intent); + } catch (ActivityNotFoundException e) { + Toast.makeText(context, context.getString(R.string.app_not_installed_show_on_map), Toast.LENGTH_SHORT).show(); + } } /** @@ -120,7 +125,7 @@ public class IntentUtils { try { context.startActivity(intent); } catch (ActivityNotFoundException e) { - Toast.makeText(context, "No app installed that can show the tracks on a map.", Toast.LENGTH_SHORT).show(); + Toast.makeText(context, context.getString(R.string.app_not_installed_show_on_map), Toast.LENGTH_SHORT).show(); } } diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 8226904ef..77921dddd 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -304,7 +304,11 @@ limitations under the License. wind surfing - + + Please install an app that supports presenting map data. + + + @@ -985,6 +989,7 @@ limitations under the License. what will be searched for."> Speak the name of a track or marker +