Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4288)

Unified Diff: chrome/browser/ui/views/profiles/profile_chooser_view.cc

Issue 2052473003: Reflow of user menu's active profile card into a button (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@reflow-profile
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/views/profiles/profile_chooser_view.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 58f1f07f44c0ca924f9243e9b776736e1652f1d3..8e57c16da577de9a154713144dc3a0bfec2a61bc 100644
--- a/chrome/browser/ui/views/profiles/profile_chooser_view.cc
+++ b/chrome/browser/ui/views/profiles/profile_chooser_view.cc
@@ -91,7 +91,7 @@ const int kFixedSwitchUserViewWidth = 320;
const int kLargeImageSide = 88;
const int kMediumImageSide = 40;
-const int kTextfieldLabelHorizontalSpacing = 4;
+const int kProfileBarHeight = 56;
const int kProfileHorizontalSpacing = 16;
const int kVerticalSpacing = 16;
@@ -182,6 +182,13 @@ class BackgroundColorHoverButton : public views::LabelButton {
set_request_focus_on_press(true);
}
+ explicit BackgroundColorHoverButton(views::ButtonListener* listener)
+ : views::LabelButton(listener, base::string16()) {
+ SetMinSize(gfx::Size(0, kProfileBarHeight));
+ SetFocusForPlatform();
+ set_request_focus_on_press(true);
+ }
+
~BackgroundColorHoverButton() override {}
private:
@@ -311,6 +318,7 @@ class EditableProfilePhoto : public views::LabelButton {
bool is_editing_allowed,
const gfx::Rect& bounds)
: views::LabelButton(listener, base::string16()),
+ interactive_(true),
photo_overlay_(NULL) {
const int icon_image_side = switches::IsMaterialDesignUserMenu()
? kMediumImageSide : kLargeImageSide;
@@ -325,7 +333,7 @@ class EditableProfilePhoto : public views::LabelButton {
SkIntToScalar(bounds.height() / 2),
SkIntToScalar(bounds.width() / 2));
- if (!is_editing_allowed) {
+ if (switches::IsMaterialDesignUserMenu() || !is_editing_allowed) {
SetEnabled(false);
return;
}
@@ -339,9 +347,7 @@ class EditableProfilePhoto : public views::LabelButton {
photo_overlay_->set_background(
views::Background::CreateSolidBackground(kBackgroundColor));
photo_overlay_->SetImage(gfx::CreateVectorIcon(
- gfx::VectorIconId::PHOTO_CAMERA,
- switches::IsMaterialDesignUserMenu() ? 22u : 48u,
- SkColorSetRGB(0x33, 0x33, 0x33)));
+ gfx::VectorIconId::PHOTO_CAMERA, 48u, SkColorSetRGB(0x33, 0x33, 0x33)));
photo_overlay_->SetSize(bounds.size());
photo_overlay_->SetVisible(false);
@@ -361,6 +367,10 @@ class EditableProfilePhoto : public views::LabelButton {
View::PaintChildren(context);
}
+ bool CanProcessEventsWithinSubtree() const override { return interactive_; }
+
+ void set_interactive(bool interactive) { interactive_ = interactive; }
+
private:
// views::CustomButton:
void StateChanged() override {
@@ -383,6 +393,7 @@ class EditableProfilePhoto : public views::LabelButton {
photo_overlay_->SetVisible(false);
}
+ bool interactive_;
gfx::Path circular_mask_;
// Image that is shown when hovering over the image button. Can be NULL if
@@ -395,6 +406,7 @@ class EditableProfilePhoto : public views::LabelButton {
// EditableProfileName -------------------------------------------------
// A custom text control that turns into a textfield for editing when clicked.
+// For non-material-design user menu only.
class EditableProfileName : public views::View,
public views::ButtonListener {
public:
@@ -413,8 +425,6 @@ 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;
}
@@ -438,23 +448,16 @@ class EditableProfileName : public views::View,
SkColorSetRGB(0x20, 0x20, 0x20)));
// 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));
- }
+ 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(
- switches::IsMaterialDesignUserMenu()
- ? gfx::ALIGN_LEFT : gfx::ALIGN_CENTER);
+ profile_name_textfield_->SetHorizontalAlignment(gfx::ALIGN_CENTER);
profile_name_textfield_->SetVisible(false);
AddChildView(profile_name_textfield_);
}
@@ -724,6 +727,7 @@ void ProfileChooserView::ResetView() {
manage_accounts_link_ = NULL;
signin_current_profile_link_ = NULL;
auth_error_email_button_ = NULL;
+ current_profile_card_ = NULL;
current_profile_photo_ = NULL;
current_profile_name_ = NULL;
users_button_ = NULL;
@@ -980,7 +984,8 @@ void ProfileChooserView::ButtonPressed(views::Button* sender,
ShowViewFromMode(account_management_available ?
profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT :
profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER);
- } else if (sender == current_profile_photo_) {
+ } else if (sender == current_profile_photo_ ||
+ sender == current_profile_card_) {
avatar_menu_->EditProfile(avatar_menu_->GetActiveProfileIndex());
PostActionPerformed(ProfileMetrics::PROFILE_DESKTOP_MENU_EDIT_IMAGE);
} else if (sender == signin_current_profile_link_) {
@@ -1487,22 +1492,23 @@ views::View* ProfileChooserView::CreateMaterialDesignCurrentProfileView(
const AvatarMenu::Item& avatar_item,
bool is_guest) {
views::View* view = new views::View();
- int column_width = GetFixedMenuWidth() - 2 * views::kMaterialHorizontalMargin;
- views::GridLayout* layout = CreateSingleColumnLayout(view, column_width);
- layout->SetInsets(views::kRelatedControlVerticalSpacing,
- views::kMaterialHorizontalMargin,
- views::kRelatedControlVerticalSpacing,
- views::kMaterialHorizontalMargin);
+ const int content_width =
Roger Tawa OOO till Jul 10th 2016/06/09 14:21:06 |content_width| seems to be used only at line 1582
+ GetFixedMenuWidth() - 2 * views::kMaterialHorizontalMargin;
+ views::GridLayout* layout =
+ CreateSingleColumnLayout(view, GetFixedMenuWidth());
+ layout->SetInsets(views::kRelatedControlVerticalSpacing, 0,
+ views::kRelatedControlVerticalSpacing, 0);
+ current_profile_card_ = new BackgroundColorHoverButton(this);
// Profile picture, left-aligned.
- const int profile_bar_height = 56;
- current_profile_photo_ = new EditableProfilePhoto(
+ EditableProfilePhoto* current_profile_photo = new EditableProfilePhoto(
this, avatar_item.icon, !is_guest,
- gfx::Rect(0, (profile_bar_height - kMediumImageSide) / 2,
+ gfx::Rect(0, (kProfileBarHeight - kMediumImageSide) / 2,
kMediumImageSide, kMediumImageSide));
- SizedContainer* profile_container =
- new SizedContainer(gfx::Size(column_width, profile_bar_height));
- profile_container->AddChildView(current_profile_photo_);
+ current_profile_photo->SetX(views::kMaterialHorizontalMargin);
+ gfx::Rect photo_bounds = current_profile_photo->bounds();
+ current_profile_card_->AddChildView(current_profile_photo);
+ current_profile_photo->set_interactive(false);
// Add supervised badge for supervised profile.
if (browser_->profile()->IsSupervised()) {
@@ -1510,126 +1516,110 @@ views::View* ProfileChooserView::CreateMaterialDesignCurrentProfileView(
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() + badge_spacing,
- parent_bounds.bottom() - preferred_size.height() + badge_spacing,
+ photo_bounds.right() - preferred_size.width() + badge_spacing,
+ photo_bounds.bottom() - preferred_size.height() + badge_spacing,
preferred_size.width(),
preferred_size.height());
- profile_container->AddChildView(supervised_icon);
+ current_profile_card_->AddChildView(supervised_icon);
+ supervised_icon->set_interactive(false);
}
// 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 textfield_left_margin =
- kProfileHorizontalSpacing -
- (editing_allowed ? kTextfieldLabelHorizontalSpacing : 0);
- current_profile_name_->SetBounds(
- photo_bounds.width() + textfield_left_margin,
+ views::Label* current_profile_name = new views::Label(
+ profiles::GetAvatarNameForProfile(browser_->profile()->GetPath()));
+ current_profile_name->SetFontList(
+ (&ui::ResourceBundle::GetSharedInstance())
+ ->GetFontList(ui::ResourceBundle::MediumFont));
+ current_profile_name->SetHorizontalAlignment(gfx::ALIGN_LEFT);
+ current_profile_name->SetBounds(
+ photo_bounds.right() + kProfileHorizontalSpacing,
views::kRelatedControlVerticalSpacing,
- profile_container->GetPreferredSize().width() - photo_bounds.width()
- - textfield_left_margin,
- 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);
+ GetFixedMenuWidth() - photo_bounds.right() - kProfileHorizontalSpacing -
+ views::kMaterialHorizontalMargin,
+ kProfileBarHeight / 2 - views::kRelatedControlVerticalSpacing);
+ current_profile_card_->AddChildView(current_profile_name);
+
+ if (avatar_item.signed_in && !switches::IsEnableAccountConsistency()) {
+ 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(
+ photo_bounds.right() + kProfileHorizontalSpacing,
+ kProfileBarHeight / 2,
+ GetFixedMenuWidth() - photo_bounds.right() - kProfileHorizontalSpacing -
+ views::kMaterialHorizontalMargin,
+ kProfileBarHeight / 2 - views::kRelatedControlVerticalSpacing);
+ current_profile_card_->AddChildView(email_label);
layout->StartRow(1, 0);
- layout->AddView(profile_container);
+ layout->AddView(current_profile_card_);
+ return view;
+ } else {
+ // Center-align the avatar name and add to the view.
+ current_profile_name->SetY(
+ (kProfileBarHeight - current_profile_name->height()) / 2);
+ layout->StartRow(1, 0);
+ layout->AddView(current_profile_card_);
}
- if (is_guest)
+ if (is_guest) {
+ current_profile_card_->SetEnabled(false);
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 x_coordinate = photo_bounds.width() + kProfileHorizontalSpacing;
- const int y_coordinate = profile_container->GetPreferredSize().height() / 2;
- const int width = profile_container->GetPreferredSize().width()
- - photo_bounds.width() - kProfileHorizontalSpacing;
- const int height = 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(
- x_coordinate, y_coordinate, width, height);
- 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(
- x_coordinate - insets.left(), y_coordinate, width, height);
- 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(x_coordinate, y_coordinate, width, height);
- profile_container->AddChildView(email_label);
- }
- }
- layout->AddView(profile_container);
- } else {
+ if (!avatar_item.signed_in) {
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);
+ if (!signin_manager->IsSigninAllowed())
+ return view;
+ }
- signin_current_profile_link_ = new views::BlueButton(
+ // Add a layout with horizontal insets to accomodate the extra links under
+ // the active profile card.
+ views::View* links_view = new views::View();
+ views::GridLayout* links_layout =
+ CreateSingleColumnLayout(links_view, content_width);
+ links_layout->SetInsets(0, views::kMaterialHorizontalMargin,
+ 0, views::kMaterialHorizontalMargin);
+
+ if (avatar_item.signed_in) {
+ // Implies that account consistency is turned on
+ 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);
+ links_layout->StartRowWithPadding(1, 0, 0,
+ views::kRelatedControlVerticalSpacing);
+ links_layout->StartRow(1, 0);
+ links_layout->AddView(manage_accounts_link_);
+ } else {
+ // Implies that account is not signed in and signin is allowed
+ views::Label* promo = new views::Label(
+ l10n_util::GetStringUTF16(IDS_PROFILES_SIGNIN_PROMO));
+ promo->SetMultiLine(true);
+ promo->SetHorizontalAlignment(gfx::ALIGN_LEFT);
+ links_layout->StartRowWithPadding(1, 0, 0,
+ views::kRelatedControlVerticalSpacing);
+ links_layout->StartRow(1, 0);
+ links_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)));
- signin_current_profile_link_->SetMinSize(gfx::Size(0, 36));
- 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);
- }
+ signin_current_profile_link_->SetMinSize(gfx::Size(0, 36));
+ links_layout->StartRowWithPadding(1, 0, 0,
+ views::kRelatedControlVerticalSpacing);
+ links_layout->StartRow(1, 0);
+ links_layout->AddView(signin_current_profile_link_);
+ content::RecordAction(
+ base::UserMetricsAction("Signin_Impression_FromAvatarBubbleSignin"));
+ links_layout->StartRowWithPadding(1, 0, 0,
+ views::kLabelToControlVerticalSpacing);
}
+ layout->StartRow(1, 0);
+ layout->AddView(links_view);
return view;
}
« no previous file with comments | « chrome/browser/ui/views/profiles/profile_chooser_view.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698