import android.os.Bundle;\r
import android.preference.PreferenceManager;\r
import android.util.Log;\r
-import android.view.GestureDetector;\r
import android.view.KeyEvent;\r
import android.view.Menu;\r
import android.view.MenuItem;\r
-import android.view.MotionEvent;\r
import android.view.View;\r
import android.view.View.OnLongClickListener;\r
import android.widget.Toast;\r
import com.google.android.maps.Projection;\r
\r
public class MapMode extends MapActivity {\r
- \r
+\r
private MapController m_controller;\r
- private GestureDetector m_gestureDetector;\r
private List<Overlay> m_mapOverlays;\r
private SplitPoints m_overlaySplitpoints;\r
- private String m_userName;\r
private GeoPoint m_prevPoint = null;\r
\r
public class RunningRoute extends Overlay {\r
private GeoPoint m_start;\r
private GeoPoint m_end;\r
\r
- public RunningRoute( GeoPoint ptStart, GeoPoint ptEnd) {\r
+ public RunningRoute(GeoPoint ptStart, GeoPoint ptEnd) {\r
m_start = ptStart;\r
m_end = ptEnd;\r
}\r
public void draw(Canvas canvas, MapView mapView, boolean shadow) {\r
super.draw(canvas, mapView, shadow);\r
\r
- if( !shadow ) {\r
- Paint paint = new Paint( Paint.ANTI_ALIAS_FLAG);\r
- paint.setStyle( Paint.Style.STROKE);\r
- paint.setAntiAlias( true);\r
- paint.setStrokeWidth( 3);\r
+ if (!shadow) {\r
+ Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);\r
+ paint.setStyle(Paint.Style.STROKE);\r
+ paint.setAntiAlias(true);\r
+ paint.setStrokeWidth(3);\r
paint.setColor(Color.YELLOW);\r
\r
Path path = new Path();\r
Projection projection = mapView.getProjection();\r
Point pxStart = projection.toPixels(m_start, null);\r
Point pxEnd = projection.toPixels(m_end, null);\r
- path.moveTo( pxStart.x, pxStart.y);\r
- path.lineTo( pxEnd.x, pxEnd.y);\r
+ path.moveTo(pxStart.x, pxStart.y);\r
+ path.lineTo(pxEnd.x, pxEnd.y);\r
\r
canvas.drawPath(path, paint);\r
}\r
}\r
}\r
+\r
private class SplitPoints extends ItemizedOverlay<OverlayItem> {\r
\r
private ArrayList<OverlayItem> m_splitpoints = new ArrayList<OverlayItem>();\r
- \r
+\r
public SplitPoints(Drawable defaultMarker) {\r
super(boundCenterBottom(defaultMarker));\r
}\r
\r
public void addSplitpoint(OverlayItem overlay) {\r
- m_splitpoints.add(overlay);\r
- populate();\r
+ m_splitpoints.add(overlay);\r
+ populate();\r
}\r
+\r
@Override\r
- protected OverlayItem createItem(int idx) { \r
- Log.d(this.getClass().getName(), "createItem(): index: " + idx);\r
+ protected OverlayItem createItem(int idx) {\r
+ Log.d(this.getClass().getName(), "createItem(): index: " + idx);\r
return m_splitpoints.get(idx);\r
}\r
\r
public int size() {\r
return m_splitpoints.size();\r
}\r
- \r
- @Override\r
- protected boolean onTap(int i) {\r
- Log.d(this.getClass().getName(), "onTap(): index: " + i);\r
- if (m_splitpoints.size() > 0) {\r
- Toast.makeText(MapMode.this,\r
- m_splitpoints.get(i).getSnippet(), Toast.LENGTH_LONG).show();\r
- }\r
- return true;\r
- }\r
\r
- }\r
- private class GestureListener extends GestureDetector.SimpleOnGestureListener {\r
- public void onLongPress(MotionEvent arg0) {\r
- Log.d(this.getClass().getName(), "onLongPress():" );\r
- \r
- finish();\r
- \r
+ @Override\r
+ protected boolean onTap(int i) {\r
+ Log.d(this.getClass().getName(), "onTap(): index: " + i);\r
+ if (m_splitpoints.size() > 0) {\r
+ Toast.makeText(MapMode.this, m_splitpoints.get(i).getSnippet(),\r
+ Toast.LENGTH_LONG).show();\r
+ }\r
+ return true;\r
}\r
\r
- public boolean onDoubleTap(MotionEvent arg0) {\r
- Log.d(this.getClass().getName(), "onDoubleTap():" );\r
- return false;\r
- }\r
+ public void draw(Canvas canvas, MapView mapview, boolean shadow) {\r
+ super.draw(canvas, mapview, shadow);\r
\r
- \r
+ }\r
}\r
\r
\r
@Override\r
public void onReceive(Context context, Intent intent) {\r
long recordDate = intent.getLongExtra("RunningRecord", 0);\r
- \r
+\r
Record rec = TokyoRunners.getRecord(recordDate);\r
- \r
- GeoPoint gp = new GeoPoint(rec.getLatitudeE6(), rec.getLongitudeE6());\r
+\r
+ if (rec == null) {\r
+ ExLog.put("No record: " + recordDate);\r
+ return;\r
+ }\r
+ GeoPoint gp = new GeoPoint(rec.getLatitudeE6(), rec\r
+ .getLongitudeE6());\r
m_controller.animateTo(gp);\r
\r
// Route\r
}\r
// Split point\r
if (rec.getName().length() > 0) {\r
- drawSplitPoint(new Date(), gp);\r
+ drawSplitPoint(gp, rec.getName(), rec.getDate());\r
}\r
\r
m_prevPoint = gp;\r
- \r
+\r
}\r
};\r
- \r
\r
@Override\r
protected boolean isRouteDisplayed() {\r
return false;\r
}\r
- @Override\r
+\r
+ @Override\r
public void onResume() {\r
Log.d(this.getClass().getName(), "onResume()");\r
super.onResume();\r
\r
}\r
\r
- @Override\r
- public void onPause() {\r
- super.onPause();\r
- \r
- unregisterReceiver(m_runningRecordReceiver);\r
- }\r
- \r
-\r
- @Override\r
- public void onCreate(Bundle savedInstanceState) {\r
- super.onCreate(savedInstanceState);\r
- \r
- m_gestureDetector = new GestureDetector(new GestureListener());\r
- \r
- setContentView(R.layout.map);\r
-\r
- SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);\r
- \r
- m_userName = prefs.getString("your_name", "Koike Kazuhiko");\r
- \r
- MapView m = (MapView)findViewById(R.id.mapview);\r
- m.setBuiltInZoomControls(true);\r
-\r
- m_controller = m.getController();\r
- m_controller.setZoom(16);\r
-\r
- m_mapOverlays = m.getOverlays();\r
- \r
- Drawable runner = getResources().getDrawable(R.drawable.runner);\r
- m_overlaySplitpoints = new SplitPoints(runner);\r
- \r
- MyLocationOverlay myLocationOverlay = new MyLocationOverlay(this, m);\r
- myLocationOverlay.enableMyLocation();\r
-\r
- m_mapOverlays.add(myLocationOverlay);\r
- \r
+ @Override\r
+ public void onPause() {\r
+ super.onPause();\r
+\r
+ unregisterReceiver(m_runningRecordReceiver);\r
+ }\r
+\r
+ @Override\r
+ public void onCreate(Bundle savedInstanceState) {\r
+ super.onCreate(savedInstanceState);\r
+\r
+ setContentView(R.layout.map);\r
+\r
+ SharedPreferences prefs = PreferenceManager\r
+ .getDefaultSharedPreferences(this);\r
+\r
+ MapView m = (MapView) findViewById(R.id.mapview);\r
+ m.setBuiltInZoomControls(true);\r
+\r
+ m_controller = m.getController();\r
+ m_controller.setZoom(16);\r
+\r
+ m_mapOverlays = m.getOverlays();\r
+\r
+ Drawable runner = getResources().getDrawable(R.drawable.runner);\r
+ m_overlaySplitpoints = new SplitPoints(runner);\r
+\r
+ MyLocationOverlay myLocationOverlay = new MyLocationOverlay(this, m);\r
+ myLocationOverlay.enableMyLocation();\r
+\r
+ m_mapOverlays.add(myLocationOverlay);\r
+\r
m.setOnLongClickListener(new OnLongClickListener() {\r
@Override\r
public boolean onLongClick(View v) {\r
- Log.d(this.getClass().getName(), "onLongClick():" );\r
+ Log.d(this.getClass().getName(), "onLongClick():");\r
finish();\r
return false;\r
}\r
});\r
\r
- \r
- long recTime = 0;\r
- Record rec;\r
- while ((rec = TokyoRunners.getNextRecord(recTime)) != null) {\r
- if (rec.hasLocation()) {\r
- GeoPoint gp = new GeoPoint(rec.getLatitudeE6(), rec.getLongitudeE6());\r
- if (m_prevPoint != null) {\r
- RunningRoute route = new RunningRoute(m_prevPoint, gp);\r
- m_mapOverlays.add(route);\r
- }\r
- m_prevPoint = gp;\r
- \r
- if (rec.getName().length() > 0) {\r
- drawSplitPoint(rec.getDate(), gp);\r
- }\r
- }\r
- recTime = rec.getDate().getTime();\r
- }\r
- }\r
- private void drawSplitPoint(Date recDate, GeoPoint gp) {\r
+ long recTime = 0;\r
+ Record rec;\r
+ while ((rec = TokyoRunners.getNextRecord(recTime)) != null) {\r
+ if (rec.hasLocation()) {\r
+ GeoPoint gp = new GeoPoint(rec.getLatitudeE6(), rec\r
+ .getLongitudeE6());\r
+ if (m_prevPoint != null) {\r
+ RunningRoute route = new RunningRoute(m_prevPoint, gp);\r
+ m_mapOverlays.add(route);\r
+ }\r
+ m_prevPoint = gp;\r
+\r
+ if (rec.getName().length() > 0) {\r
+ drawSplitPoint(gp, rec.getName(), rec.getDate());\r
+ }\r
+ }\r
+ recTime = rec.getDate().getTime();\r
+ }\r
+ }\r
+\r
+ private void drawSplitPoint(GeoPoint gp, String pointName, Date recDate) {\r
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");\r
- String snippet = "[" + m_userName + "]" + formatter.format(recDate);\r
+ String snippet = pointName + "[" + formatter.format(recDate) + "]";\r
OverlayItem ovItem = new OverlayItem(gp, "", snippet);\r
m_overlaySplitpoints.addSplitpoint(ovItem);\r
if (m_overlaySplitpoints.size() == 1) {\r
m_mapOverlays.add(m_overlaySplitpoints);\r
}\r
- }\r
- \r
- @Override\r
- public void onStop() {\r
- super.onStop();\r
- }\r
- @Override\r
- public boolean onTouchEvent(MotionEvent event) {\r
- Log.d(this.getClass().getName(), "onTouchEvent()" );\r
- \r
- if (m_gestureDetector.onTouchEvent(event)) {\r
- return true;\r
- }\r
- return super.onTouchEvent(event);\r
- }\r
+ }\r
+\r
public boolean onKeyDown(int keyCode, KeyEvent event) {\r
- Log.d(this.getClass().getName(), "onKeyDown():" + keyCode );\r
- if (keyCode == KeyEvent.KEYCODE_BACK){\r
+ Log.d(this.getClass().getName(), "onKeyDown():" + keyCode);\r
+ if (keyCode == KeyEvent.KEYCODE_BACK) {\r
showDialog(Constants.DIALOG_EXIT_ID);\r
return true;\r
}\r
- \r
- return super.onKeyDown(keyCode, event);\r
- \r
+\r
+ return super.onKeyDown(keyCode, event);\r
+\r
}\r
- @Override\r
- public Dialog onCreateDialog (int id) {\r
- \r
- AlertDialog.Builder builder = new AlertDialog.Builder(this);\r
- switch (id) {\r
- case Constants.DIALOG_EXIT_ID:\r
- builder.setTitle(R.string.dialog_exit_title);\r
- builder.setMessage(R.string.dialog_exit_message);\r
- builder.setPositiveButton(R.string.dialog_yes, new DialogInterface.OnClickListener() {\r
- @Override\r
- public void onClick(DialogInterface dialog, int which) {\r
- finish();\r
\r
- }\r
- });\r
- builder.setNegativeButton(R.string.dialog_no, new DialogInterface.OnClickListener() {\r
- @Override\r
- public void onClick(DialogInterface dialog, int which) {\r
- dialog.cancel();\r
- \r
- }\r
- });\r
+ @Override\r
+ public Dialog onCreateDialog(int id) {\r
+\r
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);\r
+ switch (id) {\r
+ case Constants.DIALOG_EXIT_ID:\r
+ builder.setTitle(R.string.dialog_exit_title);\r
+ builder.setMessage(R.string.dialog_exit_message);\r
+ builder.setPositiveButton(R.string.dialog_yes,\r
+ new DialogInterface.OnClickListener() {\r
+ @Override\r
+ public void onClick(DialogInterface dialog, int which) {\r
+ finish();\r
+\r
+ }\r
+ });\r
+ builder.setNegativeButton(R.string.dialog_no,\r
+ new DialogInterface.OnClickListener() {\r
+ @Override\r
+ public void onClick(DialogInterface dialog, int which) {\r
+ dialog.cancel();\r
+\r
+ }\r
+ });\r
+\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+\r
+ AlertDialog alertDialog = builder.create();\r
+ return alertDialog;\r
+ }\r
+\r
+ @Override\r
+ public boolean onPrepareOptionsMenu(Menu menu) {\r
+ menu.removeItem(Constants.MENU_SAVE);\r
+ menu.removeItem(Constants.MENU_HISTORY);\r
\r
- break;\r
+ return super.onPrepareOptionsMenu(menu);\r
+ }\r
+\r
+ @Override\r
+ public boolean onOptionsItemSelected(MenuItem item) {\r
+ Intent intent;\r
+ switch (item.getItemId()) {\r
+ case Constants.MENU_SETTING:\r
+ intent = new Intent(this, Config.class);\r
+ intent.setAction(Intent.ACTION_VIEW);\r
+ startActivity(intent);\r
+ break;\r
default:\r
break;\r
- }\r
- \r
- AlertDialog alertDialog = builder.create();\r
- return alertDialog;\r
- }\r
-\r
- @Override\r
- public boolean onPrepareOptionsMenu(Menu menu) {\r
- menu.removeItem(Constants.MENU_SAVE);\r
- menu.removeItem(Constants.MENU_HISTORY);\r
- \r
- return super.onPrepareOptionsMenu(menu);\r
- }\r
- @Override\r
- public boolean onOptionsItemSelected(MenuItem item) {\r
- Intent intent;\r
- switch (item.getItemId()) {\r
- case Constants.MENU_SETTING:\r
- intent = new Intent(this, Config.class);\r
- intent.setAction(Intent.ACTION_VIEW);\r
- startActivity(intent);\r
- break;\r
- default:\r
- break;\r
- }\r
- return false;\r
- } \r
+ }\r
+ return false;\r
+ }\r
\r
}\r
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
+import android.content.pm.ActivityInfo;
import android.content.res.Resources;
import android.database.Cursor;
import android.location.Location;
import android.widget.TabHost;
import android.widget.TextView;
+public class TokyoRunners extends TabActivity implements LocationListener {
-public class TokyoRunners extends TabActivity implements
- LocationListener {
-
private SharedPreferences m_prefs;
private LocationManager m_locMgr;
private Chronometer m_elapsedTime;
private Chronometer m_lapTime;
private boolean m_running = false;
-
+
private boolean m_useGPS = false;
private boolean m_autosplit = false;
-
+
private static RunningRecord m_runningRecord;
-
- class StartStopButton implements OnClickListener {
+ private static final int m_minAccuracy = 200;
+
+ class StartStopButton implements OnClickListener {
public void onClick(View v) {
if (m_running == true) {
stop();
start();
}
}
- };
- class ResetLapButton implements OnClickListener {
+ };
+
+ class ResetLapButton implements OnClickListener {
public void onClick(View v) {
if (m_running == true) {
lap();
reset();
}
}
- };
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- Debug.startMethodTracing("tokyorunners");
-
- setContentView(R.layout.stopwatch);
-
- // タブの設定
- TabHost tabHost = getTabHost();
-
- Resources res = getResources();
- TabHost.TabSpec stopwatchTab = tabHost.newTabSpec("stopwatch");
- stopwatchTab.setIndicator(res.getText(R.string.title_stopwatch));
- stopwatchTab.setContent(R.id.stopwatchmode);
- tabHost.addTab(stopwatchTab);
-
- TabHost.TabSpec mapTab = tabHost.newTabSpec("map");
- mapTab.setIndicator(res.getText(R.string.title_map));
- mapTab.setContent(new Intent(this, MapMode.class));
- tabHost.addTab(mapTab);
-
- tabHost.setCurrentTab(0);
-
- tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
+ };
+
+ /** Called when the activity is first created. */
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+// Debug.startMethodTracing("tokyorunners");
+
+ setContentView(R.layout.stopwatch);
+
+ // タブの設定
+ TabHost tabHost = getTabHost();
+
+ TabHost.TabSpec stopwatchTab = tabHost.newTabSpec("stopwatch");
+ stopwatchTab.setIndicator(getString(R.string.title_stopwatch));
+ stopwatchTab.setContent(R.id.stopwatchmode);
+ tabHost.addTab(stopwatchTab);
+
+ TabHost.TabSpec mapTab = tabHost.newTabSpec("map");
+ mapTab.setIndicator(getString(R.string.title_map));
+ mapTab.setContent(new Intent(this, MapMode.class));
+ tabHost.addTab(mapTab);
+
+ tabHost.setCurrentTab(0);
+
+ tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
@Override
public void onTabChanged(String tag) {
if (tag.equals("stopwatch")) {
} else if (tag.equals("map")) {
}
-
+
+ }
+ });
+
+ m_runningRecord = new RunningRecord(getContentResolver());
+
+ m_prefs = PreferenceManager.getDefaultSharedPreferences(this);
+
+ // GPS設定
+ m_useGPS = m_prefs.getBoolean("use_gps", true);
+ if (m_useGPS) {
+ m_locMgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
+
+ String strGpsFreq = m_prefs.getString("gps_frequency", "0");
+ int gps_freq = Integer.parseInt(strGpsFreq);
+ m_locMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER,
+ gps_freq * 1000, 5, this);
+
+ m_autosplit = m_prefs.getBoolean("auto_split", false);
+ if (m_autosplit) {
+ int interval = Integer.parseInt(m_prefs.getString(
+ "split_interval", "5"));
+ m_runningRecord.setSplitInterval(interval);
+ }
+
+ }
+
+ // タイム表示
+ m_elapsedTime = (Chronometer) findViewById(R.id.elapsed_time);
+ m_lapTime = (Chronometer) findViewById(R.id.lap_time);
+
+ // ボタン
+ Button btnStartStop = (Button) findViewById(R.id.button_start_stop);
+ btnStartStop.setOnClickListener(new StartStopButton());
+
+ Button btnResetLap = (Button) findViewById(R.id.button_reset_lap);
+ btnResetLap.setOnClickListener(new ResetLapButton());
+
+ // スプリットタイム/ラップタイム履歴
+ ListView lvLaptime = (ListView) findViewById(R.id.lap_history);
+ ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,
+ R.layout.laptime);
+ lvLaptime.setAdapter(arrayAdapter);
+
+ getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+
+ switch (requestCode) {
+ case Constants.REQUEST_CODE_SETTINGS:
+ m_useGPS = m_prefs.getBoolean("use_gps", true);
+ m_autosplit = m_prefs.getBoolean("auto_split", false);
+ break;
+ case Constants.REQUEST_CODE_HISTORY:
+ if (data != null) {
+ long selectedStartTime = data.getLongExtra("startTime", 0);
+ readHistory(selectedStartTime);
+ }
+ break;
+ }
+ }
+
+ private void readHistory(long startTime) {
+
+ String[] columns = { RunningRecordProvider.CURRENT_TIME,
+ RunningRecordProvider.LATITUDE,
+ RunningRecordProvider.LONGITUDE,
+ RunningRecordProvider.POINT_NAME };
+ String selection = RunningRecordProvider.START_TIME + " = ?";
+ String[] selectionArgs = { Long.toString(startTime) };
+ String sortOrder = RunningRecordProvider.CURRENT_TIME + " desc";
+ Cursor cursor = managedQuery(RunningRecordProvider.REC_URI, columns,
+ selection, selectionArgs, sortOrder);
+ if (cursor == null) {
+ return;
+ }
+
+ reset();
+ ListView listLaptime = (ListView) findViewById(R.id.lap_history);
+ ArrayAdapter<String> lapHistory = (ArrayAdapter<String>) listLaptime
+ .getAdapter();
+
+ long currentTime = 0;
+ int latitude = 0;
+ int longitude = 0;
+ String pointName = "";
+ long prevTime = startTime;
+
+ TextView elapsedTimeView = (TextView) findViewById(R.id.elapsed_time);
+ TextView lapTimeView = (TextView) findViewById(R.id.lap_time);
+ TextView distanceView = (TextView) findViewById(R.id.distance);
+
+ while (cursor.moveToNext()) {
+ currentTime = cursor.getLong(cursor
+ .getColumnIndex(RunningRecordProvider.CURRENT_TIME));
+ latitude = cursor.getInt(cursor
+ .getColumnIndex(RunningRecordProvider.LATITUDE));
+ longitude = cursor.getInt(cursor
+ .getColumnIndex(RunningRecordProvider.LONGITUDE));
+ pointName = cursor.getString(cursor
+ .getColumnIndex(RunningRecordProvider.POINT_NAME));
+
+ // Laptime History
+ Location loc = null;
+
+ if (latitude != 0 && longitude != 0) {
+ loc = new Location(LocationManager.GPS_PROVIDER);
+
+ loc.setLatitude((double) (latitude / 1E6));
+ loc.setLongitude((double) (longitude / 1E6));
}
- });
-
- m_runningRecord = new RunningRecord(getContentResolver());
-
- m_prefs = PreferenceManager.getDefaultSharedPreferences(this);
-
- // GPS設定
- m_useGPS = m_prefs.getBoolean("use_gps", true);
- if (m_useGPS) {
- m_locMgr = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
-
- String strGpsFreq = m_prefs.getString("gps_frequency", "0");
- int gps_freq =Integer.parseInt(strGpsFreq);
- m_locMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, gps_freq * 1000, 0, this);
-
- m_autosplit = m_prefs.getBoolean("auto_split", false);
- if (m_autosplit) {
- int interval = Integer.parseInt(m_prefs.getString("split_interval", "5"));
- m_runningRecord.setSplitInterval(interval);
- }
-
-
- }
-
- // タイム表示
- m_elapsedTime = (Chronometer)findViewById(R.id.elapsed_time);
- m_lapTime = (Chronometer)findViewById(R.id.lap_time);
-
- // ボタン
- Button btnStartStop = (Button)findViewById(R.id.button_start_stop);
- btnStartStop.setOnClickListener(new StartStopButton());
-
- Button btnResetLap = (Button)findViewById(R.id.button_reset_lap);
- btnResetLap.setOnClickListener(new ResetLapButton());
-
-
- // スプリットタイム/ラップタイム履歴
- ListView lvLaptime = (ListView)findViewById(R.id.lap_history);
- ArrayAdapter<String> arrayAdapter
- = new ArrayAdapter<String>(this, R.layout.laptime);
- lvLaptime.setAdapter(arrayAdapter);
-
- getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
-
-
- }
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
-
- switch (requestCode) {
- case Constants.REQUEST_CODE_SETTINGS:
- m_useGPS = m_prefs.getBoolean("use_gps", true);
- m_autosplit = m_prefs.getBoolean("auto_split", false);
- break;
- case Constants.REQUEST_CODE_HISTORY:
- if (data != null) {
- long selectedStartTime = data.getLongExtra("startTime", 0);
- readHistory(selectedStartTime);
- }
- break;
- }
- }
-
- private void readHistory(long startTime) {
-
- String[] columns = {
- RunningRecordProvider.CURRENT_TIME,
- RunningRecordProvider.LATITUDE,
- RunningRecordProvider.LONGITUDE,
- RunningRecordProvider.POINT_NAME};
- String selection = RunningRecordProvider.START_TIME + " = ?";
- String[] selectionArgs = {Long.toString(startTime)};
- String sortOrder = RunningRecordProvider.CURRENT_TIME + " desc";
- Cursor cursor = managedQuery(RunningRecordProvider.REC_URI, columns, selection, selectionArgs, sortOrder);
- if (cursor == null) {
- return;
- }
-
- reset();
- ListView listLaptime = (ListView)findViewById(R.id.lap_history);
- ArrayAdapter<String> lapHistory = (ArrayAdapter<String>)listLaptime.getAdapter();
-
- long currentTime = 0;
- int latitude = 0;
- int longitude = 0;
- String pointName = "";
- long prevTime = startTime;
-
- TextView elapsedTimeView = (TextView)findViewById(R.id.elapsed_time);
- TextView lapTimeView = (TextView)findViewById(R.id.lap_time);
- TextView distanceView = (TextView)findViewById(R.id.distance);
-
- while (cursor.moveToNext()) {
- currentTime = cursor.getLong(cursor.getColumnIndex(RunningRecordProvider.CURRENT_TIME));
- latitude = cursor.getInt(cursor.getColumnIndex(RunningRecordProvider.LATITUDE));
- longitude = cursor.getInt(cursor.getColumnIndex(RunningRecordProvider.LONGITUDE));
- pointName = cursor.getString(cursor.getColumnIndex(RunningRecordProvider.POINT_NAME));
-
- // Laptime History
- Location loc = new Location(LocationManager.GPS_PROVIDER);
- loc.setLatitude(latitude);
- loc.setLongitude(longitude);
- m_runningRecord.addRecord(new Date(currentTime), loc, pointName);
+ m_runningRecord.addRecord(new Date(currentTime), loc, pointName);
if (pointName.length() == 0) {
} else if (currentTime != startTime) {
- StringBuffer strBuff = new StringBuffer();
+ StringBuffer strBuff = new StringBuffer();
strBuff.append(pointName);
- strBuff.append(": ");
- strBuff.append(DateUtils.formatElapsedTime((currentTime - startTime) / 1000));
- strBuff.append("/");
- strBuff.append(DateUtils.formatElapsedTime((currentTime - prevTime) / 1000));
- lapHistory.insert(strBuff.toString(), 0);
- }
-
- prevTime = currentTime;
- }
- // Elapsed Time
- elapsedTimeView.setText(DateUtils.formatElapsedTime((currentTime - startTime) / 1000));
- // Latest Laptime
- lapTimeView.setText(DateUtils.formatElapsedTime((currentTime - prevTime) / 1000));
- // Distance
- distanceView.setText(Float.toString(m_runningRecord.getDistance()));
-
- }
-
-
- @Override
- public void onDestroy() {
- getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
-
- m_runningRecord = null;
-
- Debug.stopMethodTracing();
-
- if (m_useGPS) {
- m_locMgr.removeUpdates(this);
- }
-
- super.onDestroy();
-
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- menu.add(Menu.NONE, Constants.MENU_SAVE, Menu.NONE, R.string.menu_save).setIcon(android.R.drawable.ic_menu_save);
- menu.add(Menu.NONE, Constants.MENU_HISTORY, Menu.NONE, R.string.menu_history).setIcon(R.drawable.history2);
- menu.add(Menu.NONE, Constants.MENU_SETTING, Menu.NONE, R.string.menu_setting).setIcon(android.R.drawable.ic_menu_preferences);
-
- return super.onCreateOptionsMenu(menu);
- }
- @Override
- public Dialog onCreateDialog (int id) {
-
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- switch (id) {
- case Constants.DIALOG_SAVE_ID:
- builder.setTitle(R.string.dialog_save_title);
- builder.setMessage(R.string.dialog_save_message);
- builder.setPositiveButton(R.string.dialog_yes, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- saveRecord();
+ strBuff.append(": ");
+ strBuff.append(DateUtils
+ .formatElapsedTime((currentTime - startTime) / 1000));
+ strBuff.append("/");
+ strBuff.append(DateUtils
+ .formatElapsedTime((currentTime - prevTime) / 1000));
+ lapHistory.insert(strBuff.toString(), 0);
+ prevTime = currentTime;
+ }
- }
- });
- builder.setNegativeButton(R.string.dialog_no, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.cancel();
-
- }
- });
+ }
+ // Elapsed Time
+ elapsedTimeView.setText(DateUtils
+ .formatElapsedTime((currentTime - startTime) / 1000));
+ // Latest Laptime
+ lapTimeView.setText(DateUtils
+ .formatElapsedTime((currentTime - prevTime) / 1000));
+ // Distance
+ distanceView.setText(m_runningRecord.getDistanceString());
- break;
- case Constants.DIALOG_EXIT_ID:
- builder.setTitle(R.string.dialog_exit_title);
- builder.setMessage(R.string.dialog_exit_message);
- builder.setPositiveButton(R.string.dialog_yes, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- finish();
+
+ }
- }
- });
- builder.setNegativeButton(R.string.dialog_no, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.cancel();
-
- }
- });
+ @Override
+ public void onDestroy() {
+ getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+
+ m_runningRecord = null;
+
+// Debug.stopMethodTracing();
+
+ if (m_useGPS) {
+ m_locMgr.removeUpdates(this);
+ }
+
+ super.onDestroy();
+
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ menu.add(Menu.NONE, Constants.MENU_SAVE, Menu.NONE, R.string.menu_save)
+ .setIcon(android.R.drawable.ic_menu_save);
+ menu.add(Menu.NONE, Constants.MENU_HISTORY, Menu.NONE,
+ R.string.menu_history).setIcon(R.drawable.history2);
+ menu.add(Menu.NONE, Constants.MENU_SETTING, Menu.NONE,
+ R.string.menu_setting).setIcon(
+ android.R.drawable.ic_menu_preferences);
+
+ return super.onCreateOptionsMenu(menu);
+ }
+
+ @Override
+ public Dialog onCreateDialog(int id) {
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ switch (id) {
+ case Constants.DIALOG_SAVE_ID:
+ builder.setTitle(R.string.dialog_save_title);
+ builder.setMessage(R.string.dialog_save_message);
+ builder.setPositiveButton(R.string.dialog_yes,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ saveRecord();
+
+ }
+ });
+ builder.setNegativeButton(R.string.dialog_no,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.cancel();
+
+ }
+ });
+
+ break;
+ case Constants.DIALOG_EXIT_ID:
+ builder.setTitle(R.string.dialog_exit_title);
+ builder.setMessage(R.string.dialog_exit_message);
+ builder.setPositiveButton(R.string.dialog_yes,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ finish();
+
+ }
+ });
+ builder.setNegativeButton(R.string.dialog_no,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.cancel();
+
+ }
+ });
+
+ break;
+ default:
+ break;
+ }
- break;
+ AlertDialog alertDialog = builder.create();
+ return alertDialog;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ Intent intent;
+ switch (item.getItemId()) {
+ case Constants.MENU_SAVE:
+ showDialog(Constants.DIALOG_SAVE_ID);
+ break;
+ case Constants.MENU_HISTORY:
+ intent = new Intent(this, RunningHistory.class);
+ intent.setAction(Intent.ACTION_VIEW);
+ startActivityForResult(intent, Constants.REQUEST_CODE_HISTORY);
+ break;
+ case Constants.MENU_SETTING:
+ intent = new Intent(this, Config.class);
+ intent.setAction(Intent.ACTION_VIEW);
+ startActivityForResult(intent, Constants.REQUEST_CODE_SETTINGS);
+ break;
default:
break;
- }
-
- AlertDialog alertDialog = builder.create();
- return alertDialog;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- Intent intent;
- switch (item.getItemId()) {
- case Constants.MENU_SAVE:
- showDialog(Constants.DIALOG_SAVE_ID);
- break;
- case Constants.MENU_HISTORY:
- intent = new Intent(this, RunningHistory.class);
- intent.setAction(Intent.ACTION_VIEW);
- startActivityForResult(intent, Constants.REQUEST_CODE_HISTORY);
- break;
- case Constants.MENU_SETTING:
- intent = new Intent(this, Config.class);
- intent.setAction(Intent.ACTION_VIEW);
- startActivityForResult(intent, Constants.REQUEST_CODE_SETTINGS);
- break;
- default:
- break;
- }
- return false;
- }
+ }
+ return false;
+ }
+
public void onLocationChanged(Location location) {
ExLog.put(location.toString());
-
- // èµ°è¡\8cä¸ã\81ªã\82\89è¨\98é\8c²ã\82\92追å\8a
+
+ // èµ°è¡\8cä¸ã\81§ã\81ªã\81\84å ´å\90\88ã\81¯ä½\95ã\82\82ã\81\97ã\81ªã\81\84
if (m_running == false) {
return;
}
+
+ // 精度が低いデータは無視
+ // 移動距離が精度より小さい場合も無視
+ if (location.hasAccuracy()) {
+ if (location.getAccuracy() > m_minAccuracy) {
+ ExLog.put("Accuracy low: " + location.getAccuracy() + ";" + m_minAccuracy);
+ return;
+ }
+ Location prevLocation = m_runningRecord.getPrevLocation();
+ if (prevLocation != null && prevLocation.distanceTo(location) < location.getAccuracy()) {
+ ExLog.put("Move not enough: " + location.getAccuracy() + ";" + prevLocation.distanceTo(location));
+ return;
+ }
+
+ }
+
Date recDate = new Date(location.getTime());
String pointName = m_runningRecord.addRecord(recDate, location, "");
-
+
// ラップタイム履歴
if (pointName.length() > 0) {
String laptimeStr = calculateSplitAndLap();
-
- ListView listLaptime = (ListView)findViewById(R.id.lap_history);
- ArrayAdapter<String> lapHistory = (ArrayAdapter<String>)listLaptime.getAdapter();
-
+
+ ListView listLaptime = (ListView) findViewById(R.id.lap_history);
+ ArrayAdapter<String> lapHistory = (ArrayAdapter<String>) listLaptime
+ .getAdapter();
+
String strLaptime = pointName + ": " + laptimeStr;
-
+
lapHistory.insert(strLaptime, 0);
}
// 距離
- float distance_km = m_runningRecord.getDistance();
-
- TextView distanceView = (TextView)findViewById(R.id.distance);
- distanceView.setText(Float.toString(distance_km));
+ TextView distanceView = (TextView) findViewById(R.id.distance);
+ distanceView.setText(m_runningRecord.getDistanceString());
- // MapModeに通知
- Intent intent = new Intent("RunningRecord");
- intent.putExtra("RunningRecord", location.getTime());
- sendBroadcast(intent);
+ // MapModeに通知
+ Intent intent = new Intent("RunningRecord");
+ intent.putExtra("RunningRecord", location.getTime());
+ sendBroadcast(intent);
}
break;
}
Log.d(this.getClass().getName(), "onStatusChanged(): " + statusStr);
-
+
}
+
private void start() {
reset();
- m_elapsedTime.start();
- m_lapTime.start();
-
- if (m_useGPS) {
- String strGpsFreq = m_prefs.getString("gps_frequency", "0");
- int gps_freq =Integer.parseInt(strGpsFreq);
- m_locMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, gps_freq * 1000, 0, this);
-
- }
- m_runningRecord.addRecord(new Date(), null, "");
-
- Button startStopButton = (Button)findViewById(R.id.button_start_stop);
- Button resetLapButton = (Button)findViewById(R.id.button_reset_lap);
+ m_elapsedTime.start();
+ m_lapTime.start();
+
+ m_runningRecord.addRecord(new Date(), null, "");
+
+ Button startStopButton = (Button) findViewById(R.id.button_start_stop);
+ Button resetLapButton = (Button) findViewById(R.id.button_reset_lap);
startStopButton.setText(R.string.button_stop);
if (m_autosplit) {
resetLapButton.setEnabled(false);
}
m_running = true;
}
+
private void stop() {
m_runningRecord.addRecord(new Date(), null, "");
-
+
m_elapsedTime.stop();
m_lapTime.stop();
-
- Button startStopButton = (Button)findViewById(R.id.button_start_stop);
- Button resetLapButton = (Button)findViewById(R.id.button_reset_lap);
+
+ Button startStopButton = (Button) findViewById(R.id.button_start_stop);
+ Button resetLapButton = (Button) findViewById(R.id.button_reset_lap);
startStopButton.setText(R.string.button_start);
if (m_autosplit) {
resetLapButton.setEnabled(true);
resetLapButton.setText(R.string.button_reset);
}
m_running = false;
-
+
}
+
private void reset() {
long elapsedRealTime = SystemClock.elapsedRealtime();
m_elapsedTime.setBase(elapsedRealTime);
- m_lapTime.setBase(elapsedRealTime);
-
- ListView listLaptime = (ListView)findViewById(R.id.lap_history);
- ArrayAdapter<String> lapHistory = (ArrayAdapter<String>)listLaptime.getAdapter();
+ m_lapTime.setBase(elapsedRealTime);
+
+ ListView listLaptime = (ListView) findViewById(R.id.lap_history);
+ ArrayAdapter<String> lapHistory = (ArrayAdapter<String>) listLaptime
+ .getAdapter();
lapHistory.clear();
-
+
m_runningRecord.clearRecord();
}
+
private String calculateSplitAndLap() {
long elapsedRealTime = SystemClock.elapsedRealtime();
long splitTimeMillis = elapsedRealTime - m_elapsedTime.getBase();
long lapTimeMillis = elapsedRealTime - m_lapTime.getBase();
- String splitTimeStr = DateUtils.formatElapsedTime(splitTimeMillis / 1000);
+ String splitTimeStr = DateUtils
+ .formatElapsedTime(splitTimeMillis / 1000);
String lapTimeStr = DateUtils.formatElapsedTime(lapTimeMillis / 1000);
m_lapTime.setBase(elapsedRealTime);
-
+
return splitTimeStr + "/" + lapTimeStr;
-
+
}
+
private void lap() {
String laptimeStr = calculateSplitAndLap();
-
- ListView listLaptime = (ListView)findViewById(R.id.lap_history);
-
- ArrayAdapter<String> lapHistory = (ArrayAdapter<String>)listLaptime.getAdapter();
-
+
+ ListView listLaptime = (ListView) findViewById(R.id.lap_history);
+
+ ArrayAdapter<String> lapHistory = (ArrayAdapter<String>) listLaptime
+ .getAdapter();
+
String strLapNo = Integer.toString(lapHistory.getCount() + 1);
-
+
lapHistory.insert(strLapNo + ": " + laptimeStr, 0);
-
+
m_runningRecord.addRecord(new Date(), null, strLapNo);
-
+
}
public static Record getRecord(long recordTime) {
-
+
return m_runningRecord.getRecord(new Date(recordTime));
-
+
}
+
public static Record getNextRecord(long recordTime) {
-
+
return m_runningRecord.getNextRecord(new Date(recordTime));
-
+
}
+
private void saveRecord() {
if (m_running) {
return;
}
m_runningRecord.save();
-
+
}
-
+
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
Log.d(this.getClass().getName(), "dispatchKeyEvent():"
+ event.toString());
/*
- if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_CENTER
- && event.getAction() == KeyEvent.ACTION_DOWN) {
- if (m_running == true) {
- stop();
- } else {
- start();
- }
- }
- */
+ * if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_CENTER &&
+ * event.getAction() == KeyEvent.ACTION_DOWN) { if (m_running == true) {
+ * stop(); } else { start(); } }
+ */
return super.dispatchKeyEvent(event);
}
- @Override
+
+ @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
- Log.d(this.getClass().getName(), "onKeyDown():" + keyCode );
- if (keyCode == KeyEvent.KEYCODE_BACK){
+ Log.d(this.getClass().getName(), "onKeyDown():" + keyCode);
+ if (keyCode == KeyEvent.KEYCODE_BACK) {
showDialog(Constants.DIALOG_EXIT_ID);
return true;
}
-
- return super.onKeyDown(keyCode, event);
-
+
+ return super.onKeyDown(keyCode, event);
+
}
-
}
\ No newline at end of file