It's in OsmAnd/OsmAnd/src/net/osmand/plus/helpers/WaypointHelper.java:
private static AlarmInfo createSpeedAlarm(MetricsConstants mc, float mxspeed, Location loc, float delta) {
AlarmInfo speedAlarm = null;
if (mxspeed != 0 && loc != null && loc.hasSpeed() && mxspeed != RouteDataObject.NONE_MAX_SPEED) {
if (loc.getSpeed() > mxspeed + delta) {
int speed;
if (mc == MetricsConstants.KILOMETERS_AND_METERS) {
speed = Math.round(mxspeed * 3.6f);
} else {
speed = Math.round(mxspeed * 3.6f / 1.6f);
}
speedAlarm = AlarmInfo.createSpeedLimit(speed, loc);
}
}
return speedAlarm;
}
In if (mc == MetricsConstants.KILOMETERS_AND_METERS) it just looks up the general setting length units. It doesn't use the speed unit setting from the navigation profiles.