فهرست منبع

Merge pull request #2939 from MayurSMahajan/fr_toggle_theme_shortcut_2304

feat: toggle theme mode shortcut
Mathias Mogensen 1 سال پیش
والد
کامیت
4805d0c568

+ 95 - 0
frontend/appflowy_flutter/integration_test/hotkeys_test.dart

@@ -0,0 +1,95 @@
+import 'dart:io';
+import 'package:appflowy/generated/locale_keys.g.dart';
+import 'package:appflowy/workspace/application/settings/prelude.dart';
+import 'package:appflowy/workspace/presentation/home/menu/menu.dart';
+import 'package:appflowy/workspace/presentation/settings/settings_dialog.dart';
+import 'package:easy_localization/easy_localization.dart';
+import 'package:flutter/services.dart';
+import 'package:flutter_test/flutter_test.dart';
+import 'package:integration_test/integration_test.dart';
+
+import 'util/keyboard.dart';
+import 'util/util.dart';
+
+void main() {
+  IntegrationTestWidgetsFlutterBinding.ensureInitialized();
+
+  group('hotkeys test', () {
+    testWidgets('toggle theme mode', (tester) async {
+      await tester.initializeAppFlowy();
+
+      await tester.tapGoButton();
+      tester.expectToSeeHomePage();
+
+      await tester.openSettings();
+      await tester.openSettingsPage(SettingsPage.appearance);
+      await tester.pumpAndSettle();
+
+      tester.expectToSeeText(
+        LocaleKeys.settings_appearance_themeMode_system.tr(),
+      );
+
+      await tester.tapButton(
+        find.bySemanticsLabel(
+          LocaleKeys.settings_appearance_themeMode_system.tr(),
+        ),
+      );
+
+      await tester.pumpAndSettle();
+
+      await tester.tapButton(
+        find.bySemanticsLabel(
+          LocaleKeys.settings_appearance_themeMode_dark.tr(),
+        ),
+      );
+
+      await tester.pumpAndSettle(const Duration(seconds: 1));
+
+      await tester.tap(find.byType(SettingsDialog));
+
+      await tester.pumpAndSettle();
+
+      await FlowyTestKeyboard.simulateKeyDownEvent(
+        [
+          Platform.isMacOS
+              ? LogicalKeyboardKey.meta
+              : LogicalKeyboardKey.control,
+          LogicalKeyboardKey.shift,
+          LogicalKeyboardKey.keyL,
+        ],
+        tester: tester,
+      );
+
+      await tester.pumpAndSettle();
+
+      tester.expectToSeeText(
+        LocaleKeys.settings_appearance_themeMode_light.tr(),
+      );
+    });
+
+    testWidgets('show or hide home menu', (tester) async {
+      await tester.initializeAppFlowy();
+
+      await tester.tapGoButton();
+      tester.expectToSeeHomePage();
+
+      await tester.pumpAndSettle();
+
+      expect(find.byType(HomeMenu), findsOneWidget);
+
+      await FlowyTestKeyboard.simulateKeyDownEvent(
+        [
+          Platform.isMacOS
+              ? LogicalKeyboardKey.meta
+              : LogicalKeyboardKey.control,
+          LogicalKeyboardKey.backslash,
+        ],
+        tester: tester,
+      );
+
+      await tester.pumpAndSettle();
+
+      expect(find.byType(HomeMenu), findsNothing);
+    });
+  });
+}

+ 8 - 0
frontend/appflowy_flutter/lib/workspace/application/appearance.dart

@@ -50,6 +50,14 @@ class AppearanceSettingsCubit extends Cubit<AppearanceSettingsState> {
     emit(state.copyWith(themeMode: themeMode));
   }
 
+  /// Toggle the theme mode
+  void toggleThemeMode() {
+    final currentThemeMode = state.themeMode;
+    setThemeMode(
+      currentThemeMode == ThemeMode.light ? ThemeMode.dark : ThemeMode.light,
+    );
+  }
+
   /// Update selected font in the user's settings and emit an updated state
   /// with the font name.
   void setFontFamily(String fontFamilyName) {

+ 16 - 0
frontend/appflowy_flutter/lib/workspace/presentation/home/hotkeys.dart

@@ -1,5 +1,6 @@
 import 'dart:io';
 
+import 'package:appflowy/workspace/application/appearance.dart';
 import 'package:appflowy/workspace/application/home/home_setting_bloc.dart';
 import 'package:flutter/material.dart';
 import 'package:hotkey_manager/hotkey_manager.dart';
@@ -25,6 +26,21 @@ class HomeHotKeys extends StatelessWidget {
             .add(const HomeSettingEvent.collapseMenu());
       },
     );
+
+    final HotKey hotKeyForToggleThemeMode = HotKey(
+      KeyCode.keyL,
+      modifiers: [
+        Platform.isMacOS ? KeyModifier.meta : KeyModifier.control,
+        KeyModifier.shift,
+      ],
+      scope: HotKeyScope.inapp,
+    );
+    hotKeyManager.register(
+      hotKeyForToggleThemeMode,
+      keyDownHandler: (_) {
+        context.read<AppearanceSettingsCubit>().toggleThemeMode();
+      },
+    );
     return child;
   }
 }