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

Unified Diff: ios/chrome/browser/ui/tools_menu/tools_menu_view_tools_cell.mm

Issue 2640423003: [ios] Decouples ToolsMenuViewToolsCell from ToolsMenuVC (Closed)
Patch Set: CL Feedback Created 3 years, 11 months 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
« no previous file with comments | « ios/chrome/browser/ui/tools_menu/tools_menu_view_tools_cell.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ios/chrome/browser/ui/tools_menu/tools_menu_view_tools_cell.mm
diff --git a/ios/chrome/browser/ui/tools_menu/tools_menu_view_tools_cell.mm b/ios/chrome/browser/ui/tools_menu/tools_menu_view_tools_cell.mm
new file mode 100644
index 0000000000000000000000000000000000000000..e5c3b101126195cec8995d39e0496ddd66331549
--- /dev/null
+++ b/ios/chrome/browser/ui/tools_menu/tools_menu_view_tools_cell.mm
@@ -0,0 +1,205 @@
+// 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.
+
+#import "ios/chrome/browser/ui/tools_menu/tools_menu_view_tools_cell.h"
+
+#include "base/mac/objc_property_releaser.h"
+#include "components/strings/grit/components_strings.h"
+#include "ios/chrome/browser/ui/commands/ios_command_ids.h"
+#include "ios/chrome/browser/ui/rtl_geometry.h"
+#include "ios/chrome/browser/ui/toolbar/toolbar_resource_macros.h"
+#import "ios/chrome/browser/ui/uikit_ui_util.h"
+#include "ios/chrome/grit/ios_strings.h"
+
+// TODO(crbug.com/228521): Remove this once the new command/metric handling is
+// implemented. This is a temporary workaround to allow metrics recording to
+// distinguish the action. The value used is in the dynamic range (<
+// IDC_MinimumLabelValue) to avoid collisions.
+#define IDC_TEMP_EDIT_BOOKMARK 3900
+
+@implementation ToolsMenuViewToolsCell {
+ base::mac::ObjCPropertyReleaser _propertyReleaser_ToolsMenuViewToolsCell;
+}
+
+@synthesize reloadButton = _reloadButton;
+@synthesize shareButton = _shareButton;
+@synthesize starButton = _starButton;
+@synthesize starredButton = _starredButton;
+@synthesize stopButton = _stopButton;
+@synthesize toolsButton = _toolsButton;
+
+- (instancetype)initWithCoder:(NSCoder*)aDecoder {
+ self = [super initWithCoder:aDecoder];
+ if (self)
+ [self commonInitialization];
+
+ return self;
+}
+
+- (instancetype)initWithFrame:(CGRect)frame {
+ self = [super initWithFrame:frame];
+ if (self)
+ [self commonInitialization];
+
+ return self;
+}
+
+- (void)commonInitialization {
+ _propertyReleaser_ToolsMenuViewToolsCell.Init(self,
+ [ToolsMenuViewToolsCell class]);
+
+ [self setBackgroundColor:[UIColor whiteColor]];
+ [self setOpaque:YES];
+
+ int star[2][3] = TOOLBAR_IDR_TWO_STATE(STAR);
+ _starButton = [self newButtonForImageIds:star
+ commandID:IDC_BOOKMARK_PAGE
+ accessibilityLabelID:IDS_BOOKMARK_ADD_EDITOR_TITLE
+ automationName:@"Add Bookmark"];
+
+ int star_pressed[2][3] = TOOLBAR_IDR_ONE_STATE(STAR_PRESSED);
+ _starredButton = [self newButtonForImageIds:star_pressed
+ commandID:IDC_TEMP_EDIT_BOOKMARK
+ accessibilityLabelID:IDS_IOS_TOOLS_MENU_EDIT_BOOKMARK
+ automationName:@"Edit Bookmark"];
+
+ int reload[2][3] = TOOLBAR_IDR_TWO_STATE(RELOAD);
+ _reloadButton = [self newButtonForImageIds:reload
+ commandID:IDC_RELOAD
+ accessibilityLabelID:IDS_IOS_ACCNAME_RELOAD
+ automationName:@"Reload"
+ reverseForRTL:YES];
+
+ int stop[2][3] = TOOLBAR_IDR_TWO_STATE(STOP);
+ _stopButton = [self newButtonForImageIds:stop
+ commandID:IDC_STOP
+ accessibilityLabelID:IDS_IOS_ACCNAME_STOP
+ automationName:@"Stop"];
+
+ int share[2][3] = TOOLBAR_IDR_THREE_STATE(SHARE);
+ _shareButton = [self newButtonForImageIds:share
+ commandID:IDC_SHARE_PAGE
+ accessibilityLabelID:IDS_IOS_TOOLS_MENU_SHARE
+ automationName:@"Stop"];
+ int tools[2][3] = TOOLBAR_IDR_ONE_STATE(TOOLS_PRESSED);
+ _toolsButton =
+ [self newButtonForImageIds:tools
+ commandID:IDC_SHOW_TOOLS_MENU
+ accessibilityLabelID:IDS_IOS_TOOLBAR_CLOSE_MENU
+ automationName:@"kToolbarToolsMenuButtonIdentifier"];
+
+ UIView* contentView = [self contentView];
+ [contentView setBackgroundColor:[self backgroundColor]];
+ [contentView setOpaque:YES];
+
+ [contentView addSubview:_starredButton];
+ [contentView addSubview:_starButton];
+ [contentView addSubview:_stopButton];
+ [contentView addSubview:_reloadButton];
+ [contentView addSubview:_shareButton];
+
+ [self addConstraints];
+}
+
+- (UIButton*)newButtonForImageIds:(int[2][3])imageIds
+ commandID:(int)commandID
+ accessibilityLabelID:(int)labelID
+ automationName:(NSString*)name {
+ return [self newButtonForImageIds:imageIds
+ commandID:commandID
+ accessibilityLabelID:labelID
+ automationName:name
+ reverseForRTL:NO];
+}
+
+- (UIButton*)newButtonForImageIds:(int[2][3])imageIds
+ commandID:(int)commandID
+ accessibilityLabelID:(int)labelID
+ automationName:(NSString*)name
+ reverseForRTL:(BOOL)reverseForRTL {
+ UIButton* button = [[UIButton alloc] initWithFrame:CGRectZero];
+ [button setTranslatesAutoresizingMaskIntoConstraints:NO];
+
+ if (imageIds[0][0]) {
+ [button setImage:NativeReversableImage(imageIds[0][0], reverseForRTL)
+ forState:UIControlStateNormal];
+ }
+ [[button imageView] setContentMode:UIViewContentModeCenter];
+ [button setBackgroundColor:[self backgroundColor]];
+ [button setTag:commandID];
+ [button setOpaque:YES];
+
+ SetA11yLabelAndUiAutomationName(button, labelID, name);
+
+ if (imageIds[0][1]) {
+ UIImage* pressedImage =
+ NativeReversableImage(imageIds[0][1], reverseForRTL);
+ if (pressedImage) {
+ [button setImage:pressedImage forState:UIControlStateHighlighted];
+ }
+ }
+
+ if (imageIds[0][2]) {
+ UIImage* disabledImage =
+ NativeReversableImage(imageIds[0][2], reverseForRTL);
+ if (disabledImage) {
+ [button setImage:disabledImage forState:UIControlStateDisabled];
+ }
+ }
+
+ return button;
+}
+
+- (void)addConstraints {
+ UIView* contentView = [self contentView];
+
+ for (UIButton* button in [self allButtons]) {
+ NSDictionary* view = @{ @"button" : button };
+ NSArray* constraints = @[ @"V:|-(0)-[button]-(0)-|", @"H:[button(==48)]" ];
+ ApplyVisualConstraints(constraints, view, self);
+ }
+
+ NSDictionary* views = @{
+ @"share" : _shareButton,
+ @"star" : _starButton,
+ @"reload" : _reloadButton,
+ @"starred" : _starredButton,
+ @"stop" : _stopButton
+ };
+ // Leading offset is 16, minus the button image inset of 12.
+ NSDictionary* metrics = @{ @"offset" : @4, @"space" : @24 };
+ // clang-format off
+ NSArray* constraints = @[
+ @"H:|-(offset)-[share]-(space)-[star]-(space)-[reload]",
+ @"H:[share]-(space)-[starred]",
+ @"H:[star]-(space)-[stop]"
+ ];
+ // clang-format on
+ ApplyVisualConstraintsWithMetricsAndOptions(
+ constraints, views, metrics, LayoutOptionForRTLSupport(), contentView);
+}
+
+// These should be added in display order, so they are animated in display
+// order.
+- (NSArray*)allButtons {
+ NSMutableArray* allButtons = [NSMutableArray array];
+ if (_shareButton)
+ [allButtons addObject:_shareButton];
+
+ if (_starButton)
+ [allButtons addObject:_starButton];
+
+ if (_starredButton)
+ [allButtons addObject:_starredButton];
+
+ if (_reloadButton)
+ [allButtons addObject:_reloadButton];
+
+ if (_stopButton)
+ [allButtons addObject:_stopButton];
+
+ return allButtons;
+}
+
+@end
« no previous file with comments | « ios/chrome/browser/ui/tools_menu/tools_menu_view_tools_cell.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698