OSDN Git Service

several bugs fixed
authorkazhik <kazhik@gmail.com>
Tue, 27 Oct 2009 01:52:46 +0000 (10:52 +0900)
committerkazhik <kazhik@gmail.com>
Tue, 27 Oct 2009 01:52:46 +0000 (10:52 +0900)
AndroidManifest.xml
res/layout/map.xml
src/net/kazhik/android/tokyorunners/MapMode.java
src/net/kazhik/android/tokyorunners/RunningHistory.java
src/net/kazhik/android/tokyorunners/RunningRecord.java
src/net/kazhik/android/tokyorunners/TokyoRunners.java

index 0ae54bd..03e4aac 100755 (executable)
@@ -27,5 +27,5 @@
        <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"></uses-permission>
        <uses-permission android:name="android.permission.INTERNET"></uses-permission>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
-       <uses-sdk android:minSdkVersion="3" />
+       <uses-sdk android:minSdkVersion="4" />
 </manifest> 
\ No newline at end of file
index fb7e756..8c56596 100755 (executable)
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+        android:id="@+id/mapmode"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     >
index 13e9c56..a3b7efe 100755 (executable)
@@ -22,11 +22,9 @@ import android.graphics.drawable.Drawable;
 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
@@ -42,12 +40,10 @@ import com.google.android.maps.OverlayItem;
 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
@@ -55,7 +51,7 @@ public class MapMode extends MapActivity {
                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
@@ -64,39 +60,41 @@ public class MapMode extends MapActivity {
                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
@@ -104,32 +102,21 @@ public class MapMode extends MapActivity {
                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
@@ -137,10 +124,15 @@ public class MapMode extends MapActivity {
                @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
@@ -150,20 +142,20 @@ public class MapMode extends MapActivity {
                        }\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
@@ -174,155 +166,143 @@ public class MapMode extends MapActivity {
 \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
index ccc581c..23dcd1f 100644 (file)
@@ -10,15 +10,11 @@ import android.app.ListActivity;
 import android.content.Intent;
 import android.database.Cursor;
 import android.os.Bundle;
-import android.util.Log;
 import android.view.ContextMenu;
-import android.view.GestureDetector;
 import android.view.Menu;
 import android.view.MenuItem;
-import android.view.MotionEvent;
 import android.view.View;
 import android.view.ContextMenu.ContextMenuInfo;
-import android.view.View.OnCreateContextMenuListener;
 import android.widget.AdapterView;
 import android.widget.ArrayAdapter;
 import android.widget.AdapterView.AdapterContextMenuInfo;
@@ -27,35 +23,17 @@ import android.widget.AdapterView.OnItemClickListener;
 public class RunningHistory extends ListActivity implements OnItemClickListener {
     private SimpleDateFormat m_startTimeFormatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
     private HashMap<Long, Long> m_startTimeMap = new HashMap<Long, Long>();
-       private GestureDetector m_gestureDetector;
        
        private static final int MENU_DELETE_THIS = Menu.FIRST + 200;
        private static final int MENU_DELETE_ALL = Menu.FIRST + 201;
        
-       private class GestureListener extends GestureDetector.SimpleOnGestureListener {
-               public void onLongPress(MotionEvent arg0) {
-                       Log.d(this.getClass().getName(), "onLongPress():" );
-                       
-                       
-               }
-
-               public boolean onDoubleTap(MotionEvent arg0) {
-                       Log.d(this.getClass().getName(), "onDoubleTap():" );
-                       return false;
-               }
-
-               
-       }
-    
-    
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         
-        m_gestureDetector = new GestureDetector(new GestureListener());
-        
         setContentView(R.layout.history);
 
+        // 履歴データを読み込む
         String[] columns = {
                        RunningRecordProvider.START_TIME,
                        RunningRecordProvider.DISTANCE};
@@ -89,20 +67,17 @@ public class RunningHistory extends ListActivity implements OnItemClickListener
         ArrayAdapter<String> historyArray = new ArrayAdapter<String>(this, R.layout.runningrecord, history);
 
         setListAdapter(historyArray);
-        
+
+  
+        // イベントリスナを登録
         getListView().setOnItemClickListener(this);
         
                getListView().setOnCreateContextMenuListener(this);
     }
 
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
-               Log.d(this.getClass().getName(),
-                               "onItemClick(): position: " + position);
         ArrayAdapter<String> historyArray = (ArrayAdapter<String>)getListAdapter();
         
-               Log.d(this.getClass().getName(),
-                               "onItemClick():  " + historyArray.getItem(position));
-               
                Intent returnData = new Intent();
                try {
                        String[] splitStr = historyArray.getItem(position).split(" ");
@@ -119,14 +94,6 @@ public class RunningHistory extends ListActivity implements OnItemClickListener
                finish();
                
        }
-    @Override
-    public boolean onTouchEvent(MotionEvent event) {
-               Log.d(this.getClass().getName(), "onTouchEvent():" + event.getAction() );
-        if (m_gestureDetector.onTouchEvent(event)) {
-               return true;
-        }
-        return super.onTouchEvent(event);
-    }
 
        public void onCreateContextMenu(ContextMenu menu, View v,
                        ContextMenuInfo menuInfo) {
index c4c8e72..752074f 100755 (executable)
@@ -10,29 +10,34 @@ import java.util.Iterator;
 import android.content.ContentResolver;\r
 import android.content.ContentValues;\r
 import android.location.Location;\r
-import android.net.Uri;\r
 import android.util.Log;\r
 \r
 public class RunningRecord {\r
        private ArrayList<Record> m_recordList = new ArrayList<Record>();\r
-       private int m_distance = 0;\r
+       private float m_distance = 0;\r
        private Location m_prevLocation = null;\r
        private int m_splitInterval = 0;\r
        private int m_lastSplit = 0;\r
        private String m_distanceUnit = "km";\r
        private ContentResolver m_contentResolver;\r
 \r
+       public RunningRecord() {\r
+               \r
+       }\r
        public RunningRecord(ContentResolver contentResolver) {\r
                m_contentResolver = contentResolver;\r
        }\r
        public String addRecord(Date date, Location loc, String pointName) {\r
-\r
+               if (loc != null) {\r
+                       Log.d(this.getClass().getName(), "Latitude:" + loc.getLatitude() + "; Longitude:" + loc.getLongitude());\r
+               }\r
+               \r
                if (m_prevLocation != null && loc != null) {\r
-                       m_distance += (int)m_prevLocation.distanceTo(loc);\r
+                       m_distance += m_prevLocation.distanceTo(loc);\r
                }\r
                \r
                if (m_splitInterval > 0 && m_distance > m_lastSplit + m_splitInterval && pointName.length() == 0 ) {\r
-                       pointName = Float.toString(getDistance()) + m_distanceUnit;\r
+                       pointName = getDistanceString() + m_distanceUnit;\r
                        m_lastSplit += m_splitInterval;\r
                }\r
                \r
@@ -43,6 +48,10 @@ public class RunningRecord {
                \r
                return pointName;\r
        }\r
+       public Location getPrevLocation() {\r
+               return m_prevLocation;\r
+       }\r
+               \r
        \r
        public void clearRecord() {\r
                m_distance = 0;\r
@@ -81,10 +90,13 @@ public class RunningRecord {
        public void setSplitInterval(int interval) {\r
                m_splitInterval = interval * 1000;\r
        }\r
-       \r
-       public float getDistance() {\r
-               return (float)m_distance / 1000;\r
+\r
+       public String getDistanceString() {\r
+               int distance_m = (int)m_distance;\r
+               return Float.toString((float)distance_m / 1000);\r
        }\r
+       \r
+\r
        public String getDistanceUnit() {\r
                return m_distanceUnit;\r
        }\r
index 2793178..6399f2b 100755 (executable)
@@ -9,6 +9,7 @@ import android.content.Context;
 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;
@@ -34,23 +35,22 @@ import android.widget.ListView;
 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();
@@ -58,8 +58,9 @@ public class TokyoRunners extends TabActivity implements
                                start();
                        }
                }
-    }; 
-    class ResetLapButton implements OnClickListener {
+       };
+
+       class ResetLapButton implements OnClickListener {
                public void onClick(View v) {
                        if (m_running == true) {
                                lap();
@@ -67,295 +68,335 @@ public class TokyoRunners extends TabActivity implements
                                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);
 
        }
 
@@ -386,23 +427,18 @@ public class TokyoRunners extends TabActivity implements
                        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);
@@ -411,14 +447,15 @@ public class TokyoRunners extends TabActivity implements
                }
                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);
@@ -426,91 +463,94 @@ public class TokyoRunners extends TabActivity implements
                        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