package com.robert.maps.applib.utils;
import java.util.Locale;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import com.robert.maps.applib.R;
public class DistanceFormatter {
private int mUnits;
private String mUnitM, mUnitKM;
static final public int FT_IN_ML = 5280;
static final public int M_IN_KM = 1000;
static final String ELEV_FORMAT = "%.1f %s";
static final double FT_IN_M = 3.2808399;
public DistanceFormatter(Context ctx) {
super();
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(ctx);
mUnits = Integer.parseInt(pref.getString("pref_units", "0"));
if(mUnits == 0) {
mUnitM = ctx.getResources().getString(R.string.m);
mUnitKM = ctx.getResources().getString(R.string.km);
} else {
mUnitM = ctx.getResources().getString(R.string.ft);
mUnitKM = ctx.getResources().getString(R.string.ml);
}
}
@SuppressLint("DefaultLocale")
public String formatElevation(double mElevation) {
if(mUnits == 0)
return String.format(Locale.UK, ELEV_FORMAT, mElevation, mUnitM);
else
return String.format(Locale.UK, ELEV_FORMAT, (mElevation * FT_IN_M), mUnitM);
}
public String formatDistance(double dist) {
final String[] str = formatDistance2(dist);
return str[0]+" "+str[1];
}
public String[] formatDistance2(double dist) {
final String[] str = new String[2];
if(mUnits == 0) {
if(dist < M_IN_KM) {
str[0] = String.format("%.0f", dist);
str[1] = mUnitM;
} else if(dist/M_IN_KM < 100) {
str[0] = String.format("%.1f", dist/M_IN_KM);
str[1] = mUnitKM;
} else {
str[0] = String.format("%.0f", dist/M_IN_KM);
str[1] = mUnitKM;
}
} else {
if(dist * FT_IN_M < FT_IN_ML) {
str[0] = String.format("%.0f", dist * FT_IN_M);
str[1] = mUnitM;
} else if(dist * FT_IN_M / FT_IN_ML < 100) {
str[0] = String.format("%.2f", dist * FT_IN_M / FT_IN_ML);
str[1] = mUnitKM;
} else {
str[0] = String.format("%.0f", dist * FT_IN_M / FT_IN_ML);
str[1] = mUnitKM;
}
}
return str;
}
public static final String KM = "km";
public static final String ML = "ml";
public static final String KMH = "km/h";
public static final String MLH = "ml/h";
public static final String M = "m";
public static final String FT = "ft";
public static final String MINKM = "min/km";
public static final String MINML = "min/ml";
public static final double ML_IN_KM = 0.621371192;
public static final double KMH_IN_MS = 3.6;
public static final double MLH_IN_MS = 2.237;
public String formatSpeed(double speed) { // m/s
final String[] str = formatSpeed2(speed);
return str[0]+" "+str[1];
}
public String[] formatSpeed2(double speed) { // m/s
final String[] str = new String[2];
if(mUnits == 0) {
str[0] = String.format("%.1f", speed * KMH_IN_MS);
str[1] = KMH;
} else {
str[0] = String.format("%.1f", speed * MLH_IN_MS);
str[1] = MLH;
}
return str;
}
}