TF-3911 Add Keyboard shortcuts dictionary in Setting

This commit is contained in:
dab246
2025-10-02 13:25:29 +07:00
committed by Dat H. Pham
parent 846c9c6583
commit 0bd60ea83d
26 changed files with 991 additions and 147 deletions
@@ -13,6 +13,7 @@ enum AccountMenuItem {
notification,
contactSupport,
storage,
keyboardShortcuts,
signOut,
none;
@@ -38,6 +39,8 @@ enum AccountMenuItem {
return imagePaths.icHelp;
case AccountMenuItem.storage:
return imagePaths.icStorage;
case AccountMenuItem.keyboardShortcuts:
return imagePaths.icKeyboard;
case AccountMenuItem.signOut:
return imagePaths.icSignOut;
case AccountMenuItem.none:
@@ -67,6 +70,8 @@ enum AccountMenuItem {
return appLocalizations.contactSupport;
case AccountMenuItem.storage:
return appLocalizations.storageQuotas;
case AccountMenuItem.keyboardShortcuts:
return appLocalizations.keyboardShortcuts;
case AccountMenuItem.signOut:
return appLocalizations.sign_out;
case AccountMenuItem.none:
@@ -90,6 +95,10 @@ enum AccountMenuItem {
return appLocalizations.folderVisibilitySubtitle;
case AccountMenuItem.storage:
return appLocalizations.storageSettingExplanation;
case AccountMenuItem.notification:
return appLocalizations.allowsTwakeMailToNotifyYouWhenANewMessageArrivesOnYourPhone;
case AccountMenuItem.keyboardShortcuts:
return appLocalizations.keyboardShortcutsSettingExplanation;
default:
return '';
}
@@ -117,6 +126,8 @@ enum AccountMenuItem {
return 'contact-support';
case AccountMenuItem.storage:
return 'storage';
case AccountMenuItem.keyboardShortcuts:
return 'keyboard-shortcuts';
case AccountMenuItem.signOut:
return 'sign-out';
case AccountMenuItem.none:
@@ -0,0 +1,38 @@
import 'package:equatable/equatable.dart';
enum ShortcutCategory {
navigationAndClosing,
readingAndReplying,
messageManagementAndSelection,
}
enum ShortcutContext {
mailComposer,
focusOnSearch,
openedModal,
mailboxList,
mailboxListWithSelectedEmail,
openedMailView,
}
class KeyboardShortcut with EquatableMixin {
final String label;
final ShortcutCategory category;
final ShortcutContext context;
final List<String> keys;
const KeyboardShortcut({
required this.label,
required this.category,
required this.context,
required this.keys,
});
@override
List<Object?> get props => [
label,
category,
context,
keys,
];
}
@@ -0,0 +1,96 @@
import 'package:tmail_ui_user/features/manage_account/presentation/model/keyboard_shortcuts/keyboard_shortcut.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
class KeyboardShortcutsManager {
KeyboardShortcutsManager._();
static List<KeyboardShortcut> generateKeyboardShortcuts(
AppLocalizations appLocalizations,
) {
return [
// Navigation & Closing
KeyboardShortcut(
label: appLocalizations.closeMailComposer,
category: ShortcutCategory.navigationAndClosing,
context: ShortcutContext.mailComposer,
keys: ['ESC'],
),
KeyboardShortcut(
label: appLocalizations.removeFocusFromSearch,
category: ShortcutCategory.navigationAndClosing,
context: ShortcutContext.focusOnSearch,
keys: ['ESC'],
),
KeyboardShortcut(
label: appLocalizations.closeModalWindow,
category: ShortcutCategory.navigationAndClosing,
context: ShortcutContext.openedModal,
keys: ['ESC'],
),
KeyboardShortcut(
label: appLocalizations.openNewMessage,
category: ShortcutCategory.navigationAndClosing,
context: ShortcutContext.mailboxList,
keys: ['N'],
),
// Reading & Replying
KeyboardShortcut(
label: appLocalizations.reply,
category: ShortcutCategory.readingAndReplying,
context: ShortcutContext.openedMailView,
keys: ['R'],
),
KeyboardShortcut(
label: appLocalizations.replyToAll,
category: ShortcutCategory.readingAndReplying,
context: ShortcutContext.openedMailView,
keys: ['Shift', 'R'],
),
KeyboardShortcut(
label: appLocalizations.forward,
category: ShortcutCategory.readingAndReplying,
context: ShortcutContext.openedMailView,
keys: ['F'],
),
KeyboardShortcut(
label: appLocalizations.mark_as_read,
category: ShortcutCategory.readingAndReplying,
context: ShortcutContext.openedMailView,
keys: ['Q'],
),
KeyboardShortcut(
label: appLocalizations.mark_as_unread,
category: ShortcutCategory.readingAndReplying,
context: ShortcutContext.openedMailView,
keys: ['U'],
),
// Message Management & Selection
KeyboardShortcut(
label: appLocalizations.deleteMessage,
category: ShortcutCategory.messageManagementAndSelection,
context: ShortcutContext.openedMailView,
keys: ['Delete'],
),
KeyboardShortcut(
label: appLocalizations.deleteMessage,
category: ShortcutCategory.messageManagementAndSelection,
context: ShortcutContext.mailboxListWithSelectedEmail,
keys: ['Delete'],
),
KeyboardShortcut(
label: appLocalizations.mark_as_read,
category: ShortcutCategory.messageManagementAndSelection,
context: ShortcutContext.mailboxListWithSelectedEmail,
keys: ['Q'],
),
KeyboardShortcut(
label: appLocalizations.mark_as_unread,
category: ShortcutCategory.messageManagementAndSelection,
context: ShortcutContext.mailboxListWithSelectedEmail,
keys: ['U'],
),
];
}
}