From 54cec92035b2e21f1bdcfdcec3ead4950cb70524 Mon Sep 17 00:00:00 2001 From: kazhik Date: Tue, 20 Oct 2009 10:07:59 +0900 Subject: [PATCH] several bugs fixed --- AndroidManifest.xml | 4 +- res/layout/history.xml | 3 +- res/layout/laptime.xml | 1 + res/layout/runningrecord.xml | 1 + res/layout/stopwatch.xml | 2 +- res/values/strings.xml | 6 + src/net/kazhik/android/tokyorunners/Constants.java | 1 + src/net/kazhik/android/tokyorunners/MapMode.java | 103 +++----- .../android/tokyorunners/RunningHistory.java | 94 +++++++- .../kazhik/android/tokyorunners/RunningRecord.java | 28 ++- .../tokyorunners/RunningRecordProvider.java | 13 +- .../kazhik/android/tokyorunners/TokyoRunners.java | 267 +++++++++++---------- 12 files changed, 300 insertions(+), 223 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 35d455f..0ae54bd 100755 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -4,9 +4,10 @@ android:versionName="1.0"> - @@ -25,5 +26,6 @@ + \ No newline at end of file diff --git a/res/layout/history.xml b/res/layout/history.xml index 5760ef6..84fd5a6 100644 --- a/res/layout/history.xml +++ b/res/layout/history.xml @@ -1,8 +1,9 @@ + android:layout_height="fill_parent"> diff --git a/res/layout/stopwatch.xml b/res/layout/stopwatch.xml index e69e5bd..e7c3a39 100755 --- a/res/layout/stopwatch.xml +++ b/res/layout/stopwatch.xml @@ -56,7 +56,7 @@ android:layout_height="fill_parent" android:layout_width="fill_parent" android:paddingLeft="5dp" android:paddingRight="5dp" android:scrollbarSize="5dp" android:scrollbarStyle="outsideOverlay" - android:choiceMode="none" android:clickable="false" /> + android:choiceMode="none" android:clickable="false" android:longClickable="true" /> diff --git a/res/values/strings.xml b/res/values/strings.xml index fcdd037..84781a0 100755 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -12,8 +12,14 @@ Settings Save History + + Delete this + Delete all + Save record Do you want to save the current record? + Exit + Do you want to exit? Yes No net.kazhik.android.tokyorunners.runningrecordprovider diff --git a/src/net/kazhik/android/tokyorunners/Constants.java b/src/net/kazhik/android/tokyorunners/Constants.java index c856a13..060f200 100755 --- a/src/net/kazhik/android/tokyorunners/Constants.java +++ b/src/net/kazhik/android/tokyorunners/Constants.java @@ -10,6 +10,7 @@ public class Constants { public static final int MENU_HISTORY = Menu.FIRST + 5; public static final int DIALOG_SAVE_ID = 4000; + public static final int DIALOG_EXIT_ID = 4001; public static final int REQUEST_CODE_SETTINGS = 1000; public static final int REQUEST_CODE_HISTORY = 1001; diff --git a/src/net/kazhik/android/tokyorunners/MapMode.java b/src/net/kazhik/android/tokyorunners/MapMode.java index 16d45bc..f6b13f6 100755 --- a/src/net/kazhik/android/tokyorunners/MapMode.java +++ b/src/net/kazhik/android/tokyorunners/MapMode.java @@ -16,9 +16,6 @@ import android.graphics.Paint; import android.graphics.Path; import android.graphics.Point; import android.graphics.drawable.Drawable; -import android.location.Location; -import android.location.LocationListener; -import android.location.LocationManager; import android.os.Bundle; import android.preference.PreferenceManager; import android.util.Log; @@ -26,6 +23,8 @@ import android.view.GestureDetector; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnLongClickListener; import android.widget.Toast; import com.google.android.maps.GeoPoint; @@ -38,10 +37,8 @@ import com.google.android.maps.Overlay; import com.google.android.maps.OverlayItem; import com.google.android.maps.Projection; -public class MapMode extends MapActivity implements - LocationListener, GestureDetector.OnGestureListener { +public class MapMode extends MapActivity { - private LocationManager m_locMgr; private MapController m_controller; private GestureDetector m_gestureDetector; private List m_mapOverlays; @@ -81,7 +78,6 @@ public class MapMode extends MapActivity implements } } } - private class SplitPoints extends ItemizedOverlay { private ArrayList m_splitpoints = new ArrayList(); @@ -116,6 +112,22 @@ public class MapMode extends MapActivity implements } } + private class GestureListener extends GestureDetector.SimpleOnGestureListener { + public void onLongPress(MotionEvent arg0) { + Log.d(this.getClass().getName(), "onLongPress():" ); + + finish(); + + } + + public boolean onDoubleTap(MotionEvent arg0) { + Log.d(this.getClass().getName(), "onDoubleTap():" ); + return false; + } + + + } + private BroadcastReceiver m_runningRecordReceiver = new BroadcastReceiver() { @Override @@ -167,20 +179,15 @@ public class MapMode extends MapActivity implements @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + m_gestureDetector = new GestureDetector(new GestureListener()); + setContentView(R.layout.map); - m_gestureDetector = new GestureDetector(this, this); - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); - /* - String strGpsFreq = prefs.getString("gps_frequency", "0"); - int gps_freq =Integer.parseInt(strGpsFreq); + m_userName = prefs.getString("your_name", "Koike Kazuhiko"); - m_locMgr = (LocationManager)getSystemService(Context.LOCATION_SERVICE); - m_locMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, gps_freq * 1000, 1, this); - */ - MapView m = (MapView)findViewById(R.id.mapview); m.setBuiltInZoomControls(true); @@ -197,7 +204,15 @@ public class MapMode extends MapActivity implements m_mapOverlays.add(myLocationOverlay); - m_userName = prefs.getString("your_name", "Koike Kazuhiko"); + m.setOnLongClickListener(new OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + Log.d(this.getClass().getName(), "onLongClick():" ); + finish(); + return false; + } + }); + long recTime = 0; Record rec; @@ -229,7 +244,6 @@ public class MapMode extends MapActivity implements @Override public void onStop() { - //m_locMgr.removeUpdates(this); super.onStop(); } @Override @@ -268,58 +282,5 @@ public class MapMode extends MapActivity implements } return false; } - public void onLocationChanged(Location location) { - Log.d(this.getClass().getName(), - "onLocationChanged(): latitude: " + location.getLatitude() + - "; longitude: " + location.getLongitude() ); - - GeoPoint gp = new GeoPoint((int)(location.getLatitude()*1E6), - (int)(location.getLongitude()*1E6)); - m_controller.animateTo(gp); - if (m_prevPoint != null) { - RunningRoute route = new RunningRoute(m_prevPoint, gp); - m_mapOverlays.add(route); - } - m_prevPoint = gp; - } - - public void onProviderDisabled(String provider) { - } - - public void onProviderEnabled(String provider) { - } - - public void onStatusChanged(String provider, int status, Bundle extras) { - } - - public boolean onDown(MotionEvent e) { - return false; - } - - public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, - float velocityY) { - return false; - } - - public void onLongPress(MotionEvent e) { - Log.d(this.getClass().getName(), "onLongPress()" ); - Intent intent = new Intent(this, TokyoRunners.class); - intent.setAction(Intent.ACTION_VIEW); - startActivity(intent); - - } - - public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, - float distanceY) { - return false; - } - - public void onShowPress(MotionEvent e) { - - } - - public boolean onSingleTapUp(MotionEvent e) { - return false; - } } diff --git a/src/net/kazhik/android/tokyorunners/RunningHistory.java b/src/net/kazhik/android/tokyorunners/RunningHistory.java index 6773d75..ccc581c 100644 --- a/src/net/kazhik/android/tokyorunners/RunningHistory.java +++ b/src/net/kazhik/android/tokyorunners/RunningHistory.java @@ -9,29 +9,58 @@ import java.util.HashMap; import android.app.ListActivity; import android.content.Intent; import android.database.Cursor; -import android.net.Uri; 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; import android.widget.AdapterView.OnItemClickListener; public class RunningHistory extends ListActivity implements OnItemClickListener { - SimpleDateFormat m_startTimeFormatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - HashMap m_startTimeMap = new HashMap(); + private SimpleDateFormat m_startTimeFormatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + private HashMap m_startTimeMap = new HashMap(); + 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); - Uri uri = Uri.parse( - "content://net.kazhik.android.tokyorunners.runningrecordprovider/runningrecords"); String[] columns = { RunningRecordProvider.START_TIME, RunningRecordProvider.DISTANCE}; String sortOrder = RunningRecordProvider.CURRENT_TIME + " desc"; - Cursor cursor = managedQuery(uri, columns, null, null, sortOrder); + Cursor cursor = managedQuery(RunningRecordProvider.REC_URI, columns, null, null, sortOrder); if (cursor == null) { return; @@ -58,13 +87,12 @@ public class RunningHistory extends ListActivity implements OnItemClickListener history.add(rowStr.toString()); } ArrayAdapter historyArray = new ArrayAdapter(this, R.layout.runningrecord, history); -/* - String[] files = getIntent().getStringArrayExtra("files"); - ArrayAdapter historyArray = new ArrayAdapter(this, R.layout.runningrecord, files); -*/ + setListAdapter(historyArray); getListView().setOnItemClickListener(this); + + getListView().setOnCreateContextMenuListener(this); } public void onItemClick(AdapterView parent, View view, int position, long id) { @@ -81,7 +109,9 @@ public class RunningHistory extends ListActivity implements OnItemClickListener String dateStr = splitStr[0] + " " + splitStr[1]; Date startTime = m_startTimeFormatter.parse(dateStr); + returnData.setAction(Intent.ACTION_VIEW); returnData.putExtra("startTime", m_startTimeMap.get(startTime.getTime())); + setResult(RESULT_OK, returnData); } catch (ParseException e) { e.printStackTrace(); @@ -89,6 +119,50 @@ 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) { + super.onCreateContextMenu(menu, v, menuInfo); + menu.add(0, MENU_DELETE_THIS, 0, R.string.contextmenu_deletethis); + menu.add(0, MENU_DELETE_ALL, 0, R.string.contextmenu_deleteall); + } + + public boolean onContextItemSelected(MenuItem item) { + AdapterContextMenuInfo info = (AdapterContextMenuInfo)item.getMenuInfo(); + ArrayAdapter historyArray = (ArrayAdapter)getListAdapter(); + int position = info.position; + switch (item.getItemId()) { + case MENU_DELETE_THIS: + try { + String[] splitStr = historyArray.getItem(position).split(" "); + String dateStr = splitStr[0] + " " + splitStr[1]; + Date startTime = m_startTimeFormatter.parse(dateStr); + + String selection = RunningRecordProvider.START_TIME + " = ?"; + String[] selectionArgs = {Long.toString(startTime.getTime())}; + + getContentResolver().delete(RunningRecordProvider.REC_URI, selection, selectionArgs); + + historyArray.remove(historyArray.getItem(position)); + } catch (ParseException e) { + e.printStackTrace(); + } + return true; + case MENU_DELETE_ALL: + getContentResolver().delete(RunningRecordProvider.REC_URI, null, null); + historyArray.clear(); + return true; + default: + return super.onContextItemSelected(item); + } + } } diff --git a/src/net/kazhik/android/tokyorunners/RunningRecord.java b/src/net/kazhik/android/tokyorunners/RunningRecord.java index 763ca5f..c4c8e72 100755 --- a/src/net/kazhik/android/tokyorunners/RunningRecord.java +++ b/src/net/kazhik/android/tokyorunners/RunningRecord.java @@ -11,6 +11,7 @@ import android.content.ContentResolver; import android.content.ContentValues; import android.location.Location; import android.net.Uri; +import android.util.Log; public class RunningRecord { private ArrayList m_recordList = new ArrayList(); @@ -43,6 +44,13 @@ public class RunningRecord { return pointName; } + public void clearRecord() { + m_distance = 0; + m_lastSplit = 0; + m_prevLocation = null; + m_recordList.clear(); + } + public Record getRecord(Date date) { Record rec = null; @@ -128,20 +136,24 @@ public class RunningRecord { for (Iterator it = m_recordList.iterator(); it.hasNext();) { Record rec = (Record)it.next(); - ContentValues values = new ContentValues(); - values.put("start_datetime", startTime); - values.put("current_datetime", rec.getTime()); - values.put("point_name", rec.getName()); + values.put(RunningRecordProvider.START_TIME, startTime); + values.put(RunningRecordProvider.CURRENT_TIME, rec.getTime()); + values.put(RunningRecordProvider.POINT_NAME, rec.getName()); if (rec.hasLocation()) { if (prevLocation != null) { distance += prevLocation.distanceTo(rec.getLocation()); } - values.put("distance", distance); - values.put("latitude", rec.getLatitudeE6()); - values.put("longitude", rec.getLongitudeE6()); + values.put(RunningRecordProvider.DISTANCE, distance); + } + values.put(RunningRecordProvider.LATITUDE, rec.getLatitudeE6()); + values.put(RunningRecordProvider.LONGITUDE, rec.getLongitudeE6()); + + try { + m_contentResolver.insert(RunningRecordProvider.REC_URI, values); + } catch (IllegalArgumentException e) { + Log.e(this.getClass().getName(), e.getMessage()); } - m_contentResolver.insert(Uri.parse("content://net.kazhik.android.tokyorunners.runningrecordprovider/runningrecords"), values); } } diff --git a/src/net/kazhik/android/tokyorunners/RunningRecordProvider.java b/src/net/kazhik/android/tokyorunners/RunningRecordProvider.java index fc15e07..077a91d 100755 --- a/src/net/kazhik/android/tokyorunners/RunningRecordProvider.java +++ b/src/net/kazhik/android/tokyorunners/RunningRecordProvider.java @@ -23,6 +23,13 @@ public class RunningRecordProvider extends ContentProvider { public static final String LATITUDE = "latitude"; public static final String LONGITUDE = "longitude"; + private static final String AUTHORITY = "net.kazhik.android.tokyorunners.runningrecordprovider"; + private static final String REC_PATH = "runningrecords"; + public static final Uri REC_URI = Uri.parse("content://" + AUTHORITY + "/" + REC_PATH); + private static final int RUNNING_RECORDS = 1; + private DatabaseHelper m_databaseHelper; + private UriMatcher m_uriMatcher; + private static class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context) { super(context, DB_NAME, null, 1); @@ -48,16 +55,12 @@ public class RunningRecordProvider extends ContentProvider { } } - private static final String AUTHORITY = "net.kazhik.android.tokyorunners.runningrecordprovider"; - private static final int RUNNING_RECORDS = 1; - private DatabaseHelper m_databaseHelper; - private UriMatcher m_uriMatcher; @Override public boolean onCreate() { m_databaseHelper = new DatabaseHelper(getContext()); m_uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); - m_uriMatcher.addURI(AUTHORITY, TABLE_NAME, RUNNING_RECORDS); + m_uriMatcher.addURI(AUTHORITY, REC_PATH, RUNNING_RECORDS); return true; } diff --git a/src/net/kazhik/android/tokyorunners/TokyoRunners.java b/src/net/kazhik/android/tokyorunners/TokyoRunners.java index 63723f5..df75e79 100755 --- a/src/net/kazhik/android/tokyorunners/TokyoRunners.java +++ b/src/net/kazhik/android/tokyorunners/TokyoRunners.java @@ -1,6 +1,5 @@ package net.kazhik.android.tokyorunners; -import java.util.ArrayList; import java.util.Date; import android.app.Activity; @@ -11,23 +10,26 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.database.Cursor; +import android.location.GpsStatus; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.location.LocationProvider; -import android.net.Uri; import android.os.Bundle; +import android.os.Debug; import android.os.SystemClock; import android.preference.PreferenceManager; import android.text.format.DateUtils; import android.util.Log; import android.view.GestureDetector; +import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; import android.view.View.OnClickListener; +import android.view.View.OnLongClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.Chronometer; @@ -36,7 +38,6 @@ import android.widget.TextView; public class TokyoRunners extends Activity implements -// LocationListener, GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener { LocationListener { private SharedPreferences m_prefs; @@ -52,14 +53,11 @@ public class TokyoRunners extends Activity implements private static RunningRecord m_runningRecord; - class GestureListener extends GestureDetector.SimpleOnGestureListener { + private class GestureListener extends GestureDetector.SimpleOnGestureListener { public void onLongPress(MotionEvent arg0) { Log.d(this.getClass().getName(), "onLongPress():" ); - Intent intent = new Intent(TokyoRunners.this, MapMode.class); - intent.setAction(Intent.ACTION_VIEW); - startActivity(intent); - + showMap(); } public boolean onDoubleTap(MotionEvent arg0) { @@ -93,34 +91,47 @@ public class TokyoRunners extends Activity implements public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); -// m_gestureDetector = new GestureDetector(this); m_gestureDetector = new GestureDetector(new GestureListener()); - if (m_gestureDetector.isLongpressEnabled() == false) { - Log.d(this.getClass().getName(), "Longpress disabled"); - } else { - Log.d(this.getClass().getName(), "Longpress enabled"); - } - - setContentView(R.layout.stopwatch); + Debug.startMethodTracing("tokyorunners"); + m_runningRecord = new RunningRecord(getContentResolver()); m_prefs = PreferenceManager.getDefaultSharedPreferences(this); 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")); - //int interval = m_prefs.getInt("split_interval", 5); - m_runningRecord.setSplitInterval(interval); - } + + m_locMgr.addGpsStatusListener(new GpsStatus.Listener() { + @Override + public void onGpsStatusChanged(int event) { + switch (event) { + case GpsStatus.GPS_EVENT_STARTED: + Log.d(this.getClass().getName(), "GPS_EVENT_STARTED" ); + break; + case GpsStatus.GPS_EVENT_STOPPED: + Log.d(this.getClass().getName(), "GPS_EVENT_STOPPED" ); + break; + case GpsStatus.GPS_EVENT_FIRST_FIX: + Log.d(this.getClass().getName(), "GPS_EVENT_FIRST_FIX" ); + break; + default: + break; + } + } + }); } @@ -138,12 +149,20 @@ public class TokyoRunners extends Activity implements ArrayAdapter arrayAdapter = new ArrayAdapter(this, R.layout.laptime); lvLaptime.setAdapter(arrayAdapter); + + lvLaptime.setOnLongClickListener(new OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + Log.d(this.getClass().getName(), "onLongClick():" ); + showMap(); + return false; + } + }); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } - @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); @@ -162,18 +181,25 @@ public class TokyoRunners extends Activity implements } } + private void showMap() { + Intent intent = new Intent(TokyoRunners.this, MapMode.class); + intent.setAction(Intent.ACTION_VIEW); + startActivity(intent); + + + } + private void readHistory(long startTime) { - Uri uri = Uri.parse( - "content://net.kazhik.android.tokyorunners.runningrecordprovider/runningrecords"); String[] columns = { RunningRecordProvider.CURRENT_TIME, RunningRecordProvider.LATITUDE, - RunningRecordProvider.LONGITUDE}; + RunningRecordProvider.LONGITUDE, + RunningRecordProvider.POINT_NAME}; String selection = RunningRecordProvider.START_TIME + " = ?"; String[] selectionArgs = {Long.toString(startTime)}; String sortOrder = RunningRecordProvider.CURRENT_TIME + " desc"; - Cursor cursor = managedQuery(uri, columns, selection, selectionArgs, sortOrder); + Cursor cursor = managedQuery(RunningRecordProvider.REC_URI, columns, selection, selectionArgs, sortOrder); if (cursor == null) { return; } @@ -182,33 +208,36 @@ public class TokyoRunners extends Activity implements ListView listLaptime = (ListView)findViewById(R.id.lap_history); ArrayAdapter lapHistory = (ArrayAdapter)listLaptime.getAdapter(); - ArrayList history = new ArrayList(); 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); - String laptimeLabel = ""; - String laptimeValue = ""; 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, ""); - if (currentTime != startTime) { - int historyCount = lapHistory.getCount() + 1; - laptimeLabel = "laptime " + historyCount + ": "; - laptimeValue = DateUtils.formatElapsedTime((currentTime - prevTime) / 1000); - lapHistory.insert(laptimeLabel + laptimeValue, 0); + m_runningRecord.addRecord(new Date(currentTime), loc, pointName); + if (pointName.length() == 0) { + } else if (currentTime != startTime) { + 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; @@ -216,7 +245,7 @@ public class TokyoRunners extends Activity implements // Elapsed Time elapsedTimeView.setText(DateUtils.formatElapsedTime((currentTime - startTime) / 1000)); // Latest Laptime - lapTimeView.setText(laptimeValue); + lapTimeView.setText(DateUtils.formatElapsedTime((currentTime - prevTime) / 1000)); // Distance distanceView.setText(Float.toString(m_runningRecord.getDistance())); @@ -226,6 +255,15 @@ public class TokyoRunners extends Activity implements @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(); } @@ -269,6 +307,25 @@ public class TokyoRunners extends Activity implements }); 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; } @@ -305,12 +362,16 @@ public class TokyoRunners extends Activity implements return false; } public void onLocationChanged(Location location) { - Log.d(this.getClass().getName(), - "onLocationChanged(): latitude: " + location.getLatitude() + - "; longitude: " + location.getLongitude() ); + ExLog.put(location.toString()); - Date currentDate = new Date(); - String pointName = m_runningRecord.addRecord(currentDate, location, ""); + // 走行中なら記録を追加 + if (m_running == false) { + return; + } + Date recDate = new Date(location.getTime()); + String pointName = m_runningRecord.addRecord(recDate, location, ""); + + // ラップタイム履歴 if (pointName.length() > 0) { String laptimeStr = calculateSplitAndLap(); @@ -321,24 +382,28 @@ public class TokyoRunners extends Activity implements lapHistory.insert(strLaptime, 0); } - + + // 距離 float distance_km = m_runningRecord.getDistance(); TextView distanceView = (TextView)findViewById(R.id.distance); distanceView.setText(Float.toString(distance_km)); - + + // MapModeに通知 Intent intent = new Intent("RunningRecord"); - intent.putExtra("RunningRecord", currentDate.getTime()); + intent.putExtra("RunningRecord", location.getTime()); sendBroadcast(intent); } public void onProviderDisabled(String provider) { - + Log.d(this.getClass().getName(), "onProviderDisabled()"); + m_locMgr.removeUpdates(this); + } public void onProviderEnabled(String provider) { - + Log.d(this.getClass().getName(), "onProviderEnabled()"); } public void onStatusChanged(String provider, int status, Bundle extras) { @@ -368,8 +433,7 @@ public class TokyoRunners extends Activity implements if (m_useGPS) { String strGpsFreq = m_prefs.getString("gps_frequency", "0"); int gps_freq =Integer.parseInt(strGpsFreq); - //int gps_freq = m_prefs.getInt("gps_frequency", 0); - m_locMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, gps_freq * 1000, 1, this); + m_locMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, gps_freq * 1000, 0, this); } m_runningRecord.addRecord(new Date(), null, ""); @@ -385,15 +449,11 @@ public class TokyoRunners extends Activity implements m_running = true; } private void stop() { - lap(); + m_runningRecord.addRecord(new Date(), null, ""); m_elapsedTime.stop(); m_lapTime.stop(); - if (m_useGPS) { - m_locMgr.removeUpdates(this); - } - Button startStopButton = (Button)findViewById(R.id.button_start_stop); Button resetLapButton = (Button)findViewById(R.id.button_reset_lap); startStopButton.setText(R.string.button_start); @@ -413,6 +473,8 @@ public class TokyoRunners extends Activity implements ListView listLaptime = (ListView)findViewById(R.id.lap_history); ArrayAdapter lapHistory = (ArrayAdapter)listLaptime.getAdapter(); lapHistory.clear(); + + m_runningRecord.clearRecord(); } private String calculateSplitAndLap() { long elapsedRealTime = SystemClock.elapsedRealtime(); @@ -431,18 +493,13 @@ public class TokyoRunners extends Activity implements ListView listLaptime = (ListView)findViewById(R.id.lap_history); - m_runningRecord.addRecord(new Date(), null, ""); - ArrayAdapter lapHistory = (ArrayAdapter)listLaptime.getAdapter(); - int historyCount = lapHistory.getCount() + 1; + String strLapNo = Integer.toString(lapHistory.getCount() + 1); - String strLaptime = "---: " + laptimeStr; - if (m_autosplit) { -// strLaptime = "laptime " + historyCount + ": " + laptimeStr; // TODO: i18n - } + lapHistory.insert(strLapNo + ": " + laptimeStr, 0); - lapHistory.insert(strLaptime, 0); + m_runningRecord.addRecord(new Date(), null, strLapNo); } @@ -462,29 +519,33 @@ public class TokyoRunners extends Activity implements } m_runningRecord.save(); -/* - FileOutputStream outFile = null; - OutputStreamWriter stWriter = null; - try { - SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd_HH_mm_ss"); - outFile = openFileOutput(formatter.format(new Date(m_startTime)) + ".xml", MODE_PRIVATE); - stWriter = new OutputStreamWriter(outFile); - m_runningRecord.save(stWriter); - } catch (IOException e) { - } finally { - try { - if (stWriter != null) { - stWriter.close(); - } - if (outFile != null) { - outFile.close(); - } - } catch (IOException e) { + } + + @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(); } } -*/ + return super.dispatchKeyEvent(event); + } + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + Log.d(this.getClass().getName(), "onKeyDown():" + keyCode ); + if (keyCode == KeyEvent.KEYCODE_BACK){ + showDialog(Constants.DIALOG_EXIT_ID); + return true; + } + + return super.onKeyDown(keyCode, event); + } - @Override public boolean onTouchEvent(MotionEvent event) { @@ -495,50 +556,4 @@ public class TokyoRunners extends Activity implements return super.onTouchEvent(event); } - /* - public boolean onDown(MotionEvent arg0) { - Log.d(this.getClass().getName(), "onDown():" ); - return false; - } - public boolean onFling(MotionEvent arg0, MotionEvent arg1, float arg2, - float arg3) { - Log.d(this.getClass().getName(), "onFling():" ); - return false; - } - public void onLongPress(MotionEvent arg0) { - Log.d(this.getClass().getName(), "onLongPress():" ); - - Intent intent = new Intent(TokyoRunners.this, MapMode.class); - intent.setAction(Intent.ACTION_VIEW); - startActivity(intent); - - } - public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2, - float arg3) { - Log.d(this.getClass().getName(), "onScroll():" ); - return false; - } - public void onShowPress(MotionEvent arg0) { - Log.d(this.getClass().getName(), "onShowPress():" ); - } - public boolean onSingleTapUp(MotionEvent arg0) { - Log.d(this.getClass().getName(), "onSingleTapUp():" ); - return false; - } - - public boolean onDoubleTap(MotionEvent arg0) { - Log.d(this.getClass().getName(), "onDoubleTap():" ); - return false; - } - - public boolean onDoubleTapEvent(MotionEvent arg0) { - Log.d(this.getClass().getName(), "onDoubleTapEvent():" ); - return false; - } - - public boolean onSingleTapConfirmed(MotionEvent arg0) { - Log.d(this.getClass().getName(), "onSingleTapConfirmed():" ); - return false; - } - */ } \ No newline at end of file -- 2.11.0