package cgeo.geocaching.apps.navi;
import cgeo.geocaching.R;
import cgeo.geocaching.location.Geopoint;
import cgeo.geocaching.models.Geocache;
import cgeo.geocaching.models.Waypoint;
import android.content.Context;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.annotation.StringRes;
abstract class OruxMapsApp extends AbstractPointNavigationApp {
private static final String ORUXMAPS_EXTRA_LONGITUDE = "targetLon";
private static final String ORUXMAPS_EXTRA_LATITUDE = "targetLat";
private static final String ORUXMAPS_EXTRA_NAME = "targetName";
private static final String INTENT_ONLINE = "com.oruxmaps.VIEW_MAP_ONLINE";
private static final String INTENT_OFFLINE = "com.oruxmaps.VIEW_MAP_OFFLINE";
private OruxMapsApp(@StringRes final int nameResourceId, final String intent) {
super(getString(nameResourceId), intent);
}
private void navigate(@NonNull final Context context, @NonNull final Geopoint point, @NonNull final String name) {
final Intent intent = new Intent(this.intent);
final double[] targetLat = { point.getLatitude() };
final double[] targetLon = { point.getLongitude() };
intent.putExtra(ORUXMAPS_EXTRA_LATITUDE, targetLat); //latitude, wgs84 datum
intent.putExtra(ORUXMAPS_EXTRA_LONGITUDE, targetLon); //longitude, wgs84 datum
if (!name.isEmpty()) {
final String[] targetName = { name };
intent.putExtra(ORUXMAPS_EXTRA_NAME, targetName);
}
context.startActivity(intent);
}
@Override
public void navigate(@NonNull final Context context, @NonNull final Geopoint point) {
navigate(context, point, "Waypoint");
}
@Override
public void navigate(@NonNull final Context context, @NonNull final Geocache cache) {
final Geopoint coords = cache.getCoords();
assert coords != null; // guaranteed by caller
navigate(context, coords, cache.getName());
}
@Override
public void navigate(@NonNull final Context context, @NonNull final Waypoint waypoint) {
final Geopoint coords = waypoint.getCoords();
assert coords != null; // guaranteed by caller
navigate(context, coords, waypoint.getName());
}
static class OruxOnlineMapApp extends OruxMapsApp {
OruxOnlineMapApp() {
super(R.string.cache_menu_oruxmaps_online, INTENT_ONLINE);
}
}
static class OruxOfflineMapApp extends OruxMapsApp {
OruxOfflineMapApp() {
super(R.string.cache_menu_oruxmaps_offline, INTENT_OFFLINE);
}
}
}