Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(86)

Unified Diff: ios/chrome/browser/ui/key_commands_provider.mm

Issue 2590473002: Upstream Chrome on iOS source code [5/11]. (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ios/chrome/browser/ui/key_commands_provider.mm
diff --git a/ios/chrome/browser/ui/key_commands_provider.mm b/ios/chrome/browser/ui/key_commands_provider.mm
new file mode 100644
index 0000000000000000000000000000000000000000..c254dbd0f14954efd3285c54a84ff9f222cc578b
--- /dev/null
+++ b/ios/chrome/browser/ui/key_commands_provider.mm
@@ -0,0 +1,305 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/ui/key_commands_provider.h"
+
+#import "base/ios/weak_nsobject.h"
+#include "base/logging.h"
+#include "components/strings/grit/components_strings.h"
+#import "ios/chrome/browser/ui/commands/generic_chrome_command.h"
+#include "ios/chrome/browser/ui/commands/ios_command_ids.h"
+#import "ios/chrome/browser/ui/keyboard/UIKeyCommand+Chrome.h"
+#include "ios/chrome/browser/ui/rtl_geometry.h"
+#include "ios/chrome/grit/ios_strings.h"
+#include "ui/base/l10n/l10n_util_mac.h"
+
+@implementation KeyCommandsProvider
+
+- (NSArray*)keyCommandsForConsumer:(id<KeyCommandsPlumbing>)consumer
+ editingText:(BOOL)editingText {
+ base::WeakNSProtocol<id<KeyCommandsPlumbing>> weakConsumer(consumer);
+
+ // Block to execute a command from the |tag|.
+ void (^execute)(NSInteger) = [[^(NSInteger tag) {
+ [weakConsumer
+ chromeExecuteCommand:[GenericChromeCommand commandWithTag:tag]];
+ } copy] autorelease];
+
+ // Block to have the tab model open the tab at |index|, if there is one.
+ void (^focusTab)(NSUInteger) = [[^(NSUInteger index) {
+ [weakConsumer focusTabAtIndex:index];
+ } copy] autorelease];
+
+ const BOOL hasTabs = [consumer tabsCount] > 0;
+
+ const BOOL useRTLLayout = UseRTLLayout();
+ const NSInteger browseLeft = useRTLLayout ? IDC_FORWARD : IDC_BACK;
+ const NSInteger browseRight = useRTLLayout ? IDC_BACK : IDC_FORWARD;
+ const int browseLeftDescriptionID = useRTLLayout
+ ? IDS_IOS_KEYBOARD_HISTORY_FORWARD
+ : IDS_IOS_KEYBOARD_HISTORY_BACK;
+ const int browseRightDescriptionID = useRTLLayout
+ ? IDS_IOS_KEYBOARD_HISTORY_BACK
+ : IDS_IOS_KEYBOARD_HISTORY_FORWARD;
+
+ // Initialize the array of commands with an estimated capacity.
+ NSMutableArray* keyCommands = [NSMutableArray arrayWithCapacity:32];
+
+ // List the commands that always appear in the HUD. They appear in the HUD
+ // since they have titles.
+ [keyCommands addObjectsFromArray:@[
+ [UIKeyCommand cr_keyCommandWithInput:@"t"
+ modifierFlags:UIKeyModifierCommand
+ title:l10n_util::GetNSStringWithFixup(
+ IDS_IOS_TOOLS_MENU_NEW_TAB)
+ action:^{
+ if ([weakConsumer isOffTheRecord]) {
+ execute(IDC_NEW_INCOGNITO_TAB);
+ } else {
+ execute(IDC_NEW_TAB);
+ }
+ }],
+ [UIKeyCommand
+ cr_keyCommandWithInput:@"n"
+ modifierFlags:UIKeyModifierCommand | UIKeyModifierShift
+ title:l10n_util::GetNSStringWithFixup(
+ IDS_IOS_TOOLS_MENU_NEW_INCOGNITO_TAB)
+ action:^{
+ execute(IDC_NEW_INCOGNITO_TAB);
+ }],
+ [UIKeyCommand
+ cr_keyCommandWithInput:@"t"
+ modifierFlags:UIKeyModifierCommand | UIKeyModifierShift
+ title:l10n_util::GetNSStringWithFixup(
+ IDS_IOS_KEYBOARD_REOPEN_CLOSED_TAB)
+ action:^{
+ [weakConsumer reopenClosedTab];
+ }],
+ ]];
+
+ // List the commands that only appear when there is at least a tab. When they
+ // appear, they are in the HUD since they have titles.
+ if (hasTabs) {
+ [keyCommands addObjectsFromArray:@[
+ [UIKeyCommand cr_keyCommandWithInput:@"l"
+ modifierFlags:UIKeyModifierCommand
+ title:l10n_util::GetNSStringWithFixup(
+ IDS_IOS_KEYBOARD_OPEN_LOCATION)
+ action:^{
+ [weakConsumer focusOmnibox];
+ }],
+ [UIKeyCommand cr_keyCommandWithInput:@"w"
+ modifierFlags:UIKeyModifierCommand
+ title:l10n_util::GetNSStringWithFixup(
+ IDS_IOS_TOOLS_MENU_CLOSE_TAB)
+ action:^{
+ execute(IDC_CLOSE_TAB);
+ }],
+ [UIKeyCommand
+ cr_keyCommandWithInput:@"d"
+ modifierFlags:UIKeyModifierCommand
+ title:l10n_util::GetNSStringWithFixup(
+ IDS_IOS_KEYBOARD_BOOKMARK_THIS_PAGE)
+ action:^{
+ execute(IDC_BOOKMARK_PAGE);
+ }],
+ [UIKeyCommand cr_keyCommandWithInput:@"f"
+ modifierFlags:UIKeyModifierCommand
+ title:l10n_util::GetNSStringWithFixup(
+ IDS_IOS_TOOLS_MENU_FIND_IN_PAGE)
+ action:^{
+ execute(IDC_FIND);
+ }],
+ [UIKeyCommand cr_keyCommandWithInput:@"g"
+ modifierFlags:UIKeyModifierCommand
+ title:nil
+ action:^{
+ execute(IDC_FIND_NEXT);
+ }],
+ [UIKeyCommand
+ cr_keyCommandWithInput:@"g"
+ modifierFlags:UIKeyModifierCommand | UIKeyModifierShift
+ title:nil
+ action:^{
+ execute(IDC_FIND_PREVIOUS);
+ }],
+ [UIKeyCommand cr_keyCommandWithInput:@"r"
+ modifierFlags:UIKeyModifierCommand
+ title:l10n_util::GetNSStringWithFixup(
+ IDS_IOS_ACCNAME_RELOAD)
+ action:^{
+ execute(IDC_RELOAD);
+ }],
+ ]];
+
+ // Since cmd+left and cmd+right are valid system shortcuts when editing
+ // text, don't register those if text is being edited.
+ if (!editingText) {
+ [keyCommands addObjectsFromArray:@[
+ [UIKeyCommand cr_keyCommandWithInput:UIKeyInputLeftArrow
+ modifierFlags:UIKeyModifierCommand
+ title:l10n_util::GetNSStringWithFixup(
+ browseLeftDescriptionID)
+ action:^{
+ execute(browseLeft);
+ }],
+ [UIKeyCommand cr_keyCommandWithInput:UIKeyInputRightArrow
+ modifierFlags:UIKeyModifierCommand
+ title:l10n_util::GetNSStringWithFixup(
+ browseRightDescriptionID)
+ action:^{
+ execute(browseRight);
+ }],
+ ]];
+ }
+
+ NSString* voiceSearchTitle = l10n_util::GetNSStringWithFixup(
+ IDS_IOS_VOICE_SEARCH_KEYBOARD_DISCOVERY_TITLE);
+ [keyCommands addObjectsFromArray:@[
+ [UIKeyCommand cr_keyCommandWithInput:@"y"
+ modifierFlags:UIKeyModifierCommand
+ title:l10n_util::GetNSStringWithFixup(
+ IDS_HISTORY_SHOW_HISTORY)
+ action:^{
+ execute(IDC_SHOW_HISTORY);
+ }],
+ [UIKeyCommand
+ cr_keyCommandWithInput:@"."
+ modifierFlags:UIKeyModifierCommand | UIKeyModifierShift
+ title:voiceSearchTitle
+ action:^{
+ execute(IDC_VOICE_SEARCH);
+ }],
+ ]];
+ }
+
+ // List the commands that don't appear in the HUD but are always present.
+ [keyCommands addObjectsFromArray:@[
+ [UIKeyCommand cr_keyCommandWithInput:UIKeyInputEscape
+ modifierFlags:Cr_UIKeyModifierNone
+ title:nil
+ action:^{
+ execute(IDC_CLOSE_MODALS);
+ }],
+ [UIKeyCommand cr_keyCommandWithInput:@"n"
+ modifierFlags:UIKeyModifierCommand
+ title:nil
+ action:^{
+ if ([weakConsumer isOffTheRecord]) {
+ execute(IDC_NEW_INCOGNITO_TAB);
+ } else {
+ execute(IDC_NEW_TAB);
+ }
+ }],
+ [UIKeyCommand cr_keyCommandWithInput:@","
+ modifierFlags:UIKeyModifierCommand
+ title:nil
+ action:^{
+ execute(IDC_OPTIONS);
+ }],
+ ]];
+
+ // List the commands that don't appear in the HUD and only appear when there
+ // is at least a tab.
+ if (hasTabs) {
+ [keyCommands addObjectsFromArray:@[
+ [UIKeyCommand cr_keyCommandWithInput:@"["
+ modifierFlags:UIKeyModifierCommand
+ title:nil
+ action:^{
+ execute(browseLeft);
+ }],
+ [UIKeyCommand cr_keyCommandWithInput:@"]"
+ modifierFlags:UIKeyModifierCommand
+ title:nil
+ action:^{
+ execute(browseRight);
+ }],
+ [UIKeyCommand cr_keyCommandWithInput:@"."
+ modifierFlags:UIKeyModifierCommand
+ title:nil
+ action:^{
+ execute(IDC_STOP);
+ }],
+ [UIKeyCommand cr_keyCommandWithInput:@"?"
+ modifierFlags:UIKeyModifierCommand
+ title:nil
+ action:^{
+ execute(IDC_HELP_PAGE_VIA_MENU);
+ }],
+ [UIKeyCommand cr_keyCommandWithInput:@"1"
+ modifierFlags:UIKeyModifierCommand
+ title:nil
+ action:^{
+ focusTab(0);
+ }],
+ [UIKeyCommand cr_keyCommandWithInput:@"2"
+ modifierFlags:UIKeyModifierCommand
+ title:nil
+ action:^{
+ focusTab(1);
+ }],
+ [UIKeyCommand cr_keyCommandWithInput:@"3"
+ modifierFlags:UIKeyModifierCommand
+ title:nil
+ action:^{
+ focusTab(2);
+ }],
+ [UIKeyCommand cr_keyCommandWithInput:@"4"
+ modifierFlags:UIKeyModifierCommand
+ title:nil
+ action:^{
+ focusTab(3);
+ }],
+ [UIKeyCommand cr_keyCommandWithInput:@"5"
+ modifierFlags:UIKeyModifierCommand
+ title:nil
+ action:^{
+ focusTab(4);
+ }],
+ [UIKeyCommand cr_keyCommandWithInput:@"6"
+ modifierFlags:UIKeyModifierCommand
+ title:nil
+ action:^{
+ focusTab(5);
+ }],
+ [UIKeyCommand cr_keyCommandWithInput:@"7"
+ modifierFlags:UIKeyModifierCommand
+ title:nil
+ action:^{
+ focusTab(6);
+ }],
+ [UIKeyCommand cr_keyCommandWithInput:@"8"
+ modifierFlags:UIKeyModifierCommand
+ title:nil
+ action:^{
+ focusTab(7);
+ }],
+ [UIKeyCommand cr_keyCommandWithInput:@"9"
+ modifierFlags:UIKeyModifierCommand
+ title:nil
+ action:^{
+ focusTab([weakConsumer tabsCount] - 1);
+ }],
+ [UIKeyCommand
+ cr_keyCommandWithInput:UIKeyInputLeftArrow
+ modifierFlags:UIKeyModifierCommand | UIKeyModifierAlternate
+ title:nil
+ action:^{
+ [weakConsumer focusPreviousTab];
+ }],
+ [UIKeyCommand
+ cr_keyCommandWithInput:UIKeyInputRightArrow
+ modifierFlags:UIKeyModifierCommand | UIKeyModifierAlternate
+ title:nil
+ action:^{
+ [weakConsumer focusNextTab];
+ }],
+ ]];
+ }
+
+ return keyCommands;
+}
+
+@end
« no previous file with comments | « ios/chrome/browser/ui/key_commands_provider.h ('k') | ios/chrome/browser/ui/key_commands_provider_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698