Commit 6ce94f2

derdilla <82763757+NobodyForNothing@users.noreply.github.com>
2024-05-17 11:46:42
decode records
Signed-off-by: derdilla <82763757+NobodyForNothing@users.noreply.github.com>
1 parent 7879a92
app/lib/bluetooth/ble_read_cubit.dart
@@ -1,6 +1,8 @@
 import 'dart:async';
 
+import 'package:blood_pressure_app/bluetooth/characteristic_decoder.dart';
 import 'package:blood_pressure_app/logging.dart';
+import 'package:blood_pressure_app/model/blood_pressure/record.dart';
 import 'package:collection/collection.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/foundation.dart';
@@ -81,7 +83,9 @@ class BleReadCubit extends Cubit<BleReadState> {
       return;
     }
 
-    // TODO: decode data before emitting success.
-    emit(BleReadSuccess(data));
+    Log.trace('received $data');
+    final record = CharacteristicDecoder.decodeMeasurement(data)
+    Log.trace('decoded $record');
+    emit(BleReadSuccess(record));
   }
 }
app/lib/bluetooth/ble_read_state.dart
@@ -15,6 +15,6 @@ class BleReadSuccess extends BleReadState {
   /// Indicate a successful reading of a ble characteristic.
   BleReadSuccess(this.data);
 
-  /// Raw binary data received from the device.
-  final List<int> data;
+  /// Measurement decoded from the device.
+  final BloodPressureRecord data;
 }
app/lib/components/dialoges/add_measurement_dialoge.dart
@@ -4,7 +4,6 @@ import 'package:blood_pressure_app/components/bluetooth_input.dart';
 import 'package:blood_pressure_app/components/date_time_picker.dart';
 import 'package:blood_pressure_app/components/dialoges/fullscreen_dialoge.dart';
 import 'package:blood_pressure_app/components/settings/settings_widgets.dart';
-import 'package:blood_pressure_app/main.dart'; // TODO: remove
 import 'package:blood_pressure_app/model/blood_pressure/medicine/medicine.dart';
 import 'package:blood_pressure_app/model/blood_pressure/medicine/medicine_intake.dart';
 import 'package:blood_pressure_app/model/blood_pressure/needle_pin.dart';
@@ -287,9 +286,6 @@ class _AddEntryDialogeState extends State<AddEntryDialoge> {
               settings: widget.settings,
               onMeasurement: (record) => setState(() => _loadFields(record)),
             ),
-            TextButton(onPressed: () {
-              Clipboard.setData(ClipboardData(text: debugLog.join('\n')));
-            }, child: Text('copy debug')), // TODO: remove
             if (widget.settings.allowManualTimeInput)
               _buildTimeInput(localizations),
             Form(
app/lib/components/bluetooth_input.dart
@@ -86,7 +86,10 @@ class _BluetoothInputState extends State<BluetoothInput> {
               onTap: _returnToIdle,
             ),
             BleReadSuccess() => MeasurementSuccess(
-              onTap: _returnToIdle,
+              onTap: () {
+                onMeasurement(state.data);
+                return _returnToIdle;
+              }(),
             ),
           },
         ),
app/lib/screens/home_screen.dart
@@ -53,37 +53,37 @@ class AppHome extends StatelessWidget {
     return Scaffold(
       body: OrientationBuilder(
         builder: (context, orientation) {
-        if (orientation == Orientation.landscape) {
-          return MeasurementGraph(
-            height: MediaQuery.of(context).size.height,
-          );
-        }
-        return Center(
-          child: Padding(
-            padding: const EdgeInsets.only(top: 20),
-            child: Consumer<IntakeHistory>(builder: (context, intakeHistory, child) =>
-              Consumer<IntervallStoreManager>(builder: (context, intervalls, child) =>
-              Consumer<Settings>(builder: (context, settings, child) =>
-                Column(children: [
-                  const MeasurementGraph(),
-                  Expanded(
-                    child: (settings.useLegacyList) ?
-                      LegacyMeasurementsList(context) :
-                      BloodPressureBuilder(
-                        rangeType: IntervallStoreManagerLocation.mainPage,
-                        onData: (context, records) => MeasurementList(
-                          settings: settings,
-                          records: records,
-                          intakes: intakeHistory.getIntakes(intervalls.mainPage.currentRange),
+          if (orientation == Orientation.landscape) {
+            return MeasurementGraph(
+              height: MediaQuery.of(context).size.height,
+            );
+          }
+          return Center(
+            child: Padding(
+              padding: const EdgeInsets.only(top: 20),
+              child: Consumer<IntakeHistory>(builder: (context, intakeHistory, child) =>
+                Consumer<IntervallStoreManager>(builder: (context, intervalls, child) =>
+                Consumer<Settings>(builder: (context, settings, child) =>
+                  Column(children: [
+                    const MeasurementGraph(),
+                    Expanded(
+                      child: (settings.useLegacyList) ?
+                        LegacyMeasurementsList(context) :
+                        BloodPressureBuilder(
+                          rangeType: IntervallStoreManagerLocation.mainPage,
+                          onData: (context, records) => MeasurementList(
+                            settings: settings,
+                            records: records,
+                            intakes: intakeHistory.getIntakes(intervalls.mainPage.currentRange),
+                          ),
                         ),
-                      ),
-                  ),
-                ],),
-              ),),
+                    ),
+                  ],),
+                ),),
+              ),
             ),
-          ),
-        );
-      },
+          );
+        },
       ),
       floatingActionButton: OrientationBuilder(
         builder: (context, orientation) {
app/lib/logging.dart
@@ -16,4 +16,11 @@ class Log {
       }
     }
   }
-}
\ No newline at end of file
+
+  /// Log a message in debug more
+  static void trace(String message) {
+    if (kDebugMode && !testExpectError) {
+      debugPrint('TRACE: $message');
+    }
+  }
+}