diff --git a/.github/workflows/alpha.yml b/.github/workflows/alpha.yml index c563ecc4b..dd22ff52c 100644 --- a/.github/workflows/alpha.yml +++ b/.github/workflows/alpha.yml @@ -77,7 +77,7 @@ jobs: id: fvm-config-action uses: kuhnroyal/flutter-fvm-config-action@60c14af316b09f8819202d845391260cf3b979c9 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 + - uses: subosito/flutter-action@74af56c5ed2697ba4621264652728e8d217e53d3 with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} @@ -117,7 +117,7 @@ jobs: id: fvm-config-action uses: kuhnroyal/flutter-fvm-config-action@60c14af316b09f8819202d845391260cf3b979c9 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 + - uses: subosito/flutter-action@74af56c5ed2697ba4621264652728e8d217e53d3 with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} @@ -228,7 +228,7 @@ jobs: id: fvm-config-action uses: kuhnroyal/flutter-fvm-config-action@60c14af316b09f8819202d845391260cf3b979c9 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 + - uses: subosito/flutter-action@74af56c5ed2697ba4621264652728e8d217e53d3 with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} @@ -291,7 +291,7 @@ jobs: id: fvm-config-action uses: kuhnroyal/flutter-fvm-config-action@60c14af316b09f8819202d845391260cf3b979c9 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 + - uses: subosito/flutter-action@74af56c5ed2697ba4621264652728e8d217e53d3 with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index fdf416c11..a71f9bde2 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -79,7 +79,7 @@ jobs: id: fvm-config-action uses: kuhnroyal/flutter-fvm-config-action@60c14af316b09f8819202d845391260cf3b979c9 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 + - uses: subosito/flutter-action@74af56c5ed2697ba4621264652728e8d217e53d3 with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} @@ -127,7 +127,7 @@ jobs: id: fvm-config-action uses: kuhnroyal/flutter-fvm-config-action@60c14af316b09f8819202d845391260cf3b979c9 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 + - uses: subosito/flutter-action@74af56c5ed2697ba4621264652728e8d217e53d3 with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} @@ -191,7 +191,7 @@ jobs: id: fvm-config-action uses: kuhnroyal/flutter-fvm-config-action@60c14af316b09f8819202d845391260cf3b979c9 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 + - uses: subosito/flutter-action@74af56c5ed2697ba4621264652728e8d217e53d3 with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} @@ -240,7 +240,7 @@ jobs: id: fvm-config-action uses: kuhnroyal/flutter-fvm-config-action@60c14af316b09f8819202d845391260cf3b979c9 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 + - uses: subosito/flutter-action@74af56c5ed2697ba4621264652728e8d217e53d3 with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} diff --git a/.github/workflows/cli_ci.yml b/.github/workflows/cli_ci.yml index 85f3be25e..308983763 100644 --- a/.github/workflows/cli_ci.yml +++ b/.github/workflows/cli_ci.yml @@ -87,7 +87,7 @@ jobs: id: fvm-config-action uses: kuhnroyal/flutter-fvm-config-action@60c14af316b09f8819202d845391260cf3b979c9 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 + - uses: subosito/flutter-action@74af56c5ed2697ba4621264652728e8d217e53d3 with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} @@ -124,7 +124,7 @@ jobs: id: fvm-config-action uses: kuhnroyal/flutter-fvm-config-action@60c14af316b09f8819202d845391260cf3b979c9 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 + - uses: subosito/flutter-action@74af56c5ed2697ba4621264652728e8d217e53d3 with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} diff --git a/.github/workflows/console_cd.yml b/.github/workflows/console_cd.yml index 6d6021cd0..32ec21a42 100644 --- a/.github/workflows/console_cd.yml +++ b/.github/workflows/console_cd.yml @@ -81,7 +81,7 @@ jobs: id: fvm-config-action uses: kuhnroyal/flutter-fvm-config-action@60c14af316b09f8819202d845391260cf3b979c9 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 + - uses: subosito/flutter-action@74af56c5ed2697ba4621264652728e8d217e53d3 with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} diff --git a/.github/workflows/integration_tests_app_ci.yml b/.github/workflows/integration_tests_app_ci.yml index 4106abaaa..872608016 100644 --- a/.github/workflows/integration_tests_app_ci.yml +++ b/.github/workflows/integration_tests_app_ci.yml @@ -179,7 +179,7 @@ jobs: id: fvm-config-action uses: kuhnroyal/flutter-fvm-config-action@60c14af316b09f8819202d845391260cf3b979c9 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 + - uses: subosito/flutter-action@74af56c5ed2697ba4621264652728e8d217e53d3 with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} @@ -231,7 +231,7 @@ jobs: id: fvm-config-action uses: kuhnroyal/flutter-fvm-config-action@60c14af316b09f8819202d845391260cf3b979c9 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 + - uses: subosito/flutter-action@74af56c5ed2697ba4621264652728e8d217e53d3 with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} @@ -310,7 +310,7 @@ jobs: id: fvm-config-action uses: kuhnroyal/flutter-fvm-config-action@60c14af316b09f8819202d845391260cf3b979c9 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 + - uses: subosito/flutter-action@74af56c5ed2697ba4621264652728e8d217e53d3 with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} diff --git a/.github/workflows/licence.yml b/.github/workflows/licence.yml index 2875a3845..23cf0cfa8 100644 --- a/.github/workflows/licence.yml +++ b/.github/workflows/licence.yml @@ -45,7 +45,7 @@ jobs: id: fvm-config-action uses: kuhnroyal/flutter-fvm-config-action@60c14af316b09f8819202d845391260cf3b979c9 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 + - uses: subosito/flutter-action@74af56c5ed2697ba4621264652728e8d217e53d3 with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} diff --git a/.github/workflows/safe_app_ci.yml b/.github/workflows/safe_app_ci.yml index 30f31c024..890e36223 100644 --- a/.github/workflows/safe_app_ci.yml +++ b/.github/workflows/safe_app_ci.yml @@ -104,7 +104,7 @@ jobs: id: fvm-config-action uses: kuhnroyal/flutter-fvm-config-action@60c14af316b09f8819202d845391260cf3b979c9 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 + - uses: subosito/flutter-action@74af56c5ed2697ba4621264652728e8d217e53d3 with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} @@ -138,7 +138,7 @@ jobs: id: fvm-config-action uses: kuhnroyal/flutter-fvm-config-action@60c14af316b09f8819202d845391260cf3b979c9 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 + - uses: subosito/flutter-action@74af56c5ed2697ba4621264652728e8d217e53d3 with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} @@ -175,7 +175,7 @@ jobs: id: fvm-config-action uses: kuhnroyal/flutter-fvm-config-action@60c14af316b09f8819202d845391260cf3b979c9 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 + - uses: subosito/flutter-action@74af56c5ed2697ba4621264652728e8d217e53d3 with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} diff --git a/.github/workflows/safe_console_ci.yml b/.github/workflows/safe_console_ci.yml index 57e630352..fc9ea4b49 100644 --- a/.github/workflows/safe_console_ci.yml +++ b/.github/workflows/safe_console_ci.yml @@ -103,7 +103,7 @@ jobs: id: fvm-config-action uses: kuhnroyal/flutter-fvm-config-action@60c14af316b09f8819202d845391260cf3b979c9 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 + - uses: subosito/flutter-action@74af56c5ed2697ba4621264652728e8d217e53d3 with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} diff --git a/.github/workflows/safe_website_ci.yml b/.github/workflows/safe_website_ci.yml index c013fbe08..f3c346c99 100644 --- a/.github/workflows/safe_website_ci.yml +++ b/.github/workflows/safe_website_ci.yml @@ -103,7 +103,7 @@ jobs: id: fvm-config-action uses: kuhnroyal/flutter-fvm-config-action@60c14af316b09f8819202d845391260cf3b979c9 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 + - uses: subosito/flutter-action@74af56c5ed2697ba4621264652728e8d217e53d3 with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} diff --git a/.github/workflows/stable.yml b/.github/workflows/stable.yml index ac59cae10..a4bb7b568 100644 --- a/.github/workflows/stable.yml +++ b/.github/workflows/stable.yml @@ -79,7 +79,7 @@ jobs: id: fvm-config-action uses: kuhnroyal/flutter-fvm-config-action@60c14af316b09f8819202d845391260cf3b979c9 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 + - uses: subosito/flutter-action@74af56c5ed2697ba4621264652728e8d217e53d3 with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} @@ -128,7 +128,7 @@ jobs: id: fvm-config-action uses: kuhnroyal/flutter-fvm-config-action@60c14af316b09f8819202d845391260cf3b979c9 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 + - uses: subosito/flutter-action@74af56c5ed2697ba4621264652728e8d217e53d3 with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} @@ -193,7 +193,7 @@ jobs: id: fvm-config-action uses: kuhnroyal/flutter-fvm-config-action@60c14af316b09f8819202d845391260cf3b979c9 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 + - uses: subosito/flutter-action@74af56c5ed2697ba4621264652728e8d217e53d3 with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} @@ -242,7 +242,7 @@ jobs: id: fvm-config-action uses: kuhnroyal/flutter-fvm-config-action@60c14af316b09f8819202d845391260cf3b979c9 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 + - uses: subosito/flutter-action@74af56c5ed2697ba4621264652728e8d217e53d3 with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} diff --git a/.github/workflows/unsafe_app_ci.yml b/.github/workflows/unsafe_app_ci.yml index 39a993f4f..948b19829 100644 --- a/.github/workflows/unsafe_app_ci.yml +++ b/.github/workflows/unsafe_app_ci.yml @@ -150,7 +150,7 @@ jobs: id: fvm-config-action uses: kuhnroyal/flutter-fvm-config-action@60c14af316b09f8819202d845391260cf3b979c9 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 + - uses: subosito/flutter-action@74af56c5ed2697ba4621264652728e8d217e53d3 with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} diff --git a/.github/workflows/unsafe_console_ci.yml b/.github/workflows/unsafe_console_ci.yml index e1e0f62a0..9c6d339dc 100644 --- a/.github/workflows/unsafe_console_ci.yml +++ b/.github/workflows/unsafe_console_ci.yml @@ -149,7 +149,7 @@ jobs: id: fvm-config-action uses: kuhnroyal/flutter-fvm-config-action@60c14af316b09f8819202d845391260cf3b979c9 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 + - uses: subosito/flutter-action@74af56c5ed2697ba4621264652728e8d217e53d3 with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} diff --git a/.github/workflows/unsafe_website_ci.yml b/.github/workflows/unsafe_website_ci.yml index 2092d749b..73dad74e4 100644 --- a/.github/workflows/unsafe_website_ci.yml +++ b/.github/workflows/unsafe_website_ci.yml @@ -149,7 +149,7 @@ jobs: id: fvm-config-action uses: kuhnroyal/flutter-fvm-config-action@60c14af316b09f8819202d845391260cf3b979c9 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 + - uses: subosito/flutter-action@74af56c5ed2697ba4621264652728e8d217e53d3 with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} diff --git a/.github/workflows/website_cd.yml b/.github/workflows/website_cd.yml index c48b8ddf5..c14c3dc1e 100644 --- a/.github/workflows/website_cd.yml +++ b/.github/workflows/website_cd.yml @@ -81,7 +81,7 @@ jobs: id: fvm-config-action uses: kuhnroyal/flutter-fvm-config-action@60c14af316b09f8819202d845391260cf3b979c9 - - uses: subosito/flutter-action@44ac965b96f18d999802d4b807e3256d5a3f9fa1 + - uses: subosito/flutter-action@74af56c5ed2697ba4621264652728e8d217e53d3 with: flutter-version: ${{ steps.fvm-config-action.outputs.FLUTTER_VERSION }} channel: ${{ steps.fvm-config-action.outputs.FLUTTER_CHANNEL }} diff --git a/.gitignore b/.gitignore index d2412c917..8d6c4a84a 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ coverage/ .vscode/* !.vscode/launch.json !.vscode/settings.json +!.vscode/tasks.json # FVM will create a relative symlink in your project from .fvm/versions/ to # the cache of the selected version. We should add this to our .gitignore. diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 000000000..af1896fee --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,22 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + // This task generates the l10n files for the + // sharezone_localizations. + // + // FVM is required to run this task. + "label": "Generate l10n for sharezone_localizations", + "type": "shell", + // Additionally, we add the license header again (the "flutter + // gen-l10n" always removes the license header). + "command": "fvm flutter gen-l10n && addlicense -c \"Sharezone UG (haftungsbeschränkt)\" -f ../../header_template.txt .", + "options": { + "cwd": "${workspaceFolder}/lib/sharezone_localizations" + }, + "problemMatcher": [] + } + ] +} \ No newline at end of file diff --git a/app/lib/activation_code/src/bloc/enter_activation_code_bloc.dart b/app/lib/activation_code/src/bloc/enter_activation_code_bloc.dart index 9f08d173b..8294fbea0 100644 --- a/app/lib/activation_code/src/bloc/enter_activation_code_bloc.dart +++ b/app/lib/activation_code/src/bloc/enter_activation_code_bloc.dart @@ -15,6 +15,7 @@ import 'package:flutter/material.dart'; import 'package:key_value_store/key_value_store.dart'; import 'package:rxdart/rxdart.dart'; import 'package:helper_functions/helper_functions.dart'; +import 'package:sharezone/l10n/feature_flag_l10n.dart'; import '../models/enter_activation_code_result.dart'; import 'enter_activation_code_activator.dart'; @@ -26,6 +27,7 @@ class EnterActivationCodeBloc extends BlocBase { final _enterActivationCodeSubject = BehaviorSubject(); final KeyValueStore keyValueStore; + final FeatureFlagl10n featureFlagl10n; String? _lastEnteredValue; @@ -34,6 +36,7 @@ class EnterActivationCodeBloc extends BlocBase { this.crashAnalytics, this.appFunctions, this.keyValueStore, + this.featureFlagl10n, ) { _changeEnterActivationCodeResult(NoDataEnterActivationCodeResult()); } @@ -89,6 +92,11 @@ class EnterActivationCodeBloc extends BlocBase { return; } + if (_lastEnteredValue?.trim().toLowerCase() == 'l10n') { + _togglel10nFeatureFlag(); + return; + } + _changeEnterActivationCodeResult(LoadingEnterActivationCodeResult()); final enterActivationCodeResult = await _runAppFunction(enteredValue); @@ -107,6 +115,18 @@ class EnterActivationCodeBloc extends BlocBase { ); } + void _togglel10nFeatureFlag() { + final currentValue = featureFlagl10n.isl10nEnabled; + featureFlagl10n.toggle(); + + _changeEnterActivationCodeResult( + SuccessfulEnterActivationCodeResult( + 'l10n', + 'l10n wurde ${!currentValue ? 'aktiviert' : 'deaktiviert'}. Starte die App neu, um die Änderungen zu sehen.', + ), + ); + } + Future _clearCache(BuildContext context) async { await Future.wait([ keyValueStore.clear(), diff --git a/app/lib/activation_code/src/bloc/enter_activation_code_bloc_factory.dart b/app/lib/activation_code/src/bloc/enter_activation_code_bloc_factory.dart index adf961012..5c752eab4 100644 --- a/app/lib/activation_code/src/bloc/enter_activation_code_bloc_factory.dart +++ b/app/lib/activation_code/src/bloc/enter_activation_code_bloc_factory.dart @@ -12,18 +12,21 @@ import 'package:bloc_base/bloc_base.dart'; import 'package:crash_analytics/crash_analytics.dart'; import 'package:key_value_store/key_value_store.dart'; import 'package:sharezone/activation_code/src/bloc/enter_activation_code_bloc.dart'; +import 'package:sharezone/l10n/feature_flag_l10n.dart'; class EnterActivationCodeBlocFactory extends BlocBase { final CrashAnalytics crashAnalytics; final Analytics analytics; final SharezoneAppFunctions appFunctions; final KeyValueStore keyValueStore; + final FeatureFlagl10n featureFlagl10n; EnterActivationCodeBlocFactory({ required this.analytics, required this.crashAnalytics, required this.appFunctions, required this.keyValueStore, + required this.featureFlagl10n, }); EnterActivationCodeBloc createBloc() { @@ -32,6 +35,7 @@ class EnterActivationCodeBlocFactory extends BlocBase { crashAnalytics, appFunctions, keyValueStore, + featureFlagl10n, ); } diff --git a/app/lib/l10n/feature_flag_l10n.dart b/app/lib/l10n/feature_flag_l10n.dart new file mode 100644 index 000000000..693a3fb26 --- /dev/null +++ b/app/lib/l10n/feature_flag_l10n.dart @@ -0,0 +1,42 @@ +// Copyright (c) 2024 Sharezone UG (haftungsbeschränkt) +// Licensed under the EUPL-1.2-or-later. +// +// You may obtain a copy of the Licence at: +// https://joinup.ec.europa.eu/software/page/eupl +// +// SPDX-License-Identifier: EUPL-1.2 + +import 'dart:async'; + +import 'package:flutter/foundation.dart'; +import 'package:sharezone/util/cache/streaming_key_value_store.dart'; + +class FeatureFlagl10n extends ChangeNotifier { + FeatureFlagl10n(this.keyValueStore) { + _subscription = keyValueStore + .getBool('l10n_enabled', defaultValue: false) + .listen((event) { + final newValue = event == true; + if (isl10nEnabled != newValue) { + isl10nEnabled = newValue; + notifyListeners(); + } + }); + } + + final StreamingKeyValueStore keyValueStore; + late StreamSubscription _subscription; + bool isl10nEnabled = false; + + void toggle() { + isl10nEnabled = !isl10nEnabled; + keyValueStore.setBool('l10n_enabled', isl10nEnabled); + notifyListeners(); + } + + @override + void dispose() { + _subscription.cancel(); + super.dispose(); + } +} diff --git a/app/lib/l10n/flutter_app_local_gateway.dart b/app/lib/l10n/flutter_app_local_gateway.dart new file mode 100644 index 000000000..b0aece534 --- /dev/null +++ b/app/lib/l10n/flutter_app_local_gateway.dart @@ -0,0 +1,42 @@ +// Copyright (c) 2024 Sharezone UG (haftungsbeschränkt) +// Licensed under the EUPL-1.2-or-later. +// +// You may obtain a copy of the Licence at: +// https://joinup.ec.europa.eu/software/page/eupl +// +// SPDX-License-Identifier: EUPL-1.2 + +import 'dart:convert'; + +import 'package:sharezone/l10n/feature_flag_l10n.dart'; +import 'package:sharezone/util/cache/streaming_key_value_store.dart'; +import 'package:sharezone_localizations/sharezone_localizations.dart'; + +class FlutterAppLocaleProviderGateway extends AppLocaleProviderGateway { + const FlutterAppLocaleProviderGateway({ + required this.keyValueStore, + required this.featureFlagl10n, + }); + + final FeatureFlagl10n featureFlagl10n; + final StreamingKeyValueStore keyValueStore; + + @override + Stream getLocale() { + final defaultValue = jsonEncode(featureFlagl10n.isl10nEnabled + ? AppLocale.system.toMap() + : AppLocale.en.toMap()); + return keyValueStore + .getString('locale', defaultValue: defaultValue) + .map((event) => AppLocale.fromMap(jsonDecode(event))); + } + + @override + Future setLocale(AppLocale locale) async { + final value = jsonEncode(locale.toMap()); + keyValueStore.setString( + 'locale', + value, + ); + } +} diff --git a/app/lib/main/sharezone.dart b/app/lib/main/sharezone.dart index 847eef8fd..e98ac182b 100644 --- a/app/lib/main/sharezone.dart +++ b/app/lib/main/sharezone.dart @@ -21,6 +21,8 @@ import 'package:provider/provider.dart'; import 'package:sharezone/dynamic_links/beitrittsversuch.dart'; import 'package:sharezone/dynamic_links/dynamic_link_bloc.dart'; import 'package:sharezone/dynamic_links/dynamic_links.dart'; +import 'package:sharezone/l10n/feature_flag_l10n.dart'; +import 'package:sharezone/l10n/flutter_app_local_gateway.dart'; import 'package:sharezone/main/auth_app.dart'; import 'package:sharezone/main/bloc_dependencies.dart'; import 'package:sharezone/main/sharezone_app.dart'; @@ -28,9 +30,11 @@ import 'package:sharezone/main/sharezone_bloc_providers.dart'; import 'package:sharezone/navigation/logic/navigation_bloc.dart'; import 'package:sharezone/notifications/notifications_permission.dart'; import 'package:sharezone/onboarding/group_onboarding/logic/signed_up_bloc.dart'; +import 'package:sharezone/util/cache/streaming_key_value_store.dart'; import 'package:sharezone/util/flavor.dart'; import 'package:sharezone/widgets/animation/color_fade_in.dart'; import 'package:sharezone/widgets/development_stage_banner.dart'; +import 'package:sharezone_localizations/sharezone_localizations.dart'; import 'package:sharezone_utils/device_information_manager.dart'; import 'package:sharezone_widgets/sharezone_widgets.dart'; @@ -72,6 +76,8 @@ class Sharezone extends StatefulWidget { class _SharezoneState extends State with WidgetsBindingObserver { late SignUpBloc signUpBloc; late StreamSubscription authSubscription; + late StreamingKeyValueStore streamingKeyValueStore; + late FeatureFlagl10n featureFlagl10n; @override void initState() { @@ -93,6 +99,11 @@ class _SharezoneState extends State with WidgetsBindingObserver { authSubscription = listenToAuthStateChanged().listen((user) { authUserSubject.sink.add(user); }); + + streamingKeyValueStore = FlutterStreamingKeyValueStore( + widget.blocDependencies.streamingSharedPreferences, + ); + featureFlagl10n = FeatureFlagl10n(streamingKeyValueStore); } void logAppOpen() { @@ -129,6 +140,15 @@ class _SharezoneState extends State with WidgetsBindingObserver { MobileDeviceInformationRetriever(), ), ), + ChangeNotifierProvider.value(value: featureFlagl10n), + ChangeNotifierProvider( + create: (context) => AppLocaleProvider( + gateway: FlutterAppLocaleProviderGateway( + keyValueStore: streamingKeyValueStore, + featureFlagl10n: featureFlagl10n, + ), + ), + ), ], child: MultiBlocProvider( blocProviders: [ diff --git a/app/lib/main/sharezone_app.dart b/app/lib/main/sharezone_app.dart index f8a5bf691..44414f477 100644 --- a/app/lib/main/sharezone_app.dart +++ b/app/lib/main/sharezone_app.dart @@ -46,6 +46,7 @@ import 'package:sharezone/settings/settings_page.dart'; import 'package:sharezone/settings/src/subpages/about/about_page.dart'; import 'package:sharezone/settings/src/subpages/changelog_page.dart'; import 'package:sharezone/settings/src/subpages/imprint/page/imprint_page.dart'; +import 'package:sharezone/settings/src/subpages/language/language_page.dart'; import 'package:sharezone/settings/src/subpages/my_profile/change_email.dart'; import 'package:sharezone/settings/src/subpages/my_profile/change_password.dart'; import 'package:sharezone/settings/src/subpages/my_profile/change_state.dart'; @@ -204,6 +205,7 @@ class _SharezoneAppState extends State ICalLinksDialog.tag: (context) => const ICalLinksDialog(), CreateTermPage.tag: (context) => const CreateTermPage(), GradesDialog.tag: (context) => const GradesDialog(), + LanguagePage.tag: (context) => const LanguagePage(), }, navigatorKey: navigationService.navigatorKey, ), diff --git a/app/lib/main/sharezone_bloc_providers.dart b/app/lib/main/sharezone_bloc_providers.dart index b2110bf01..122fc9224 100644 --- a/app/lib/main/sharezone_bloc_providers.dart +++ b/app/lib/main/sharezone_bloc_providers.dart @@ -84,6 +84,7 @@ import 'package:sharezone/ical_links/dialog/ical_links_dialog_controller_factory import 'package:sharezone/ical_links/list/ical_links_page_controller.dart'; import 'package:sharezone/ical_links/shared/ical_link_analytics.dart'; import 'package:sharezone/ical_links/shared/ical_links_gateway.dart'; +import 'package:sharezone/l10n/feature_flag_l10n.dart'; import 'package:sharezone/main/application_bloc.dart'; import 'package:sharezone/main/bloc_dependencies.dart'; import 'package:sharezone/main/onboarding/onboarding_navigator.dart'; @@ -497,7 +498,7 @@ class _SharezoneBlocProvidersState extends State { ), lazy: false, ), - Provider.value(value: keyValueStore) + Provider.value(value: keyValueStore), ]; mainBlocProviders = [ @@ -593,6 +594,7 @@ class _SharezoneBlocProvidersState extends State { analytics: analytics, appFunctions: api.references.functions, keyValueStore: widget.blocDependencies.keyValueStore, + featureFlagl10n: context.read(), ), ), BlocProvider( diff --git a/app/lib/main/sharezone_material_app.dart b/app/lib/main/sharezone_material_app.dart index f1d1054dc..f9e4e9a93 100644 --- a/app/lib/main/sharezone_material_app.dart +++ b/app/lib/main/sharezone_material_app.dart @@ -9,10 +9,10 @@ import 'package:analytics/analytics.dart'; import 'package:analytics/observer.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:platform_check/platform_check.dart'; import 'package:provider/provider.dart'; import 'package:sharezone/main/bloc_dependencies.dart'; +import 'package:sharezone_localizations/sharezone_localizations.dart'; import 'package:sharezone_widgets/sharezone_widgets.dart'; class SharezoneMaterialApp extends StatelessWidget { @@ -35,7 +35,7 @@ class SharezoneMaterialApp extends StatelessWidget { @override Widget build(BuildContext context) { final themeSettings = context.watch(); - + final localProvider = context.watch(); return MaterialApp( debugShowCheckedModeBanner: false, title: PlatformCheck.isWeb ? "Sharezone Web-App" : "Sharezone", @@ -45,15 +45,9 @@ class SharezoneMaterialApp extends StatelessWidget { theme: getLightTheme().copyWith( visualDensity: themeSettings.visualDensitySetting.visualDensity), themeMode: _getThemeMode(themeSettings.themeBrightness), - localizationsDelegates: const [ - GlobalMaterialLocalizations.delegate, - GlobalWidgetsLocalizations.delegate, - GlobalCupertinoLocalizations.delegate, - ], - supportedLocales: const [ - Locale('en', 'US'), - Locale('de', 'DE'), - ], + localizationsDelegates: SharezoneLocalizations.localizationsDelegates, + supportedLocales: SharezoneLocalizations.supportedLocales, + locale: localProvider.locale.toLocale(), navigatorObservers: [ AnalyticsNavigationObserver(analytics: analytics) ], diff --git a/app/lib/settings/settings_page.dart b/app/lib/settings/settings_page.dart index 393cfcf19..d7a28a121 100644 --- a/app/lib/settings/settings_page.dart +++ b/app/lib/settings/settings_page.dart @@ -10,12 +10,15 @@ import 'package:analytics/analytics.dart'; import 'package:bloc_provider/bloc_provider.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; +import 'package:provider/provider.dart'; +import 'package:sharezone/l10n/feature_flag_l10n.dart'; import 'package:sharezone/legal/terms_of_service/terms_of_service_page.dart'; import 'package:sharezone/main/application_bloc.dart'; import 'package:sharezone/navigation/logic/navigation_bloc.dart'; import 'package:sharezone/navigation/models/navigation_item.dart'; import 'package:sharezone/navigation/scaffold/sharezone_main_scaffold.dart'; import 'package:sharezone/settings/src/subpages/changelog_page.dart'; +import 'package:sharezone/settings/src/subpages/language/language_page.dart'; import 'package:sharezone/settings/src/subpages/notification.dart'; import 'package:sharezone/settings/src/subpages/about/about_page.dart'; import 'package:sharezone/settings/src/subpages/theme/theme_page.dart'; @@ -145,29 +148,36 @@ class _LegalSection extends StatelessWidget { class _AppSettingsSection extends StatelessWidget { @override Widget build(BuildContext context) { - return const _SettingsSection( + final featureFlagl10n = context.watch(); + return _SettingsSection( title: 'App-Einstellungen', children: [ - _SettingsOption( + const _SettingsOption( title: "Mein Konto", icon: Icon(Icons.account_circle), tag: MyProfilePage.tag, ), - _SettingsOption( + const _SettingsOption( title: "Benachrichtigungen", icon: Icon(Icons.notifications_active), tag: NotificationPage.tag, ), - _SettingsOption( + const _SettingsOption( title: "Erscheinungsbild", icon: Icon(Icons.color_lens), tag: ThemePage.tag, ), - _SettingsOption( + const _SettingsOption( title: "Stundenplan", icon: Icon(Icons.access_time), tag: TimetableSettingsPage.tag, - ) + ), + if (featureFlagl10n.isl10nEnabled) + const _SettingsOption( + title: "Sprache", + icon: Icon(Icons.language), + tag: LanguagePage.tag, + ), ], ); } diff --git a/app/lib/settings/src/subpages/language/language_page.dart b/app/lib/settings/src/subpages/language/language_page.dart new file mode 100644 index 000000000..080728f4a --- /dev/null +++ b/app/lib/settings/src/subpages/language/language_page.dart @@ -0,0 +1,56 @@ +// Copyright (c) 2024 Sharezone UG (haftungsbeschränkt) +// Licensed under the EUPL-1.2-or-later. +// +// You may obtain a copy of the Licence at: +// https://joinup.ec.europa.eu/software/page/eupl +// +// SPDX-License-Identifier: EUPL-1.2 + +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:sharezone_localizations/sharezone_localizations.dart'; +import 'package:sharezone_widgets/sharezone_widgets.dart'; + +class LanguagePage extends StatelessWidget { + const LanguagePage({super.key}); + + static const tag = 'language'; + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: Text(context.l10n.languagePageTitle)), + body: ListView( + padding: const EdgeInsets.all(12), + children: + AppLocale.values.map((locale) => _LanguageTile(locale)).toList(), + ), + ); + } +} + +class _LanguageTile extends StatelessWidget { + const _LanguageTile(this.locale); + + final AppLocale locale; + + @override + Widget build(BuildContext context) { + final localeProvider = context.watch(); + return MaxWidthConstraintBox( + child: SafeArea( + child: RadioListTile( + title: Text(locale.getNativeName(context)), + subtitle: locale.isSystem() + ? null + : Text(locale.getTranslatedName(context)), + value: locale, + groupValue: localeProvider.locale, + onChanged: (value) { + localeProvider.locale = value!; + }, + ), + ), + ); + } +} diff --git a/app/lib/timetable/timetable_add_event/timetable_add_event_dialog.dart b/app/lib/timetable/timetable_add_event/timetable_add_event_dialog.dart index fd3735fcb..dfdd7f04a 100644 --- a/app/lib/timetable/timetable_add_event/timetable_add_event_dialog.dart +++ b/app/lib/timetable/timetable_add_event/timetable_add_event_dialog.dart @@ -60,42 +60,55 @@ Future _showUserConfirmationOfEventArrival({ /// Not using final will cause the linter to complain about the lint below, so /// we have to ignore it. // ignore: must_be_immutable -class TimetableAddEventDialog extends StatelessWidget { +class TimetableAddEventDialog extends StatefulWidget { TimetableAddEventDialog({ super.key, required this.isExam, @visibleForTesting this.controller, @visibleForTesting TimeOfDay Function()? showTimePickerTestOverride, - @visibleForTesting FocusNode? titleFocusNode, + @visibleForTesting this.titleFocusNode, }) { - this.titleFocusNode = titleFocusNode ?? FocusNode(); _timePickerOverride = showTimePickerTestOverride; } final bool isExam; late AddEventDialogController? controller; - late final FocusNode titleFocusNode; - bool _hasRequestedTitleFocus = false; - + late final FocusNode? titleFocusNode; static const tag = "timetable-event-dialog"; + @override + State createState() => + _TimetableAddEventDialogState(); +} + +class _TimetableAddEventDialogState extends State { + late AddEventDialogController controller; + late FocusNode titleFocusNode; + + @override + void initState() { + super.initState(); + titleFocusNode = widget.titleFocusNode ?? FocusNode(); + controller = widget.controller ?? + AddEventDialogController( + isExam: widget.isExam, + api: EventDialogApi(BlocProvider.of(context).api), + markdownAnalytics: BlocProvider.of(context), + ); + + WidgetsBinding.instance.addPostFrameCallback((_) { + delayKeyboard(context: context, focusNode: titleFocusNode); + }); + } + bool hasModifiedData() { - return controller!.title.isNotEmpty || controller!.description.isNotEmpty; + return controller.title.isNotEmpty || controller.description.isNotEmpty; } @override Widget build(BuildContext context) { - if (!_hasRequestedTitleFocus) { - _hasRequestedTitleFocus = true; - delayKeyboard(context: context, focusNode: titleFocusNode); - } - controller ??= AddEventDialogController( - isExam: isExam, - api: EventDialogApi(BlocProvider.of(context).api), - markdownAnalytics: BlocProvider.of(context), - ); - return ChangeNotifierProvider( - create: (context) => controller, + return ChangeNotifierProvider.value( + value: controller, builder: (context, __) => PopScope( canPop: false, onPopInvokedWithResult: (didPop, _) async { @@ -118,11 +131,11 @@ class TimetableAddEventDialog extends StatelessWidget { children: [ _AppBar( editMode: false, - isExam: isExam, + isExam: widget.isExam, titleField: _TitleField( key: EventDialogKeys.titleTextField, focusNode: titleFocusNode, - isExam: isExam, + isExam: widget.isExam, )), Expanded( child: SingleChildScrollView( @@ -134,11 +147,11 @@ class TimetableAddEventDialog extends StatelessWidget { const _MobileDivider(), const _DateAndTimePicker(), const _MobileDivider(), - _DescriptionField(isExam: isExam), + _DescriptionField(isExam: widget.isExam), const _MobileDivider(), const _Location(), const _MobileDivider(), - _SendNotification(isExam: isExam), + _SendNotification(isExam: widget.isExam), ], ), ), diff --git a/app/pubspec.lock b/app/pubspec.lock index 2f8520b9e..1b73e07d8 100644 --- a/app/pubspec.lock +++ b/app/pubspec.lock @@ -1995,6 +1995,13 @@ packages: relative: true source: path version: "1.0.0" + sharezone_localizations: + dependency: "direct main" + description: + path: "../lib/sharezone_localizations" + relative: true + source: path + version: "1.0.0" sharezone_plus_page_ui: dependency: "direct main" description: diff --git a/app/pubspec.yaml b/app/pubspec.yaml index 52c7ff179..7aafd648d 100644 --- a/app/pubspec.yaml +++ b/app/pubspec.yaml @@ -11,7 +11,7 @@ description: A collaborative school planner for students, teachers and parents. # Note that we do not store the current build number in the pubspec.yaml. The # build number is automatically increased by the CD pipeline (using `sz deploy` # command). -version: 2.2.2+0 +version: 2.2.3+0 publish_to: none environment: @@ -162,6 +162,8 @@ dependencies: shared_preferences: ^2.2.3 sharezone_common: path: ../lib/sharezone_common + sharezone_localizations: + path: ../lib/sharezone_localizations sharezone_utils: path: ../lib/sharezone_utils sharezone_plus_page_ui: diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_dark.iphone11.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_dark.iphone11.png index b38cd9635..0acf18cb4 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_dark.iphone11.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_dark.iphone11.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_dark.phone.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_dark.phone.png index 600f25df2..29536e8e4 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_dark.phone.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_dark.phone.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_dark.tablet_landscape.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_dark.tablet_landscape.png index 45598d2c6..575fa3150 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_dark.tablet_landscape.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_dark.tablet_landscape.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_dark.tablet_portrait.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_dark.tablet_portrait.png index 761fee35a..3af7492ab 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_dark.tablet_portrait.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_dark.tablet_portrait.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_light.iphone11.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_light.iphone11.png index ea80c4fbb..e254d48c9 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_light.iphone11.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_light.iphone11.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_light.phone.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_light.phone.png index fc7b56185..b5dcb6d78 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_light.phone.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_light.phone.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_light.tablet_landscape.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_light.tablet_landscape.png index e772d40be..0e270e16e 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_light.tablet_landscape.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_light.tablet_landscape.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_light.tablet_portrait.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_light.tablet_portrait.png index 06aa149eb..85e8a05f2 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_light.tablet_portrait.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_empty_light.tablet_portrait.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_dark.iphone11.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_dark.iphone11.png index 3b83dca2f..907914ac8 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_dark.iphone11.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_dark.iphone11.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_dark.phone.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_dark.phone.png index 9f805f046..a8cd3d45f 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_dark.phone.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_dark.phone.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_dark.tablet_landscape.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_dark.tablet_landscape.png index cb3520a8d..2a528212d 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_dark.tablet_landscape.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_dark.tablet_landscape.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_dark.tablet_portrait.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_dark.tablet_portrait.png index 60017b778..a46f73292 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_dark.tablet_portrait.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_dark.tablet_portrait.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_light.iphone11.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_light.iphone11.png index a0fabb4da..1bcb594db 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_light.iphone11.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_light.iphone11.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_light.phone.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_light.phone.png index 99ea6e1a3..f04faf3be 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_light.phone.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_light.phone.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_light.tablet_landscape.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_light.tablet_landscape.png index b6d680572..811352463 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_light.tablet_landscape.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_light.tablet_landscape.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_light.tablet_portrait.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_light.tablet_portrait.png index 5b03682f6..5dc9b15e7 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_light.tablet_portrait.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_filled_1_light.tablet_portrait.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_dark.iphone11.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_dark.iphone11.png index 3b83dca2f..907914ac8 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_dark.iphone11.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_dark.iphone11.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_dark.phone.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_dark.phone.png index 458ee4510..864874330 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_dark.phone.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_dark.phone.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_dark.tablet_landscape.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_dark.tablet_landscape.png index cb3520a8d..2a528212d 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_dark.tablet_landscape.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_dark.tablet_landscape.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_dark.tablet_portrait.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_dark.tablet_portrait.png index 60017b778..a46f73292 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_dark.tablet_portrait.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_dark.tablet_portrait.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_light.iphone11.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_light.iphone11.png index a0fabb4da..1bcb594db 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_light.iphone11.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_light.iphone11.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_light.phone.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_light.phone.png index 8870eb801..b6b92c6f4 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_light.phone.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_light.phone.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_light.tablet_landscape.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_light.tablet_landscape.png index 77b1e63a6..6547e418a 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_light.tablet_landscape.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_light.tablet_landscape.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_light.tablet_portrait.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_light.tablet_portrait.png index 5b03682f6..5dc9b15e7 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_light.tablet_portrait.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_add_uploading_attachments_light.tablet_portrait.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_dark.iphone11.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_dark.iphone11.png index a09cb5062..1a3b703b5 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_dark.iphone11.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_dark.iphone11.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_dark.phone.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_dark.phone.png index 2b040c175..5f375b967 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_dark.phone.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_dark.phone.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_dark.tablet_landscape.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_dark.tablet_landscape.png index c26fc8b7f..74d0dfa2d 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_dark.tablet_landscape.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_dark.tablet_landscape.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_dark.tablet_portrait.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_dark.tablet_portrait.png index e0291668c..3514abff4 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_dark.tablet_portrait.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_dark.tablet_portrait.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_light.iphone11.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_light.iphone11.png index e9f2b7061..40f1653c2 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_light.iphone11.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_light.iphone11.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_light.phone.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_light.phone.png index 05c6fb313..7345bcb8d 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_light.phone.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_light.phone.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_light.tablet_landscape.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_light.tablet_landscape.png index 53fdcb20c..9b0c88bad 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_light.tablet_landscape.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_light.tablet_landscape.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_light.tablet_portrait.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_light.tablet_portrait.png index aad5ccbf0..e239af125 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_light.tablet_portrait.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_edit_filled_1_light.tablet_portrait.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_dark.iphone11.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_dark.iphone11.png index 3b83dca2f..907914ac8 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_dark.iphone11.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_dark.iphone11.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_dark.phone.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_dark.phone.png index 458ee4510..864874330 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_dark.phone.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_dark.phone.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_dark.tablet_landscape.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_dark.tablet_landscape.png index cb3520a8d..2a528212d 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_dark.tablet_landscape.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_dark.tablet_landscape.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_dark.tablet_portrait.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_dark.tablet_portrait.png index 60017b778..a46f73292 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_dark.tablet_portrait.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_dark.tablet_portrait.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_light.iphone11.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_light.iphone11.png index a0fabb4da..1bcb594db 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_light.iphone11.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_light.iphone11.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_light.phone.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_light.phone.png index 8870eb801..b6b92c6f4 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_light.phone.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_light.phone.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_light.tablet_landscape.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_light.tablet_landscape.png index 77b1e63a6..6547e418a 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_light.tablet_landscape.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_light.tablet_landscape.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_light.tablet_portrait.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_light.tablet_portrait.png index 5b03682f6..5dc9b15e7 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_light.tablet_portrait.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_uploading_attachment_failed_light.tablet_portrait.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_dark.iphone11.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_dark.iphone11.png index 6309df4b4..2acbdadb4 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_dark.iphone11.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_dark.iphone11.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_dark.phone.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_dark.phone.png index a928de6bd..f3bdf9eda 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_dark.phone.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_dark.phone.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_dark.tablet_landscape.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_dark.tablet_landscape.png index 0187ac5ab..6174e370e 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_dark.tablet_landscape.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_dark.tablet_landscape.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_dark.tablet_portrait.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_dark.tablet_portrait.png index f712d355a..5c3cdf0be 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_dark.tablet_portrait.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_dark.tablet_portrait.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_light.iphone11.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_light.iphone11.png index 7ea625520..db7c55b3d 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_light.iphone11.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_light.iphone11.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_light.phone.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_light.phone.png index 47cea314f..e97742196 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_light.phone.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_light.phone.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_light.tablet_landscape.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_light.tablet_landscape.png index 02edc26d9..ef6ccc8f7 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_light.tablet_landscape.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_light.tablet_landscape.png differ diff --git a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_light.tablet_portrait.png b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_light.tablet_portrait.png index 31ca2454c..98e7d9615 100644 Binary files a/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_light.tablet_portrait.png and b/app/test_goldens/homework/homework_dialog/goldens/homework_dialog_with_error_light.tablet_portrait.png differ diff --git a/app/test_goldens/settings/settings_page_test.dart b/app/test_goldens/settings/settings_page_test.dart index ca5d71b68..a36a10855 100644 --- a/app/test_goldens/settings/settings_page_test.dart +++ b/app/test_goldens/settings/settings_page_test.dart @@ -11,20 +11,28 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:golden_toolkit/golden_toolkit.dart'; import 'package:mockito/annotations.dart'; +import 'package:provider/provider.dart'; +import 'package:sharezone/l10n/feature_flag_l10n.dart'; import 'package:sharezone/main/application_bloc.dart'; import 'package:sharezone/settings/settings_page.dart'; import 'package:sharezone_widgets/sharezone_widgets.dart'; import 'settings_page_test.mocks.dart'; -@GenerateNiceMocks([MockSpec()]) +@GenerateNiceMocks([ + MockSpec(), + MockSpec(), +]) void main() { group(SettingsPageBody, () { Future pushSettingsPage(WidgetTester tester, ThemeData theme) async { await tester.pumpWidgetBuilder( BlocProvider( bloc: MockSharezoneContext(), - child: const SettingsPageBody(), + child: ChangeNotifierProvider( + create: (context) => MockFeatureFlagl10n(), + child: const SettingsPageBody(), + ), ), wrapper: materialAppWrapper(theme: theme), ); diff --git a/app/test_goldens/settings/settings_page_test.mocks.dart b/app/test_goldens/settings/settings_page_test.mocks.dart index 35fb5e1e0..0eff026c7 100644 --- a/app/test_goldens/settings/settings_page_test.mocks.dart +++ b/app/test_goldens/settings/settings_page_test.mocks.dart @@ -3,11 +3,15 @@ // Do not manually edit this file. // ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:ui' as _i10; + import 'package:analytics/analytics.dart' as _i3; import 'package:mockito/mockito.dart' as _i1; import 'package:shared_preferences/shared_preferences.dart' as _i5; -import 'package:sharezone/main/application_bloc.dart' as _i7; +import 'package:sharezone/l10n/feature_flag_l10n.dart' as _i9; +import 'package:sharezone/main/application_bloc.dart' as _i8; import 'package:sharezone/util/api.dart' as _i2; +import 'package:sharezone/util/cache/streaming_key_value_store.dart' as _i7; import 'package:sharezone/util/navigation_service.dart' as _i6; import 'package:streaming_shared_preferences/streaming_shared_preferences.dart' as _i4; @@ -79,10 +83,21 @@ class _FakeNavigationService_4 extends _i1.SmartFake ); } +class _FakeStreamingKeyValueStore_5 extends _i1.SmartFake + implements _i7.StreamingKeyValueStore { + _FakeStreamingKeyValueStore_5( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + /// A class which mocks [SharezoneContext]. /// /// See the documentation for Mockito's code generation for more information. -class MockSharezoneContext extends _i1.Mock implements _i7.SharezoneContext { +class MockSharezoneContext extends _i1.Mock implements _i8.SharezoneContext { @override _i2.SharezoneGateway get api => (super.noSuchMethod( Invocation.getter(#api), @@ -158,3 +173,89 @@ class MockSharezoneContext extends _i1.Mock implements _i7.SharezoneContext { returnValueForMissingStub: null, ); } + +/// A class which mocks [FeatureFlagl10n]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockFeatureFlagl10n extends _i1.Mock implements _i9.FeatureFlagl10n { + @override + _i7.StreamingKeyValueStore get keyValueStore => (super.noSuchMethod( + Invocation.getter(#keyValueStore), + returnValue: _FakeStreamingKeyValueStore_5( + this, + Invocation.getter(#keyValueStore), + ), + returnValueForMissingStub: _FakeStreamingKeyValueStore_5( + this, + Invocation.getter(#keyValueStore), + ), + ) as _i7.StreamingKeyValueStore); + + @override + bool get isl10nEnabled => (super.noSuchMethod( + Invocation.getter(#isl10nEnabled), + returnValue: false, + returnValueForMissingStub: false, + ) as bool); + + @override + set isl10nEnabled(bool? _isl10nEnabled) => super.noSuchMethod( + Invocation.setter( + #isl10nEnabled, + _isl10nEnabled, + ), + returnValueForMissingStub: null, + ); + + @override + bool get hasListeners => (super.noSuchMethod( + Invocation.getter(#hasListeners), + returnValue: false, + returnValueForMissingStub: false, + ) as bool); + + @override + void toggle() => super.noSuchMethod( + Invocation.method( + #toggle, + [], + ), + returnValueForMissingStub: null, + ); + + @override + void dispose() => super.noSuchMethod( + Invocation.method( + #dispose, + [], + ), + returnValueForMissingStub: null, + ); + + @override + void addListener(_i10.VoidCallback? listener) => super.noSuchMethod( + Invocation.method( + #addListener, + [listener], + ), + returnValueForMissingStub: null, + ); + + @override + void removeListener(_i10.VoidCallback? listener) => super.noSuchMethod( + Invocation.method( + #removeListener, + [listener], + ), + returnValueForMissingStub: null, + ); + + @override + void notifyListeners() => super.noSuchMethod( + Invocation.method( + #notifyListeners, + [], + ), + returnValueForMissingStub: null, + ); +} diff --git a/app/test_goldens/timetable/goldens/timetable_settings_page_dark.iphone11.png b/app/test_goldens/timetable/goldens/timetable_settings_page_dark.iphone11.png index 683c80086..42384e143 100644 Binary files a/app/test_goldens/timetable/goldens/timetable_settings_page_dark.iphone11.png and b/app/test_goldens/timetable/goldens/timetable_settings_page_dark.iphone11.png differ diff --git a/app/test_goldens/timetable/goldens/timetable_settings_page_dark.phone.png b/app/test_goldens/timetable/goldens/timetable_settings_page_dark.phone.png index 37ca87cac..4a7eeff70 100644 Binary files a/app/test_goldens/timetable/goldens/timetable_settings_page_dark.phone.png and b/app/test_goldens/timetable/goldens/timetable_settings_page_dark.phone.png differ diff --git a/app/test_goldens/timetable/goldens/timetable_settings_page_dark.phone_landscape.png b/app/test_goldens/timetable/goldens/timetable_settings_page_dark.phone_landscape.png index f081a6253..faa2074d3 100644 Binary files a/app/test_goldens/timetable/goldens/timetable_settings_page_dark.phone_landscape.png and b/app/test_goldens/timetable/goldens/timetable_settings_page_dark.phone_landscape.png differ diff --git a/app/test_goldens/timetable/goldens/timetable_settings_page_dark.tablet_landscape.png b/app/test_goldens/timetable/goldens/timetable_settings_page_dark.tablet_landscape.png index 9c4494b7c..f60431c60 100644 Binary files a/app/test_goldens/timetable/goldens/timetable_settings_page_dark.tablet_landscape.png and b/app/test_goldens/timetable/goldens/timetable_settings_page_dark.tablet_landscape.png differ diff --git a/app/test_goldens/timetable/goldens/timetable_settings_page_dark.tablet_portrait.png b/app/test_goldens/timetable/goldens/timetable_settings_page_dark.tablet_portrait.png index 66d51aebb..17e503d4d 100644 Binary files a/app/test_goldens/timetable/goldens/timetable_settings_page_dark.tablet_portrait.png and b/app/test_goldens/timetable/goldens/timetable_settings_page_dark.tablet_portrait.png differ diff --git a/app/test_goldens/timetable/goldens/timetable_settings_page_light.iphone11.png b/app/test_goldens/timetable/goldens/timetable_settings_page_light.iphone11.png index d3e7a4e9a..9e3246b9f 100644 Binary files a/app/test_goldens/timetable/goldens/timetable_settings_page_light.iphone11.png and b/app/test_goldens/timetable/goldens/timetable_settings_page_light.iphone11.png differ diff --git a/app/test_goldens/timetable/goldens/timetable_settings_page_light.phone.png b/app/test_goldens/timetable/goldens/timetable_settings_page_light.phone.png index bdafadf5b..09f4aae15 100644 Binary files a/app/test_goldens/timetable/goldens/timetable_settings_page_light.phone.png and b/app/test_goldens/timetable/goldens/timetable_settings_page_light.phone.png differ diff --git a/app/test_goldens/timetable/goldens/timetable_settings_page_light.phone_landscape.png b/app/test_goldens/timetable/goldens/timetable_settings_page_light.phone_landscape.png index ed41054c3..4caba87b2 100644 Binary files a/app/test_goldens/timetable/goldens/timetable_settings_page_light.phone_landscape.png and b/app/test_goldens/timetable/goldens/timetable_settings_page_light.phone_landscape.png differ diff --git a/app/test_goldens/timetable/goldens/timetable_settings_page_light.tablet_landscape.png b/app/test_goldens/timetable/goldens/timetable_settings_page_light.tablet_landscape.png index f22a6ff53..938ce7999 100644 Binary files a/app/test_goldens/timetable/goldens/timetable_settings_page_light.tablet_landscape.png and b/app/test_goldens/timetable/goldens/timetable_settings_page_light.tablet_landscape.png differ diff --git a/app/test_goldens/timetable/goldens/timetable_settings_page_light.tablet_portrait.png b/app/test_goldens/timetable/goldens/timetable_settings_page_light.tablet_portrait.png index 2ffbb8b0a..a96325c18 100644 Binary files a/app/test_goldens/timetable/goldens/timetable_settings_page_light.tablet_portrait.png and b/app/test_goldens/timetable/goldens/timetable_settings_page_light.tablet_portrait.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_event.iphone11.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_event.iphone11.png index ef540d073..5f76133f3 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_event.iphone11.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_event.iphone11.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_event.phone.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_event.phone.png index dc8911003..8875d7806 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_event.phone.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_event.phone.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_event.phone_landscape.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_event.phone_landscape.png index 5a1cbc96d..c0691d996 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_event.phone_landscape.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_event.phone_landscape.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_event.tablet_landscape.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_event.tablet_landscape.png index 4c78b8af7..7899060d4 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_event.tablet_landscape.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_event.tablet_landscape.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_event.tablet_portrait.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_event.tablet_portrait.png index 98b9c8ba0..823392c58 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_event.tablet_portrait.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_event.tablet_portrait.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_exam.iphone11.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_exam.iphone11.png index 19c0b34ec..d3d16c319 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_exam.iphone11.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_exam.iphone11.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_exam.phone.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_exam.phone.png index 58199c1d1..589567567 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_exam.phone.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_exam.phone.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_exam.phone_landscape.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_exam.phone_landscape.png index ed150f270..e2efdcdd1 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_exam.phone_landscape.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_exam.phone_landscape.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_exam.tablet_landscape.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_exam.tablet_landscape.png index 7e251d048..65c69520a 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_exam.tablet_landscape.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_exam.tablet_landscape.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_exam.tablet_portrait.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_exam.tablet_portrait.png index 1863f3bcd..614f0d379 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_exam.tablet_portrait.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_dark_exam.tablet_portrait.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_event.iphone11.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_event.iphone11.png index 2b36747fc..a13dce92c 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_event.iphone11.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_event.iphone11.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_event.phone.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_event.phone.png index ded6e5638..32f136b12 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_event.phone.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_event.phone.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_event.phone_landscape.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_event.phone_landscape.png index 384cc08dc..76784a31a 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_event.phone_landscape.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_event.phone_landscape.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_event.tablet_landscape.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_event.tablet_landscape.png index 5e6c81cd0..ebbbf7ef9 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_event.tablet_landscape.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_event.tablet_landscape.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_event.tablet_portrait.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_event.tablet_portrait.png index 4ba231585..11e5bcb30 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_event.tablet_portrait.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_event.tablet_portrait.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_exam.iphone11.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_exam.iphone11.png index 215ba31a0..b9ed98a95 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_exam.iphone11.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_exam.iphone11.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_exam.phone.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_exam.phone.png index 3aa57eb69..03734ee9b 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_exam.phone.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_exam.phone.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_exam.phone_landscape.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_exam.phone_landscape.png index 8273a8b55..515d41885 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_exam.phone_landscape.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_exam.phone_landscape.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_exam.tablet_landscape.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_exam.tablet_landscape.png index 0cf4e7383..2ceca405c 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_exam.tablet_landscape.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_exam.tablet_landscape.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_exam.tablet_portrait.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_exam.tablet_portrait.png index a56c42154..2940405dc 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_exam.tablet_portrait.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_empty_light_exam.tablet_portrait.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_event.iphone11.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_event.iphone11.png index ac4a75153..502d5241a 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_event.iphone11.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_event.iphone11.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_event.phone.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_event.phone.png index 2a6e4d7fb..e4547f7c3 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_event.phone.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_event.phone.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_event.phone_landscape.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_event.phone_landscape.png index 5a013c0be..45fc2b7fc 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_event.phone_landscape.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_event.phone_landscape.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_event.tablet_landscape.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_event.tablet_landscape.png index 88f2edd2f..db5ddfff2 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_event.tablet_landscape.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_event.tablet_landscape.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_event.tablet_portrait.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_event.tablet_portrait.png index d2c3ce03c..7e46de2bf 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_event.tablet_portrait.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_event.tablet_portrait.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_exam.iphone11.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_exam.iphone11.png index 4e375ddd6..4c95844f9 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_exam.iphone11.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_exam.iphone11.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_exam.phone.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_exam.phone.png index 03eaa0e11..b426d9271 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_exam.phone.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_exam.phone.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_exam.phone_landscape.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_exam.phone_landscape.png index 17da2a61b..189a7d786 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_exam.phone_landscape.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_exam.phone_landscape.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_exam.tablet_landscape.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_exam.tablet_landscape.png index d1616ada3..7a6934ebe 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_exam.tablet_landscape.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_exam.tablet_landscape.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_exam.tablet_portrait.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_exam.tablet_portrait.png index 1608b6ff9..52f526bb5 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_exam.tablet_portrait.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_dark_exam.tablet_portrait.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_event.iphone11.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_event.iphone11.png index 3ccd4a640..a0f70c673 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_event.iphone11.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_event.iphone11.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_event.phone.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_event.phone.png index 24335d5c3..240b4c803 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_event.phone.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_event.phone.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_event.phone_landscape.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_event.phone_landscape.png index 639867fc0..011bc8c15 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_event.phone_landscape.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_event.phone_landscape.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_event.tablet_landscape.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_event.tablet_landscape.png index f419b91a0..7406e08c3 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_event.tablet_landscape.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_event.tablet_landscape.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_event.tablet_portrait.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_event.tablet_portrait.png index 305418c8f..4d77573a5 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_event.tablet_portrait.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_event.tablet_portrait.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_exam.iphone11.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_exam.iphone11.png index 160625ab2..39a98f7e7 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_exam.iphone11.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_exam.iphone11.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_exam.phone.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_exam.phone.png index 2973355ef..5d04ee1c1 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_exam.phone.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_exam.phone.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_exam.phone_landscape.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_exam.phone_landscape.png index 0a6648bce..366139463 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_exam.phone_landscape.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_exam.phone_landscape.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_exam.tablet_landscape.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_exam.tablet_landscape.png index c7cb7d459..93194fd93 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_exam.tablet_landscape.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_exam.tablet_landscape.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_exam.tablet_portrait.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_exam.tablet_portrait.png index d49b26e55..7c303592f 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_exam.tablet_portrait.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_error_light_exam.tablet_portrait.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_event.iphone11.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_event.iphone11.png index 53a9f594c..f72cb7f5f 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_event.iphone11.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_event.iphone11.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_event.phone.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_event.phone.png index d1a85f760..b2583add2 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_event.phone.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_event.phone.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_event.phone_landscape.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_event.phone_landscape.png index 06ddbeb2f..b3521cefc 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_event.phone_landscape.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_event.phone_landscape.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_event.tablet_landscape.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_event.tablet_landscape.png index 076712035..f0156247b 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_event.tablet_landscape.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_event.tablet_landscape.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_event.tablet_portrait.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_event.tablet_portrait.png index 1a4592718..7ecdbdaf4 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_event.tablet_portrait.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_event.tablet_portrait.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_exam.iphone11.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_exam.iphone11.png index 975972c1c..504b575ac 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_exam.iphone11.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_exam.iphone11.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_exam.phone.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_exam.phone.png index 1fca15106..730ae5939 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_exam.phone.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_exam.phone.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_exam.phone_landscape.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_exam.phone_landscape.png index 06ddbeb2f..b3521cefc 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_exam.phone_landscape.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_exam.phone_landscape.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_exam.tablet_landscape.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_exam.tablet_landscape.png index 5e7d3cab4..2da35eee7 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_exam.tablet_landscape.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_exam.tablet_landscape.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_exam.tablet_portrait.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_exam.tablet_portrait.png index bf19b670d..663d77cba 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_exam.tablet_portrait.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_dark_exam.tablet_portrait.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_event.iphone11.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_event.iphone11.png index 7555238df..2f2743cb8 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_event.iphone11.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_event.iphone11.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_event.phone.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_event.phone.png index 5d88d756e..6749a8f60 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_event.phone.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_event.phone.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_event.phone_landscape.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_event.phone_landscape.png index 7d12af353..e54398537 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_event.phone_landscape.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_event.phone_landscape.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_event.tablet_landscape.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_event.tablet_landscape.png index 802baf51d..ee492efee 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_event.tablet_landscape.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_event.tablet_landscape.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_event.tablet_portrait.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_event.tablet_portrait.png index 3d96fe2a7..f1e894516 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_event.tablet_portrait.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_event.tablet_portrait.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_exam.iphone11.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_exam.iphone11.png index 85a4e4e32..774904c18 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_exam.iphone11.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_exam.iphone11.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_exam.phone.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_exam.phone.png index 735d8cf76..0f55eade1 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_exam.phone.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_exam.phone.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_exam.phone_landscape.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_exam.phone_landscape.png index 7d12af353..e54398537 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_exam.phone_landscape.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_exam.phone_landscape.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_exam.tablet_landscape.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_exam.tablet_landscape.png index ee5805c37..a6b42a269 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_exam.tablet_landscape.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_exam.tablet_landscape.png differ diff --git a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_exam.tablet_portrait.png b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_exam.tablet_portrait.png index 24be9738e..791fd3b5c 100644 Binary files a/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_exam.tablet_portrait.png and b/app/test_goldens/timetable/timetable_dialog/goldens/event_dialog_add_full_light_exam.tablet_portrait.png differ diff --git a/app/web/index.html b/app/web/index.html index bd4435dce..a13f3a206 100644 --- a/app/web/index.html +++ b/app/web/index.html @@ -67,6 +67,10 @@ +
diff --git a/console/web/index.html b/console/web/index.html index 42d0ffa4b..ed6ddd505 100644 --- a/console/web/index.html +++ b/console/web/index.html @@ -33,12 +33,17 @@

Sharezone über supertoll

+ +