From 3d828503839f2b804953f07d48c3fdf912df6b27 Mon Sep 17 00:00:00 2001 From: daktak Date: Wed, 28 Jul 2021 17:49:32 +1000 Subject: [PATCH 1/3] tcx export --- .../fr/jayps/android/AdvancedLocation.java | 63 ++++++++++++++++++- .../android/AdvancedLocationDbHelper.java | 6 +- 2 files changed, 67 insertions(+), 2 deletions(-) diff --git a/advancedlocation-library/src/main/java/fr/jayps/android/AdvancedLocation.java b/advancedlocation-library/src/main/java/fr/jayps/android/AdvancedLocation.java index 2d08061..18595d6 100644 --- a/advancedlocation-library/src/main/java/fr/jayps/android/AdvancedLocation.java +++ b/advancedlocation-library/src/main/java/fr/jayps/android/AdvancedLocation.java @@ -131,6 +131,7 @@ public float getAltitudeAccuracy() { private int _cadence = 0; private float _sensorSpeed = 0; private long _sensorSpeedTime = 0; + private int _power = 0; // debug levels public int debugLevel = 0; @@ -393,7 +394,7 @@ public void setSaveLocation(boolean saveLocation) { this._saveLocation = saveLocation; } - public int onLocationChanged(Location location, int heartRate, int cadence) { + public int onLocationChanged(Location location, int heartRate, int cadence, int power) { int returnValue = NORMAL; long deltaTime = 0; float deltaDistance = 0; @@ -440,6 +441,7 @@ public int onLocationChanged(Location location, int heartRate, int cadence) { } _hearRate = heartRate; _cadence = cadence; + _power = power; if ((lastGoodLocation != null) && ((location.getTime() - lastGoodLocation.getTime()) < 500)) { // less than X ms, skip this location @@ -757,6 +759,9 @@ private void _saveLocation() { if (_cadence > 0) { values.put("loca_cad", _cadence); } + if (_power > 0) { + values.put("loca_power",_power); + } //values.put("loca_comment", ""); long newRowId = db.insert( @@ -765,6 +770,61 @@ private void _saveLocation() { values); }; + public String getTCX(final String sportType) { + StringBuilder tcx = new StringBuilder(); + tcx.append("\n" + + "\n"); + + String selectQuery = "SELECT _ID, loca_time, loca_lat, loca_lon, loca_altitude, loca_accuracy, loca_comment, loca_ascent, loca_gps_altitude, loca_pressure_altitude, loca_hr, loca_cad, loca_power FROM " + AdvancedLocationDbHelper.Location.TABLE_NAME + " ORDER BY _ID ASC"; + Cursor cursor = db.rawQuery(selectQuery, null); + + long itemId = -1; + int trackNumber = 1; + if (cursor.moveToFirst()) { + String time = ""; + Date netDate = (new Date(Long.parseLong(cursor.getString(1)))); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); + time = sdf.format(netDate); + time = time.substring(0, time.length() - 2) + ':' + time.substring(time.length() - 2); + tcx.append("\n\n"+time+"\n\n\n"); + long prevTime = -1; + + do { + time = ""; + netDate = (new Date(Long.parseLong(cursor.getString(1)))); + time = sdf.format(netDate); + time = time.substring(0, time.length() - 2) + ':' + time.substring(time.length() - 2); + tcx.append(" \n \n "); + tcx.append("\n "+cursor.getString(2)+"\n "); + tcx.append(""+cursor.getString(3)+"\n \n"); + tcx.append(" "+cursor.getString(4)+"\n"); + + if (!cursor.isNull(10)) { + //HR + tcx.append(" "+cursor.getString(10)+"\n"); + } + if (!cursor.isNull(11)) { + //CAD + tcx.append(" "+cursor.getString(11)+"\n"); + } + if (!cursor.isNull(12)) { + //POWER + tcx.append(" \n \n "+cursor.getString(12)+"\n \n \n"); + } + tcx.append(" \n"); + } while (cursor.moveToNext()); + tcx.append("\n\n\n\n"); + } + + tcx.append(""); + return tcx.toString(); + } + public String getGPX(boolean extended) { StringBuilder gpx = new StringBuilder(); String creator = "JayPS"; @@ -847,6 +907,7 @@ public String getGPX(boolean extended) { //Logger(gpx.toString()); return gpx.toString(); } + public String getRunkeeperJson(String type) { StringBuilder json = new StringBuilder(); StringBuilder hr = new StringBuilder(); diff --git a/advancedlocation-library/src/main/java/fr/jayps/android/AdvancedLocationDbHelper.java b/advancedlocation-library/src/main/java/fr/jayps/android/AdvancedLocationDbHelper.java index 9f2cfa4..ab3445b 100644 --- a/advancedlocation-library/src/main/java/fr/jayps/android/AdvancedLocationDbHelper.java +++ b/advancedlocation-library/src/main/java/fr/jayps/android/AdvancedLocationDbHelper.java @@ -10,7 +10,7 @@ public class AdvancedLocationDbHelper extends SQLiteOpenHelper { private static final String TAG = "PB-AdvLocDbHelper"; - public static final int DATABASE_VERSION = 3; + public static final int DATABASE_VERSION = 4; public static final String DATABASE_NAME = "AdvancedLocation.db"; private static AdvancedLocationDbHelper sInstance; @@ -34,6 +34,7 @@ public static abstract class Location implements BaseColumns { + ", loca_hr" + TEXT_TYPE + ", loca_cad" + TEXT_TYPE + ", loca_comment" + TEXT_TYPE + + ", loca_power" + TEXT_TYPE + " )"; private static final String SQL_DELETE_ENTRIES = @@ -73,6 +74,9 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { SQLExec(db, "ALTER TABLE location ADD COLUMN loca_hr TEXT"); SQLExec(db, "ALTER TABLE location ADD COLUMN loca_cad TEXT"); } + if (oldVersion < 3) { + SQLExec(db, "ALTER TABLE location ADD COLUMN loca_power TEXT"); + } } } private void SQLExec(SQLiteDatabase db, String sql) { From 360e6b762f7100800087675335c35ec028e4adb9 Mon Sep 17 00:00:00 2001 From: daktak Date: Fri, 30 Jul 2021 14:18:44 +1000 Subject: [PATCH 2/3] tcx more values --- .../src/main/java/fr/jayps/android/AdvancedLocation.java | 9 +++++++-- .../java/fr/jayps/android/AdvancedLocationDbHelper.java | 6 +++++- build.gradle | 2 +- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/advancedlocation-library/src/main/java/fr/jayps/android/AdvancedLocation.java b/advancedlocation-library/src/main/java/fr/jayps/android/AdvancedLocation.java index 18595d6..c183313 100644 --- a/advancedlocation-library/src/main/java/fr/jayps/android/AdvancedLocation.java +++ b/advancedlocation-library/src/main/java/fr/jayps/android/AdvancedLocation.java @@ -762,6 +762,8 @@ private void _saveLocation() { if (_power > 0) { values.put("loca_power",_power); } + values.put("loca_speed", this.getSpeed()); + values.put("loca_distance", this.getDistance()); //values.put("loca_comment", ""); long newRowId = db.insert( @@ -780,7 +782,7 @@ public String getTCX(final String sportType) { + "xmlns=\"http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2\" " + "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:ns4=\"http://www.garmin.com/xmlschemas/ProfileExtension/v1\">\n"); - String selectQuery = "SELECT _ID, loca_time, loca_lat, loca_lon, loca_altitude, loca_accuracy, loca_comment, loca_ascent, loca_gps_altitude, loca_pressure_altitude, loca_hr, loca_cad, loca_power FROM " + AdvancedLocationDbHelper.Location.TABLE_NAME + " ORDER BY _ID ASC"; + String selectQuery = "SELECT _ID, loca_time, loca_lat, loca_lon, loca_altitude, loca_accuracy, loca_comment, loca_ascent, loca_gps_altitude, loca_pressure_altitude, loca_hr, loca_cad, loca_power, loca_speed, loca_distance FROM " + AdvancedLocationDbHelper.Location.TABLE_NAME + " ORDER BY _ID ASC"; Cursor cursor = db.rawQuery(selectQuery, null); long itemId = -1; @@ -803,6 +805,7 @@ public String getTCX(final String sportType) { tcx.append("\n "+cursor.getString(2)+"\n "); tcx.append(""+cursor.getString(3)+"\n \n"); tcx.append(" "+cursor.getString(4)+"\n"); + tcx.append(" "+cursor.getString(14)+"\n"); if (!cursor.isNull(10)) { //HR @@ -812,10 +815,12 @@ public String getTCX(final String sportType) { //CAD tcx.append(" "+cursor.getString(11)+"\n"); } + tcx.append(" \n \n "+cursor.getString(13)+"\n"); if (!cursor.isNull(12)) { //POWER - tcx.append(" \n \n "+cursor.getString(12)+"\n \n \n"); + tcx.append(" "+cursor.getString(12)+"\n"); } + tcx.append(" \n \n"); tcx.append(" \n"); } while (cursor.moveToNext()); tcx.append("\n\n\n\n"); diff --git a/advancedlocation-library/src/main/java/fr/jayps/android/AdvancedLocationDbHelper.java b/advancedlocation-library/src/main/java/fr/jayps/android/AdvancedLocationDbHelper.java index ab3445b..ee1637c 100644 --- a/advancedlocation-library/src/main/java/fr/jayps/android/AdvancedLocationDbHelper.java +++ b/advancedlocation-library/src/main/java/fr/jayps/android/AdvancedLocationDbHelper.java @@ -35,6 +35,8 @@ public static abstract class Location implements BaseColumns { + ", loca_cad" + TEXT_TYPE + ", loca_comment" + TEXT_TYPE + ", loca_power" + TEXT_TYPE + + ", loca_speed" + TEXT_TYPE + + ", loca_distance" + TEXT_TYPE + " )"; private static final String SQL_DELETE_ENTRIES = @@ -74,8 +76,10 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { SQLExec(db, "ALTER TABLE location ADD COLUMN loca_hr TEXT"); SQLExec(db, "ALTER TABLE location ADD COLUMN loca_cad TEXT"); } - if (oldVersion < 3) { + if (oldVersion < 4) { SQLExec(db, "ALTER TABLE location ADD COLUMN loca_power TEXT"); + SQLExec(db, "ALTER TABLE location ADD COLUMN loca_speed TEXT"); + SQLExec(db, "ALTER TABLE location ADD COLUMN loca_distance TEXT"); } } } diff --git a/build.gradle b/build.gradle index c7cd081..dfad27f 100644 --- a/build.gradle +++ b/build.gradle @@ -17,4 +17,4 @@ allprojects { repositories { jcenter() } -} \ No newline at end of file +} From 05f67314319ce68f90ebac7ba9d889208ce00cac Mon Sep 17 00:00:00 2001 From: daktak Date: Thu, 5 Aug 2021 14:36:51 +1000 Subject: [PATCH 3/3] get power attrs --- .../fr/jayps/android/AdvancedLocation.java | 51 +++++++++++++++++++ build.gradle | 2 +- 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/advancedlocation-library/src/main/java/fr/jayps/android/AdvancedLocation.java b/advancedlocation-library/src/main/java/fr/jayps/android/AdvancedLocation.java index c183313..f60d778 100644 --- a/advancedlocation-library/src/main/java/fr/jayps/android/AdvancedLocation.java +++ b/advancedlocation-library/src/main/java/fr/jayps/android/AdvancedLocation.java @@ -132,6 +132,7 @@ public float getAltitudeAccuracy() { private float _sensorSpeed = 0; private long _sensorSpeedTime = 0; private int _power = 0; + private int _maxPower = 0; // debug levels public int debugLevel = 0; @@ -442,6 +443,7 @@ public int onLocationChanged(Location location, int heartRate, int cadence, int _hearRate = heartRate; _cadence = cadence; _power = power; + _maxPower = Math.max(_power, _maxPower); if ((lastGoodLocation != null) && ((location.getTime() - lastGoodLocation.getTime()) < 500)) { // less than X ms, skip this location @@ -1005,4 +1007,53 @@ public void Logger(String s, int level, LoggerType type) { } } } + + public int getPower() { + return _power; + } + + public int getMaxPower() { + return _maxPower; + } + + public int getAvgPower(int seconds) { + Date date = new Date(); + long timeMilli = date.getTime() - (seconds * 1000); + String time = String.format("%d",timeMilli); + String selectQuery = "SELECT loca_power from "+AdvancedLocationDbHelper.Location.TABLE_NAME+" WHERE loca_time >= "+time; + Cursor cursor = db.rawQuery(selectQuery, null); + int count = 0; + int sum = 0; + double avg = 0.0; + if (cursor.moveToFirst()) { + do { + count++; + sum += Integer.parseInt(cursor.getString(1)); + } while (cursor.moveToNext()); + avg = sum / count; + } + Logger(String.format("avgdPower time $%d count %d",seconds, count)); + return (int) Math.round(avg); + } + + public int getNormalizedPower(int seconds) { + Date date = new Date(); + long timeMilli = date.getTime() - (seconds * 1000); + String time = String.format("%d",timeMilli); + String selectQuery = "SELECT loca_power from "+AdvancedLocationDbHelper.Location.TABLE_NAME+" WHERE loca_time >= "+time; + Cursor cursor = db.rawQuery(selectQuery, null); + int count = 0; + double sum = 0; + double avg = 0.0; + if (cursor.moveToFirst()) { + do { + count++; + sum += Math.pow(Integer.parseInt(cursor.getString(1)),4); + } while (cursor.moveToNext()); + avg = sum / count; + } + double np = Math.pow(avg, 1.0/4); + Logger(String.format("NormalizedPower time $%d count %d",seconds, count)); + return (int) Math.round(avg); + } } diff --git a/build.gradle b/build.gradle index dfad27f..c7cd081 100644 --- a/build.gradle +++ b/build.gradle @@ -17,4 +17,4 @@ allprojects { repositories { jcenter() } -} +} \ No newline at end of file