Commit 51ebfe0b authored by Nohemi Fernandez's avatar Nohemi Fernandez Committed by Commit Bot

[iOS] Allow icon image to be changed in TableViewDetailItem.

The current approach does not allow a developer to change the icon image
when another image has already been set.

Bug: 1125631
Change-Id: I2665b3ffdd66f666b9fe86821ba4fa04d6708ed0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2445417
Commit-Queue: Nohemi Fernandez <fernandex@chromium.org>
Reviewed-by: default avatarEugene But <eugenebut@chromium.org>
Cr-Commit-Position: refs/heads/master@{#814294}
parent 8a7cd9b4
...@@ -89,6 +89,7 @@ source_set("cells_constants") { ...@@ -89,6 +89,7 @@ source_set("cells_constants") {
source_set("unit_tests") { source_set("unit_tests") {
testonly = true testonly = true
sources = [ sources = [
"table_view_detail_icon_item_unittest.mm",
"table_view_detail_text_item_unittest.mm", "table_view_detail_text_item_unittest.mm",
"table_view_header_footer_item_unittest.mm", "table_view_header_footer_item_unittest.mm",
"table_view_image_item_unittest.mm", "table_view_image_item_unittest.mm",
...@@ -106,6 +107,7 @@ source_set("unit_tests") { ...@@ -106,6 +107,7 @@ source_set("unit_tests") {
":cells", ":cells",
":cells_constants", ":cells_constants",
"//base", "//base",
"//ios/chrome/browser/ui/icons",
"//ios/chrome/browser/ui/table_view:styler", "//ios/chrome/browser/ui/table_view:styler",
"//ios/chrome/common/ui/colors", "//ios/chrome/common/ui/colors",
"//net:net", "//net:net",
......
...@@ -198,11 +198,11 @@ const CGFloat kCellLabelsWidthProportion = 3.0f; ...@@ -198,11 +198,11 @@ const CGFloat kCellLabelsWidthProportion = 3.0f;
} }
- (void)setIconImage:(UIImage*)image { - (void)setIconImage:(UIImage*)image {
BOOL hidden = (image == nil); if (image == nil && _iconImageView.image == nil) {
if (hidden == _iconImageView.hidden) {
return; return;
} }
BOOL hidden = (image == nil);
_iconImageView.image = image; _iconImageView.image = image;
_iconImageView.hidden = hidden; _iconImageView.hidden = hidden;
if (hidden) { if (hidden) {
......
// Copyright 2020 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/table_view/cells/table_view_detail_icon_item.h"
#include "base/mac/foundation_util.h"
#import "ios/chrome/browser/ui/icons/chrome_icon.h"
#import "ios/chrome/browser/ui/table_view/cells/table_view_cells_constants.h"
#import "ios/chrome/browser/ui/table_view/chrome_table_view_styler.h"
#import "ios/chrome/browser/ui/util/uikit_ui_util.h"
#import "ios/chrome/common/ui/colors/UIColor+cr_semantic_colors.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/gtest_mac.h"
#include "testing/platform_test.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
namespace {
using TableViewDetailIconItemTest = PlatformTest;
// Checks whether the UIImageView is present at the given index.
void CheckHasImageViewAtIndex(TableViewDetailIconCell* cell,
unsigned long int index) {
ASSERT_GT(cell.contentView.subviews.count, index);
ASSERT_TRUE(
[cell.contentView.subviews[index] isMemberOfClass:[UIImageView class]]);
}
// Returns the UIImage within the cell.
UIImage* GetImage(TableViewDetailIconCell* cell) {
CheckHasImageViewAtIndex(cell, 0U);
UIImageView* image_view =
base::mac::ObjCCastStrict<UIImageView>(cell.contentView.subviews[0]);
return image_view.image;
}
}
// Tests that the UILabels and icons are set properly after a call to
// |configureCell:|.
TEST_F(TableViewDetailIconItemTest, ItemProperties) {
NSString* text = @"Cell text";
NSString* detail_text = @"Cell detail text";
TableViewDetailIconItem* item =
[[TableViewDetailIconItem alloc] initWithType:0];
item.text = text;
item.detailText = detail_text;
item.iconImageName = @"ic_search";
id cell = [[[item cellClass] alloc] init];
ASSERT_TRUE([cell isMemberOfClass:[TableViewDetailIconCell class]]);
TableViewDetailIconCell* detail_cell =
base::mac::ObjCCastStrict<TableViewDetailIconCell>(cell);
ChromeTableViewStyler* styler = [[ChromeTableViewStyler alloc] init];
[item configureCell:cell withStyler:styler];
// Check text-based properties.
EXPECT_NSEQ(text, detail_cell.textLabel.text);
EXPECT_NSEQ(detail_text, detail_cell.detailTextLabel.text);
// Check image-based property.
EXPECT_EQ([ChromeIcon searchIcon], GetImage(detail_cell));
}
// Tests that the icon image is updated when set from cell.
TEST_F(TableViewDetailIconItemTest, iconImageUpdate) {
TableViewDetailIconItem* item =
[[TableViewDetailIconItem alloc] initWithType:0];
item.iconImageName = @"ic_search";
id cell = [[[item cellClass] alloc] init];
ASSERT_TRUE([cell isMemberOfClass:[TableViewDetailIconCell class]]);
TableViewDetailIconCell* detail_cell =
base::mac::ObjCCastStrict<TableViewDetailIconCell>(cell);
ChromeTableViewStyler* styler = [[ChromeTableViewStyler alloc] init];
[item configureCell:cell withStyler:styler];
// Check original image is set.
EXPECT_EQ([ChromeIcon searchIcon], GetImage(detail_cell));
[detail_cell setIconImage:[ChromeIcon infoIcon]];
// Check new image is set.
EXPECT_EQ([ChromeIcon infoIcon], GetImage(detail_cell));
}
// Tests that the icon image is removed when icon is set to nil from cell.
TEST_F(TableViewDetailIconItemTest, iconImageNilUpdate) {
TableViewDetailIconItem* item =
[[TableViewDetailIconItem alloc] initWithType:0];
item.iconImageName = @"ic_search";
id cell = [[[item cellClass] alloc] init];
ASSERT_TRUE([cell isMemberOfClass:[TableViewDetailIconCell class]]);
TableViewDetailIconCell* detail_cell =
base::mac::ObjCCastStrict<TableViewDetailIconCell>(cell);
ChromeTableViewStyler* styler = [[ChromeTableViewStyler alloc] init];
[item configureCell:cell withStyler:styler];
// Check original image is set.
EXPECT_EQ([ChromeIcon searchIcon], GetImage(detail_cell));
[detail_cell setIconImage:nil];
// Check image is set to nil.
ASSERT_EQ(nil, GetImage(detail_cell));
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment