android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name"
android:debuggable="true">
- <provider android:name="RunningRecordProvider"
+ <provider android:name=".RunningRecordProvider"
android:authorities="net.kazhik.android.tokyorunners.runningrecordprovider" />
<activity android:name=".TokyoRunners" android:label="@string/app_name"
+ android:launchMode="singleTask"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<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-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-sdk android:minSdkVersion="3" />
</manifest>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
+ android:background="#696969"
android:layout_width="wrap_content"
- android:layout_height="wrap_content">
+ android:layout_height="fill_parent">
<ListView
android:id="@+id/android:list"
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
+ android:background="#696969"
android:textSize="24dp"
android:textColor="#7CFC00"
android:gravity="right"
xmlns:android="http://schemas.android.com/apk/res/android"
android:textSize="24dp"
android:layout_width="fill_parent"
+ android:textColor="#7CFC00"
android:layout_height="50dp">
</TextView>
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" />
</RelativeLayout>
<string name="menu_setting">Settings</string>
<string name="menu_save">Save</string>
<string name="menu_history">History</string>
+
+ <string name="contextmenu_deletethis">Delete this</string>
+ <string name="contextmenu_deleteall">Delete all</string>
+
<string name="dialog_save_title">Save record</string>
<string name="dialog_save_message">Do you want to save the current record?</string>
+ <string name="dialog_exit_title">Exit</string>
+ <string name="dialog_exit_message">Do you want to exit?</string>
<string name="dialog_yes">Yes</string>
<string name="dialog_no">No</string>
<string name="provider_record">net.kazhik.android.tokyorunners.runningrecordprovider</string>
public static final int MENU_HISTORY = Menu.FIRST + 5;\r
\r
public static final int DIALOG_SAVE_ID = 4000;\r
+ public static final int DIALOG_EXIT_ID = 4001;\r
\r
public static final int REQUEST_CODE_SETTINGS = 1000;\r
public static final int REQUEST_CODE_HISTORY = 1001;\r
import android.graphics.Path;\r
import android.graphics.Point;\r
import android.graphics.drawable.Drawable;\r
-import android.location.Location;\r
-import android.location.LocationListener;\r
-import android.location.LocationManager;\r
import android.os.Bundle;\r
import android.preference.PreferenceManager;\r
import android.util.Log;\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
\r
import com.google.android.maps.GeoPoint;\r
import com.google.android.maps.OverlayItem;\r
import com.google.android.maps.Projection;\r
\r
-public class MapMode extends MapActivity implements\r
- LocationListener, GestureDetector.OnGestureListener {\r
+public class MapMode extends MapActivity {\r
\r
- private LocationManager m_locMgr;\r
private MapController m_controller;\r
private GestureDetector m_gestureDetector;\r
private List<Overlay> m_mapOverlays;\r
}\r
}\r
}\r
-\r
private class SplitPoints extends ItemizedOverlay<OverlayItem> {\r
\r
private ArrayList<OverlayItem> m_splitpoints = new ArrayList<OverlayItem>();\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
+ }\r
+\r
+ public boolean onDoubleTap(MotionEvent arg0) {\r
+ Log.d(this.getClass().getName(), "onDoubleTap():" );\r
+ return false;\r
+ }\r
+\r
+ \r
+ }\r
+\r
\r
private BroadcastReceiver m_runningRecordReceiver = new BroadcastReceiver() {\r
@Override\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
- m_gestureDetector = new GestureDetector(this, this);\r
-\r
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);\r
\r
- /*\r
- String strGpsFreq = prefs.getString("gps_frequency", "0");\r
- int gps_freq =Integer.parseInt(strGpsFreq);\r
+ m_userName = prefs.getString("your_name", "Koike Kazuhiko");\r
\r
- m_locMgr = (LocationManager)getSystemService(Context.LOCATION_SERVICE);\r
- m_locMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, gps_freq * 1000, 1, this);\r
- */\r
- \r
MapView m = (MapView)findViewById(R.id.mapview);\r
m.setBuiltInZoomControls(true);\r
\r
\r
m_mapOverlays.add(myLocationOverlay);\r
\r
- m_userName = prefs.getString("your_name", "Koike Kazuhiko");\r
+ m.setOnLongClickListener(new OnLongClickListener() {\r
+ @Override\r
+ public boolean onLongClick(View v) {\r
+ Log.d(this.getClass().getName(), "onLongClick():" );\r
+ finish();\r
+ return false;\r
+ }\r
+ });\r
+\r
\r
long recTime = 0;\r
Record rec;\r
\r
@Override\r
public void onStop() {\r
- //m_locMgr.removeUpdates(this);\r
super.onStop();\r
}\r
@Override\r
}\r
return false;\r
} \r
- public void onLocationChanged(Location location) {\r
- Log.d(this.getClass().getName(),\r
- "onLocationChanged(): latitude: " + location.getLatitude() + \r
- "; longitude: " + location.getLongitude() );\r
- \r
- GeoPoint gp = new GeoPoint((int)(location.getLatitude()*1E6),\r
- (int)(location.getLongitude()*1E6));\r
- m_controller.animateTo(gp);\r
\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
-\r
- public void onProviderDisabled(String provider) {\r
- }\r
-\r
- public void onProviderEnabled(String provider) {\r
- }\r
-\r
- public void onStatusChanged(String provider, int status, Bundle extras) {\r
- }\r
-\r
- public boolean onDown(MotionEvent e) {\r
- return false;\r
- }\r
-\r
- public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,\r
- float velocityY) {\r
- return false;\r
- }\r
-\r
- public void onLongPress(MotionEvent e) {\r
- Log.d(this.getClass().getName(), "onLongPress()" );\r
- Intent intent = new Intent(this, TokyoRunners.class);\r
- intent.setAction(Intent.ACTION_VIEW);\r
- startActivity(intent);\r
- \r
- }\r
-\r
- public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,\r
- float distanceY) {\r
- return false;\r
- }\r
-\r
- public void onShowPress(MotionEvent e) {\r
- \r
- }\r
-\r
- public boolean onSingleTapUp(MotionEvent e) {\r
- return false;\r
- }\r
}\r
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<Long, Long> m_startTimeMap = new HashMap<Long, Long>();
+ 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);
- 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;
history.add(rowStr.toString());
}
ArrayAdapter<String> historyArray = new ArrayAdapter<String>(this, R.layout.runningrecord, history);
-/*
- String[] files = getIntent().getStringArrayExtra("files");
- ArrayAdapter<String> historyArray = new ArrayAdapter<String>(this, R.layout.runningrecord, files);
-*/
+
setListAdapter(historyArray);
getListView().setOnItemClickListener(this);
+
+ getListView().setOnCreateContextMenuListener(this);
}
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
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();
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<String> historyArray = (ArrayAdapter<String>)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);
+ }
+ }
}
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
return pointName;\r
}\r
\r
+ public void clearRecord() {\r
+ m_distance = 0;\r
+ m_lastSplit = 0;\r
+ m_prevLocation = null;\r
+ m_recordList.clear();\r
+ }\r
+ \r
public Record getRecord(Date date) {\r
Record rec = null;\r
\r
\r
for (Iterator<Record> it = m_recordList.iterator(); it.hasNext();) {\r
Record rec = (Record)it.next();\r
- \r
ContentValues values = new ContentValues();\r
- values.put("start_datetime", startTime);\r
- values.put("current_datetime", rec.getTime());\r
- values.put("point_name", rec.getName());\r
+ values.put(RunningRecordProvider.START_TIME, startTime);\r
+ values.put(RunningRecordProvider.CURRENT_TIME, rec.getTime());\r
+ values.put(RunningRecordProvider.POINT_NAME, rec.getName());\r
if (rec.hasLocation()) {\r
if (prevLocation != null) {\r
distance += prevLocation.distanceTo(rec.getLocation());\r
}\r
- values.put("distance", distance);\r
- values.put("latitude", rec.getLatitudeE6());\r
- values.put("longitude", rec.getLongitudeE6());\r
+ values.put(RunningRecordProvider.DISTANCE, distance);\r
+ }\r
+ values.put(RunningRecordProvider.LATITUDE, rec.getLatitudeE6());\r
+ values.put(RunningRecordProvider.LONGITUDE, rec.getLongitudeE6());\r
+ \r
+ try {\r
+ m_contentResolver.insert(RunningRecordProvider.REC_URI, values);\r
+ } catch (IllegalArgumentException e) {\r
+ Log.e(this.getClass().getName(), e.getMessage());\r
}\r
- m_contentResolver.insert(Uri.parse("content://net.kazhik.android.tokyorunners.runningrecordprovider/runningrecords"), values);\r
}\r
}\r
\r
public static final String LATITUDE = "latitude";\r
public static final String LONGITUDE = "longitude";\r
\r
+ private static final String AUTHORITY = "net.kazhik.android.tokyorunners.runningrecordprovider";\r
+ private static final String REC_PATH = "runningrecords";\r
+ public static final Uri REC_URI = Uri.parse("content://" + AUTHORITY + "/" + REC_PATH);\r
+ private static final int RUNNING_RECORDS = 1;\r
+ private DatabaseHelper m_databaseHelper;\r
+ private UriMatcher m_uriMatcher;\r
+\r
private static class DatabaseHelper extends SQLiteOpenHelper {\r
DatabaseHelper(Context context) {\r
super(context, DB_NAME, null, 1);\r
}\r
}\r
\r
- private static final String AUTHORITY = "net.kazhik.android.tokyorunners.runningrecordprovider";\r
- private static final int RUNNING_RECORDS = 1;\r
- private DatabaseHelper m_databaseHelper;\r
- private UriMatcher m_uriMatcher;\r
\r
@Override\r
public boolean onCreate() {\r
m_databaseHelper = new DatabaseHelper(getContext());\r
m_uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);\r
- m_uriMatcher.addURI(AUTHORITY, TABLE_NAME, RUNNING_RECORDS);\r
+ m_uriMatcher.addURI(AUTHORITY, REC_PATH, RUNNING_RECORDS);\r
return true;\r
}\r
\r
package net.kazhik.android.tokyorunners;
-import java.util.ArrayList;
import java.util.Date;
import android.app.Activity;
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;
public class TokyoRunners extends Activity implements
-// LocationListener, GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener {
LocationListener {
private SharedPreferences m_prefs;
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) {
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;
+ }
+ }
+ });
}
ArrayAdapter<String> arrayAdapter
= new ArrayAdapter<String>(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);
}
}
+ 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;
}
ListView listLaptime = (ListView)findViewById(R.id.lap_history);
ArrayAdapter<String> lapHistory = (ArrayAdapter<String>)listLaptime.getAdapter();
- ArrayList<String> history = new ArrayList<String>();
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;
// 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()));
@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();
}
});
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;
}
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();
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) {
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, "");
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);
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();
ListView listLaptime = (ListView)findViewById(R.id.lap_history);
- m_runningRecord.addRecord(new Date(), null, "");
-
ArrayAdapter<String> lapHistory = (ArrayAdapter<String>)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);
}
}
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) {
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