This commit is contained in:
ligi 2015-08-01 12:53:25 +02:00
parent c4de64c63f
commit 92682f4d1d

View file

@ -5,19 +5,18 @@ import android.content.ActivityNotFoundException;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AlertDialog;
import org.ligi.passandroid.R;
import org.ligi.passandroid.model.PassLocation;
import org.ligi.passandroid.model.Pass;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.List;
import javax.annotation.Nonnull;
import org.ligi.passandroid.R;
import org.ligi.passandroid.model.Pass;
import org.ligi.passandroid.model.PassLocation;
public class NavigateToLocationsDialog {
public static void perform(final Activity activity, final Pass pass, final boolean finishOnDone) {
public static void perform(@Nonnull final Activity activity, @Nonnull final Pass pass, final boolean finishOnDone) {
final List<PassLocation> locations = pass.getLocations();
if (locations.size() == 0) {
@ -26,20 +25,21 @@ public class NavigateToLocationsDialog {
startIntentForLocation(activity, locations.get(0));
done(activity, finishOnDone);
} else if (locations.size() > 1) {
String[] locationDescriptions = new String[locations.size()];
final String[] locationDescriptions = new String[locations.size()];
int i = 0;
for (PassLocation loc : locations) {
locationDescriptions[i++] = loc.getDescription();
}
new AlertDialog.Builder(activity).setTitle(activity.getString(R.string.choose_location)).setItems(locationDescriptions, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
startIntentForLocation(activity, locations.get(which));
done(activity, finishOnDone);
}
}).show();
new AlertDialog.Builder(activity).setTitle(activity.getString(R.string.choose_location))
.setItems(locationDescriptions, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
startIntentForLocation(activity, locations.get(which));
done(activity, finishOnDone);
}
})
.show();
}
}
@ -51,18 +51,12 @@ public class NavigateToLocationsDialog {
}
private static void startIntentForLocation(Activity activity, PassLocation location) {
Intent i = new Intent();
i.setAction(Intent.ACTION_VIEW);
final Intent i = new Intent(Intent.ACTION_VIEW);
String description = "";
try {
description = URLEncoder.encode(location.getDescription(), "UTF-8");
} catch (UnsupportedEncodingException e1) {
// OK - no descripion
}
final String description = getEncodedDescription(location);
PassLocation.LatLng latlng = location.latlng;
String latAndLonStr = latlng.lat + "," + latlng.lon;
final PassLocation.LatLng latlng = location.latlng;
final String latAndLonStr = latlng.lat + "," + latlng.lon;
i.setData(Uri.parse("geo:" + latAndLonStr + "?q=" + latAndLonStr + "(" + description + ")"));
try {
activity.startActivity(i);
@ -73,4 +67,13 @@ public class NavigateToLocationsDialog {
}
}
private static String getEncodedDescription(final PassLocation location) {
try {
return URLEncoder.encode(location.getDescription(), "UTF-8");
} catch (UnsupportedEncodingException e1) {
// OK - no description
return "";
}
}
}