Commit add11c4c authored by sczs's avatar sczs Committed by Commit Bot

[ios] Creates SigninPromoView UIRefresh styling.

- Updates SigninPromoView to support a new UI Layout based on UIRefresh Phase 1 flag and a new
flag received on init.
- Some minor refactoring to stop calling self on init in SigninPromoView.

Screenshots:
https://drive.google.com/open?id=1FnR436FEX9_3GwFbIIrJsQ8qHZOdqJpl
https://drive.google.com/open?id=1__aPHb1ye3WkiHKHJp9kIyJ6hhABq1Y6
https://drive.google.com/open?id=1ibjz3nnXHBrO_akJm4e9tgghpD85f3u0
https://drive.google.com/open?id=1dCVkiMW1IMQjWkxcegVxi8r1PLh5ZCqM

Bug: 805188
Cq-Include-Trybots: luci.chromium.try:ios-simulator-full-configs;master.tryserver.chromium.mac:ios-simulator-cronet
Change-Id: I1268388da06c57eb9c1610c3547314929bb8c107
Reviewed-on: https://chromium-review.googlesource.com/1107216
Commit-Queue: Sergio Collazos <sczs@chromium.org>
Reviewed-by: default avataredchin <edchin@chromium.org>
Reviewed-by: default avatarJérôme Lebel <jlebel@chromium.org>
Cr-Commit-Position: refs/heads/master@{#570864}
parent e19ad366
......@@ -146,6 +146,7 @@ source_set("unit_tests") {
"//ios/chrome/browser/signin",
"//ios/chrome/browser/signin:test_support",
"//ios/chrome/browser/sync",
"//ios/chrome/browser/ui:feature_flags",
"//ios/chrome/browser/ui/colors",
"//ios/chrome/browser/ui/commands",
"//ios/chrome/browser/ui/signin_interaction/public",
......
......@@ -48,7 +48,9 @@
self = [super initWithFrame:frame];
if (self) {
UIView* contentView = self.contentView;
_signinPromoView = [[SigninPromoView alloc] initWithFrame:self.bounds];
_signinPromoView =
[[SigninPromoView alloc] initWithFrame:self.bounds
style:SigninPromoViewUILegacy];
_signinPromoView.translatesAutoresizingMaskIntoConstraints = NO;
[contentView addSubview:_signinPromoView];
AddSameConstraints(_signinPromoView, contentView);
......
......@@ -12,6 +12,15 @@
@class MDCFlatButton;
@protocol SigninPromoViewDelegate;
typedef NS_ENUM(NSInteger, SigninPromoViewUI) {
// The legacy SigninPromoViewUI style.
SigninPromoViewUILegacy,
// The SigninPromoViewRefreshUI style. In order for this value to take effect
// the UIRefreshPhase1 flag also needs to be enabled. Otherwise
// SigninPromoViewUILegacy style will still be used.
SigninPromoViewUIRefresh,
};
typedef NS_ENUM(NSInteger, SigninPromoViewMode) {
// No identity available on the device.
SigninPromoViewModeColdState,
......@@ -43,8 +52,8 @@ extern NSString* const kSigninPromoCloseButtonId;
@property(nonatomic) SigninPromoViewMode mode;
@property(nonatomic, readonly) UIImageView* imageView;
@property(nonatomic, readonly) UILabel* textLabel;
@property(nonatomic, readonly) MDCFlatButton* primaryButton;
@property(nonatomic, readonly) MDCFlatButton* secondaryButton;
@property(nonatomic, readonly) UIButton* primaryButton;
@property(nonatomic, readonly) UIButton* secondaryButton;
// Hidden by default.
@property(nonatomic, readonly) UIButton* closeButton;
......@@ -53,6 +62,14 @@ extern NSString* const kSigninPromoCloseButtonId;
// |textLabel|.
@property(nonatomic, readonly) CGFloat horizontalPadding;
// Designated initializer. |signinPromoViewUI| sets the style for the
// SigninPromoView to legacy or refreshed. This same view is used on Collections
// and Settings, while the Collections UI will be refreshed soon, we still need
// to support the legacy UI for settings.
- (instancetype)initWithFrame:(CGRect)frame
style:(SigninPromoViewUI)signinPromoViewUI
NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE;
- (instancetype)initWithCoder:(NSCoder*)aDecoder NS_UNAVAILABLE;
// Sets the image in |imageView|. This method will add a circular background
......
......@@ -4,6 +4,8 @@
#import "ios/chrome/browser/ui/authentication/signin_promo_view.h"
#include "base/test/scoped_feature_list.h"
#include "ios/chrome/browser/ui/ui_feature_flags.h"
#import "ios/third_party/material_components_ios/src/components/Buttons/src/MaterialButtons.h"
#include "testing/platform_test.h"
#include "third_party/ocmock/gtest_support.h"
......@@ -14,10 +16,15 @@
using SigninPromoViewTest = PlatformTest;
TEST_F(SigninPromoViewTest, ChromiumLogoImage) {
TEST_F(SigninPromoViewTest, ChromiumLogoImageLegacy) {
base::test::ScopedFeatureList scoped_feature_list;
scoped_feature_list.InitAndDisableFeature(kUIRefreshPhase1);
UIWindow* currentWindow = [[UIApplication sharedApplication] keyWindow];
SigninPromoView* view =
[[SigninPromoView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
[[SigninPromoView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)
style:SigninPromoViewUILegacy];
view.mode = SigninPromoViewModeColdState;
[currentWindow.rootViewController.view addSubview:view];
UIImage* chromiumLogo = view.imageView.image;
EXPECT_NE(nil, chromiumLogo);
view.mode = SigninPromoViewModeWarmState;
......@@ -31,10 +38,51 @@ TEST_F(SigninPromoViewTest, ChromiumLogoImage) {
EXPECT_NE(customImage, view.imageView.image);
}
TEST_F(SigninPromoViewTest, SecondaryButtonVisibility) {
TEST_F(SigninPromoViewTest, ChromiumLogoImageUIRefresh) {
base::test::ScopedFeatureList scoped_feature_list;
scoped_feature_list.InitAndEnableFeature(kUIRefreshPhase1);
UIWindow* currentWindow = [[UIApplication sharedApplication] keyWindow];
SigninPromoView* view =
[[SigninPromoView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
[[SigninPromoView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)
style:SigninPromoViewUIRefresh];
view.mode = SigninPromoViewModeColdState;
[currentWindow.rootViewController.view addSubview:view];
UIImage* chromiumLogo = view.imageView.image;
EXPECT_NE(nil, chromiumLogo);
view.mode = SigninPromoViewModeWarmState;
UIImage* customImage = [[UIImage alloc] init];
[view setProfileImage:customImage];
EXPECT_NE(nil, view.imageView.image);
// The image should has been changed from the logo.
EXPECT_NE(chromiumLogo, view.imageView.image);
// The image should be different than the one set, since a circular background
// should have been added.
EXPECT_NE(customImage, view.imageView.image);
}
TEST_F(SigninPromoViewTest, SecondaryButtonVisibilityLegacy) {
base::test::ScopedFeatureList scoped_feature_list;
scoped_feature_list.InitAndDisableFeature(kUIRefreshPhase1);
UIWindow* currentWindow = [[UIApplication sharedApplication] keyWindow];
SigninPromoView* view =
[[SigninPromoView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)
style:SigninPromoViewUILegacy];
view.mode = SigninPromoViewModeColdState;
[currentWindow.rootViewController.view addSubview:view];
EXPECT_TRUE(view.secondaryButton.hidden);
view.mode = SigninPromoViewModeWarmState;
EXPECT_FALSE(view.secondaryButton.hidden);
}
TEST_F(SigninPromoViewTest, SecondaryButtonVisibilityUIRefresh) {
base::test::ScopedFeatureList scoped_feature_list;
scoped_feature_list.InitAndEnableFeature(kUIRefreshPhase1);
UIWindow* currentWindow = [[UIApplication sharedApplication] keyWindow];
SigninPromoView* view =
[[SigninPromoView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)
style:SigninPromoViewUIRefresh];
view.mode = SigninPromoViewModeColdState;
[currentWindow.rootViewController.view addSubview:view];
EXPECT_TRUE(view.secondaryButton.hidden);
view.mode = SigninPromoViewModeWarmState;
EXPECT_FALSE(view.secondaryButton.hidden);
......
......@@ -8,6 +8,10 @@
#import "ios/chrome/browser/ui/authentication/signin_promo_view_configurator.h"
#import "ios/chrome/browser/ui/authentication/signin_promo_view_mediator.h"
#import "ios/chrome/browser/ui/bookmarks/cells/bookmark_table_signin_promo_cell.h"
#import "ios/chrome/browser/ui/table_view/chrome_table_view_styler.h"
#include "ios/chrome/browser/ui/ui_util.h"
#include "ios/chrome/grit/ios_chromium_strings.h"
#include "ui/base/l10n/l10n_util.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
......@@ -28,8 +32,23 @@
[super configureCell:cell withStyler:styler];
BookmarkTableSigninPromoCell* signinPromoCell =
base::mac::ObjCCastStrict<BookmarkTableSigninPromoCell>(cell);
SigninPromoViewMediator* mediator = self.delegate.signinPromoViewMediator;
// Basic UI configuration
signinPromoCell.signinPromoView.textLabel.text =
l10n_util::GetNSString(IDS_IOS_SIGNIN_PROMO_BOOKMARKS);
if (IsUIRefreshPhase1Enabled()) {
signinPromoCell.signinPromoView.backgroundColor =
styler.tableViewBackgroundColor;
} else {
signinPromoCell.signinPromoView.backgroundColor = [UIColor whiteColor];
signinPromoCell.signinPromoView.layer.borderColor =
[UIColor colorWithWhite:0.0 alpha:0.08].CGColor;
signinPromoCell.signinPromoView.layer.borderWidth = 1.0f;
}
// Use the mediator to configure the rest of the Cell based on the current
// signin state.
SigninPromoViewMediator* mediator = self.delegate.signinPromoViewMediator;
signinPromoCell.signinPromoView.delegate = mediator;
[[mediator createConfigurator]
configureSigninPromoView:signinPromoCell.signinPromoView];
......
......@@ -5,10 +5,7 @@
#import "ios/chrome/browser/ui/bookmarks/cells/bookmark_table_signin_promo_cell.h"
#import "ios/chrome/browser/ui/authentication/signin_promo_view.h"
#include "ios/chrome/browser/ui/ui_util.h"
#import "ios/chrome/common/ui_util/constraints_ui_util.h"
#include "ios/chrome/grit/ios_chromium_strings.h"
#include "ui/base/l10n/l10n_util.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
......@@ -38,12 +35,11 @@ const NSInteger kSigninPromoMargin = 8;
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
UIView* contentView = self.contentView;
_signinPromoView = [[SigninPromoView alloc] initWithFrame:self.bounds];
_signinPromoView =
[[SigninPromoView alloc] initWithFrame:self.bounds
style:SigninPromoViewUIRefresh];
_signinPromoView.translatesAutoresizingMaskIntoConstraints = NO;
[contentView addSubview:_signinPromoView];
_signinPromoView.layer.borderColor =
[UIColor colorWithWhite:0.0 alpha:0.08].CGColor;
_signinPromoView.layer.borderWidth = 1.0f;
NSArray* visualConstraints = @[
@"V:|-(margin)-[signin_promo_view]-(margin)-|",
@"H:|-(margin)-[signin_promo_view]-(margin)-|",
......@@ -51,9 +47,6 @@ const NSInteger kSigninPromoMargin = 8;
NSDictionary* views = @{@"signin_promo_view" : _signinPromoView};
NSDictionary* metrics = @{ @"margin" : @(kSigninPromoMargin) };
ApplyVisualConstraintsWithMetrics(visualConstraints, views, metrics);
_signinPromoView.backgroundColor = [UIColor whiteColor];
_signinPromoView.textLabel.text =
l10n_util::GetNSString(IDS_IOS_SIGNIN_PROMO_BOOKMARKS);
}
return self;
}
......
......@@ -792,7 +792,8 @@ enum CellType {
}
contentViewTopMargin = kSigninPromoViewTopMargin;
SigninPromoView* signinPromoView =
[[SigninPromoView alloc] initWithFrame:CGRectZero];
[[SigninPromoView alloc] initWithFrame:CGRectZero
style:SigninPromoViewUILegacy];
signinPromoView.delegate = _signinPromoViewMediator;
signinPromoView.textLabel.text =
l10n_util::GetNSString(IDS_IOS_SIGNIN_PROMO_RECENT_TABS);
......
......@@ -230,7 +230,9 @@ const CGFloat kSubtitleMinimunLineHeight = 24.0;
- (void)createSigninPromoViewIfNeeded {
if (_signinPromoView)
return;
_signinPromoView = [[SigninPromoView alloc] initWithFrame:CGRectZero];
_signinPromoView =
[[SigninPromoView alloc] initWithFrame:CGRectZero
style:SigninPromoViewUILegacy];
_signinPromoView.translatesAutoresizingMaskIntoConstraints = NO;
_signinPromoView.textLabel.text =
l10n_util::GetNSString(IDS_IOS_SIGNIN_PROMO_RECENT_TABS);
......
......@@ -58,7 +58,8 @@ const CGFloat kMargin = 16;
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
SigninPromoView* signinPromoView =
[[SigninPromoView alloc] initWithFrame:CGRectZero];
[[SigninPromoView alloc] initWithFrame:CGRectZero
style:SigninPromoViewUIRefresh];
self.signinPromoView = signinPromoView;
self.signinPromoView.translatesAutoresizingMaskIntoConstraints = NO;
[self.contentView addSubview:self.signinPromoView];
......
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