aboutsummaryrefslogtreecommitdiffstats
path: root/lib/data/data_providers
diff options
context:
space:
mode:
Diffstat (limited to 'lib/data/data_providers')
-rw-r--r--lib/data/data_providers/units_notifier.dart83
-rw-r--r--lib/data/data_providers/users_notifier.dart127
-rw-r--r--lib/data/data_providers/val_client.dart28
3 files changed, 136 insertions, 102 deletions
diff --git a/lib/data/data_providers/units_notifier.dart b/lib/data/data_providers/units_notifier.dart
index daf9c92..9f4a1ac 100644
--- a/lib/data/data_providers/units_notifier.dart
+++ b/lib/data/data_providers/units_notifier.dart
@@ -11,21 +11,21 @@ class UnitsNotifier extends Notifier<Units> {
}
// Load Units state of the selected user from the storage API.
- Future <void> loadSettingsUnits() async {
+ Future<void> loadSettingsUnits() async {
final storageClient = ref.read(storageClientProvider);
final userClient = ref.read(usersProvider);
-
- try {
- await initializeSettingsUser(ref);
- } catch (e) {
- print('Error loading settings of user: $e');
- }
-
+
try {
// Read unit values from the selected user namespace.
- final distanceResponse = await storageClient.read(storage_api.Key(key: VSSPath.vehicleHmiDistanceUnit, namespace: userClient.selectedUser.id));
- final temperatureResponse = await storageClient.read(storage_api.Key(key: VSSPath.vehicleHmiTemperatureUnit, namespace: userClient.selectedUser.id));
- final pressureResponse = await storageClient.read(storage_api.Key(key: VSSPath.vehicleHmiPressureUnit, namespace: userClient.selectedUser.id));
+ final distanceResponse = await storageClient.read(storage_api.Key(
+ key: VSSPath.vehicleHmiDistanceUnit,
+ namespace: userClient.selectedUser.id));
+ final temperatureResponse = await storageClient.read(storage_api.Key(
+ key: VSSPath.vehicleHmiTemperatureUnit,
+ namespace: userClient.selectedUser.id));
+ final pressureResponse = await storageClient.read(storage_api.Key(
+ key: VSSPath.vehicleHmiPressureUnit,
+ namespace: userClient.selectedUser.id));
// Prepare state declaration and fall back to default values if the key is not present in the storage API.
final distanceUnit = distanceResponse.result == 'MILES'
@@ -40,10 +40,10 @@ class UnitsNotifier extends Notifier<Units> {
? PressureUnit.psi
: PressureUnit.kilopascals;
- state = Units(distanceUnit, temperatureUnit, pressureUnit);
+ state = Units(distanceUnit, temperatureUnit, pressureUnit);
} catch (e) {
// Fallback to initial defaults if error occurs.
- print('Error loading settings for units: $e');
+ debugPrint('Error loading settings for units: $e');
state = const Units.initial();
}
}
@@ -81,69 +81,60 @@ class UnitsNotifier extends Notifier<Units> {
return handled;
}
- Future <void> setDistanceUnit(DistanceUnit unit) async {
+ Future<void> setDistanceUnit(DistanceUnit unit) async {
state = state.copyWith(distanceUnit: unit);
+
var valClient = ref.read(valClientProvider);
- valClient.setString(
- VSSPath.vehicleHmiDistanceUnit,
- unit == DistanceUnit.kilometers ? "KILOMETERS" : "MILES",
- true,
- );
+ valClient.setDistanceUnit(unit);
+
// Write to storage API (to selected user namespace).
var storageClient = ref.read(storageClientProvider);
final userClient = ref.read(usersProvider);
try {
await storageClient.write(storage_api.KeyValue(
- key: VSSPath.vehicleHmiDistanceUnit,
- value: unit == DistanceUnit.kilometers ? 'KILOMETERS' : 'MILES',
- namespace: userClient.selectedUser.id
- ));
+ key: VSSPath.vehicleHmiDistanceUnit,
+ value: unit == DistanceUnit.kilometers ? 'KILOMETERS' : 'MILES',
+ namespace: userClient.selectedUser.id));
} catch (e) {
- print('Error saving distance unit: $e');
+ debugPrint('Error saving distance unit: $e');
}
}
- Future <void> setTemperatureUnit(TemperatureUnit unit) async {
+ Future<void> setTemperatureUnit(TemperatureUnit unit) async {
state = state.copyWith(temperatureUnit: unit);
+
var valClient = ref.read(valClientProvider);
- valClient.setString(
- VSSPath.vehicleHmiTemperatureUnit,
- unit == TemperatureUnit.celsius ? "C" : "F",
- true,
- );
+ valClient.setTemperatureUnit(unit);
+
// Write to storage API (to selected user namespace).
var storageClient = ref.read(storageClientProvider);
final userClient = ref.read(usersProvider);
try {
await storageClient.write(storage_api.KeyValue(
- key: VSSPath.vehicleHmiTemperatureUnit,
- value: unit == TemperatureUnit.celsius ? "C" : "F",
- namespace: userClient.selectedUser.id
- ));
+ key: VSSPath.vehicleHmiTemperatureUnit,
+ value: unit == TemperatureUnit.celsius ? "C" : "F",
+ namespace: userClient.selectedUser.id));
} catch (e) {
- print('Error saving distance unit: $e');
+ debugPrint('Error saving distance unit: $e');
}
}
- Future <void> setPressureUnit(PressureUnit unit) async {
+ Future<void> setPressureUnit(PressureUnit unit) async {
state = state.copyWith(pressureUnit: unit);
+
var valClient = ref.read(valClientProvider);
- valClient.setString(
- VSSPath.vehicleHmiPressureUnit,
- unit == PressureUnit.kilopascals ? "KPA" : "PSI",
- true,
- );
+ valClient.setPressureUnit(unit);
+
// Write to storage API (to selected user namespace).
var storageClient = ref.read(storageClientProvider);
final userClient = ref.read(usersProvider);
try {
await storageClient.write(storage_api.KeyValue(
- key: VSSPath.vehicleHmiPressureUnit,
- value: unit == PressureUnit.kilopascals ? "KPA" : "PSI",
- namespace: userClient.selectedUser.id
- ));
+ key: VSSPath.vehicleHmiPressureUnit,
+ value: unit == PressureUnit.kilopascals ? "KPA" : "PSI",
+ namespace: userClient.selectedUser.id));
} catch (e) {
- print('Error saving distance unit: $e');
+ debugPrint('Error saving pressure unit: $e');
}
}
}
diff --git a/lib/data/data_providers/users_notifier.dart b/lib/data/data_providers/users_notifier.dart
index c2755f6..a4e056c 100644
--- a/lib/data/data_providers/users_notifier.dart
+++ b/lib/data/data_providers/users_notifier.dart
@@ -9,6 +9,12 @@ import 'initialize_settings.dart';
class UsersNotifier extends Notifier<Users> {
@override
+ final List<User> _users = [
+ const User(id: '1', name: 'Heather'),
+ const User(id: '2', name: 'George'),
+ const User(id: '3', name: 'Riley'),
+ ];
+
Users build() {
// Initialize default state.
state = Users.initial();
@@ -16,52 +22,70 @@ class UsersNotifier extends Notifier<Users> {
return state;
}
- Future <void> loadSettingsUsers() async {
+ Future<void> loadSettingsUsers() async {
final storageClient = ref.read(storageClientProvider);
try {
// Access users branch.
- final searchResponseUsers = await storageClient.search(storage_api.Key(key: UsersPath.InfotainmentUsers));
- // Add default users if no users are inside the storage API.
+ final searchResponseUsers = await storageClient
+ .search(storage_api.Key(key: UsersPath.InfotainmentUsers));
if (searchResponseUsers.result.isEmpty) {
+ // Add default users if no users are inside the storage API.
+ debugPrint("Adding default demo user profiles");
loadUsers();
- await storageClient.write(storage_api.KeyValue(key: '${UsersPath.InfotainmentUsers}.${_users[0].id}.id', value: _users[0].id));
- await storageClient.write(storage_api.KeyValue(key: '${UsersPath.InfotainmentUsers}.${_users[0].id}.name', value: _users[0].name));
- await storageClient.write(storage_api.KeyValue(key: '${UsersPath.InfotainmentUsers}.${_users[1].id}.id', value: _users[1].id));
- await storageClient.write(storage_api.KeyValue(key: '${UsersPath.InfotainmentUsers}.${_users[1].id}.name', value: _users[1].name));
- await storageClient.write(storage_api.KeyValue(key: '${UsersPath.InfotainmentUsers}.${_users[2].id}.id', value: _users[2].id));
- await storageClient.write(storage_api.KeyValue(key: '${UsersPath.InfotainmentUsers}.${_users[2].id}.name', value: _users[2].name));
+ await storageClient.write(storage_api.KeyValue(
+ key: '${UsersPath.InfotainmentUsers}.${_users[0].id}.id',
+ value: _users[0].id));
+ await storageClient.write(storage_api.KeyValue(
+ key: '${UsersPath.InfotainmentUsers}.${_users[0].id}.name',
+ value: _users[0].name));
+ await storageClient.write(storage_api.KeyValue(
+ key: '${UsersPath.InfotainmentUsers}.${_users[1].id}.id',
+ value: _users[1].id));
+ await storageClient.write(storage_api.KeyValue(
+ key: '${UsersPath.InfotainmentUsers}.${_users[1].id}.name',
+ value: _users[1].name));
+ await storageClient.write(storage_api.KeyValue(
+ key: '${UsersPath.InfotainmentUsers}.${_users[2].id}.id',
+ value: _users[2].id));
+ await storageClient.write(storage_api.KeyValue(
+ key: '${UsersPath.InfotainmentUsers}.${_users[2].id}.name',
+ value: _users[2].name));
await selectUser(_users[0].id);
- }
- else {
+ } else {
List<User> users = [];
List<String> idList = [];
// Get list of all ids.
for (var key in searchResponseUsers.result) {
- var readResponse = await storageClient.read(storage_api.Key(key: key));
+ var readResponse =
+ await storageClient.read(storage_api.Key(key: key));
if (key.contains('.id')) {
idList.insert(0, readResponse.result);
}
}
// Extract names corresponding to ids.
for (var id in idList) {
- var readResponse = await storageClient.read(storage_api.Key(key:'${UsersPath.InfotainmentUsers}.$id.name'));
+ var readResponse = await storageClient.read(
+ storage_api.Key(key: '${UsersPath.InfotainmentUsers}.$id.name'));
users.insert(0, User(id: id, name: readResponse.result));
}
// Extract id of selected user.
- final readResponseSelectedUser = await storageClient.read(storage_api.Key(key: UsersPath.InfotainmentCurrentUser));
+ final readResponseSelectedUser = await storageClient
+ .read(storage_api.Key(key: UsersPath.InfotainmentCurrentUser));
User selectedUser;
final userCurrentId = readResponseSelectedUser.result;
// Extract name of selected user.
- final readResponseCurrentUserName = await storageClient.read(storage_api.Key(key: '${UsersPath.InfotainmentUsers}.$userCurrentId.name'));
+ final readResponseCurrentUserName = await storageClient.read(
+ storage_api.Key(
+ key: '${UsersPath.InfotainmentUsers}.$userCurrentId.name'));
final userCurrentName = readResponseCurrentUserName.result;
selectedUser = User(id: userCurrentId, name: userCurrentName);
- state = Users(users: users, selectedUser: selectedUser);
+ state = Users(users: users, selectedUser: selectedUser);
}
} catch (e) {
- // Fallback to initial defaults if error.
- print('Error loading settings for units: $e');
- loadUsers();
- state = state.copyWith(selectedUser: _users[0]);
+ // Fallback to initial defaults if error.
+ debugPrint('Error loading users: $e');
+ loadUsers();
+ state = state.copyWith(selectedUser: _users[0]);
}
}
@@ -69,16 +93,10 @@ class UsersNotifier extends Notifier<Users> {
state = state.copyWith(users: _users);
}
- final List<User> _users = [
- const User(id: '1', name: 'Heather'),
- const User(id: '2', name: 'George'),
- const User(id: '3', name: 'Riley'),
- ];
-
- Future <void> selectUser(String userId) async {
+ Future<void> selectUser(String userId) async {
final storageClient = ref.read(storageClientProvider);
- var seletedUser = state.users.firstWhere((user) => user.id == userId);
- state = state.copyWith(selectedUser: seletedUser);
+ var selectedUser = state.users.firstWhere((user) => user.id == userId);
+ state = state.copyWith(selectedUser: selectedUser);
// Write to storage API.
try {
await storageClient.write(storage_api.KeyValue(
@@ -86,68 +104,65 @@ class UsersNotifier extends Notifier<Users> {
value: userId,
));
} catch (e) {
- print('Error saving user: $e');
+ debugPrint('Error selecting user: $e');
}
-
+
try {
await initializeSettingsUser(ref);
} catch (e) {
- print('Error loading settings of user: $e');
+ debugPrint('Error loading settings of user: $e');
}
-
}
- Future <void> removeUser(String userId) async {
+ Future<void> removeUser(String userId) async {
final storageClient = ref.read(storageClientProvider);
var currentUserId = state.selectedUser.id;
state.users.removeWhere((user) => user.id == userId);
if (state.users.isNotEmpty && currentUserId == userId) {
state = state.copyWith(selectedUser: state.users.first);
- //Write to API to change selected user.
- await storageClient.write(storage_api.KeyValue(key: UsersPath.InfotainmentCurrentUser, value: state.users.first.id));
+ // Write to API to change selected user.
+ await storageClient.write(storage_api.KeyValue(
+ key: UsersPath.InfotainmentCurrentUser, value: state.users.first.id));
}
if (state.users.isEmpty) {
state = state.copyWith(selectedUser: const User(id: '0', name: ''));
- //Write to API to change selected user.
- await storageClient.write(storage_api.KeyValue(key: UsersPath.InfotainmentCurrentUser, value: '0'));
+ // Write to API to change selected user.
+ await storageClient.write(storage_api.KeyValue(
+ key: UsersPath.InfotainmentCurrentUser, value: '0'));
}
// Delete from storage API.
try {
- final searchResponse = await storageClient.search(storage_api.Key(key: userId));
+ final searchResponse =
+ await storageClient.search(storage_api.Key(key: userId));
final keyList = searchResponse.result;
- //Delete id, name entries of the user from the default namespace.
+ // Delete id, name entries of the user from the default namespace.
for (final key in keyList) {
- await storageClient.delete(storage_api.Key(
- key: key
- ));
+ await storageClient.delete(storage_api.Key(key: key));
}
- //Delete all VSS keys from the user namespace.
- await storageClient.deleteNodes(storage_api.Key(key: "Vehicle", namespace: userId));
+ // Delete all VSS keys from the user namespace.
+ await storageClient
+ .deleteNodes(storage_api.Key(key: "Vehicle", namespace: userId));
} catch (e) {
- print('Error removing user with id $userId: $e');
+ debugPrint('Error removing user with id $userId: $e');
}
}
- Future <void> addUser(String userName) async {
+ Future<void> addUser(String userName) async {
final storageClient = ref.read(storageClientProvider);
final id = const Uuid().v1();
final user = User(id: id, name: userName);
state.users.insert(0, user);
- // New user is automaticaly selected.
- await selectUser(user.id);
+ // New user is automatically selected.
+ await selectUser(user.id);
// Write to storage API.
try {
await storageClient.write(storage_api.KeyValue(
- key: '${UsersPath.InfotainmentUsers}.$id.name',
- value: userName
- ));
+ key: '${UsersPath.InfotainmentUsers}.$id.name', value: userName));
await storageClient.write(storage_api.KeyValue(
- key: '${UsersPath.InfotainmentUsers}.$id.id',
- value: id
- ));
+ key: '${UsersPath.InfotainmentUsers}.$id.id', value: id));
} catch (e) {
- print('Error adding user with id $id: $e');
+ debugPrint('Error adding user with id $id: $e');
}
}
diff --git a/lib/data/data_providers/val_client.dart b/lib/data/data_providers/val_client.dart
index 173dbfb..8436012 100644
--- a/lib/data/data_providers/val_client.dart
+++ b/lib/data/data_providers/val_client.dart
@@ -35,6 +35,13 @@ class ValClient {
metadata = {'authorization': "Bearer ${config.authorization}"};
}
+ // Push out persisted user preferences so databroker defaults
+ // will not overwrite them.
+ var units = ref.read(unitStateProvider);
+ setDistanceUnit(units.distanceUnit);
+ setTemperatureUnit(units.temperatureUnit);
+ setPressureUnit(units.pressureUnit);
+
// Initialize signal states
for (int i = 0; i < signals.length; i++) {
get(signals[i]);
@@ -145,4 +152,25 @@ class ValClient {
handleSignalUpdate(entry);
}
}
+
+ void setDistanceUnit(DistanceUnit unit) async {
+ setString(VSSPath.vehicleHmiDistanceUnit,
+ unit == DistanceUnit.kilometers ? "KILOMETERS" : "MILES",
+ true,
+ );
+ }
+
+ void setTemperatureUnit(TemperatureUnit unit) async {
+ setString(VSSPath.vehicleHmiTemperatureUnit,
+ unit == TemperatureUnit.celsius ? "C" : "F",
+ true,
+ );
+ }
+
+ void setPressureUnit(PressureUnit unit) async {
+ setString(VSSPath.vehicleHmiPressureUnit,
+ unit == PressureUnit.kilopascals ? "KPA" : "PSI",
+ true,
+ );
+ }
}