From c3887ddb864cfe90e15007a0a4900b7b7ffc979b Mon Sep 17 00:00:00 2001 From: vanous Date: Sat, 8 Aug 2020 16:22:55 +0200 Subject: [PATCH] minimum working version --- .../activities/ActivitySummaryDetail.java | 55 +++++++++++++- .../gadgetbridge/model/ActivitySummary.java | 3 + .../FetchSportsSummaryOperation.java | 71 ++++++++++++++++--- .../res/layout/activity_summary_details.xml | 14 +--- 4 files changed, 119 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ActivitySummaryDetail.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ActivitySummaryDetail.java index 2de2fa700..35b62e989 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ActivitySummaryDetail.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ActivitySummaryDetail.java @@ -25,10 +25,14 @@ import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; +import org.json.JSONException; +import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; +import java.text.DecimalFormat; +import java.util.Iterator; import java.util.concurrent.TimeUnit; import nodomain.freeyourgadget.gadgetbridge.GBApplication; @@ -56,10 +60,14 @@ public class ActivitySummaryDetail extends AbstractGBActivity { setContentView(R.layout.activity_summary_details); Intent intent = getIntent(); - ActivitySummary summary = (ActivitySummary) intent.getSerializableExtra("summary"); + + //if (true) return; + GBDevice device = intent.getParcelableExtra(GBDevice.EXTRA_DEVICE); mGBDevice = device; + ActivitySummary summary = (ActivitySummary) intent.getSerializableExtra("summary"); + final String gpxTrack = summary.getGpxTrack(); Button show_track_btn = (Button) findViewById(R.id.showTrack); show_track_btn.setVisibility(View.GONE); @@ -78,8 +86,11 @@ public class ActivitySummaryDetail extends AbstractGBActivity { } }); } + + LOG.debug("petr summary: " + summary + ","+ summary.getSummaryData()); String activitykind = ActivityKind.asString(summary.getActivityKind(), getApplicationContext()); + String starttime = DateTimeUtils.formatDateTime(summary.getStartTime()); String endtime = DateTimeUtils.formatDateTime(summary.getEndTime()); Long startTs = summary.getStartTime().getTime() / 1000; @@ -101,8 +112,46 @@ public class ActivitySummaryDetail extends AbstractGBActivity { end_time.setText(endtime); TextView activity_duration = (TextView) findViewById(R.id.duration); activity_duration.setText(durationhms); - TextView activity_steps = (TextView) findViewById(R.id.steps); - activity_steps.setText(String.valueOf(steps)); + + + JSONObject summaryData = null; + String sumData = summary.getSummaryData(); + if (sumData != null) { + try { + summaryData = new JSONObject(sumData); + } catch (JSONException e) { + e.printStackTrace(); + } + } + String summaryDatastr = ""; + + if (summaryData== null) return; + + Iterator keys = summaryData.keys(); + LOG.debug("petr summary JSON:" + summaryData + keys); + + while(keys.hasNext()) { + String key = keys.next(); + LOG.debug("petr key:" + key); + + try { + + LOG.debug("petr" + key + ": " + summaryData.get(key) + "\n"); + DecimalFormat df = new DecimalFormat("#.##"); + JSONObject innerData = (JSONObject) summaryData.get(key); + Object value = innerData.get("value"); + String unit = innerData.getString("unit"); + summaryDatastr += String.format("%s: %s %s\n", key, df.format(value), unit); + + } catch (JSONException e) { + e.printStackTrace(); + } + } + TextView details = (TextView) findViewById(R.id.details); + + details.setText(summaryDatastr); + + } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivitySummary.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivitySummary.java index 1a828313d..f3f14d69f 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivitySummary.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivitySummary.java @@ -16,6 +16,8 @@ along with this program. If not, see . */ package nodomain.freeyourgadget.gadgetbridge.model; +import org.json.JSONObject; + import java.io.Serializable; import java.util.Date; @@ -35,6 +37,7 @@ public interface ActivitySummary extends Serializable { long getDeviceId(); long getUserId(); + String getSummaryData(); // long getSteps(); // float getDistanceMeters(); // float getAscentMeters(); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/operations/FetchSportsSummaryOperation.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/operations/FetchSportsSummaryOperation.java index e2c38f7ae..70f381b19 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/operations/FetchSportsSummaryOperation.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/operations/FetchSportsSummaryOperation.java @@ -57,7 +57,7 @@ public class FetchSportsSummaryOperation extends AbstractFetchOperation { private static final Logger LOG = LoggerFactory.getLogger(FetchSportsSummaryOperation.class); private ByteArrayOutputStream buffer = new ByteArrayOutputStream(140); - + private JSONObject summaryData = new JSONObject(); public FetchSportsSummaryOperation(HuamiSupport support) { super(support); setName("fetching sport summaries"); @@ -166,7 +166,7 @@ public class FetchSportsSummaryOperation extends AbstractFetchOperation { private BaseActivitySummary parseSummary(ByteArrayOutputStream stream) { BaseActivitySummary summary = new BaseActivitySummary(); - JSONObject summaryData = new JSONObject(); + ByteBuffer buffer = ByteBuffer.wrap(stream.toByteArray()).order(ByteOrder.LITTLE_ENDIAN); // summary.setVersion(BLETypeConversions.toUnsigned(buffer.getShort())); @@ -246,6 +246,14 @@ public class FetchSportsSummaryOperation extends AbstractFetchOperation { "\nlaps=" + laps + "" ); + addSummaryData("averageStrokeDistance", averageStrokeDistance, "m"); + addSummaryData("averageStrokesPerSecond", averageStrokesPerSecond, "stroke/s"); + addSummaryData("averageLapPace", averageLapPace, "s"); + addSummaryData("strokes", strokes, ""); + addSummaryData("swolfIndex", swolfIndex, ""); + addSummaryData("swimStyle", swimStyle, ""); + addSummaryData("laps", laps, ""); + } else { // 28 bytes buffer.getInt(); // unknown @@ -265,14 +273,6 @@ public class FetchSportsSummaryOperation extends AbstractFetchOperation { short averageHR = buffer.getShort(); - // this is just here for demonstration purboses for now - if (averageHR > 0) { - try { - summaryData.put("averageHR", averageHR); - } catch (JSONException ignore) { - } - } - short averageKMPaceSeconds = buffer.getShort(); short averageStride = buffer.getShort(); @@ -323,10 +323,61 @@ public class FetchSportsSummaryOperation extends AbstractFetchOperation { // summary.setAveragePace(BLETypeConversions.toUnsigned(averagePace); // summary.setAverageStride(BLETypeConversions.toUnsigned(averageStride); + addSummaryData("distanceMeters", distanceMeters, "m"); + addSummaryData("ascentMeters", ascentMeters,"m"); + addSummaryData("descentMeters", descentMeters,"m"); + addSummaryData("maxAltitude", maxAltitude,"m"); + addSummaryData("minAltitude", minAltitude,"m"); + addSummaryData("steps", steps,""); + addSummaryData("activeSeconds", activeSeconds, "s"); + addSummaryData("caloriesBurnt", caloriesBurnt, "kcal"); + addSummaryData("maxSpeed", maxSpeed, "m/s"); + addSummaryData("minPace", minPace, ""); + addSummaryData("maxPace", maxPace, ""); + addSummaryData("totalStride", totalStride, ""); + addSummaryData("averageHR", averageHR, "bpm"); + addSummaryData("averageKMPaceSeconds", averageKMPaceSeconds, ""); + addSummaryData("averageStride", averageStride, "cm"); + summary.setSummaryData(summaryData.toString()); return summary; } + private void addSummaryData(String key, float value, String unit) { + if (value> 0) { + try { + JSONObject innerData= new JSONObject(); + innerData.put("value", value); + innerData.put("unit", unit); + summaryData.put(key, innerData); + } catch (JSONException ignore) { + } + } + } + private void addSummaryData(String key, short value, String unit) { + if (value> 0) { + try { + JSONObject innerData= new JSONObject(); + innerData.put("value", value); + innerData.put("unit", unit); + summaryData.put(key, innerData); + } catch (JSONException ignore) { + } + } + } + + private void addSummaryData(String key, int value, String unit) { + if (value> 0) { + try { + JSONObject innerData= new JSONObject(); + innerData.put("value", value); + innerData.put("unit", unit); + summaryData.put(key, innerData); + } catch (JSONException ignore) { + } + } + } + @Override protected String getLastSyncTimeKey() { return "lastSportsActivityTimeMillis"; diff --git a/app/src/main/res/layout/activity_summary_details.xml b/app/src/main/res/layout/activity_summary_details.xml index 7eff705e3..5e37a79d4 100644 --- a/app/src/main/res/layout/activity_summary_details.xml +++ b/app/src/main/res/layout/activity_summary_details.xml @@ -103,26 +103,18 @@ - - + android:gravity="start" />