Index: chrome/browser/ui/views/profiles/profile_chooser_view.cc |
diff --git a/chrome/browser/ui/views/profiles/profile_chooser_view.cc b/chrome/browser/ui/views/profiles/profile_chooser_view.cc |
index 417c6fcc4d1f470afef3c4ef62e415290d4fc923..8c99b844b37276b6f9179e4ed00a95b3018d6a6c 100644 |
--- a/chrome/browser/ui/views/profiles/profile_chooser_view.cc |
+++ b/chrome/browser/ui/views/profiles/profile_chooser_view.cc |
@@ -83,14 +83,17 @@ namespace { |
// Helpers -------------------------------------------------------------------- |
-const int kFixedMenuWidth = 250; |
+const int kFixedMenuWidth = 240; |
Jane
2016/06/06 16:56:46
I couldn't figure out how to make this helper para
Roger Tawa OOO till Jul 10th
2016/06/07 14:20:48
You could write a function like:
static int GetFi
Jane
2016/06/07 17:32:44
Done.
|
const int kButtonHeight = 32; |
const int kPasswordCombinedFixedGaiaViewWidth = 360; |
const int kFixedGaiaViewWidth = 448; |
const int kFixedAccountRemovalViewWidth = 280; |
const int kFixedSwitchUserViewWidth = 320; |
const int kLargeImageSide = 88; |
+const int kMediumImageSide = 40; |
+const int kTextfieldLabelHorizontalSpacing = 4; |
+const int kProfileHorizontalSpacing = 16; |
const int kVerticalSpacing = 16; |
const int kTitleViewNativeWidgetOffset = 8; |
@@ -263,14 +266,16 @@ void HostView::ViewHierarchyChanged( |
// RightAlignedIconLabelButton ------------------------------------------------- |
-// A custom LabelButton that has a centered text and right aligned icon. |
+// A custom LabelButton that has a left-aligned text and right aligned icon. |
+// For non-material-design user menu, it has centered text instead. |
class RightAlignedIconLabelButton : public views::LabelButton { |
public: |
RightAlignedIconLabelButton(views::ButtonListener* listener, |
const base::string16& text) |
: views::LabelButton(listener, text) { |
SetHorizontalAlignment(gfx::ALIGN_RIGHT); |
- label()->SetHorizontalAlignment(gfx::ALIGN_CENTER); |
+ label()->SetHorizontalAlignment(switches::IsMaterialDesignUserMenu() |
+ ? gfx::ALIGN_LEFT : gfx::ALIGN_CENTER); |
} |
protected: |
@@ -308,8 +313,10 @@ class EditableProfilePhoto : public views::LabelButton { |
const gfx::Rect& bounds) |
: views::LabelButton(listener, base::string16()), |
photo_overlay_(NULL) { |
+ const int kIconImageSide = switches::IsMaterialDesignUserMenu() |
+ ? kMediumImageSide : kLargeImageSide; |
gfx::Image image = profiles::GetSizedAvatarIcon( |
- icon, true, kLargeImageSide, kLargeImageSide); |
+ icon, true, kIconImageSide, kIconImageSide); |
SetImage(views::LabelButton::STATE_NORMAL, *image.ToImageSkia()); |
SetBorder(views::Border::NullBorder()); |
SetBoundsRect(bounds); |
@@ -333,7 +340,9 @@ class EditableProfilePhoto : public views::LabelButton { |
photo_overlay_->set_background( |
views::Background::CreateSolidBackground(kBackgroundColor)); |
photo_overlay_->SetImage(gfx::CreateVectorIcon( |
- gfx::VectorIconId::PHOTO_CAMERA, 48u, SkColorSetRGB(0x33, 0x33, 0x33))); |
+ gfx::VectorIconId::PHOTO_CAMERA, |
+ switches::IsMaterialDesignUserMenu() ? 22u : 48u, |
+ SkColorSetRGB(0x33, 0x33, 0x33))); |
photo_overlay_->SetSize(bounds.size()); |
photo_overlay_->SetVisible(false); |
@@ -405,6 +414,9 @@ class EditableProfileName : public views::View, |
label_ = new views::Label(text); |
label_->SetBorder(views::Border::CreateEmptyBorder(2, 0, 2, 0)); |
label_->SetFontList(medium_font_list); |
+ if (switches::IsMaterialDesignUserMenu()) { |
+ label_->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
+ } |
AddChildView(label_); |
return; |
} |
@@ -426,19 +438,25 @@ class EditableProfileName : public views::View, |
gfx::CreateVectorIcon( |
gfx::VectorIconId::MODE_EDIT, kIconSize, |
SkColorSetRGB(0x20, 0x20, 0x20))); |
- // To center the text, we need to offest it by the width of the icon we |
- // are adding and its padding. We need to also add a small top/bottom |
- // padding to account for the textfield's border. |
- const int kIconTextLabelButtonSpacing = 5; |
- button_->SetBorder(views::Border::CreateEmptyBorder( |
- 2, kIconSize + kIconTextLabelButtonSpacing, 2, 0)); |
+ // We need to add a left padding as well as a small top/bottom padding |
+ // to the text to account for the textfield's border. |
+ if (switches::IsMaterialDesignUserMenu()) { |
+ button_->SetBorder(views::Border::CreateEmptyBorder( |
+ 2, kTextfieldLabelHorizontalSpacing, 2, 0)); |
+ } else { |
+ const int kIconTextLabelButtonSpacing = 5; |
+ button_->SetBorder(views::Border::CreateEmptyBorder( |
+ 2, kIconSize + kIconTextLabelButtonSpacing, 2, 0)); |
+ } |
AddChildView(button_); |
profile_name_textfield_ = new views::Textfield(); |
// Textfield that overlaps the button. |
profile_name_textfield_->set_controller(controller); |
profile_name_textfield_->SetFontList(medium_font_list); |
- profile_name_textfield_->SetHorizontalAlignment(gfx::ALIGN_CENTER); |
+ profile_name_textfield_->SetHorizontalAlignment( |
+ switches::IsMaterialDesignUserMenu() |
+ ? gfx::ALIGN_LEFT : gfx::ALIGN_CENTER); |
profile_name_textfield_->SetVisible(false); |
AddChildView(profile_name_textfield_); |
} |
@@ -565,14 +583,19 @@ class TitleCard : public views::View { |
// ProfileBadge -------------------------------------------------------- |
const size_t kProfileBadgeSize = 30; |
+const size_t kSmallProfileBadgeSize = 24; |
const size_t kProfileBadgeWhitePadding = 2; |
// Draws a white circle, then a light blue circle, then a dark blue icon. |
class ProfileBadge : public gfx::CanvasImageSource { |
public: |
ProfileBadge(gfx::VectorIconId id, size_t icon_size) |
- : CanvasImageSource(gfx::Size(kProfileBadgeSize, kProfileBadgeSize), |
- false), |
+ : CanvasImageSource(gfx::Size( |
+ switches::IsMaterialDesignUserMenu() |
+ ? kSmallProfileBadgeSize : kProfileBadgeSize, |
+ switches::IsMaterialDesignUserMenu() |
+ ? kSmallProfileBadgeSize : kProfileBadgeSize), |
+ false), |
id_(id), |
icon_size_(icon_size) {} |
@@ -592,7 +615,9 @@ class ProfileBadge : public gfx::CanvasImageSource { |
canvas->DrawCircle(bounds.CenterPoint(), |
size.width() / 2 - kProfileBadgeWhitePadding, paint); |
- int offset = (kProfileBadgeSize - icon_size_) / 2; |
+ int offset = ((switches::IsMaterialDesignUserMenu() |
+ ? kSmallProfileBadgeSize : kProfileBadgeSize) |
+ - icon_size_) / 2; |
canvas->Translate(gfx::Vector2d(offset, offset)); |
gfx::PaintVectorIcon(canvas, id_, icon_size_, SkColorSetRGB(0, 0x66, 0xff)); |
} |
@@ -605,11 +630,11 @@ class ProfileBadge : public gfx::CanvasImageSource { |
}; |
gfx::ImageSkia CreateBadgeForProfile(Profile* profile) { |
- ProfileBadge* badge = |
- profile->IsChild() |
- ? new ProfileBadge(gfx::VectorIconId::ACCOUNT_CHILD_INVERT, 26) |
- : new ProfileBadge(gfx::VectorIconId::SUPERVISOR_ACCOUNT, 20); |
- |
+ ProfileBadge* badge = profile->IsChild() |
+ ? new ProfileBadge(gfx::VectorIconId::ACCOUNT_CHILD_INVERT, |
+ switches::IsMaterialDesignUserMenu() ? 21 : 26) |
+ : new ProfileBadge(gfx::VectorIconId::SUPERVISOR_ACCOUNT, |
+ switches::IsMaterialDesignUserMenu() ? 16 : 20); |
return gfx::ImageSkia(badge, badge->size()); |
} |
@@ -1084,7 +1109,9 @@ void ProfileChooserView::PopulateCompleteProfileChooserView( |
if (item.active) { |
option_buttons_view = CreateOptionsView( |
item.signed_in && profiles::IsLockAvailable(browser_->profile())); |
- current_profile_view = CreateCurrentProfileView(item, false); |
+ current_profile_view = switches::IsMaterialDesignUserMenu() ? |
+ CreateMaterialDesignCurrentProfileView(item, false) : |
+ CreateCurrentProfileView(item, false); |
Roger Tawa OOO till Jul 10th
2016/06/07 14:20:48
I think lines 1113 and 1114 only need to be indent
Jane
2016/06/07 17:32:44
Done.
|
if (IsProfileChooser(view_mode_)) { |
tutorial_view = CreateTutorialViewIfNeeded(item); |
} else { |
@@ -1121,8 +1148,10 @@ void ProfileChooserView::PopulateCompleteProfileChooserView( |
} |
if (browser_->profile()->IsSupervised()) { |
- layout->StartRow(0, 0); |
- layout->AddView(new views::Separator(views::Separator::HORIZONTAL)); |
+ if (!switches::IsMaterialDesignUserMenu()) { |
+ layout->StartRow(0, 0); |
+ layout->AddView(new views::Separator(views::Separator::HORIZONTAL)); |
+ } |
layout->StartRow(1, 0); |
layout->AddView(CreateSupervisedUserDisclaimerView()); |
} |
@@ -1445,6 +1474,157 @@ views::View* ProfileChooserView::CreateCurrentProfileView( |
return view; |
} |
+views::View* ProfileChooserView::CreateMaterialDesignCurrentProfileView( |
+ const AvatarMenu::Item& avatar_item, |
+ bool is_guest) { |
+ views::View* view = new views::View(); |
+ int column_width = kFixedMenuWidth - 2 * views::kMaterialHorizontalMargin; |
+ views::GridLayout* layout = CreateSingleColumnLayout(view, column_width); |
+ layout->SetInsets(views::kRelatedControlVerticalSpacing, |
+ views::kMaterialHorizontalMargin, |
+ views::kRelatedControlVerticalSpacing, |
+ views::kMaterialHorizontalMargin); |
+ |
+ // Profile picture left aligned for material design user menu, |
+ // centered otherwise. |
+ const int kProfileRowHeight = 56; |
+ current_profile_photo_ = new EditableProfilePhoto( |
+ this, avatar_item.icon, !is_guest, |
+ gfx::Rect(0, (kProfileRowHeight - kMediumImageSide) / 2, |
+ kMediumImageSide, kMediumImageSide)); |
+ SizedContainer* profile_container = |
+ new SizedContainer(gfx::Size(column_width, kProfileRowHeight)); |
+ profile_container->AddChildView(current_profile_photo_); |
+ |
+ // Add supervised badge for supervised profile. |
+ if (browser_->profile()->IsSupervised()) { |
+ const int kBadgeSpacing = 4; |
+ views::ImageView* supervised_icon = new views::ImageView(); |
+ supervised_icon->SetImage(CreateBadgeForProfile(browser_->profile())); |
+ gfx::Size preferred_size = supervised_icon->GetPreferredSize(); |
+ gfx::Rect parent_bounds = current_profile_photo_->bounds(); |
+ supervised_icon->SetBounds( |
+ parent_bounds.right() - preferred_size.width() + kBadgeSpacing, |
+ parent_bounds.bottom() - preferred_size.height() + kBadgeSpacing, |
+ preferred_size.width(), |
+ preferred_size.height()); |
+ profile_container->AddChildView(supervised_icon); |
+ } |
+ |
+ // Profile name, left-aligned to the right of profile icon. |
+ bool editing_allowed = !is_guest && |
+ !browser_->profile()->IsLegacySupervised(); |
+ current_profile_name_ = new EditableProfileName( |
+ this, |
+ profiles::GetAvatarNameForProfile(browser_->profile()->GetPath()), |
+ editing_allowed); |
+ gfx::Rect photo_bounds = current_profile_photo_->bounds(); |
+ const int kTextfieldLeftMargin = |
+ kProfileHorizontalSpacing - kTextfieldLabelHorizontalSpacing; |
+ current_profile_name_->SetBounds( |
+ photo_bounds.width() + kTextfieldLeftMargin, |
+ views::kRelatedControlVerticalSpacing, |
+ profile_container->GetPreferredSize().width() - photo_bounds.width() |
+ - kTextfieldLeftMargin, |
+ profile_container->GetPreferredSize().height() / 2 |
+ - views::kRelatedControlVerticalSpacing); |
+ profile_container->AddChildView(current_profile_name_); |
+ |
+ // Center-align the avatar name if the profile is not signed in. |
+ if (is_guest || !avatar_item.signed_in) { |
+ current_profile_name_->SetY( |
+ (profile_container->GetPreferredSize().height() |
+ - current_profile_name_->height()) / 2); |
+ layout->StartRow(1, 0); |
+ layout->AddView(profile_container); |
+ } |
+ |
+ if (is_guest) |
+ return view; |
+ |
+ // The available links depend on the type of profile that is active. |
+ if (avatar_item.signed_in) { |
+ // Calculate the position and size for links available for signed-in |
+ // profiles. |
+ const int kXCoordinate = photo_bounds.width() + kProfileHorizontalSpacing; |
+ const int kYCoordinate = profile_container->GetPreferredSize().height() / 2; |
+ const int kWidth = profile_container->GetPreferredSize().width() |
+ - photo_bounds.width() - kProfileHorizontalSpacing; |
+ const int kHeight = profile_container->GetPreferredSize().height() / 2 |
+ - views::kRelatedControlVerticalSpacing; |
+ layout->StartRow(1, 0); |
+ |
+ if (switches::IsEnableAccountConsistency()) { |
+ base::string16 link_title = l10n_util::GetStringUTF16( |
+ IsProfileChooser(view_mode_) ? |
+ IDS_PROFILES_PROFILE_MANAGE_ACCOUNTS_BUTTON : |
+ IDS_PROFILES_PROFILE_HIDE_MANAGE_ACCOUNTS_BUTTON); |
+ manage_accounts_link_ = CreateLink(link_title, this); |
+ manage_accounts_link_->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
+ manage_accounts_link_->SetBounds( |
+ kXCoordinate, kYCoordinate, kWidth, kHeight); |
+ profile_container->AddChildView(manage_accounts_link_); |
+ } else { |
+ // Badge the email address if there's an authentication error. |
+ if (HasAuthError(browser_->profile())) { |
+ auth_error_email_button_ = |
+ new RightAlignedIconLabelButton(this, avatar_item.username); |
+ auth_error_email_button_->SetElideBehavior(gfx::ELIDE_EMAIL); |
+ auth_error_email_button_->SetImage( |
+ views::LabelButton::STATE_NORMAL, |
+ gfx::CreateVectorIcon(gfx::VectorIconId::WARNING, 12, |
+ gfx::kChromeIconGrey)); |
+ auth_error_email_button_->SetFocusForPlatform(); |
+ auth_error_email_button_->set_request_focus_on_press(true); |
+ gfx::Insets insets = |
+ views::LabelButtonAssetBorder::GetDefaultInsetsForStyle( |
+ views::Button::STYLE_TEXTBUTTON); |
+ auth_error_email_button_->SetBorder(views::Border::CreateEmptyBorder( |
+ insets.top(), insets.left(), insets.bottom(), insets.right())); |
+ auth_error_email_button_->SetBounds( |
+ kXCoordinate - insets.left(), kYCoordinate, kWidth, kHeight); |
+ profile_container->AddChildView(auth_error_email_button_); |
+ } else { |
+ views::Label* email_label = new views::Label(avatar_item.username); |
+ email_label->SetElideBehavior(gfx::ELIDE_EMAIL); |
+ email_label->SetEnabled(false); |
+ email_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
+ email_label->SetBounds( |
+ kXCoordinate, kYCoordinate, kWidth, kHeight); |
+ profile_container->AddChildView(email_label); |
+ } |
+ } |
+ layout->AddView(profile_container); |
+ } else { |
+ SigninManagerBase* signin_manager = SigninManagerFactory::GetForProfile( |
+ browser_->profile()->GetOriginalProfile()); |
+ if (signin_manager->IsSigninAllowed()) { |
+ views::Label* promo = new views::Label( |
+ l10n_util::GetStringUTF16(IDS_PROFILES_SIGNIN_PROMO)); |
+ promo->SetMultiLine(true); |
+ promo->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
+ layout->StartRowWithPadding(1, 0, 0, |
+ views::kRelatedControlVerticalSpacing); |
+ layout->StartRow(1, 0); |
+ layout->AddView(promo); |
+ |
+ signin_current_profile_link_ = new views::BlueButton( |
+ this, l10n_util::GetStringFUTF16(IDS_SYNC_START_SYNC_BUTTON_LABEL, |
+ l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME))); |
+ layout->StartRowWithPadding(1, 0, 0, |
+ views::kRelatedControlVerticalSpacing); |
+ layout->StartRow(1, 0); |
+ layout->AddView(signin_current_profile_link_); |
+ content::RecordAction( |
+ base::UserMetricsAction("Signin_Impression_FromAvatarBubbleSignin")); |
+ layout->StartRowWithPadding(1, 0, 0, |
+ views::kLabelToControlVerticalSpacing); |
+ } |
+ } |
+ |
+ return view; |
+} |
+ |
views::View* ProfileChooserView::CreateGuestProfileView() { |
gfx::Image guest_icon = |
ui::ResourceBundle::GetSharedInstance().GetImageNamed( |
@@ -1455,7 +1635,9 @@ views::View* ProfileChooserView::CreateGuestProfileView() { |
IDS_PROFILES_GUEST_PROFILE_NAME); |
guest_avatar_item.signed_in = false; |
- return CreateCurrentProfileView(guest_avatar_item, true); |
+ return switches::IsMaterialDesignUserMenu() ? |
+ CreateMaterialDesignCurrentProfileView(guest_avatar_item, true) : |
+ CreateCurrentProfileView(guest_avatar_item, true); |
} |
views::View* ProfileChooserView::CreateOtherProfilesView( |
@@ -1522,10 +1704,17 @@ views::View* ProfileChooserView::CreateSupervisedUserDisclaimerView() { |
views::View* view = new views::View(); |
views::GridLayout* layout = CreateSingleColumnLayout( |
view, kFixedMenuWidth - 2 * views::kButtonHEdgeMarginNew); |
- layout->SetInsets(views::kRelatedControlVerticalSpacing, |
- views::kButtonHEdgeMarginNew, |
- views::kRelatedControlVerticalSpacing, |
- views::kButtonHEdgeMarginNew); |
+ if (switches::IsMaterialDesignUserMenu()) { |
+ layout->SetInsets(0, views::kMaterialHorizontalMargin, |
Roger Tawa OOO till Jul 10th
2016/06/07 14:20:48
Nit: put views::kMaterialHorizontalMargin on next
Jane
2016/06/07 17:32:44
Done.
|
+ views::kMaterialVerticalMargin, |
+ views::kMaterialHorizontalMargin); |
+ } else { |
+ layout->SetInsets(views::kRelatedControlVerticalSpacing, |
+ views::kButtonHEdgeMarginNew, |
+ views::kRelatedControlVerticalSpacing, |
+ views::kButtonHEdgeMarginNew); |
+ } |
+ |
views::Label* disclaimer = new views::Label( |
avatar_menu_->GetSupervisedUserInformation()); |
disclaimer->SetMultiLine(true); |