Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Abstract away GSettings #186

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import 'package:bluez/bluez.dart';
import 'package:flutter/material.dart';
import 'package:gsettings/gsettings.dart';
import 'package:nm/nm.dart';
import 'package:provider/provider.dart';
import 'package:settings/schemas/schemas.dart';
Expand All @@ -18,7 +17,7 @@ import 'package:yaru_icons/widgets/yaru_icons.dart';
import 'package:yaru_widgets/yaru_widgets.dart';

void main() async {
final themeSettings = GSettings(schemaId: schemaInterface);
final themeSettings = Settings(schemaInterface);

final networkManagerClient = NetworkManagerClient();
await networkManagerClient.connect();
Expand Down
28 changes: 25 additions & 3 deletions lib/services/settings_service.dart
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import 'package:gsettings/gsettings.dart';

class SettingsService {
final _settings = <String, GSettings?>{};
final _settings = <String, Settings?>{};

GSettings? lookup(String schemaId, {String? path}) {
Settings? lookup(String schemaId, {String? path}) {
return _settings[schemaId] ??= GSettingsSchema.lookup(schemaId) != null
? GSettings(schemaId: schemaId, path: path)
? Settings(schemaId, path: path)
: null;
}

Expand All @@ -15,3 +15,25 @@ class SettingsService {
}
}
}

class Settings {
Settings(String schemaId, {String? path})
: _settings = GSettings(schemaId: schemaId, path: path);

final GSettings _settings;

void dispose() => _settings.dispose();

bool? boolValue(String key) => getValue<bool>(key);
int? intValue(String key) => getValue<int>(key);
double? doubleValue(String key) => getValue<double>(key);
String? stringValue(String key) => getValue<String>(key);
Iterable<String>? stringArrayValue(String key) =>
getValue<Iterable>(key)?.cast<String>();

T? getValue<T>(String key) => _settings.value(key) as T?;
void setValue<T>(String key, Object value) => _settings.setValue(key, value);
void resetValue(String key) => _settings.resetValue(key);

void sync() => _settings.sync();
}
4 changes: 2 additions & 2 deletions lib/view/app_theme.dart
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import 'package:flutter/material.dart';
import 'package:gsettings/gsettings.dart';
import 'package:settings/services/settings_service.dart';

class AppTheme extends ValueNotifier<ThemeMode> {
AppTheme(this._settings) : super(ThemeMode.system);

final GSettings _settings;
final Settings _settings;

void apply(Brightness brightness) {
switch (brightness) {
Expand Down
41 changes: 19 additions & 22 deletions lib/view/pages/accessibility/accessibility_model.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import 'package:flutter/foundation.dart';
import 'package:gsettings/gsettings.dart';
import 'package:settings/schemas/schemas.dart';
import 'package:settings/services/settings_service.dart';

Expand Down Expand Up @@ -71,15 +70,15 @@ class AccessibilityModel extends ChangeNotifier {
_peripheralsKeyboardSettings =
service.lookup(schemaPeripheralsKeyboard);

final GSettings? _desktopA11Settings;
final GSettings? _a11yAppsSettings;
final GSettings? _a11yKeyboardSettings;
final GSettings? _a11yMagnifierSettings;
final GSettings? _a11yMouseSettings;
final GSettings? _wmPreferencesSettings;
final GSettings? _interfaceSettings;
final GSettings? _peripheralsMouseSettings;
final GSettings? _peripheralsKeyboardSettings;
final Settings? _desktopA11Settings;
final Settings? _a11yAppsSettings;
final Settings? _a11yKeyboardSettings;
final Settings? _a11yMagnifierSettings;
final Settings? _a11yMouseSettings;
final Settings? _wmPreferencesSettings;
final Settings? _interfaceSettings;
final Settings? _peripheralsMouseSettings;
final Settings? _peripheralsKeyboardSettings;

// Global section

Expand Down Expand Up @@ -206,9 +205,7 @@ class AccessibilityModel extends ChangeNotifier {
}

bool? get crossHairsClip {
if (_a11yMagnifierSettings != null) {
return !_a11yMagnifierSettings!.boolValue(_crossHairsClipKey);
}
return _a11yMagnifierSettings?.boolValue(_crossHairsClipKey) == false;
}

void setCrossHairsClip(bool value) {
Expand All @@ -217,15 +214,15 @@ class AccessibilityModel extends ChangeNotifier {
}

double? get crossHairsThickness =>
_a11yMagnifierSettings?.intValue(_crossHairsThicknessKey).toDouble();
_a11yMagnifierSettings?.intValue(_crossHairsThicknessKey)?.toDouble();

void setCrossHairsThickness(double value) {
_a11yMagnifierSettings?.setValue(_crossHairsThicknessKey, value.toInt());
notifyListeners();
}

double? get crossHairsLength =>
_a11yMagnifierSettings?.intValue(_crossHairsLengthKey).toDouble();
_a11yMagnifierSettings?.intValue(_crossHairsLengthKey)?.toDouble();

void setCrossHairsLength(double value) {
_a11yMagnifierSettings?.setValue(_crossHairsLengthKey, value.toInt());
Expand Down Expand Up @@ -315,7 +312,7 @@ class AccessibilityModel extends ChangeNotifier {
}

double? get delay =>
_peripheralsKeyboardSettings?.intValue(_delayKeyboardKey).toDouble();
_peripheralsKeyboardSettings?.intValue(_delayKeyboardKey)?.toDouble();

void setDelay(double value) {
_peripheralsKeyboardSettings?.setValue(_delayKeyboardKey, value.toInt());
Expand All @@ -324,7 +321,7 @@ class AccessibilityModel extends ChangeNotifier {

double? get interval => _peripheralsKeyboardSettings
?.intValue(_repeatIntervalKeyboardKey)
.toDouble();
?.toDouble();

void setInterval(double value) {
_peripheralsKeyboardSettings?.setValue(
Expand All @@ -340,7 +337,7 @@ class AccessibilityModel extends ChangeNotifier {
}

double? get cursorBlinkTime =>
_interfaceSettings?.intValue(_cursorBlinkTimeKey).toDouble();
_interfaceSettings?.intValue(_cursorBlinkTimeKey)?.toDouble();

void setCursorBlinkTime(double value) {
_interfaceSettings?.setValue(_cursorBlinkTimeKey, value.toInt());
Expand Down Expand Up @@ -391,7 +388,7 @@ class AccessibilityModel extends ChangeNotifier {
}

double? get slowKeysDelay =>
_a11yKeyboardSettings?.intValue(_slowKeysDelayKey).toDouble();
_a11yKeyboardSettings?.intValue(_slowKeysDelayKey)?.toDouble();

void setSlowKeysDelay(double value) {
_a11yKeyboardSettings?.setValue(_slowKeysDelayKey, value.toInt());
Expand Down Expand Up @@ -430,7 +427,7 @@ class AccessibilityModel extends ChangeNotifier {
}

double? get bounceKeysDelay =>
_a11yKeyboardSettings?.intValue(_bounceKeysDelayKey).toDouble();
_a11yKeyboardSettings?.intValue(_bounceKeysDelayKey)?.toDouble();

void setBounceKeysDelay(double value) {
_a11yKeyboardSettings?.setValue(_bounceKeysDelayKey, value.toInt());
Expand Down Expand Up @@ -461,7 +458,7 @@ class AccessibilityModel extends ChangeNotifier {
}

double? get doubleClickDelay =>
_peripheralsMouseSettings?.intValue(_doubleClickDelayKey).toDouble();
_peripheralsMouseSettings?.intValue(_doubleClickDelayKey)?.toDouble();

void setDoubleClickDelay(double value) {
_peripheralsMouseSettings?.setValue(_doubleClickDelayKey, value.toInt());
Expand Down Expand Up @@ -504,7 +501,7 @@ class AccessibilityModel extends ChangeNotifier {
}

double? get dwellThreshold =>
_a11yMouseSettings?.intValue(_dwellThresholdKey).toDouble();
_a11yMouseSettings?.intValue(_dwellThresholdKey)?.toDouble();

void setDwellThreshold(double value) {
_a11yMouseSettings?.setValue(_dwellThresholdKey, value.toInt());
Expand Down
5 changes: 2 additions & 3 deletions lib/view/pages/appearance/appearance_model.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import 'package:flutter/foundation.dart';
import 'package:gsettings/gsettings.dart';
import 'package:settings/schemas/schemas.dart';
import 'package:settings/services/settings_service.dart';

Expand All @@ -15,7 +14,7 @@ class AppearanceModel extends ChangeNotifier {
AppearanceModel(SettingsService service)
: _dashToDockSettings = service.lookup(schemaDashToDock);

final GSettings? _dashToDockSettings;
final Settings? _dashToDockSettings;

// Dock section

Expand Down Expand Up @@ -48,7 +47,7 @@ class AppearanceModel extends ChangeNotifier {
}

double? get maxIconSize =>
_dashToDockSettings?.intValue(_dashMaxIconSizeKey).toDouble();
_dashToDockSettings?.intValue(_dashMaxIconSizeKey)?.toDouble();

void setMaxIconSize(double value) {
var intValue = value.toInt();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import 'package:flutter/foundation.dart';
import 'package:gsettings/gsettings.dart';
import 'package:settings/services/settings_service.dart';

class KeyboardShortcutsModel extends ChangeNotifier {
Expand All @@ -8,7 +7,7 @@ class KeyboardShortcutsModel extends ChangeNotifier {
KeyboardShortcutsModel(SettingsService service, {required this.schemaId})
: _shortcutSettings = service.lookup(schemaId);

final GSettings? _shortcutSettings;
final Settings? _shortcutSettings;

List<String> shortcut(String shortcutId) {
final keys = _shortcutSettings?.stringArrayValue(shortcutId);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import 'package:flutter/foundation.dart';
import 'package:gsettings/gsettings.dart';
import 'package:settings/schemas/schemas.dart';
import 'package:settings/services/settings_service.dart';

Expand All @@ -16,8 +15,8 @@ class MouseAndTouchpadModel extends ChangeNotifier {
service.lookup(schemaDesktopPeripheralsMouse),
_peripheralsTouchpadSettings = service.lookup(schemaPeripheralTouchpad);

final GSettings? _peripheralsMouseSettings;
final GSettings? _peripheralsTouchpadSettings;
final Settings? _peripheralsMouseSettings;
final Settings? _peripheralsTouchpadSettings;

// Mouse section

Expand Down
11 changes: 4 additions & 7 deletions lib/view/pages/notifications/notifications_model.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import 'package:flutter/foundation.dart';
import 'package:gsettings/gsettings.dart';
import 'package:settings/schemas/schemas.dart';
import 'package:settings/services/settings_service.dart';

Expand All @@ -10,14 +9,12 @@ class NotificationsModel extends ChangeNotifier {
NotificationsModel(SettingsService service)
: _notificationSettings = service.lookup(schemaNotifications);

final GSettings? _notificationSettings;
final Settings? _notificationSettings;

// Global section

bool? get doNotDisturb {
if (_notificationSettings != null) {
return !_notificationSettings!.boolValue(_showBannersKey);
}
return _notificationSettings?.boolValue(_showBannersKey) == false;
}

void setDoNotDisturb(bool value) {
Expand All @@ -37,7 +34,7 @@ class NotificationsModel extends ChangeNotifier {

List<String>? get applications => _notificationSettings
?.stringArrayValue('application-children')
.whereType<String>()
?.whereType<String>()
.toList();
}

Expand All @@ -50,7 +47,7 @@ class AppNotificationsModel extends ChangeNotifier {
service.lookup(_appSchemaId, path: _getPath(appId));

final String appId;
final GSettings? _appNotificationSettings;
final Settings? _appNotificationSettings;

static String _getPath(String appId) {
return '/' +
Expand Down
9 changes: 6 additions & 3 deletions lib/view/pages/power/power_settings.dart
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,13 @@ enum SleepInactiveType {
logout,
}

extension SleepInactiveTypeInt on int {
extension SleepInactiveTypeString on String {
SleepInactiveType? toSleepInactiveType() {
if (this < 0 || this >= SleepInactiveType.values.length) return null;
return SleepInactiveType.values[this];
try {
return SleepInactiveType.values.byName(this);
} on ArgumentError {
return null;
}
}
}

Expand Down
9 changes: 4 additions & 5 deletions lib/view/pages/power/power_settings_model.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import 'dart:async';

import 'package:gsettings/gsettings.dart';
import 'package:nm/nm.dart';
import 'package:safe_change_notifier/safe_change_notifier.dart';
import 'package:settings/services/bluetooth_service.dart';
Expand All @@ -23,8 +22,8 @@ class SuspendModel extends SafeChangeNotifier {
_bluetoothService = bluetooth,
_networkManager = network;

final GSettings? _daemonSettings;
final GSettings? _sessionSettings;
final Settings? _daemonSettings;
final Settings? _sessionSettings;
final BluetoothService _bluetoothService;
final NetworkManagerClient _networkManager;
final PowerSettingsService _powerService;
Expand Down Expand Up @@ -105,9 +104,9 @@ class SuspendModel extends SafeChangeNotifier {
}

SleepInactiveType? _sleepInactiveType(String key) =>
(_daemonSettings?.enumValue(key) ?? -1).toSleepInactiveType();
_daemonSettings?.stringValue(key)?.toSleepInactiveType();
void _setSleepInactiveType(String key, SleepInactiveType value) {
_daemonSettings?.setEnumValue(key, value.index);
_daemonSettings?.setValue(key, value.name);
notifyListeners();
}

Expand Down
9 changes: 6 additions & 3 deletions lib/view/pages/power/suspend.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,13 @@ enum PowerButtonAction {
interactive,
}

extension PowerButtonActionInt on int {
extension PowerButtonActionString on String {
PowerButtonAction? toPowerButtonAction() {
if (this < 0 || this >= PowerButtonAction.values.length) return null;
return PowerButtonAction.values[this];
try {
return PowerButtonAction.values.byName(this);
} on ArgumentError {
return null;
}
}
}

Expand Down
13 changes: 6 additions & 7 deletions lib/view/pages/power/suspend_model.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import 'package:gsettings/gsettings.dart';
import 'package:safe_change_notifier/safe_change_notifier.dart';
import 'package:settings/services/settings_service.dart';
import 'package:settings/view/pages/power/suspend.dart';
Expand All @@ -11,8 +10,8 @@ class SuspendModel extends SafeChangeNotifier {
: _daemonSettings = settings.lookup(_kDaemonSchema),
_interfaceSettings = settings.lookup(_kInterfaceSchema);

final GSettings? _daemonSettings;
final GSettings? _interfaceSettings;
final Settings? _daemonSettings;
final Settings? _interfaceSettings;

bool? get showBatteryPercentage =>
_interfaceSettings?.boolValue('show-battery-percentage');
Expand All @@ -21,12 +20,12 @@ class SuspendModel extends SafeChangeNotifier {
notifyListeners();
}

PowerButtonAction? get powerButtonAction =>
(_daemonSettings?.enumValue('power-button-action') ?? -1)
.toPowerButtonAction();
PowerButtonAction? get powerButtonAction => _daemonSettings
?.stringValue('power-button-action')
?.toPowerButtonAction();
void setPowerButtonAction(PowerButtonAction? value) {
if (value == null) return;
_daemonSettings?.setEnumValue('power-button-action', value.index);
_daemonSettings?.setValue('power-button-action', value.name);
notifyListeners();
}
}
Loading