Index: ios/chrome/browser/ui/omnibox/omnibox_popup_material_row.mm |
diff --git a/ios/chrome/browser/ui/omnibox/omnibox_popup_material_row.mm b/ios/chrome/browser/ui/omnibox/omnibox_popup_material_row.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..445950fcd22d49645a3264ecd338a131bde84e71 |
--- /dev/null |
+++ b/ios/chrome/browser/ui/omnibox/omnibox_popup_material_row.mm |
@@ -0,0 +1,198 @@ |
+// Copyright (c) 2014 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/omnibox/omnibox_popup_material_row.h" |
+ |
+#include "base/logging.h" |
+#include "base/mac/objc_property_releaser.h" |
+#import "ios/chrome/browser/ui/omnibox/truncating_attributed_label.h" |
+#include "ios/chrome/browser/ui/rtl_geometry.h" |
+#include "ios/chrome/browser/ui/ui_util.h" |
+#import "ios/chrome/browser/ui/uikit_ui_util.h" |
+#include "ios/chrome/grit/ios_theme_resources.h" |
+#include "ui/base/resource/resource_bundle.h" |
+ |
+namespace { |
+const CGFloat kImageDimensionLength = 19.0; |
+const CGFloat kLeadingPaddingIpad = 164; |
+const CGFloat kLeadingPaddingIpadCompact = 71; |
+const CGFloat kAppendButtonTrailingMargin = 4; |
+} |
+ |
+@interface OmniboxPopupMaterialRow () { |
+ BOOL _incognito; |
+ base::mac::ObjCPropertyReleaser _propertyReleaser_OmniboxPopupMaterialRow; |
+} |
+ |
+// Set the append button normal and highlighted images. |
+- (void)updateAppendButtonImages; |
+ |
+// Set the Physical Web image view image. |
+- (void)updatePhysicalWebImage; |
+ |
+@end |
+ |
+@implementation OmniboxPopupMaterialRow |
+ |
+@synthesize textTruncatingLabel = _textTruncatingLabel; |
+@synthesize detailTruncatingLabel = _detailTruncatingLabel; |
+@synthesize appendButton = _appendButton; |
+@synthesize answerImageView = _answerImageView; |
+@synthesize imageView = _imageView; |
+@synthesize physicalWebImageView = _physicalWebImageView; |
+@synthesize rowHeight = _rowHeight; |
+ |
+- (instancetype)initWithStyle:(UITableViewCellStyle)style |
+ reuseIdentifier:(NSString*)reuseIdentifier { |
+ return [self initWithIncognito:NO]; |
+} |
+ |
+- (instancetype)initWithIncognito:(BOOL)incognito { |
+ self = [super initWithStyle:UITableViewCellStyleDefault |
+ reuseIdentifier:@"OmniboxPopupMaterialRow"]; |
+ if (self) { |
+ self.isAccessibilityElement = YES; |
+ self.backgroundColor = [UIColor clearColor]; |
+ _incognito = incognito; |
+ _propertyReleaser_OmniboxPopupMaterialRow.Init( |
+ self, [OmniboxPopupMaterialRow class]); |
+ |
+ _textTruncatingLabel = |
+ [[OmniboxPopupTruncatingLabel alloc] initWithFrame:CGRectZero]; |
+ _textTruncatingLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth; |
+ _textTruncatingLabel.userInteractionEnabled = NO; |
+ [self addSubview:_textTruncatingLabel]; |
+ |
+ _detailTruncatingLabel = |
+ [[OmniboxPopupTruncatingLabel alloc] initWithFrame:CGRectZero]; |
+ _detailTruncatingLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth; |
+ _detailTruncatingLabel.userInteractionEnabled = NO; |
+ [self addSubview:_detailTruncatingLabel]; |
+ |
+ _appendButton = [[UIButton buttonWithType:UIButtonTypeCustom] retain]; |
+ [_appendButton setContentMode:UIViewContentModeRight]; |
+ [self updateAppendButtonImages]; |
+ // TODO(justincohen): Consider using the UITableViewCell's accessory view. |
+ // The current implementation is from before using a UITableViewCell. |
+ [self addSubview:_appendButton]; |
+ |
+ _physicalWebImageView = [[UIImageView alloc] initWithFrame:CGRectZero]; |
+ _physicalWebImageView.userInteractionEnabled = NO; |
+ _physicalWebImageView.contentMode = UIViewContentModeCenter; |
+ [self updatePhysicalWebImage]; |
+ [self addSubview:_physicalWebImageView]; |
+ |
+ // Left icon is only displayed on iPad. |
+ if (IsIPadIdiom()) { |
+ _imageView = [[UIImageView alloc] initWithFrame:CGRectZero]; |
+ _imageView.userInteractionEnabled = NO; |
+ _imageView.contentMode = UIViewContentModeCenter; |
+ |
+ // TODO(justincohen): Consider using the UITableViewCell's image view. |
+ // The current implementation is from before using a UITableViewCell. |
+ [self addSubview:_imageView]; |
+ } |
+ |
+ _answerImageView = [[UIImageView alloc] initWithFrame:CGRectZero]; |
+ _answerImageView.userInteractionEnabled = NO; |
+ _answerImageView.contentMode = UIViewContentModeScaleAspectFit; |
+ [self addSubview:_answerImageView]; |
+ } |
+ return self; |
+} |
+ |
+- (void)layoutSubviews { |
+ [super layoutSubviews]; |
+ [self layoutAccessoryViews]; |
+} |
+ |
+- (void)layoutAccessoryViews { |
+ LayoutRect imageViewLayout = LayoutRectMake( |
+ IsCompactTablet() ? kLeadingPaddingIpadCompact : kLeadingPaddingIpad, |
+ CGRectGetWidth(self.bounds), |
+ floor((_rowHeight - kImageDimensionLength) / 2), kImageDimensionLength, |
+ kImageDimensionLength); |
+ _imageView.frame = LayoutRectGetRect(imageViewLayout); |
+ |
+ CGFloat appendButtonDimensionLength = CGRectGetHeight(self.bounds); |
+ DCHECK_GT(appendButtonDimensionLength, 40); |
+ LayoutRect rightAccessoryLayout = |
+ LayoutRectMake(CGRectGetWidth(self.bounds) - appendButtonDimensionLength - |
+ kAppendButtonTrailingMargin, |
+ CGRectGetWidth(self.bounds), |
+ floor((_rowHeight - appendButtonDimensionLength) / 2), |
+ appendButtonDimensionLength, appendButtonDimensionLength); |
+ _appendButton.frame = LayoutRectGetRect(rightAccessoryLayout); |
+ _physicalWebImageView.frame = LayoutRectGetRect(rightAccessoryLayout); |
+} |
+ |
+- (void)updateLeftImage:(int)imageId { |
+ // Update the image. |
+ ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
+ UIImage* image = rb.GetNativeImageNamed(imageId).ToUIImage(); |
+ _imageView.image = image; |
+ |
+ // Adjust the vertical position based on the current size of the row. |
+ CGRect frame = _imageView.frame; |
+ frame.origin.y = floor((_rowHeight - kImageDimensionLength) / 2); |
+ _imageView.frame = frame; |
+} |
+ |
+- (void)updateHighlightBackground:(BOOL)highlighted { |
+ // Set the background color to match the color of selected table view cells |
+ // when their selection style is UITableViewCellSelectionStyleGray. |
+ if (highlighted) { |
+ self.backgroundColor = _incognito ? [UIColor colorWithWhite:1 alpha:0.1] |
+ : [UIColor colorWithWhite:0 alpha:0.05]; |
+ } else { |
+ self.backgroundColor = [UIColor clearColor]; |
+ } |
+} |
+ |
+- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated { |
+ [super setHighlighted:highlighted animated:animated]; |
+ [self updateHighlightBackground:highlighted]; |
+} |
+ |
+- (void)setHighlighted:(BOOL)highlighted { |
+ [super setHighlighted:highlighted]; |
+ [self updateHighlightBackground:highlighted]; |
+} |
+ |
+- (void)updateAppendButtonImages { |
+ ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
+ int appendResourceID = _incognito |
+ ? IDR_IOS_OMNIBOX_KEYBOARD_VIEW_APPEND_INCOGNITO |
+ : IDR_IOS_OMNIBOX_KEYBOARD_VIEW_APPEND; |
+ UIImage* appendImage = rb.GetNativeImageNamed(appendResourceID).ToUIImage(); |
+ if (UseRTLLayout()) { |
+ appendImage = [appendImage imageFlippedForRightToLeftLayoutDirection]; |
+ } |
+ |
+ [_appendButton setImage:appendImage forState:UIControlStateNormal]; |
+ int appendSelectedResourceID = |
+ _incognito ? IDR_IOS_OMNIBOX_KEYBOARD_VIEW_APPEND_INCOGNITO_HIGHLIGHTED |
+ : IDR_IOS_OMNIBOX_KEYBOARD_VIEW_APPEND_HIGHLIGHTED; |
+ UIImage* appendImageSelected = |
+ rb.GetNativeImageNamed(appendSelectedResourceID).ToUIImage(); |
+ [_appendButton setImage:appendImageSelected |
+ forState:UIControlStateHighlighted]; |
+} |
+ |
+- (void)updatePhysicalWebImage { |
+ ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
+ UIImage* physicalWebImage = |
+ rb.GetNativeImageNamed(IDR_IOS_OMNIBOX_PHYSICAL_WEB).ToUIImage(); |
+ _physicalWebImageView.image = physicalWebImage; |
+} |
+ |
+- (NSString*)accessibilityLabel { |
+ return _textTruncatingLabel.attributedText.string; |
+} |
+ |
+- (NSString*)accessibilityValue { |
+ return _detailTruncatingLabel.attributedText.string; |
+} |
+ |
+@end |