Index: ios/chrome/browser/ui/tools_menu/tools_menu_model.mm |
diff --git a/ios/chrome/browser/ui/tools_menu/tools_menu_model.mm b/ios/chrome/browser/ui/tools_menu/tools_menu_model.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6556f3ad473d1560839c3fc19981a6cfd73848eb |
--- /dev/null |
+++ b/ios/chrome/browser/ui/tools_menu/tools_menu_model.mm |
@@ -0,0 +1,119 @@ |
+// Copyright 2017 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. |
+ |
+#include "ios/chrome/browser/ui/tools_menu/tools_menu_model.h" |
+ |
+#include "components/reading_list/core/reading_list_switches.h" |
+#include "components/strings/grit/components_strings.h" |
+#include "ios/chrome/browser/experimental_flags.h" |
+#include "ios/chrome/browser/ui/commands/ios_command_ids.h" |
+#import "ios/chrome/browser/ui/tools_menu/reading_list_menu_view_item.h" |
+#include "ios/chrome/browser/ui/ui_util.h" |
+#include "ios/chrome/grit/ios_strings.h" |
+#include "ios/public/provider/chrome/browser/chrome_browser_provider.h" |
+#import "ios/public/provider/chrome/browser/user_feedback/user_feedback_provider.h" |
+ |
+NSString* const kToolsMenuNewTabId = @"kToolsMenuNewTabId"; |
+NSString* const kToolsMenuNewIncognitoTabId = @"kToolsMenuNewIncognitoTabId"; |
+NSString* const kToolsMenuCloseAllTabsId = @"kToolsMenuCloseAllTabsId"; |
+NSString* const kToolsMenuCloseAllIncognitoTabsId = |
+ @"kToolsMenuCloseAllIncognitoTabsId"; |
+NSString* const kToolsMenuBookmarksId = @"kToolsMenuBookmarksId"; |
+NSString* const kToolsMenuReadingListId = @"kToolsMenuReadingListId"; |
+NSString* const kToolsMenuOtherDevicesId = @"kToolsMenuOtherDevicesId"; |
+NSString* const kToolsMenuHistoryId = @"kToolsMenuHistoryId"; |
+NSString* const kToolsMenuReportAnIssueId = @"kToolsMenuReportAnIssueId"; |
+NSString* const kToolsMenuFindInPageId = @"kToolsMenuFindInPageId"; |
+NSString* const kToolsMenuReaderMode = @"kToolsMenuReaderMode"; |
+NSString* const kToolsMenuRequestDesktopId = @"kToolsMenuRequestDesktopId"; |
+NSString* const kToolsMenuSettingsId = @"kToolsMenuSettingsId"; |
+NSString* const kToolsMenuHelpId = @"kToolsMenuHelpId"; |
+NSString* const kToolsMenuSuggestionsId = @"kToolsMenuSuggestionsId"; |
+ |
+// Menu items can be marked as visible or not when Incognito is enabled. |
+// The following bits are used for |visibility| field in |MenuItemInfo|. |
+const NSInteger kVisibleIncognitoOnly = 1 << 0; |
+const NSInteger kVisibleNotIncognitoOnly = 1 << 1; |
+ |
+// Declare all the possible items. |
+const MenuItemInfo itemInfoList[] = { |
+ // clang-format off |
+ { IDS_IOS_TOOLS_MENU_NEW_TAB, kToolsMenuNewTabId, |
+ IDC_NEW_TAB, ToolbarTypeAll, |
+ 0, nil }, |
+ { IDS_IOS_TOOLS_MENU_NEW_INCOGNITO_TAB, kToolsMenuNewIncognitoTabId, |
+ IDC_NEW_INCOGNITO_TAB, ToolbarTypeAll, |
+ 0, nil }, |
+ { IDS_IOS_TOOLS_MENU_CLOSE_ALL_TABS, kToolsMenuCloseAllTabsId, |
+ IDC_CLOSE_ALL_TABS, ToolbarTypeSwitcheriPhone, |
+ kVisibleNotIncognitoOnly, nil }, |
+ { IDS_IOS_TOOLS_MENU_CLOSE_ALL_INCOGNITO_TABS, |
+ kToolsMenuCloseAllIncognitoTabsId, |
+ IDC_CLOSE_ALL_INCOGNITO_TABS, ToolbarTypeSwitcheriPhone, |
+ kVisibleIncognitoOnly, nil }, |
+ { IDS_IOS_TOOLS_MENU_BOOKMARKS, kToolsMenuBookmarksId, |
+ IDC_SHOW_BOOKMARK_MANAGER, ToolbarTypeWebAll, |
+ 0, nil }, |
+ { IDS_IOS_TOOLS_MENU_READING_LIST, kToolsMenuReadingListId, |
+ IDC_SHOW_READING_LIST, ToolbarTypeWebAll, |
+ 0, [ReadingListMenuViewItem class] }, |
+ { IDS_IOS_TOOLS_MENU_SUGGESTIONS, kToolsMenuSuggestionsId, |
+ IDC_SHOW_SUGGESTIONS, ToolbarTypeWebAll, |
+ 0, nil }, |
+ { IDS_IOS_TOOLS_MENU_RECENT_TABS, kToolsMenuOtherDevicesId, |
+ IDC_SHOW_OTHER_DEVICES, ToolbarTypeWebAll, |
+ kVisibleNotIncognitoOnly, nil }, |
+ { IDS_HISTORY_SHOW_HISTORY, kToolsMenuHistoryId, |
+ IDC_SHOW_HISTORY, ToolbarTypeWebAll, |
+ 0, nil }, |
+ { IDS_IOS_OPTIONS_REPORT_AN_ISSUE, kToolsMenuReportAnIssueId, |
+ IDC_REPORT_AN_ISSUE, ToolbarTypeAll, |
+ 0, nil }, |
+ { IDS_IOS_TOOLS_MENU_FIND_IN_PAGE, kToolsMenuFindInPageId, |
+ IDC_FIND, ToolbarTypeWebAll, |
+ 0, nil }, |
+ { IDS_IOS_TOOLS_MENU_REQUEST_DESKTOP_SITE, kToolsMenuRequestDesktopId, |
+ IDC_REQUEST_DESKTOP_SITE, ToolbarTypeWebAll, |
+ 0, nil }, |
+ { IDS_IOS_TOOLS_MENU_READER_MODE, kToolsMenuReaderMode, |
+ IDC_READER_MODE, ToolbarTypeWebAll, |
+ 0, nil }, |
+ { IDS_IOS_TOOLS_MENU_SETTINGS, kToolsMenuSettingsId, |
+ IDC_OPTIONS, ToolbarTypeAll, |
+ 0, nil }, |
+ { IDS_IOS_TOOLS_MENU_HELP_MOBILE, kToolsMenuHelpId, |
+ IDC_HELP_PAGE_VIA_MENU, ToolbarTypeWebAll, |
+ 0, nil }, |
+ // clang-format on |
+}; |
+ |
+bool ToolsMenuItemShouldBeVisible(const MenuItemInfo& item, |
+ bool incognito, |
+ ToolbarType toolbarType) { |
+ if (!(item.toolbar_types & toolbarType)) |
+ return false; |
+ |
+ if (incognito && (item.visibility & kVisibleNotIncognitoOnly)) |
+ return false; |
+ |
+ if (!incognito && (item.visibility & kVisibleIncognitoOnly)) |
+ return false; |
+ |
+ switch (item.title_id) { |
+ case IDS_IOS_TOOLBAR_SHOW_TABS: |
+ return IsIPadIdiom(); |
+ case IDS_IOS_TOOLS_MENU_READER_MODE: |
+ return experimental_flags::IsReaderModeEnabled(); |
+ case IDS_IOS_TOOLS_MENU_READING_LIST: |
+ return reading_list::switches::IsReadingListEnabled(); |
+ case IDS_IOS_TOOLS_MENU_SUGGESTIONS: |
+ return experimental_flags::IsSuggestionsUIEnabled(); |
+ case IDS_IOS_OPTIONS_REPORT_AN_ISSUE: |
+ return !ios::GetChromeBrowserProvider() |
+ ->GetUserFeedbackProvider() |
+ ->IsUserFeedbackEnabled(); |
+ default: |
+ return true; |
+ } |
+} |