/******************************************************************************* * Gaggle is Copyright 2010 by Geeksville Industries LLC, a California limited liability corporation. * * Gaggle is distributed under a dual license. We've chosen this approach because within Gaggle we've used a number * of components that Geeksville Industries LLC might reuse for commercial products. Gaggle can be distributed under * either of the two licenses listed below. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * Commercial Distribution License * If you would like to distribute Gaggle (or portions thereof) under a license other than * the "GNU General Public License, version 2", contact Geeksville Industries. Geeksville Industries reserves * the right to release Gaggle source code under a commercial license of its choice. * * GNU Public License, version 2 * All other distribution of Gaggle must conform to the terms of the GNU Public License, version 2. The full * text of this license is included in the Gaggle source, see assets/manual/gpl-2.0.txt. ******************************************************************************/ package com.geeksville.info; import android.location.Location; import com.geeksville.gaggle.R; public class InfoGroundSpeed extends GPSField { @Override public String getLabel() { return context.getString(R.string.speed); } /** * * @see com.geeksville.info.InfoField#getLabel() */ @Override public String getShortLabel() { return context.getString(R.string.ground_speed_short); } /** * * @see com.geeksville.info.InfoField#getUnits() */ @Override public String getUnits() { // TODO Auto-generated method stub return Units.instance.getSpeedUnits(); } float metersPerSec = Float.NaN; /** * * @see com.geeksville.info.InfoField#getText() */ @Override public String getText() { if (Float.isNaN(metersPerSec)) return "---"; return Units.instance.meterPerSecToSpeed(metersPerSec); } @Override public void onLocationChanged(Location location) { // Sometimes the G1 GPS will report bogus speeds, look for really large // values float maxSpeed = 83f; // 83 m/sec is 300 km/h - i.e. really damn fast float newSpeed = Float.NaN; if (location.hasSpeed()) { newSpeed = location.getSpeed(); if (newSpeed > maxSpeed) newSpeed = Float.NaN; } float nmetersPerSec = newSpeed; if (nmetersPerSec != metersPerSec) { metersPerSec = nmetersPerSec; onChanged(); } } }