From deec9c45a2131a205701ac0550a0ead50d5caae4 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Tue, 24 Dec 2019 15:13:22 -0600 Subject: [PATCH] Check for map before opening link --- .../main/java/org/tasks/data/Location.java | 24 +++++++++++++++++-- .../java/org/tasks/tasklist/ViewHolder.java | 4 +--- .../java/org/tasks/ui/LocationControlSet.java | 8 +------ app/src/main/res/values/strings.xml | 1 + 4 files changed, 25 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/tasks/data/Location.java b/app/src/main/java/org/tasks/data/Location.java index 6e1a30da4..09577b3c0 100644 --- a/app/src/main/java/org/tasks/data/Location.java +++ b/app/src/main/java/org/tasks/data/Location.java @@ -1,10 +1,19 @@ package org.tasks.data; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.net.Uri; import android.os.Parcel; import android.os.Parcelable; +import android.widget.Toast; +import androidx.annotation.Nullable; import androidx.room.Embedded; import androidx.room.Ignore; import java.io.Serializable; +import java.util.List; +import org.tasks.R; public class Location implements Serializable, Parcelable { @@ -130,8 +139,19 @@ public class Location implements Serializable, Parcelable { return place.getDisplayAddress(); } - public String getGeoUri() { - return place.getGeoUri(); + public void open(@Nullable Context context) { + if (context == null) { + return; + } + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setData(Uri.parse(place.getGeoUri())); + PackageManager pm = context.getPackageManager(); + List resolveInfos = pm.queryIntentActivities(intent, 0); + if (resolveInfos.isEmpty()) { + Toast.makeText(context, R.string.no_application_found_link, Toast.LENGTH_SHORT).show(); + } else { + context.startActivity(intent); + } } @Override diff --git a/app/src/main/java/org/tasks/tasklist/ViewHolder.java b/app/src/main/java/org/tasks/tasklist/ViewHolder.java index 779002e9c..1dd3f8071 100644 --- a/app/src/main/java/org/tasks/tasklist/ViewHolder.java +++ b/app/src/main/java/org/tasks/tasklist/ViewHolder.java @@ -281,9 +281,7 @@ public class ViewHolder extends RecyclerView.ViewHolder { if (tag instanceof Filter) { callback.onClick((Filter) tag); } else if (tag instanceof Location) { - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse(((Location) tag).getGeoUri())); - context.startActivity(intent); + ((Location) tag).open(context); } else if (tag instanceof TaskContainer) { TaskContainer task = (TaskContainer) tag; callback.toggleSubtasks(task, !task.isCollapsed()); diff --git a/app/src/main/java/org/tasks/ui/LocationControlSet.java b/app/src/main/java/org/tasks/ui/LocationControlSet.java index c8cc08909..8fc05ca41 100644 --- a/app/src/main/java/org/tasks/ui/LocationControlSet.java +++ b/app/src/main/java/org/tasks/ui/LocationControlSet.java @@ -148,7 +148,7 @@ public class LocationControlSet extends TaskEditControlFragment { chooseLocation(); } else { List> options = new ArrayList<>(); - options.add(Pair.create(R.string.open_map, this::openMap)); + options.add(Pair.create(R.string.open_map, () -> location.open(getActivity()))); if (!Strings.isNullOrEmpty(location.getPhone())) { options.add(Pair.create(R.string.action_call, this::call)); } @@ -220,12 +220,6 @@ public class LocationControlSet extends TaskEditControlFragment { return TAG; } - private void openMap() { - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse(location.getGeoUri())); - startActivity(intent); - } - private void openWebsite() { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(location.getUrl()))); } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6a37235fa..b6a204942 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -364,6 +364,7 @@ File %1$s contained %2$s.\n\n Show completed Reverse No application found to open attachment + No application found to handle link Add attachment Take a picture Pick from gallery