OSDN Git Service

2009/09/28
authorkoike <kazhik@users.sourceforge.jp>
Mon, 28 Sep 2009 08:30:25 +0000 (17:30 +0900)
committerkoike <kazhik@users.sourceforge.jp>
Mon, 28 Sep 2009 08:30:25 +0000 (17:30 +0900)
AndroidManifest.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/RunningRecordProvider.java
src/net/kazhik/android/tokyorunners/TokyoRunners.java

index 369ec79..b2e9288 100755 (executable)
@@ -20,5 +20,5 @@
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
        <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"></uses-permission>
        <uses-permission android:name="android.permission.INTERNET"></uses-permission>
-    <uses-sdk android:minSdkVersion="3" />
+    <uses-sdk android:minSdkVersion="4" />
 </manifest> 
\ No newline at end of file
index df60e17..e05d60b 100755 (executable)
@@ -1,6 +1,8 @@
 package net.kazhik.android.tokyorunners;\r
 \r
+import java.text.SimpleDateFormat;\r
 import java.util.ArrayList;\r
+import java.util.Date;\r
 import java.util.List;\r
 \r
 import android.content.Context;\r
@@ -79,36 +81,36 @@ public class MapMode extends MapActivity implements
 \r
        private class SplitPoints extends ItemizedOverlay<OverlayItem> {\r
 \r
-               private ArrayList<OverlayItem> m_waypoints = new ArrayList<OverlayItem>();\r
+               private ArrayList<OverlayItem> m_splitpoints = new ArrayList<OverlayItem>();\r
                \r
                public SplitPoints(Drawable defaultMarker) {\r
                        super(boundCenterBottom(defaultMarker));\r
                }\r
 \r
-               public void addWayPoint(OverlayItem overlay) {\r
-                   m_waypoints.add(overlay);\r
+               public void addSplitpoint(OverlayItem overlay) {\r
+                   m_splitpoints.add(overlay);\r
                    populate();\r
                }\r
                @Override\r
                protected OverlayItem createItem(int idx) {\r
-                       return m_waypoints.get(idx);\r
+                       return m_splitpoints.get(idx);\r
                }\r
 \r
                @Override\r
                public int size() {\r
-                       return m_waypoints.size();\r
+                       return m_splitpoints.size();\r
                }\r
                \r
+               /*\r
         @Override\r
         protected boolean onTap(int i) {\r
-/*\r
                if (m_waypoints.size() > 0) {\r
                Toast.makeText(MapMode.this,\r
                                m_waypoints.get(i).getSnippet(), Toast.LENGTH_LONG).show();\r
                }\r
-*/\r
                return(true);\r
         }\r
+*/\r
        }\r
        \r
        @Override\r
@@ -123,7 +125,6 @@ public class MapMode extends MapActivity implements
 \r
         m_gestureDetector = new GestureDetector(this, this);\r
 \r
-\r
         SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);\r
         \r
         String strGpsFreq = prefs.getString("gps_frequency", "0");\r
@@ -132,8 +133,6 @@ public class MapMode extends MapActivity implements
         m_locMgr = (LocationManager)getSystemService(Context.LOCATION_SERVICE);\r
        m_locMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, gps_freq * 1000, 1, this);\r
 //     m_locMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);\r
-\r
-\r
        \r
         MapView m = (MapView)findViewById(R.id.mapview);\r
         m.setBuiltInZoomControls(true);\r
@@ -150,7 +149,7 @@ public class MapMode extends MapActivity implements
         myLocationOverlay.enableMyLocation();\r
 \r
         m_mapOverlays.add(myLocationOverlay);\r
-//        m_mapOverlays.add(m_overlayWaypoints);\r
+//        m_mapOverlays.add(m_overlaySplitpoints);\r
 \r
         /*\r
                GeoPoint gp = new GeoPoint(35692134, 139815652);\r
@@ -210,14 +209,13 @@ public class MapMode extends MapActivity implements
                GeoPoint gp = new GeoPoint((int)(location.getLatitude()*1E6),\r
                                         (int)(location.getLongitude()*1E6));\r
                m_controller.animateTo(gp);\r
-               \r
-               \r
+       \r
                /*\r
         SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");\r
         String snippet = "[" + m_userName + "]" + formatter.format(new Date());\r
         OverlayItem ovItem = new OverlayItem(gp, "", snippet);\r
-        m_overlayWaypoints.addWayPoint(ovItem);\r
-        */\r
+        m_overlaySplitpoints.addSplitpoint(ovItem);\r
+               */\r
                \r
                if (m_prevPoint != null) {\r
                        RunningRoute route = new RunningRoute(m_prevPoint, gp);\r
index 2f75b4b..ab68ede 100644 (file)
@@ -17,7 +17,7 @@ import android.widget.ArrayAdapter;
 import android.widget.AdapterView.OnItemClickListener;
 
 public class RunningHistory extends ListActivity implements OnItemClickListener {
-    SimpleDateFormat m_startTimeFormatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");       
+    SimpleDateFormat m_startTimeFormatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -25,8 +25,8 @@ public class RunningHistory extends ListActivity implements OnItemClickListener
 
         Uri uri = Uri.parse(
                        "content://net.kazhik.android.tokyorunners.runningrecordprovider/runningrecords");
-        String[] columns = {"start_time", "distance"};
-        String sortOrder = "current_time desc";
+        String[] columns = {"start_datetime", "distance"};
+        String sortOrder = "current_datetime desc";
         Cursor cursor = managedQuery(uri, columns, null, null, sortOrder);
 
         if (cursor == null) {
@@ -71,7 +71,9 @@ public class RunningHistory extends ListActivity implements OnItemClickListener
                
                Intent returnData = new Intent();
                try {
-                       Date startTime = m_startTimeFormatter.parse(historyArray.getItem(position));
+                       String[] splitStr = historyArray.getItem(position).split(" ");
+                       String dateStr = splitStr[0] + " " + splitStr[1];
+                       Date startTime = m_startTimeFormatter.parse(dateStr);
                        returnData.putExtra("startTime", startTime.getTime());
                        setResult(RESULT_OK, returnData);
                } catch (ParseException e) {
index 991ff84..040b88b 100755 (executable)
@@ -127,8 +127,8 @@ public class RunningRecord {
                        Record rec = (Record)it.next();\r
                        \r
                ContentValues values = new ContentValues();\r
-               values.put("start_time", startTime);\r
-               values.put("current_time", rec.getTime());\r
+               values.put("start_datetime", startTime / 1000 * 1000);\r
+               values.put("current_datetime", rec.getTime() / 1000 * 1000);\r
                values.put("point_name", rec.getName());\r
                if (rec.hasLocation()) {\r
                        if (prevLocation != null) {\r
index 0819b5d..bdc4b41 100755 (executable)
@@ -22,8 +22,8 @@ public class RunningRecordProvider extends ContentProvider {
         public void onCreate(SQLiteDatabase db) {\r
             db.execSQL("CREATE TABLE running_record ("\r
                        + BaseColumns._ID + " INTEGER PRIMARY KEY,"\r
-                       + "start_time INTEGER,"\r
-                       + "current_time INTEGER,"\r
+                       + "start_datetime INTEGER,"\r
+                       + "current_datetime INTEGER,"\r
                        + "point_name TEXT,"\r
                        + "distance INTEGER,"\r
                        + "latitude INTEGER,"\r
index b187cba..cc76ca9 100755 (executable)
@@ -6,8 +6,6 @@ import java.util.Date;
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.Dialog;
-import android.content.ContentResolver;
-import android.content.ContentValues;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
@@ -36,8 +34,9 @@ import android.widget.Chronometer;
 import android.widget.ListView;
 import android.widget.TextView;
 
+
 public class TokyoRunners extends Activity implements
-       LocationListener, GestureDetector.OnGestureListener {
+       LocationListener, GestureDetector.OnDoubleTapListener, GestureDetector.OnGestureListener {
        
        private SharedPreferences m_prefs;
        private LocationManager m_locMgr;
@@ -102,7 +101,6 @@ public class TokyoRunners extends Activity implements
 
         m_runningRecord = new RunningRecord(getContentResolver());
        
-        
         Button btnStartStop = (Button)findViewById(R.id.button_start_stop);
            btnStartStop.setOnClickListener(new StartStopButton());
            
@@ -139,33 +137,51 @@ public class TokyoRunners extends Activity implements
 
         Uri uri = Uri.parse(
                        "content://net.kazhik.android.tokyorunners.runningrecordprovider/runningrecords");
-        String[] columns = {"current_time", "distance", "latitude", "longitude"};
-        String selection = "start_time = ?";
+        String[] columns = {"current_datetime", "distance", "latitude", "longitude"};
+        String selection = "start_datetime = ?";
         String[] selectionArgs = {Long.toString(startTime)};
-        String sortOrder = "current_time desc";
-        Cursor cursor = managedQuery(uri, columns, null, null, sortOrder);
+        String sortOrder = "current_datetime desc";
+        Cursor cursor = managedQuery(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();
+        
         ArrayList<String> history = new ArrayList<String>();
        long currentTime = 0;
        float distance = 0;
        int latitude = 0;
        int longitude = 0;
+       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(0);
-               if (cursor.getCount() > 1) {
-               distance = (float)cursor.getLong(1);
-               latitude = cursor.getInt(2);
-               longitude = cursor.getInt(3);
-               }
+               currentTime = cursor.getLong(cursor.getColumnIndex("current_datetime"));
+               distance = (float)cursor.getLong(cursor.getColumnIndex("distance"));
+               latitude = cursor.getInt(cursor.getColumnIndex("latitude"));
+               longitude = cursor.getInt(cursor.getColumnIndex("longitude"));
                
-               Log.d(this.getClass().getName(),
-                               "currentTime: " + (new Date(currentTime)).toLocaleString() + 
-                               "; distance: " + distance +
-                               "; latitude: " + latitude +
-                               "; longitude: " + longitude);
+               // Elapsed Time
+               elapsedTimeView.setText("");
+               // Latest Laptime
+               lapTimeView.setText("");
+               // Laptime History
+               m_runningRecord.addRecord(new Date(currentTime), null, "");             
+               int historyCount = lapHistory.getCount() + 1;
+               String strLaptime = "laptime " + historyCount + ": "
+                       + DateUtils.formatElapsedTime(currentTime - prevTime / 1000);
+               lapHistory.insert(strLaptime, 0);
+               
+               prevTime = currentTime;
         }
+               // Distance
+               distanceView.setText(Float.toString(distance));
        
     }
     
@@ -233,7 +249,6 @@ public class TokyoRunners extends Activity implements
         case Constants.MENU_HISTORY:
                intent = new Intent(this, RunningHistory.class);
                intent.setAction(Intent.ACTION_VIEW);
-//             intent.putExtra("files", fileList());
                startActivityForResult(intent, Constants.REQUEST_CODE_HISTORY);
                break;
         case Constants.MENU_MAP:
@@ -262,7 +277,6 @@ public class TokyoRunners extends Activity implements
         
         TextView distanceView = (TextView)findViewById(R.id.distance);
         distanceView.setText(Float.toString(distance_km));
-        
                
        }
 
@@ -295,9 +309,7 @@ public class TokyoRunners extends Activity implements
        }
        private void start() {
                m_startTime = System.currentTimeMillis();
-               long startTime = SystemClock.elapsedRealtime();
-        m_elapsedTime.setBase(startTime);
-        m_lapTime.setBase(startTime);
+               reset();
         m_elapsedTime.start();
         m_lapTime.start();
         
@@ -315,6 +327,8 @@ public class TokyoRunners extends Activity implements
                m_running = true;
        }
        private void stop() {
+               lap();
+               
                m_elapsedTime.stop();
                m_lapTime.stop();
                
@@ -442,4 +456,21 @@ public class TokyoRunners extends Activity implements
                Log.d(this.getClass().getName(), "onSingleTapUp():" );
                return false;
        }
+
+       public boolean onDoubleTap(MotionEvent arg0) {
+               Log.d(this.getClass().getName(), "onDoubleTap():" );
+               // TODO Auto-generated method stub
+               return false;
+       }
+
+       public boolean onDoubleTapEvent(MotionEvent arg0) {
+               Log.d(this.getClass().getName(), "onDoubleTapEvent():" );
+               // TODO Auto-generated method stub
+               return false;
+       }
+
+       public boolean onSingleTapConfirmed(MotionEvent arg0) {
+               // TODO Auto-generated method stub
+               return false;
+       }
 }
\ No newline at end of file