From 4d2a3cd1eba4f2c9b3d1ae9f55ae388c483e0b0e Mon Sep 17 00:00:00 2001 From: Frederik Feichtmeier Date: Sat, 5 Aug 2023 16:46:41 +0200 Subject: [PATCH] Re-animate this project (#424) --- .github/workflows/analyze.yml | 23 - .github/workflows/build.yml | 30 -- .github/workflows/ci.yml | 56 +++ .github/workflows/format.yml | 23 - .github/workflows/test.yml | 22 - analysis_options.yaml | 27 +- lib/app.dart | 7 +- lib/l10n/l10n.dart | 2 +- lib/main.dart | 2 +- lib/services/date_time_service.dart | 8 +- .../display/display_dbus_service.dart | 13 +- lib/services/display/display_service.dart | 20 +- .../display/objects/dbus_displays_config.dart | 36 +- lib/services/house_keeping_service.dart | 12 +- lib/services/input_source_service.dart | 11 +- lib/services/locale_service.dart | 4 +- lib/services/settings_service.dart | 2 +- lib/utils.dart | 8 +- .../view/common}/yaru_checkbox_row.dart | 0 .../view/common}/yaru_extra_option_row.dart | 0 .../view/common}/yaru_single_info_row.dart | 0 .../view/common}/yaru_slider_row.dart | 0 .../view/common}/yaru_switch_row.dart | 0 .../view/common}/yaru_toggle_buttons_row.dart | 2 +- lib/view/duration_dropdown_button.dart | 4 +- lib/view/link.dart | 3 +- .../accessibility/accessibility_model.dart | 45 +- .../accessibility/accessibility_page.dart | 2 +- .../pages/accessibility/global_section.dart | 6 +- .../pages/accessibility/hearing_section.dart | 14 +- .../pointing_and_clicking_section.dart | 21 +- .../pages/accessibility/seeing_section.dart | 65 ++- .../pages/accessibility/typing_section.dart | 47 +- .../pages/appearance/appearance_page.dart | 2 +- lib/view/pages/appearance/dock_model.dart | 28 +- lib/view/pages/appearance/dock_section.dart | 51 +- lib/view/pages/appearance/theme_section.dart | 12 +- lib/view/pages/apps/apps_page.dart | 2 +- .../bluetooth/bluetooth_device_model.dart | 9 +- .../pages/bluetooth/bluetooth_device_row.dart | 8 +- lib/view/pages/bluetooth/bluetooth_model.dart | 17 +- lib/view/pages/bluetooth/bluetooth_page.dart | 7 +- lib/view/pages/color/color_page.dart | 2 +- .../pages/connections/connections_page.dart | 3 +- .../models/access_point_model.dart | 15 +- .../connections/models/wifi_device_model.dart | 23 +- .../pages/connections/models/wifi_model.dart | 17 +- .../widgets/access_point_tile.dart | 8 +- .../widgets/authentication_dialog.dart | 11 +- lib/view/pages/connections/wifi_content.dart | 8 +- .../pages/date_and_time/date_time_model.dart | 29 +- .../pages/date_and_time/date_time_page.dart | 12 +- .../pages/default_apps/default_apps_page.dart | 2 +- lib/view/pages/displays/displays_model.dart | 32 +- lib/view/pages/displays/displays_page.dart | 5 +- lib/view/pages/displays/nightlight_model.dart | 12 +- lib/view/pages/displays/nightlight_page.dart | 7 +- .../displays/widgets/monitor_section.dart | 10 +- lib/view/pages/info/info_page.dart | 21 +- .../pages/keyboard/input_source_model.dart | 25 +- .../pages/keyboard/input_source_section.dart | 2 +- .../input_source_selection_section.dart | 22 +- lib/view/pages/keyboard/keyboard_page.dart | 2 +- .../keyboard/keyboard_settings_page.dart | 4 +- .../pages/keyboard/keyboard_shortcut_row.dart | 78 +-- .../keyboard/keyboard_shortcuts_model.dart | 3 +- .../keyboard/keyboard_shortcuts_page.dart | 2 +- .../keyboard/special_characters_model.dart | 25 +- .../keyboard/special_characters_section.dart | 14 +- .../mouse_and_touchpad/general_section.dart | 4 +- .../mouse_and_touchpad_model.dart | 15 +- .../mouse_and_touchpad_page.dart | 2 +- .../mouse_and_touchpad/mouse_section.dart | 5 +- .../mouse_and_touchpad/touchpad_section.dart | 5 +- .../multitasking/multi_tasking_model.dart | 25 +- .../multitasking/multi_tasking_page.dart | 79 +-- .../app_notifications_section.dart | 6 +- .../global_notifications_section.dart | 8 +- .../notifications/notifications_model.dart | 16 +- .../notifications/notifications_page.dart | 2 +- .../online_accounts/online_accounts_page.dart | 2 +- lib/view/pages/power/battery_section.dart | 2 +- lib/view/pages/power/battery_widgets.dart | 6 +- lib/view/pages/power/lid_close_model.dart | 3 +- lib/view/pages/power/lid_close_section.dart | 2 +- lib/view/pages/power/power_page.dart | 2 +- .../pages/power/power_profile_section.dart | 4 +- .../pages/power/power_profile_widgets.dart | 4 +- .../pages/power/power_settings_dialogs.dart | 7 +- .../pages/power/power_settings_section.dart | 7 +- lib/view/pages/power/suspend_section.dart | 4 +- .../pages/privacy/connectivity_model.dart | 3 +- lib/view/pages/privacy/connectivity_page.dart | 4 +- .../pages/privacy/house_keeping_page.dart | 12 +- lib/view/pages/privacy/location_model.dart | 3 +- lib/view/pages/privacy/location_page.dart | 4 +- lib/view/pages/privacy/privacy_model.dart | 5 +- lib/view/pages/privacy/privacy_page.dart | 2 +- lib/view/pages/privacy/reporting_model.dart | 3 +- lib/view/pages/privacy/reporting_page.dart | 4 +- .../pages/privacy/screen_saver_model.dart | 7 +- lib/view/pages/privacy/screen_saver_page.dart | 4 +- .../region_and_language_model.dart | 5 +- .../region_and_language_page.dart | 12 +- .../removable_media_model.dart | 9 +- .../removable_media/removable_media_page.dart | 12 +- lib/view/pages/search/search_page.dart | 2 +- lib/view/pages/settings_alert_dialog.dart | 4 +- lib/view/pages/settings_page.dart | 4 +- lib/view/pages/settings_simple_dialog.dart | 10 +- lib/view/pages/sound/sound_model.dart | 7 +- lib/view/pages/sound/sound_page.dart | 10 +- lib/view/pages/users/users.dart | 2 +- .../wallpaper/color_shading_option_row.dart | 10 +- lib/view/pages/wallpaper/wallpaper_model.dart | 72 ++- lib/view/pages/wallpaper/wallpaper_page.dart | 60 ++- lib/view/search_app_bar.dart | 4 +- lib/view/section_description.dart | 7 +- lib/view/selectable_svg_image.dart | 14 +- packages/yaru_settings/.gitignore | 30 -- packages/yaru_settings/.metadata | 10 - packages/yaru_settings/LICENSE | 373 -------------- packages/yaru_settings/lib/yaru_settings.dart | 8 - packages/yaru_settings/pubspec.yaml | 21 - pubspec.lock | 473 +++++++++--------- pubspec.yaml | 40 +- test/test_helper.dart | 4 +- test/widgets/app_theme_test.dart | 11 +- .../widgets}/yaru_check_box_row_test.dart | 7 +- .../widgets}/yaru_extra_options_row_test.dart | 6 +- .../widgets}/yaru_single_info_row_test.dart | 4 +- .../widgets}/yaru_switch_row_test.dart | 7 +- .../yaru_togggle_button_row_test.dart | 6 +- 133 files changed, 1035 insertions(+), 1515 deletions(-) delete mode 100644 .github/workflows/analyze.yml delete mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/ci.yml delete mode 100644 .github/workflows/format.yml delete mode 100644 .github/workflows/test.yml rename {packages/yaru_settings/lib/src => lib/view/common}/yaru_checkbox_row.dart (100%) rename {packages/yaru_settings/lib/src => lib/view/common}/yaru_extra_option_row.dart (100%) rename {packages/yaru_settings/lib/src => lib/view/common}/yaru_single_info_row.dart (100%) rename {packages/yaru_settings/lib/src => lib/view/common}/yaru_slider_row.dart (100%) rename {packages/yaru_settings/lib/src => lib/view/common}/yaru_switch_row.dart (100%) rename {packages/yaru_settings/lib/src => lib/view/common}/yaru_toggle_buttons_row.dart (100%) delete mode 100644 packages/yaru_settings/.gitignore delete mode 100644 packages/yaru_settings/.metadata delete mode 100644 packages/yaru_settings/LICENSE delete mode 100644 packages/yaru_settings/lib/yaru_settings.dart delete mode 100644 packages/yaru_settings/pubspec.yaml rename {packages/yaru_settings/test => test/widgets}/yaru_check_box_row_test.dart (80%) rename {packages/yaru_settings/test => test/widgets}/yaru_extra_options_row_test.dart (86%) rename {packages/yaru_settings/test => test/widgets}/yaru_single_info_row_test.dart (84%) rename {packages/yaru_settings/test => test/widgets}/yaru_switch_row_test.dart (79%) rename {packages/yaru_settings/test => test/widgets}/yaru_togggle_button_row_test.dart (78%) diff --git a/.github/workflows/analyze.yml b/.github/workflows/analyze.yml deleted file mode 100644 index e308df13..00000000 --- a/.github/workflows/analyze.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: analyze - -on: - push: - branches: [master] - pull_request: - branches: [master] - -jobs: - build: - name: analyze - runs-on: ubuntu-22.04 - - steps: - - uses: actions/checkout@v2 - - - uses: subosito/flutter-action@v1 - with: - channel: "stable" - - # Consider passing '--fatal-infos' for slightly stricter analysis. - - name: Analyze project source - run: flutter analyze diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 7f052af8..00000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: build - -on: - push: - branches: [master] - pull_request: - branches: [master] - -jobs: - with-flutter-action: - name: with-flutter-action - runs-on: ubuntu-22.04 - - steps: - - uses: actions/checkout@v2 - - - uses: subosito/flutter-action@v1 - with: - channel: "stable" - - run: sudo apt -y install git curl cmake ninja-build make clang libgtk-3-dev pkg-config - - run: flutter build linux -v - - with-flutter-snap: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - run: sudo snap install flutter --classic - - run: flutter build linux -v - diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..922979c2 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,56 @@ +name: CI + +on: + push: + branches: + - master + pull_request: + branches: + - master + workflow_dispatch: + +env: + FLUTTER_VERSION: 3.10.x + +jobs: + analyze: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v3 + - uses: subosito/flutter-action@v2 + with: + flutter-version: ${{env.FLUTTER_VERSION}} + - run: flutter pub get + - run: flutter analyze + + format: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v3 + - uses: subosito/flutter-action@v2 + with: + flutter-version: ${{env.FLUTTER_VERSION}} + - run: dart format --set-exit-if-changed . + + linux: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v3 + - uses: subosito/flutter-action@v2 + with: + flutter-version: ${{env.FLUTTER_VERSION}} + - run: sudo apt update + - run: sudo apt install -y clang cmake curl libgtk-3-dev ninja-build pkg-config unzip + env: + DEBIAN_FRONTEND: noninteractive + - run: flutter pub get + - run: flutter build linux -v + + test: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v3 + - uses: subosito/flutter-action@v2 + with: + flutter-version: ${{env.FLUTTER_VERSION}} + - run: flutter test diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml deleted file mode 100644 index f370fcf4..00000000 --- a/.github/workflows/format.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: format - -on: - push: - branches: [master] - pull_request: - branches: [master] - -jobs: - build: - name: format - runs-on: ubuntu-22.04 - - steps: - - uses: actions/checkout@v2 - - - uses: subosito/flutter-action@v1 - with: - channel: "stable" - - # Consider passing '--fatal-infos' for slightly stricter analysis. - - name: format - run: flutter format --set-exit-if-changed . \ No newline at end of file diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index c6c81a0b..00000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: test - -on: - push: - branches: [master] - pull_request: - branches: [master] - -jobs: - build: - name: test - runs-on: ubuntu-22.04 - - steps: - - uses: actions/checkout@v2 - - - uses: subosito/flutter-action@v1 - with: - channel: "stable" - - - name: test - run: flutter test diff --git a/analysis_options.yaml b/analysis_options.yaml index e09a3f2f..15f4a4f6 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -10,9 +10,28 @@ analyzer: linter: rules: - avoid_print: true - cancel_subscriptions: true prefer_single_quotes: true - prefer_const_constructors: true - prefer_const_declarations: true require_trailing_commas: true + always_declare_return_types: true + avoid_catches_without_on_clauses: true + avoid_equals_and_hash_code_on_mutable_classes: true + avoid_types_on_closure_parameters: true + cancel_subscriptions: true + directives_ordering: true + eol_at_end_of_file: true + omit_local_variable_types: true + prefer_asserts_in_initializer_lists: true + prefer_const_constructors: true + prefer_final_in_for_each: true + prefer_final_locals: true + prefer_null_aware_method_calls: true + prefer_null_aware_operators: true + sort_constructors_first: true + sort_unnamed_constructors_first: true + sort_pub_dependencies: true + type_annotate_public_apis: true + unawaited_futures: true + unnecessary_lambdas: true + unnecessary_parenthesis: true + use_named_constants: true + use_super_parameters: true diff --git a/lib/app.dart b/lib/app.dart index 0e91cd0a..37cb02dd 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -8,8 +8,8 @@ import 'package:yaru_widgets/yaru_widgets.dart'; class UbuntuSettingsApp extends StatefulWidget { const UbuntuSettingsApp({ - Key? key, - }) : super(key: key); + super.key, + }); @override State createState() => _UbuntuSettingsAppState(); @@ -59,7 +59,8 @@ class _UbuntuSettingsAppState extends State { minPageWidth: kYaruMasterDetailBreakpoint / 2, ), length: pages.length, - tileBuilder: (context, index, selected) => YaruMasterTile( + tileBuilder: (context, index, selected, availableWidth) => + YaruMasterTile( title: pages[index].titleBuilder(context), leading: pages[index].iconBuilder(context, selected), ), diff --git a/lib/l10n/l10n.dart b/lib/l10n/l10n.dart index 4f6d51bf..d19e75fd 100644 --- a/lib/l10n/l10n.dart +++ b/lib/l10n/l10n.dart @@ -1,5 +1,5 @@ -import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter/widgets.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; export 'package:flutter_gen/gen_l10n/app_localizations.dart'; diff --git a/lib/main.dart b/lib/main.dart index 0572eca1..cd16751c 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -87,7 +87,7 @@ void main() async { ), Provider( create: (_) => DisplayService(), - dispose: (_, DisplayService service) => service.dispose(), + dispose: (_, service) => service.dispose(), ), ], child: const UbuntuSettingsApp(), diff --git a/lib/services/date_time_service.dart b/lib/services/date_time_service.dart index e9a66b52..a8c2bf9c 100644 --- a/lib/services/date_time_service.dart +++ b/lib/services/date_time_service.dart @@ -128,18 +128,18 @@ extension _DateTimeRemoteObject on DBusRemoteObject { Future setTimeZone(String timezone) async { final args = [DBusString(timezone), const DBusBoolean(false)]; - callMethod(_kDateTimeInterface, _kSetTimezoneMethodName, args); + await callMethod(_kDateTimeInterface, _kSetTimezoneMethodName, args); } Future setTime(int time) async { - bool? ntp = await getNtp(); + final ntp = await getNtp(); if (ntp == null || ntp == true) return; final args = [ DBusInt64(time), const DBusBoolean(false), const DBusBoolean(false) ]; - callMethod(_kDateTimeInterface, _kSetTimeMethodName, args); + await callMethod(_kDateTimeInterface, _kSetTimeMethodName, args); } Future getDateTime() async { @@ -156,7 +156,7 @@ extension _DateTimeRemoteObject on DBusRemoteObject { Future setNtp(bool? value) async { if (value == null) return; final args = [DBusBoolean(value), const DBusBoolean(false)]; - callMethod(_kDateTimeInterface, _kSetNtpMethodName, args); + await callMethod(_kDateTimeInterface, _kSetNtpMethodName, args); } } diff --git a/lib/services/display/display_dbus_service.dart b/lib/services/display/display_dbus_service.dart index 44025905..3e1b2a2c 100644 --- a/lib/services/display/display_dbus_service.dart +++ b/lib/services/display/display_dbus_service.dart @@ -1,6 +1,6 @@ import 'package:dbus/dbus.dart'; -import 'package:settings/services/display/objects/dbus_displays_config.dart'; import 'package:settings/generated/dbus/display-config-remote-object.dart'; +import 'package:settings/services/display/objects/dbus_displays_config.dart'; const _displaysInterface = 'org.gnome.Mutter.DisplayConfig'; @@ -24,8 +24,7 @@ const _displayPath = '/org/gnome/Mutter/DisplayConfig'; class DisplayDBusService { DisplayDBusService() : _object = _createObject() { /// Listen to signal stream, when a change occur, we update our data - _object.monitorsChanged - .listen((OrgGnomeMutterDisplayConfigMonitorsChanged signal) { + _object.monitorsChanged.listen((signal) { if (signal.name == 'MonitorsChanged') { getCurrent(); } @@ -49,8 +48,8 @@ class DisplayDBusService { } Future getCurrent() async { - List? state = await _object.callGetCurrentState(); - List list = state.map((e) => _toNative(e)).toList(); + final state = await _object.callGetCurrentState(); + final list = state.map(_toNative).toList(); return DBusDisplaysConfig(list); } @@ -73,9 +72,9 @@ class DisplayDBusService { output = value.map((key, value) => MapEntry(_toNative(key), _toNative(value))); } else if (value is Iterable) { - output = value.map((e) => _toNative(e)).toList(); + output = value.map(_toNative).toList(); } else if (value is DBusArray) { - output = value.toNative().map((e) => _toNative(e)).toList(); + output = value.toNative().map(_toNative).toList(); } else if (value is DBusValue) { output = value.toNative(); } else { diff --git a/lib/services/display/display_service.dart b/lib/services/display/display_service.dart index 99915348..b5231c69 100644 --- a/lib/services/display/display_service.dart +++ b/lib/services/display/display_service.dart @@ -11,7 +11,7 @@ class DisplayService { : _displayDBusService = DisplayDBusService(), _currentNotifier = ValueNotifier(null), _initialNotifier = ValueNotifier(null) { - _loadState(notifyStream: true).then((DisplaysConfiguration value) { + _loadState(notifyStream: true).then((value) { _initialNotifier.value = value; _currentNotifier.value = value; }); @@ -54,14 +54,12 @@ class DisplayService { /// never pass here) if (_currentNotifier.value == null) {} - final DBusDisplaysConfig displayConfig = - await _displayDBusService.getCurrent(); + final displayConfig = await _displayDBusService.getCurrent(); - List logicalParameterValues = []; + final logicalParameterValues = []; - for (int i = 0; i < displayConfig.monitorsLength; i++) { - final DisplayMonitorConfiguration confMonitor = - _currentNotifier.value!.configurations[i]; + for (var i = 0; i < displayConfig.monitorsLength; i++) { + final confMonitor = _currentNotifier.value!.configurations[i]; // x ; y ; scale ; transform(rotation) ; primary ; monitors logicalParameterValues.add( @@ -106,7 +104,7 @@ class DisplayService { } Future _loadState({required bool notifyStream}) { - final Future future = _displayDBusService + final future = _displayDBusService .getCurrent() .then(_mapToModel) .then((value) => latest = value); @@ -118,10 +116,10 @@ class DisplayService { } DisplaysConfiguration _mapToModel(DBusDisplaysConfig dbusConfiguration) { - final int monitorsCount = dbusConfiguration.monitorsLength; - final List confs = []; + final monitorsCount = dbusConfiguration.monitorsLength; + final confs = []; - for (int i = 0; i < monitorsCount; i++) { + for (var i = 0; i < monitorsCount; i++) { /// map data only if there's a current option /// if no current option /// => monitor not used diff --git a/lib/services/display/objects/dbus_displays_config.dart b/lib/services/display/objects/dbus_displays_config.dart index a5ef29b3..a4c1b56b 100644 --- a/lib/services/display/objects/dbus_displays_config.dart +++ b/lib/services/display/objects/dbus_displays_config.dart @@ -1,3 +1,5 @@ +// ignore_for_file: type_annotate_public_apis + class DBusDisplaysConfig { DBusDisplaysConfig(List list) : serial = list[0], @@ -22,15 +24,19 @@ class DBusDisplaysConfig { /// * s vendor: vendor name /// * s product: product name /// * s serial: product serial - _Identity identity(index) => _Identity(_monitors[index][0]); + Identity identity(index) => Identity(_monitors[index][0]); /// * a(siiddada{sv}) modes: available modes - List<_Option> availableOptions(index) => - (_monitors[index][1] as List).map((e) => _Option(e)).toList(); - - _Option? currentOption(index) { - final List<_Option> options = availableOptions(index); - bool predicate(_Option option) => option.isCurrent; + List