summaryrefslogtreecommitdiffstats
path: root/lib/data/data_providers/units_notifier.dart
blob: 68c9e65cfe6b608cc4657af5e9b3102e518f0d7d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import 'package:flutter_ics_homescreen/export.dart';
import 'package:protos/val_api.dart';

class UnitsNotifier extends Notifier<Units> {
  @override
  Units build() {
    return const Units.initial();
  }

  bool handleSignalUpdate(DataEntry entry) {
    bool handled = true;
    switch (entry.path) {
      case VSSPath.vehicleHmiDistanceUnit:
        if (entry.value.hasString()) {
          String value = entry.value.string;
          DistanceUnit unit = DistanceUnit.kilometers;
          if (value != "KILOMETERS") unit = DistanceUnit.miles;
          state = state.copyWith(distanceUnit: unit);
        }
        break;
      case VSSPath.vehicleHmiTemperatureUnit:
        if (entry.value.hasString()) {
          String value = entry.value.string;
          TemperatureUnit unit = TemperatureUnit.celsius;
          if (value != "C") unit = TemperatureUnit.fahrenheit;
          state = state.copyWith(temperatureUnit: unit);
        }
        break;
      case VSSPath.vehicleHmiPressureUnit:
        if (entry.value.hasString()) {
          String value = entry.value.string;
          PressureUnit unit = PressureUnit.kilopascals;
          if (value != "KPA") unit = PressureUnit.psi;
          state = state.copyWith(pressureUnit: unit);
        }
        break;
      default:
        handled = false;
    }
    return handled;
  }

  void setDistanceUnit(DistanceUnit unit) {
    state = state.copyWith(distanceUnit: unit);
    var valClient = ref.read(valClientProvider);
    valClient.setString(
      VSSPath.vehicleHmiDistanceUnit,
      unit == DistanceUnit.kilometers ? "KILOMETERS" : "MILES",
      true,
    );
  }

  void setTemperatureUnit(TemperatureUnit unit) {
    state = state.copyWith(temperatureUnit: unit);
    var valClient = ref.read(valClientProvider);
    valClient.setString(
      VSSPath.vehicleHmiTemperatureUnit,
      unit == TemperatureUnit.celsius ? "C" : "F",
      true,
    );
  }

  void setPressureUnit(PressureUnit unit) {
    state = state.copyWith(pressureUnit: unit);
    var valClient = ref.read(valClientProvider);
    valClient.setString(
      VSSPath.vehicleHmiPressureUnit,
      unit == PressureUnit.kilopascals ? "KPA" : "PSI",
      true,
    );
  }
}