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") { ...@@ -146,6 +146,7 @@ source_set("unit_tests") {
"//ios/chrome/browser/signin", "//ios/chrome/browser/signin",
"//ios/chrome/browser/signin:test_support", "//ios/chrome/browser/signin:test_support",
"//ios/chrome/browser/sync", "//ios/chrome/browser/sync",
"//ios/chrome/browser/ui:feature_flags",
"//ios/chrome/browser/ui/colors", "//ios/chrome/browser/ui/colors",
"//ios/chrome/browser/ui/commands", "//ios/chrome/browser/ui/commands",
"//ios/chrome/browser/ui/signin_interaction/public", "//ios/chrome/browser/ui/signin_interaction/public",
......
...@@ -48,7 +48,9 @@ ...@@ -48,7 +48,9 @@
self = [super initWithFrame:frame]; self = [super initWithFrame:frame];
if (self) { if (self) {
UIView* contentView = self.contentView; UIView* contentView = self.contentView;
_signinPromoView = [[SigninPromoView alloc] initWithFrame:self.bounds]; _signinPromoView =
[[SigninPromoView alloc] initWithFrame:self.bounds
style:SigninPromoViewUILegacy];
_signinPromoView.translatesAutoresizingMaskIntoConstraints = NO; _signinPromoView.translatesAutoresizingMaskIntoConstraints = NO;
[contentView addSubview:_signinPromoView]; [contentView addSubview:_signinPromoView];
AddSameConstraints(_signinPromoView, contentView); AddSameConstraints(_signinPromoView, contentView);
......
...@@ -12,6 +12,15 @@ ...@@ -12,6 +12,15 @@
@class MDCFlatButton; @class MDCFlatButton;
@protocol SigninPromoViewDelegate; @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) { typedef NS_ENUM(NSInteger, SigninPromoViewMode) {
// No identity available on the device. // No identity available on the device.
SigninPromoViewModeColdState, SigninPromoViewModeColdState,
...@@ -43,8 +52,8 @@ extern NSString* const kSigninPromoCloseButtonId; ...@@ -43,8 +52,8 @@ extern NSString* const kSigninPromoCloseButtonId;
@property(nonatomic) SigninPromoViewMode mode; @property(nonatomic) SigninPromoViewMode mode;
@property(nonatomic, readonly) UIImageView* imageView; @property(nonatomic, readonly) UIImageView* imageView;
@property(nonatomic, readonly) UILabel* textLabel; @property(nonatomic, readonly) UILabel* textLabel;
@property(nonatomic, readonly) MDCFlatButton* primaryButton; @property(nonatomic, readonly) UIButton* primaryButton;
@property(nonatomic, readonly) MDCFlatButton* secondaryButton; @property(nonatomic, readonly) UIButton* secondaryButton;
// Hidden by default. // Hidden by default.
@property(nonatomic, readonly) UIButton* closeButton; @property(nonatomic, readonly) UIButton* closeButton;
...@@ -53,6 +62,14 @@ extern NSString* const kSigninPromoCloseButtonId; ...@@ -53,6 +62,14 @@ extern NSString* const kSigninPromoCloseButtonId;
// |textLabel|. // |textLabel|.
@property(nonatomic, readonly) CGFloat horizontalPadding; @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; - (instancetype)initWithCoder:(NSCoder*)aDecoder NS_UNAVAILABLE;
// Sets the image in |imageView|. This method will add a circular background // Sets the image in |imageView|. This method will add a circular background
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
#import "ios/chrome/browser/ui/authentication/signin_promo_view.h" #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" #import "ios/third_party/material_components_ios/src/components/Buttons/src/MaterialButtons.h"
#include "testing/platform_test.h" #include "testing/platform_test.h"
#include "third_party/ocmock/gtest_support.h" #include "third_party/ocmock/gtest_support.h"
...@@ -14,10 +16,15 @@ ...@@ -14,10 +16,15 @@
using SigninPromoViewTest = PlatformTest; 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* view =
[[SigninPromoView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; [[SigninPromoView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)
style:SigninPromoViewUILegacy];
view.mode = SigninPromoViewModeColdState; view.mode = SigninPromoViewModeColdState;
[currentWindow.rootViewController.view addSubview:view];
UIImage* chromiumLogo = view.imageView.image; UIImage* chromiumLogo = view.imageView.image;
EXPECT_NE(nil, chromiumLogo); EXPECT_NE(nil, chromiumLogo);
view.mode = SigninPromoViewModeWarmState; view.mode = SigninPromoViewModeWarmState;
...@@ -31,10 +38,51 @@ TEST_F(SigninPromoViewTest, ChromiumLogoImage) { ...@@ -31,10 +38,51 @@ TEST_F(SigninPromoViewTest, ChromiumLogoImage) {
EXPECT_NE(customImage, view.imageView.image); 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* view =
[[SigninPromoView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; [[SigninPromoView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)
style:SigninPromoViewUIRefresh];
view.mode = SigninPromoViewModeColdState; 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); EXPECT_TRUE(view.secondaryButton.hidden);
view.mode = SigninPromoViewModeWarmState; view.mode = SigninPromoViewModeWarmState;
EXPECT_FALSE(view.secondaryButton.hidden); EXPECT_FALSE(view.secondaryButton.hidden);
......
...@@ -8,6 +8,10 @@ ...@@ -8,6 +8,10 @@
#import "ios/chrome/browser/ui/authentication/signin_promo_view_configurator.h" #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/authentication/signin_promo_view_mediator.h"
#import "ios/chrome/browser/ui/bookmarks/cells/bookmark_table_signin_promo_cell.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) #if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support." #error "This file requires ARC support."
...@@ -28,8 +32,23 @@ ...@@ -28,8 +32,23 @@
[super configureCell:cell withStyler:styler]; [super configureCell:cell withStyler:styler];
BookmarkTableSigninPromoCell* signinPromoCell = BookmarkTableSigninPromoCell* signinPromoCell =
base::mac::ObjCCastStrict<BookmarkTableSigninPromoCell>(cell); 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; signinPromoCell.signinPromoView.delegate = mediator;
[[mediator createConfigurator] [[mediator createConfigurator]
configureSigninPromoView:signinPromoCell.signinPromoView]; configureSigninPromoView:signinPromoCell.signinPromoView];
......
...@@ -5,10 +5,7 @@ ...@@ -5,10 +5,7 @@
#import "ios/chrome/browser/ui/bookmarks/cells/bookmark_table_signin_promo_cell.h" #import "ios/chrome/browser/ui/bookmarks/cells/bookmark_table_signin_promo_cell.h"
#import "ios/chrome/browser/ui/authentication/signin_promo_view.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" #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) #if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support." #error "This file requires ARC support."
...@@ -38,12 +35,11 @@ const NSInteger kSigninPromoMargin = 8; ...@@ -38,12 +35,11 @@ const NSInteger kSigninPromoMargin = 8;
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) { if (self) {
UIView* contentView = self.contentView; UIView* contentView = self.contentView;
_signinPromoView = [[SigninPromoView alloc] initWithFrame:self.bounds]; _signinPromoView =
[[SigninPromoView alloc] initWithFrame:self.bounds
style:SigninPromoViewUIRefresh];
_signinPromoView.translatesAutoresizingMaskIntoConstraints = NO; _signinPromoView.translatesAutoresizingMaskIntoConstraints = NO;
[contentView addSubview:_signinPromoView]; [contentView addSubview:_signinPromoView];
_signinPromoView.layer.borderColor =
[UIColor colorWithWhite:0.0 alpha:0.08].CGColor;
_signinPromoView.layer.borderWidth = 1.0f;
NSArray* visualConstraints = @[ NSArray* visualConstraints = @[
@"V:|-(margin)-[signin_promo_view]-(margin)-|", @"V:|-(margin)-[signin_promo_view]-(margin)-|",
@"H:|-(margin)-[signin_promo_view]-(margin)-|", @"H:|-(margin)-[signin_promo_view]-(margin)-|",
...@@ -51,9 +47,6 @@ const NSInteger kSigninPromoMargin = 8; ...@@ -51,9 +47,6 @@ const NSInteger kSigninPromoMargin = 8;
NSDictionary* views = @{@"signin_promo_view" : _signinPromoView}; NSDictionary* views = @{@"signin_promo_view" : _signinPromoView};
NSDictionary* metrics = @{ @"margin" : @(kSigninPromoMargin) }; NSDictionary* metrics = @{ @"margin" : @(kSigninPromoMargin) };
ApplyVisualConstraintsWithMetrics(visualConstraints, views, metrics); ApplyVisualConstraintsWithMetrics(visualConstraints, views, metrics);
_signinPromoView.backgroundColor = [UIColor whiteColor];
_signinPromoView.textLabel.text =
l10n_util::GetNSString(IDS_IOS_SIGNIN_PROMO_BOOKMARKS);
} }
return self; return self;
} }
......
...@@ -792,7 +792,8 @@ enum CellType { ...@@ -792,7 +792,8 @@ enum CellType {
} }
contentViewTopMargin = kSigninPromoViewTopMargin; contentViewTopMargin = kSigninPromoViewTopMargin;
SigninPromoView* signinPromoView = SigninPromoView* signinPromoView =
[[SigninPromoView alloc] initWithFrame:CGRectZero]; [[SigninPromoView alloc] initWithFrame:CGRectZero
style:SigninPromoViewUILegacy];
signinPromoView.delegate = _signinPromoViewMediator; signinPromoView.delegate = _signinPromoViewMediator;
signinPromoView.textLabel.text = signinPromoView.textLabel.text =
l10n_util::GetNSString(IDS_IOS_SIGNIN_PROMO_RECENT_TABS); l10n_util::GetNSString(IDS_IOS_SIGNIN_PROMO_RECENT_TABS);
......
...@@ -230,7 +230,9 @@ const CGFloat kSubtitleMinimunLineHeight = 24.0; ...@@ -230,7 +230,9 @@ const CGFloat kSubtitleMinimunLineHeight = 24.0;
- (void)createSigninPromoViewIfNeeded { - (void)createSigninPromoViewIfNeeded {
if (_signinPromoView) if (_signinPromoView)
return; return;
_signinPromoView = [[SigninPromoView alloc] initWithFrame:CGRectZero]; _signinPromoView =
[[SigninPromoView alloc] initWithFrame:CGRectZero
style:SigninPromoViewUILegacy];
_signinPromoView.translatesAutoresizingMaskIntoConstraints = NO; _signinPromoView.translatesAutoresizingMaskIntoConstraints = NO;
_signinPromoView.textLabel.text = _signinPromoView.textLabel.text =
l10n_util::GetNSString(IDS_IOS_SIGNIN_PROMO_RECENT_TABS); l10n_util::GetNSString(IDS_IOS_SIGNIN_PROMO_RECENT_TABS);
......
...@@ -58,7 +58,8 @@ const CGFloat kMargin = 16; ...@@ -58,7 +58,8 @@ const CGFloat kMargin = 16;
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) { if (self) {
SigninPromoView* signinPromoView = SigninPromoView* signinPromoView =
[[SigninPromoView alloc] initWithFrame:CGRectZero]; [[SigninPromoView alloc] initWithFrame:CGRectZero
style:SigninPromoViewUIRefresh];
self.signinPromoView = signinPromoView; self.signinPromoView = signinPromoView;
self.signinPromoView.translatesAutoresizingMaskIntoConstraints = NO; self.signinPromoView.translatesAutoresizingMaskIntoConstraints = NO;
[self.contentView addSubview:self.signinPromoView]; [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