blob: 372473e15b1d416eb8917e813e0b8fdd140d1205 [file] [log] [blame]
package org.wordpress.android.util;
import android.content.Context;
import android.location.Address;
import android.location.Geocoder;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
public final class GeocoderUtils {
private GeocoderUtils() {
throw new AssertionError();
}
public static Geocoder getGeocoder(Context context) {
// first make sure a Geocoder service exists on this device (requires API 9)
if (!Geocoder.isPresent()) {
return null;
}
Geocoder gcd;
try {
gcd = new Geocoder(context, LanguageUtils.getCurrentDeviceLanguage(context));
} catch (NullPointerException cannotIstantiateEx) {
AppLog.e(AppLog.T.UTILS, "Cannot instantiate Geocoder", cannotIstantiateEx);
return null;
}
return gcd;
}
public static Address getAddressFromCoords(Context context, double latitude, double longitude) {
Address address = null;
List<Address> addresses = null;
Geocoder gcd = getGeocoder(context);
if (gcd == null) {
return null;
}
try {
addresses = gcd.getFromLocation(latitude, longitude, 1);
} catch (IOException e) {
// may get "Unable to parse response from server" IOException here if Geocoder
// service is hit too frequently
AppLog.e(AppLog.T.UTILS,
"Unable to parse response from server. Is Geocoder service hitting the server too frequently?",
e
);
}
// addresses may be null or empty if network isn't connected
if (addresses != null && addresses.size() > 0) {
address = addresses.get(0);
}
return address;
}
public static Address getAddressFromLocationName(Context context, String locationName) {
int maxResults = 1;
Address address = null;
List<Address> addresses = null;
Geocoder gcd = getGeocoder(context);
if (gcd == null) {
return null;
}
try {
addresses = gcd.getFromLocationName(locationName, maxResults);
} catch (IOException e) {
AppLog.e(AppLog.T.UTILS, "Failed to get coordinates from location", e);
}
// addresses may be null or empty if network isn't connected
if (addresses != null && addresses.size() > 0) {
address = addresses.get(0);
}
return address;
}
public static String getLocationNameFromAddress(Address address) {
String locality = "", adminArea = "", country = "";
if (address.getLocality() != null) {
locality = address.getLocality();
}
if (address.getAdminArea() != null) {
adminArea = address.getAdminArea();
}
if (address.getCountryName() != null) {
country = address.getCountryName();
}
return ((locality.equals("")) ? locality : locality + ", ")
+ ((adminArea.equals("")) ? adminArea : adminArea + " ") + country;
}
public static double[] getCoordsFromAddress(Address address) {
double[] coordinates = new double[2];
if (address.hasLatitude() && address.hasLongitude()) {
coordinates[0] = address.getLatitude();
coordinates[1] = address.getLongitude();
}
return coordinates;
}
}