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

Side by Side Diff: chrome/browser/ui/views/profiles/profile_chooser_view.cc

Issue 2023093002: Reflow of the profile items in desktop user menu (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@move-profile-icon
Patch Set: Clean up profile badge 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 unified diff | 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 »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/views/profiles/profile_chooser_view.h" 5 #include "chrome/browser/ui/views/profiles/profile_chooser_view.h"
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "base/metrics/user_metrics.h" 8 #include "base/metrics/user_metrics.h"
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "chrome/browser/browser_process.h" 10 #include "chrome/browser/browser_process.h"
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 #include "components/signin/core/browser/signin_manager.h" 42 #include "components/signin/core/browser/signin_manager.h"
43 #include "components/signin/core/common/profile_management_switches.h" 43 #include "components/signin/core/common/profile_management_switches.h"
44 #include "content/public/browser/render_widget_host_view.h" 44 #include "content/public/browser/render_widget_host_view.h"
45 #include "content/public/browser/user_metrics.h" 45 #include "content/public/browser/user_metrics.h"
46 #include "grit/theme_resources.h" 46 #include "grit/theme_resources.h"
47 #include "third_party/skia/include/core/SkColor.h" 47 #include "third_party/skia/include/core/SkColor.h"
48 #include "ui/base/l10n/l10n_util.h" 48 #include "ui/base/l10n/l10n_util.h"
49 #include "ui/base/material_design/material_design_controller.h" 49 #include "ui/base/material_design/material_design_controller.h"
50 #include "ui/base/resource/resource_bundle.h" 50 #include "ui/base/resource/resource_bundle.h"
51 #include "ui/compositor/clip_recorder.h" 51 #include "ui/compositor/clip_recorder.h"
52 #include "ui/compositor/paint_recorder.h"
52 #include "ui/gfx/canvas.h" 53 #include "ui/gfx/canvas.h"
53 #include "ui/gfx/color_palette.h" 54 #include "ui/gfx/color_palette.h"
54 #include "ui/gfx/image/canvas_image_source.h" 55 #include "ui/gfx/image/canvas_image_source.h"
55 #include "ui/gfx/image/image.h" 56 #include "ui/gfx/image/image.h"
56 #include "ui/gfx/image/image_skia.h" 57 #include "ui/gfx/image/image_skia.h"
57 #include "ui/gfx/paint_vector_icon.h" 58 #include "ui/gfx/paint_vector_icon.h"
58 #include "ui/gfx/path.h" 59 #include "ui/gfx/path.h"
59 #include "ui/gfx/skia_util.h" 60 #include "ui/gfx/skia_util.h"
60 #include "ui/gfx/text_elider.h" 61 #include "ui/gfx/text_elider.h"
61 #include "ui/gfx/vector_icons_public.h" 62 #include "ui/gfx/vector_icons_public.h"
(...skipping 14 matching lines...) Expand all
76 #include "ui/views/layout/box_layout.h" 77 #include "ui/views/layout/box_layout.h"
77 #include "ui/views/layout/fill_layout.h" 78 #include "ui/views/layout/fill_layout.h"
78 #include "ui/views/layout/grid_layout.h" 79 #include "ui/views/layout/grid_layout.h"
79 #include "ui/views/layout/layout_constants.h" 80 #include "ui/views/layout/layout_constants.h"
80 #include "ui/views/widget/widget.h" 81 #include "ui/views/widget/widget.h"
81 82
82 namespace { 83 namespace {
83 84
84 // Helpers -------------------------------------------------------------------- 85 // Helpers --------------------------------------------------------------------
85 86
86 const int kFixedMenuWidth = 250;
87 const int kButtonHeight = 32; 87 const int kButtonHeight = 32;
88 const int kPasswordCombinedFixedGaiaViewWidth = 360; 88 const int kPasswordCombinedFixedGaiaViewWidth = 360;
89 const int kFixedGaiaViewWidth = 448; 89 const int kFixedGaiaViewWidth = 448;
90 const int kFixedAccountRemovalViewWidth = 280; 90 const int kFixedAccountRemovalViewWidth = 280;
91 const int kFixedSwitchUserViewWidth = 320; 91 const int kFixedSwitchUserViewWidth = 320;
92 const int kLargeImageSide = 88; 92 const int kLargeImageSide = 88;
93 const int kMdImageSide = 40;
94
95 // Spacing between the edge of the material design user menu and the
96 // top/bottom or left/right of the menu items.
97 const int kMaterialMenuEdgeMargin = 16;
93 98
94 const int kVerticalSpacing = 16; 99 const int kVerticalSpacing = 16;
95 100
96 const int kTitleViewNativeWidgetOffset = 8; 101 const int kTitleViewNativeWidgetOffset = 8;
97 102
98 bool IsProfileChooser(profiles::BubbleViewMode mode) { 103 bool IsProfileChooser(profiles::BubbleViewMode mode) {
99 return mode == profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER || 104 return mode == profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER ||
100 mode == profiles::BUBBLE_VIEW_MODE_FAST_PROFILE_CHOOSER; 105 mode == profiles::BUBBLE_VIEW_MODE_FAST_PROFILE_CHOOSER;
101 } 106 }
102 107
108 int GetProfileBadgeSize() {
109 return switches::IsMaterialDesignUserMenu() ? 24 : 30;
110 }
111
112 // DEPRECATED: New user menu components should use views::BoxLayout instead.
103 // Creates a GridLayout with a single column. This ensures that all the child 113 // Creates a GridLayout with a single column. This ensures that all the child
104 // views added get auto-expanded to fill the full width of the bubble. 114 // views added get auto-expanded to fill the full width of the bubble.
105 views::GridLayout* CreateSingleColumnLayout(views::View* view, int width) { 115 views::GridLayout* CreateSingleColumnLayout(views::View* view, int width) {
106 views::GridLayout* layout = new views::GridLayout(view); 116 views::GridLayout* layout = new views::GridLayout(view);
107 view->SetLayoutManager(layout); 117 view->SetLayoutManager(layout);
108 118
109 views::ColumnSet* columns = layout->AddColumnSet(0); 119 views::ColumnSet* columns = layout->AddColumnSet(0);
110 columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0, 120 columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0,
111 views::GridLayout::FIXED, width, width); 121 views::GridLayout::FIXED, width, width);
112 return layout; 122 return layout;
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 gfx::Rect bounds(title_view_->GetPreferredSize()); 266 gfx::Rect bounds(title_view_->GetPreferredSize());
257 title_view_->SetBoundsRect(bounds); 267 title_view_->SetBoundsRect(bounds);
258 bounds.Offset(kTitleViewNativeWidgetOffset, kTitleViewNativeWidgetOffset); 268 bounds.Offset(kTitleViewNativeWidgetOffset, kTitleViewNativeWidgetOffset);
259 title_widget_->SetBounds(bounds); 269 title_widget_->SetBounds(bounds);
260 } 270 }
261 271
262 } // namespace 272 } // namespace
263 273
264 // RightAlignedIconLabelButton ------------------------------------------------- 274 // RightAlignedIconLabelButton -------------------------------------------------
265 275
266 // A custom LabelButton that has a centered text and right aligned icon. 276 // A custom LabelButton that has a left-aligned text and right aligned icon.
277 // For non-material-design user menu, it has centered text instead.
267 class RightAlignedIconLabelButton : public views::LabelButton { 278 class RightAlignedIconLabelButton : public views::LabelButton {
268 public: 279 public:
269 RightAlignedIconLabelButton(views::ButtonListener* listener, 280 RightAlignedIconLabelButton(views::ButtonListener* listener,
270 const base::string16& text) 281 const base::string16& text)
271 : views::LabelButton(listener, text) { 282 : views::LabelButton(listener, text) {
272 SetHorizontalAlignment(gfx::ALIGN_RIGHT); 283 SetHorizontalAlignment(gfx::ALIGN_RIGHT);
273 label()->SetHorizontalAlignment(gfx::ALIGN_CENTER); 284 label()->SetHorizontalAlignment(switches::IsMaterialDesignUserMenu()
285 ? gfx::ALIGN_LEFT
286 : gfx::ALIGN_CENTER);
274 } 287 }
275 288
276 protected: 289 protected:
277 void Layout() override { 290 void Layout() override {
278 views::LabelButton::Layout(); 291 views::LabelButton::Layout();
279 292
280 // Keep the text centered and the icon right-aligned by stretching the label 293 // Keep the text centered and the icon right-aligned by stretching the label
281 // to take up more of the content area and centering its contents. 294 // to take up more of the content area and centering its contents.
282 gfx::Rect content_bounds = GetContentsBounds(); 295 gfx::Rect content_bounds = GetContentsBounds();
283 gfx::Rect label_bounds = label()->bounds(); 296 gfx::Rect label_bounds = label()->bounds();
284 label_bounds.Inset(content_bounds.x() - label_bounds.x(), 0, 0, 0); 297 label_bounds.Inset(content_bounds.x() - label_bounds.x(), 0, 0, 0);
285 label()->SetBoundsRect(label_bounds); 298 label()->SetBoundsRect(label_bounds);
286 } 299 }
287 300
288 private: 301 private:
289 void OnFocus() override { 302 void OnFocus() override {
290 SetState(STATE_HOVERED); 303 SetState(STATE_HOVERED);
291 } 304 }
292 305
293 void OnBlur() override { 306 void OnBlur() override {
294 SetState(STATE_NORMAL); 307 SetState(STATE_NORMAL);
295 } 308 }
296 309
297 DISALLOW_COPY_AND_ASSIGN(RightAlignedIconLabelButton); 310 DISALLOW_COPY_AND_ASSIGN(RightAlignedIconLabelButton);
298 }; 311 };
299 312
300 // EditableProfilePhoto ------------------------------------------------- 313 // EditableProfilePhoto -------------------------------------------------
301 314
315 const size_t kProfileBadgeWhitePadding = 2;
316
302 // A custom Image control that shows a "change" button when moused over. 317 // A custom Image control that shows a "change" button when moused over.
303 class EditableProfilePhoto : public views::LabelButton { 318 class EditableProfilePhoto : public views::LabelButton {
304 public: 319 public:
305 EditableProfilePhoto(views::ButtonListener* listener, 320 EditableProfilePhoto(views::ButtonListener* listener,
306 const gfx::Image& icon, 321 const gfx::Image& icon,
307 bool is_editing_allowed, 322 bool is_editing_allowed,
308 const gfx::Rect& bounds) 323 Profile* profile)
309 : views::LabelButton(listener, base::string16()), 324 : views::LabelButton(listener, base::string16()),
310 photo_overlay_(NULL) { 325 photo_overlay_(nullptr),
311 gfx::Image image = profiles::GetSizedAvatarIcon( 326 profile_(profile) {
312 icon, true, kLargeImageSide, kLargeImageSide); 327 gfx::Image image = profiles::GetSizedAvatarIcon(icon, true, icon_image_side,
328 icon_image_side);
313 SetImage(views::LabelButton::STATE_NORMAL, *image.ToImageSkia()); 329 SetImage(views::LabelButton::STATE_NORMAL, *image.ToImageSkia());
314 SetBorder(views::Border::NullBorder()); 330 if (switches::IsMaterialDesignUserMenu()) {
315 SetBoundsRect(bounds); 331 SetBorder(views::Border::CreateEmptyBorder(
332 views::kRelatedControlSmallVerticalSpacing, 0, 0, 0));
333 } else {
334 SetBorder(views::Border::NullBorder());
335 }
336 SetSize(gfx::Size(
337 GetPreferredSize().width() + badge_spacing,
338 GetPreferredSize().height() + badge_spacing + GetInsets().top()));
316 339
317 // Calculate the circular mask that will be used to display the photo. 340 // Calculate the circular mask that will be used to display the photo.
318 circular_mask_.addCircle(SkIntToScalar(bounds.width() / 2), 341 circular_mask_.addCircle(SkIntToScalar(icon_image_side / 2),
319 SkIntToScalar(bounds.height() / 2), 342 SkIntToScalar(icon_image_side / 2) + badge_spacing,
320 SkIntToScalar(bounds.width() / 2)); 343 SkIntToScalar(icon_image_side / 2));
321 344
322 if (!is_editing_allowed) { 345 if (!is_editing_allowed) {
323 SetEnabled(false); 346 SetEnabled(false);
324 return; 347 return;
325 } 348 }
326 349
327 set_notify_enter_exit_on_child(true); 350 set_notify_enter_exit_on_child(true);
328 351
329 // Photo overlay that appears when hovering over the button. 352 // Photo overlay that appears when hovering over the button.
330 photo_overlay_ = new views::ImageView(); 353 photo_overlay_ = new views::ImageView();
331 354
332 const SkColor kBackgroundColor = SkColorSetARGB(65, 255, 255, 255); 355 const SkColor kBackgroundColor = SkColorSetARGB(65, 255, 255, 255);
333 photo_overlay_->set_background( 356 photo_overlay_->set_background(
334 views::Background::CreateSolidBackground(kBackgroundColor)); 357 views::Background::CreateSolidBackground(kBackgroundColor));
335 photo_overlay_->SetImage(gfx::CreateVectorIcon( 358 photo_overlay_->SetImage(
336 gfx::VectorIconId::PHOTO_CAMERA, 48u, SkColorSetRGB(0x33, 0x33, 0x33))); 359 gfx::CreateVectorIcon(gfx::VectorIconId::PHOTO_CAMERA,
360 switches::IsMaterialDesignUserMenu() ? 22u : 48u,
361 SkColorSetRGB(0x33, 0x33, 0x33)));
337 362
338 photo_overlay_->SetSize(bounds.size()); 363 photo_overlay_->SetSize(gfx::Size(icon_image_side, icon_image_side));
364 photo_overlay_->SetY(badge_spacing);
339 photo_overlay_->SetVisible(false); 365 photo_overlay_->SetVisible(false);
340 AddChildView(photo_overlay_); 366 AddChildView(photo_overlay_);
341 } 367 }
342 368
343 void OnPaint(gfx::Canvas* canvas) override { 369 void OnPaint(gfx::Canvas* canvas) override {
370 canvas->Save();
344 // Display the profile picture as a circle. 371 // Display the profile picture as a circle.
345 canvas->ClipPath(circular_mask_, true); 372 canvas->ClipPath(circular_mask_, true);
346 views::LabelButton::OnPaint(canvas); 373 views::LabelButton::OnPaint(canvas);
374 canvas->Restore();
347 } 375 }
348 376
349 void PaintChildren(const ui::PaintContext& context) override { 377 void PaintChildren(const ui::PaintContext& context) override {
350 // Display any children (the "change photo" overlay) as a circle. 378 // Display any children (the "change photo" overlay) as a circle.
351 ui::ClipRecorder clip_recorder(context); 379 ui::ClipRecorder clip_recorder(context);
352 clip_recorder.ClipPathWithAntiAliasing(circular_mask_); 380 clip_recorder.ClipPathWithAntiAliasing(circular_mask_);
353 View::PaintChildren(context); 381 View::PaintChildren(context);
382
383 ui::PaintRecorder recorder(
384 context, gfx::Size(GetProfileBadgeSize(), GetProfileBadgeSize()));
385 gfx::Canvas* canvas = recorder.canvas();
386 if (profile_->IsSupervised()) {
387 gfx::VectorIconId icon_id;
388 size_t icon_size;
389 if (profile_->IsChild()) {
390 icon_id = gfx::VectorIconId::ACCOUNT_CHILD_INVERT;
391 icon_size = switches::IsMaterialDesignUserMenu() ? 21 : 26;
392 } else {
393 icon_id = gfx::VectorIconId::SUPERVISOR_ACCOUNT;
394 icon_size = switches::IsMaterialDesignUserMenu() ? 16 : 20;
395 }
396 gfx::Rect bounds(0, 0, GetProfileBadgeSize(), GetProfileBadgeSize());
397
398 int badge_offset = views::kRelatedControlSmallVerticalSpacing +
399 icon_image_side + badge_spacing -
400 GetProfileBadgeSize();
401 gfx::Point center_point =
402 bounds.CenterPoint() + gfx::Vector2d(badge_offset, badge_offset);
403 SkPaint paint;
404 paint.setAntiAlias(true);
405 paint.setColor(GetNativeTheme()->GetSystemColor(
406 ui::NativeTheme::kColorId_BubbleBackground));
407 canvas->DrawCircle(center_point, GetProfileBadgeSize() / 2, paint);
408 paint.setColor(SkColorSetRGB(0xAF, 0xD9, 0xFC));
409 canvas->DrawCircle(center_point,
Evan Stade 2016/06/24 18:25:26 what is this?
Jane 2016/06/27 18:08:56 This is to draw the light blue circular background
Evan Stade 2016/06/28 03:02:49 I don't see a light blue bg in the mocks. All I se
Jane 2016/06/28 14:59:22 Oops, you are right, I totally missed that change.
Evan Stade 2016/06/28 23:32:09 it already is in color_palette.h as kChromeIconGre
Jane 2016/06/29 15:39:36 Sorry, I got confused because of an inconsistency
410 GetProfileBadgeSize() / 2 - kProfileBadgeWhitePadding,
411 paint);
412
413 int offset = (GetProfileBadgeSize() - icon_size) / 2;
414 canvas->Translate(
415 gfx::Vector2d(badge_offset + offset, badge_offset + offset));
416 gfx::PaintVectorIcon(canvas, icon_id, icon_size,
417 SkColorSetRGB(0, 0x66, 0xff));
Evan Stade 2016/06/28 03:02:49 this should almost certainly be something from col
Jane 2016/06/28 14:59:22 (Changed it to white) I couldn't find any defined
Jane 2016/06/28 15:33:11 Actually, I think it makes sense for this color to
Evan Stade 2016/06/28 23:32:09 a) the definition for white is SK_ColorWHITE b) in
Jane 2016/06/29 15:39:36 Good suggestion on simplifying the code! I think I
418 }
354 } 419 }
355 420
421 int icon_image_side =
422 switches::IsMaterialDesignUserMenu() ? kMdImageSide : kLargeImageSide;
423 int badge_spacing = switches::IsMaterialDesignUserMenu() ? 4 : 0;
424
356 private: 425 private:
357 // views::CustomButton: 426 // views::CustomButton:
358 void StateChanged() override { 427 void StateChanged() override {
359 bool show_overlay = 428 bool show_overlay =
360 (state() == STATE_PRESSED || state() == STATE_HOVERED || HasFocus()); 429 (state() == STATE_PRESSED || state() == STATE_HOVERED || HasFocus());
361 if (photo_overlay_) 430 if (photo_overlay_)
362 photo_overlay_->SetVisible(show_overlay); 431 photo_overlay_->SetVisible(show_overlay);
363 } 432 }
364 433
365 void OnFocus() override { 434 void OnFocus() override {
366 views::LabelButton::OnFocus(); 435 views::LabelButton::OnFocus();
367 if (photo_overlay_) 436 if (photo_overlay_)
368 photo_overlay_->SetVisible(true); 437 photo_overlay_->SetVisible(true);
369 } 438 }
370 439
371 void OnBlur() override { 440 void OnBlur() override {
372 views::LabelButton::OnBlur(); 441 views::LabelButton::OnBlur();
373 // Don't hide the overlay if it's being shown as a result of a mouseover. 442 // Don't hide the overlay if it's being shown as a result of a mouseover.
374 if (photo_overlay_ && state() != STATE_HOVERED) 443 if (photo_overlay_ && state() != STATE_HOVERED)
375 photo_overlay_->SetVisible(false); 444 photo_overlay_->SetVisible(false);
376 } 445 }
377 446
378 gfx::Path circular_mask_; 447 gfx::Path circular_mask_;
379 448
380 // Image that is shown when hovering over the image button. Can be NULL if 449 // Image that is shown when hovering over the image button. Can be NULL if
381 // the photo isn't allowed to be edited (e.g. for guest profiles). 450 // the photo isn't allowed to be edited (e.g. for guest profiles).
382 views::ImageView* photo_overlay_; 451 views::ImageView* photo_overlay_;
383 452
453 Profile* profile_;
454
384 DISALLOW_COPY_AND_ASSIGN(EditableProfilePhoto); 455 DISALLOW_COPY_AND_ASSIGN(EditableProfilePhoto);
385 }; 456 };
386 457
387 // EditableProfileName ------------------------------------------------- 458 // EditableProfileName -------------------------------------------------
388 459
389 // A custom text control that turns into a textfield for editing when clicked. 460 // A custom text control that turns into a textfield for editing when clicked.
390 class EditableProfileName : public views::View, 461 class EditableProfileName : public views::View,
391 public views::ButtonListener { 462 public views::ButtonListener {
392 public: 463 public:
393 EditableProfileName(views::TextfieldController* controller, 464 EditableProfileName(views::TextfieldController* controller,
394 const base::string16& text, 465 const base::string16& text,
395 bool is_editing_allowed) 466 bool is_editing_allowed)
396 : button_(nullptr), label_(nullptr), profile_name_textfield_(nullptr) { 467 : button_(nullptr), profile_name_textfield_(nullptr) {
397 SetLayoutManager( 468 SetLayoutManager(
398 new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0)); 469 new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0));
399 470
400 ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); 471 ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
401 const gfx::FontList& medium_font_list = 472 const gfx::FontList& medium_font_list =
402 rb->GetFontList(ui::ResourceBundle::MediumFont); 473 rb->GetFontList(ui::ResourceBundle::MediumFont);
474 const gfx::Insets textfield_border_insets =
475 views::Textfield().border()->GetInsets();
403 476
404 if (!is_editing_allowed) { 477 if (!is_editing_allowed) {
405 label_ = new views::Label(text); 478 views::Label* name_label = new views::Label(text);
406 label_->SetBorder(views::Border::CreateEmptyBorder(2, 0, 2, 0)); 479 name_label->SetBorder(
407 label_->SetFontList(medium_font_list); 480 views::Border::CreateEmptyBorder(textfield_border_insets));
408 AddChildView(label_); 481 name_label->SetFontList(medium_font_list);
482 if (switches::IsMaterialDesignUserMenu())
483 name_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
484 AddChildView(name_label);
409 return; 485 return;
410 } 486 }
411 487
488 profile_name_textfield_ = new views::Textfield();
489 // Textfield that overlaps the button.
490 profile_name_textfield_->set_controller(controller);
491 profile_name_textfield_->SetFontList(medium_font_list);
492 profile_name_textfield_->SetHorizontalAlignment(
493 switches::IsMaterialDesignUserMenu() ? gfx::ALIGN_LEFT
494 : gfx::ALIGN_CENTER);
495 profile_name_textfield_->SetVisible(false);
496 AddChildView(profile_name_textfield_);
497
412 button_ = new RightAlignedIconLabelButton(this, text); 498 button_ = new RightAlignedIconLabelButton(this, text);
413 button_->SetFontList(medium_font_list); 499 button_->SetFontList(medium_font_list);
414 // Show an "edit" pencil icon when hovering over. In the default state, 500 // Show an "edit" pencil icon when hovering over. In the default state,
415 // we need to create an empty placeholder of the correct size, so that 501 // we need to create an empty placeholder of the correct size, so that
416 // the text doesn't jump around when the hovered icon appears. 502 // the text doesn't jump around when the hovered icon appears.
417 // TODO(estade): revisit colors and press effect. 503 // TODO(estade): revisit colors and press effect.
418 const int kIconSize = 16; 504 const int kIconSize = 16;
419 button_->SetImage(views::LabelButton::STATE_NORMAL, 505 button_->SetImage(views::LabelButton::STATE_NORMAL,
420 CreateSquarePlaceholderImage(kIconSize)); 506 CreateSquarePlaceholderImage(kIconSize));
421 button_->SetImage(views::LabelButton::STATE_HOVERED, 507 button_->SetImage(views::LabelButton::STATE_HOVERED,
422 gfx::CreateVectorIcon( 508 gfx::CreateVectorIcon(
423 gfx::VectorIconId::MODE_EDIT, kIconSize, 509 gfx::VectorIconId::MODE_EDIT, kIconSize,
424 SkColorSetRGB(0x33, 0x33, 0x33))); 510 SkColorSetRGB(0x33, 0x33, 0x33)));
425 button_->SetImage(views::LabelButton::STATE_PRESSED, 511 button_->SetImage(views::LabelButton::STATE_PRESSED,
426 gfx::CreateVectorIcon( 512 gfx::CreateVectorIcon(
427 gfx::VectorIconId::MODE_EDIT, kIconSize, 513 gfx::VectorIconId::MODE_EDIT, kIconSize,
428 SkColorSetRGB(0x20, 0x20, 0x20))); 514 SkColorSetRGB(0x20, 0x20, 0x20)));
429 // To center the text, we need to offest it by the width of the icon we 515 // We need to add a left padding as well as a small top/bottom padding
430 // are adding and its padding. We need to also add a small top/bottom 516 // to the text to account for the textfield's border.
431 // padding to account for the textfield's border. 517 if (switches::IsMaterialDesignUserMenu()) {
432 const int kIconTextLabelButtonSpacing = 5; 518 button_->SetBorder(views::Border::CreateEmptyBorder(
433 button_->SetBorder(views::Border::CreateEmptyBorder( 519 textfield_border_insets +
434 2, kIconSize + kIconTextLabelButtonSpacing, 2, 0)); 520 gfx::Insets(0, profile_name_textfield_->GetInsets().left(), 0, 0)));
521 } else {
522 const int kIconTextLabelButtonSpacing = 5;
523 button_->SetBorder(views::Border::CreateEmptyBorder(
524 textfield_border_insets +
525 gfx::Insets(0, kIconSize + kIconTextLabelButtonSpacing, 0, 0)));
526 }
435 AddChildView(button_); 527 AddChildView(button_);
436
437 profile_name_textfield_ = new views::Textfield();
438 // Textfield that overlaps the button.
439 profile_name_textfield_->set_controller(controller);
440 profile_name_textfield_->SetFontList(medium_font_list);
441 profile_name_textfield_->SetHorizontalAlignment(gfx::ALIGN_CENTER);
442 profile_name_textfield_->SetVisible(false);
443 AddChildView(profile_name_textfield_);
444 } 528 }
445 529
446 views::Textfield* profile_name_textfield() { 530 views::Textfield* profile_name_textfield() {
447 return profile_name_textfield_; 531 return profile_name_textfield_;
448 } 532 }
449 533
450 // Hide the editable textfield to show the profile name button instead. 534 // Hide the editable textfield to show the profile name button instead.
451 void ShowReadOnlyView() { 535 void ShowReadOnlyView() {
452 button_->SetVisible(true); 536 button_->SetVisible(true);
453 profile_name_textfield_->SetVisible(false); 537 profile_name_textfield_->SetVisible(false);
(...skipping 17 matching lines...) Expand all
471 // you press space and clicks it when you release space, as the space can be 555 // you press space and clicks it when you release space, as the space can be
472 // part of the new profile name typed in the textfield. 556 // part of the new profile name typed in the textfield.
473 return false; 557 return false;
474 } 558 }
475 559
476 // The label button which shows the profile name, and can handle the event to 560 // The label button which shows the profile name, and can handle the event to
477 // make it editable. Can be NULL if the profile name isn't allowed to be 561 // make it editable. Can be NULL if the profile name isn't allowed to be
478 // edited. 562 // edited.
479 RightAlignedIconLabelButton* button_; 563 RightAlignedIconLabelButton* button_;
480 564
481 // The label which shows when the profile name cannot be edited (e.g. for
482 // supervised user). Can be NULL if the profile name is allowed to be edited.
483 views::Label* label_;
484
485 // Textfield that is shown when editing the profile name. Can be NULL if 565 // Textfield that is shown when editing the profile name. Can be NULL if
486 // the profile name isn't allowed to be edited (e.g. for guest profiles). 566 // the profile name isn't allowed to be edited (e.g. for guest profiles).
487 views::Textfield* profile_name_textfield_; 567 views::Textfield* profile_name_textfield_;
488 568
489 DISALLOW_COPY_AND_ASSIGN(EditableProfileName); 569 DISALLOW_COPY_AND_ASSIGN(EditableProfileName);
490 }; 570 };
491 571
492 // A title card with one back button right aligned and one label center aligned. 572 // A title card with one back button right aligned and one label center aligned.
493 class TitleCard : public views::View { 573 class TitleCard : public views::View {
494 public: 574 public:
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
557 } 637 }
558 638
559 views::ImageButton* back_button_; 639 views::ImageButton* back_button_;
560 views::Label* title_label_; 640 views::Label* title_label_;
561 641
562 DISALLOW_COPY_AND_ASSIGN(TitleCard); 642 DISALLOW_COPY_AND_ASSIGN(TitleCard);
563 }; 643 };
564 644
565 // ProfileBadge -------------------------------------------------------- 645 // ProfileBadge --------------------------------------------------------
566 646
567 const size_t kProfileBadgeSize = 30;
568 const size_t kProfileBadgeWhitePadding = 2;
569
570 // Draws a white circle, then a light blue circle, then a dark blue icon. 647 // Draws a white circle, then a light blue circle, then a dark blue icon.
571 class ProfileBadge : public gfx::CanvasImageSource { 648 class ProfileBadge : public gfx::CanvasImageSource {
572 public: 649 public:
573 ProfileBadge(gfx::VectorIconId id, size_t icon_size) 650 ProfileBadge(gfx::VectorIconId id, size_t icon_size)
574 : CanvasImageSource(gfx::Size(kProfileBadgeSize, kProfileBadgeSize), 651 : CanvasImageSource(
575 false), 652 gfx::Size(GetProfileBadgeSize(), GetProfileBadgeSize()),
653 false),
576 id_(id), 654 id_(id),
577 icon_size_(icon_size) {} 655 icon_size_(icon_size) {}
578 656
579 ~ProfileBadge() override {} 657 ~ProfileBadge() override {}
580 658
581 // CanvasImageSource: 659 // CanvasImageSource:
582 void Draw(gfx::Canvas* canvas) override { 660 void Draw(gfx::Canvas* canvas) override {
583 const SkISize size = canvas->sk_canvas()->getBaseLayerSize(); 661 const SkISize size = canvas->sk_canvas()->getBaseLayerSize();
584 gfx::Rect bounds(0, 0, size.width(), size.height()); 662 gfx::Rect bounds(0, 0, size.width(), size.height());
585 663
586 SkPaint paint; 664 SkPaint paint;
587 paint.setAntiAlias(true); 665 paint.setAntiAlias(true);
588 paint.setColor(SK_ColorWHITE); 666 paint.setColor(SK_ColorWHITE);
589 canvas->DrawCircle(bounds.CenterPoint(), size.width() / 2, paint); 667 canvas->DrawCircle(bounds.CenterPoint(), size.width() / 2, paint);
590 668
591 paint.setColor(SkColorSetRGB(0xAF, 0xD9, 0xFC)); 669 paint.setColor(SkColorSetRGB(0xAF, 0xD9, 0xFC));
592 canvas->DrawCircle(bounds.CenterPoint(), 670 canvas->DrawCircle(bounds.CenterPoint(),
593 size.width() / 2 - kProfileBadgeWhitePadding, paint); 671 size.width() / 2 - kProfileBadgeWhitePadding, paint);
594 672
595 int offset = (kProfileBadgeSize - icon_size_) / 2; 673 int offset = (GetProfileBadgeSize() - icon_size_) / 2;
596 canvas->Translate(gfx::Vector2d(offset, offset)); 674 canvas->Translate(gfx::Vector2d(offset, offset));
597 gfx::PaintVectorIcon(canvas, id_, icon_size_, SkColorSetRGB(0, 0x66, 0xff)); 675 gfx::PaintVectorIcon(canvas, id_, icon_size_, SkColorSetRGB(0, 0x66, 0xff));
598 } 676 }
599 677
600 private: 678 private:
601 const gfx::VectorIconId id_; 679 const gfx::VectorIconId id_;
602 const size_t icon_size_; 680 const size_t icon_size_;
603 681
604 DISALLOW_COPY_AND_ASSIGN(ProfileBadge); 682 DISALLOW_COPY_AND_ASSIGN(ProfileBadge);
605 }; 683 };
606 684
607 gfx::ImageSkia CreateBadgeForProfile(Profile* profile) { 685 gfx::ImageSkia CreateBadgeForProfile(Profile* profile) {
608 ProfileBadge* badge = 686 ProfileBadge* badge =
609 profile->IsChild() 687 profile->IsChild()
610 ? new ProfileBadge(gfx::VectorIconId::ACCOUNT_CHILD_INVERT, 26) 688 ? new ProfileBadge(gfx::VectorIconId::ACCOUNT_CHILD_INVERT,
611 : new ProfileBadge(gfx::VectorIconId::SUPERVISOR_ACCOUNT, 20); 689 switches::IsMaterialDesignUserMenu() ? 21 : 26)
612 690 : new ProfileBadge(gfx::VectorIconId::SUPERVISOR_ACCOUNT,
691 switches::IsMaterialDesignUserMenu() ? 16 : 20);
613 return gfx::ImageSkia(badge, badge->size()); 692 return gfx::ImageSkia(badge, badge->size());
614 } 693 }
615 694
616 // ProfileChooserView --------------------------------------------------------- 695 // ProfileChooserView ---------------------------------------------------------
617 696
618 // static 697 // static
619 ProfileChooserView* ProfileChooserView::profile_bubble_ = nullptr; 698 ProfileChooserView* ProfileChooserView::profile_bubble_ = nullptr;
620 bool ProfileChooserView::close_on_deactivate_for_testing_ = true; 699 bool ProfileChooserView::close_on_deactivate_for_testing_ = true;
621 700
622 // static 701 // static
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
657 bool ProfileChooserView::IsShowing() { 736 bool ProfileChooserView::IsShowing() {
658 return profile_bubble_ != NULL; 737 return profile_bubble_ != NULL;
659 } 738 }
660 739
661 // static 740 // static
662 void ProfileChooserView::Hide() { 741 void ProfileChooserView::Hide() {
663 if (IsShowing()) 742 if (IsShowing())
664 profile_bubble_->GetWidget()->Close(); 743 profile_bubble_->GetWidget()->Close();
665 } 744 }
666 745
746 // static
747 int ProfileChooserView::GetFixedMenuWidth() {
748 return switches::IsMaterialDesignUserMenu() ? 240 : 250;
749 }
750
667 ProfileChooserView::ProfileChooserView(views::View* anchor_view, 751 ProfileChooserView::ProfileChooserView(views::View* anchor_view,
668 Browser* browser, 752 Browser* browser,
669 profiles::BubbleViewMode view_mode, 753 profiles::BubbleViewMode view_mode,
670 profiles::TutorialMode tutorial_mode, 754 profiles::TutorialMode tutorial_mode,
671 signin::GAIAServiceType service_type, 755 signin::GAIAServiceType service_type,
672 signin_metrics::AccessPoint access_point) 756 signin_metrics::AccessPoint access_point)
673 : BubbleDialogDelegateView(anchor_view, views::BubbleBorder::TOP_RIGHT), 757 : BubbleDialogDelegateView(anchor_view, views::BubbleBorder::TOP_RIGHT),
674 browser_(browser), 758 browser_(browser),
675 view_mode_(view_mode), 759 view_mode_(view_mode),
676 tutorial_mode_(tutorial_mode), 760 tutorial_mode_(tutorial_mode),
(...skipping 10 matching lines...) Expand all
687 ProfileOAuth2TokenServiceFactory::GetForProfile(browser_->profile()); 771 ProfileOAuth2TokenServiceFactory::GetForProfile(browser_->profile());
688 if (oauth2_token_service) 772 if (oauth2_token_service)
689 oauth2_token_service->RemoveObserver(this); 773 oauth2_token_service->RemoveObserver(this);
690 } 774 }
691 775
692 void ProfileChooserView::ResetView() { 776 void ProfileChooserView::ResetView() {
693 open_other_profile_indexes_map_.clear(); 777 open_other_profile_indexes_map_.clear();
694 delete_account_button_map_.clear(); 778 delete_account_button_map_.clear();
695 reauth_account_button_map_.clear(); 779 reauth_account_button_map_.clear();
696 manage_accounts_link_ = NULL; 780 manage_accounts_link_ = NULL;
697 signin_current_profile_link_ = NULL; 781 signin_current_profile_button_ = NULL;
698 auth_error_email_button_ = NULL; 782 auth_error_email_button_ = NULL;
699 current_profile_photo_ = NULL; 783 current_profile_photo_ = NULL;
700 current_profile_name_ = NULL; 784 current_profile_name_ = NULL;
701 users_button_ = NULL; 785 users_button_ = NULL;
702 go_incognito_button_ = NULL; 786 go_incognito_button_ = NULL;
703 lock_button_ = NULL; 787 lock_button_ = NULL;
704 add_account_link_ = NULL; 788 add_account_link_ = NULL;
705 gaia_signin_cancel_button_ = NULL; 789 gaia_signin_cancel_button_ = NULL;
706 remove_account_button_ = NULL; 790 remove_account_button_ = NULL;
707 account_removal_cancel_button_ = NULL; 791 account_removal_cancel_button_ = NULL;
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
832 break; 916 break;
833 case profiles::BUBBLE_VIEW_MODE_SWITCH_USER: 917 case profiles::BUBBLE_VIEW_MODE_SWITCH_USER:
834 layout = CreateSingleColumnLayout(this, kFixedSwitchUserViewWidth); 918 layout = CreateSingleColumnLayout(this, kFixedSwitchUserViewWidth);
835 sub_view = CreateSwitchUserView(); 919 sub_view = CreateSwitchUserView();
836 ProfileMetrics::LogProfileNewAvatarMenuNotYou( 920 ProfileMetrics::LogProfileNewAvatarMenuNotYou(
837 ProfileMetrics::PROFILE_AVATAR_MENU_NOT_YOU_VIEW); 921 ProfileMetrics::PROFILE_AVATAR_MENU_NOT_YOU_VIEW);
838 break; 922 break;
839 case profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT: 923 case profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT:
840 case profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER: 924 case profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER:
841 case profiles::BUBBLE_VIEW_MODE_FAST_PROFILE_CHOOSER: 925 case profiles::BUBBLE_VIEW_MODE_FAST_PROFILE_CHOOSER:
842 layout = CreateSingleColumnLayout(this, kFixedMenuWidth); 926 layout = CreateSingleColumnLayout(this, GetFixedMenuWidth());
843 sub_view = CreateProfileChooserView(avatar_menu); 927 sub_view = CreateProfileChooserView(avatar_menu);
844 break; 928 break;
845 } 929 }
846 // Clears tutorial mode for all non-profile-chooser views. 930 // Clears tutorial mode for all non-profile-chooser views.
847 if (view_mode_ != profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER) 931 if (view_mode_ != profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER)
848 tutorial_mode_ = profiles::TUTORIAL_MODE_NONE; 932 tutorial_mode_ = profiles::TUTORIAL_MODE_NONE;
849 933
850 layout->StartRow(1, 0); 934 layout->StartRow(1, 0);
851 layout->AddView(sub_view); 935 layout->AddView(sub_view);
852 Layout(); 936 Layout();
(...skipping 26 matching lines...) Expand all
879 if (accelerator.key_code() != ui::VKEY_DOWN && 963 if (accelerator.key_code() != ui::VKEY_DOWN &&
880 accelerator.key_code() != ui::VKEY_UP) 964 accelerator.key_code() != ui::VKEY_UP)
881 return BubbleDialogDelegateView::AcceleratorPressed(accelerator); 965 return BubbleDialogDelegateView::AcceleratorPressed(accelerator);
882 966
883 // Move the focus up or down. 967 // Move the focus up or down.
884 GetFocusManager()->AdvanceFocus(accelerator.key_code() != ui::VKEY_DOWN); 968 GetFocusManager()->AdvanceFocus(accelerator.key_code() != ui::VKEY_DOWN);
885 return true; 969 return true;
886 } 970 }
887 971
888 views::View* ProfileChooserView::GetInitiallyFocusedView() { 972 views::View* ProfileChooserView::GetInitiallyFocusedView() {
889 return signin_current_profile_link_; 973 return signin_current_profile_button_;
890 } 974 }
891 975
892 int ProfileChooserView::GetDialogButtons() const { 976 int ProfileChooserView::GetDialogButtons() const {
893 return ui::DIALOG_BUTTON_NONE; 977 return ui::DIALOG_BUTTON_NONE;
894 } 978 }
895 979
896 bool ProfileChooserView::HandleContextMenu( 980 bool ProfileChooserView::HandleContextMenu(
897 const content::ContextMenuParams& params) { 981 const content::ContextMenuParams& params) {
898 // Suppresses the context menu because some features, such as inspecting 982 // Suppresses the context menu because some features, such as inspecting
899 // elements, are not appropriate in a bubble. 983 // elements, are not appropriate in a bubble.
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
948 bool account_management_available = 1032 bool account_management_available =
949 SigninManagerFactory::GetForProfile(browser_->profile())-> 1033 SigninManagerFactory::GetForProfile(browser_->profile())->
950 IsAuthenticated() && 1034 IsAuthenticated() &&
951 switches::IsEnableAccountConsistency(); 1035 switches::IsEnableAccountConsistency();
952 ShowViewFromMode(account_management_available ? 1036 ShowViewFromMode(account_management_available ?
953 profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT : 1037 profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT :
954 profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER); 1038 profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER);
955 } else if (sender == current_profile_photo_) { 1039 } else if (sender == current_profile_photo_) {
956 avatar_menu_->EditProfile(avatar_menu_->GetActiveProfileIndex()); 1040 avatar_menu_->EditProfile(avatar_menu_->GetActiveProfileIndex());
957 PostActionPerformed(ProfileMetrics::PROFILE_DESKTOP_MENU_EDIT_IMAGE); 1041 PostActionPerformed(ProfileMetrics::PROFILE_DESKTOP_MENU_EDIT_IMAGE);
958 } else if (sender == signin_current_profile_link_) { 1042 } else if (sender == signin_current_profile_button_) {
959 ShowViewFromMode(profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN); 1043 ShowViewFromMode(profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN);
960 } else if (sender == add_person_button_) { 1044 } else if (sender == add_person_button_) {
961 ProfileMetrics::LogProfileNewAvatarMenuNotYou( 1045 ProfileMetrics::LogProfileNewAvatarMenuNotYou(
962 ProfileMetrics::PROFILE_AVATAR_MENU_NOT_YOU_ADD_PERSON); 1046 ProfileMetrics::PROFILE_AVATAR_MENU_NOT_YOU_ADD_PERSON);
963 UserManager::Show(base::FilePath(), 1047 UserManager::Show(base::FilePath(),
964 profiles::USER_MANAGER_NO_TUTORIAL, 1048 profiles::USER_MANAGER_NO_TUTORIAL,
965 profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION); 1049 profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION);
966 } else if (sender == disconnect_button_) { 1050 } else if (sender == disconnect_button_) {
967 ProfileMetrics::LogProfileNewAvatarMenuNotYou( 1051 ProfileMetrics::LogProfileNewAvatarMenuNotYou(
968 ProfileMetrics::PROFILE_AVATAR_MENU_NOT_YOU_DISCONNECT); 1052 ProfileMetrics::PROFILE_AVATAR_MENU_NOT_YOU_DISCONNECT);
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
1085 Indexes other_profiles; 1169 Indexes other_profiles;
1086 views::View* tutorial_view = NULL; 1170 views::View* tutorial_view = NULL;
1087 views::View* current_profile_view = NULL; 1171 views::View* current_profile_view = NULL;
1088 views::View* current_profile_accounts = NULL; 1172 views::View* current_profile_accounts = NULL;
1089 views::View* option_buttons_view = NULL; 1173 views::View* option_buttons_view = NULL;
1090 for (size_t i = 0; i < avatar_menu->GetNumberOfItems(); ++i) { 1174 for (size_t i = 0; i < avatar_menu->GetNumberOfItems(); ++i) {
1091 const AvatarMenu::Item& item = avatar_menu->GetItemAt(i); 1175 const AvatarMenu::Item& item = avatar_menu->GetItemAt(i);
1092 if (item.active) { 1176 if (item.active) {
1093 option_buttons_view = CreateOptionsView( 1177 option_buttons_view = CreateOptionsView(
1094 item.signed_in && profiles::IsLockAvailable(browser_->profile())); 1178 item.signed_in && profiles::IsLockAvailable(browser_->profile()));
1095 current_profile_view = CreateCurrentProfileView(item, false); 1179 current_profile_view =
1180 switches::IsMaterialDesignUserMenu()
1181 ? CreateMaterialDesignCurrentProfileView(item, false)
1182 : CreateCurrentProfileView(item, false);
1096 if (IsProfileChooser(view_mode_)) { 1183 if (IsProfileChooser(view_mode_)) {
1097 tutorial_view = CreateTutorialViewIfNeeded(item); 1184 tutorial_view = CreateTutorialViewIfNeeded(item);
1098 } else { 1185 } else {
1099 current_profile_accounts = CreateCurrentProfileAccountsView(item); 1186 current_profile_accounts = CreateCurrentProfileAccountsView(item);
1100 } 1187 }
1101 } else { 1188 } else {
1102 other_profiles.push_back(i); 1189 other_profiles.push_back(i);
1103 } 1190 }
1104 } 1191 }
1105 1192
(...skipping 16 matching lines...) Expand all
1122 1209
1123 if (!IsProfileChooser(view_mode_)) { 1210 if (!IsProfileChooser(view_mode_)) {
1124 DCHECK(current_profile_accounts); 1211 DCHECK(current_profile_accounts);
1125 layout->StartRow(0, 0); 1212 layout->StartRow(0, 0);
1126 layout->AddView(new views::Separator(views::Separator::HORIZONTAL)); 1213 layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
1127 layout->StartRow(1, 0); 1214 layout->StartRow(1, 0);
1128 layout->AddView(current_profile_accounts); 1215 layout->AddView(current_profile_accounts);
1129 } 1216 }
1130 1217
1131 if (browser_->profile()->IsSupervised()) { 1218 if (browser_->profile()->IsSupervised()) {
1132 layout->StartRow(0, 0); 1219 if (!switches::IsMaterialDesignUserMenu()) {
1133 layout->AddView(new views::Separator(views::Separator::HORIZONTAL)); 1220 layout->StartRow(0, 0);
1221 layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
1222 }
1134 layout->StartRow(1, 0); 1223 layout->StartRow(1, 0);
1135 layout->AddView(CreateSupervisedUserDisclaimerView()); 1224 layout->AddView(CreateSupervisedUserDisclaimerView());
1136 } 1225 }
1137 1226
1138 layout->StartRow(0, 0); 1227 layout->StartRow(0, 0);
1139 layout->AddView(new views::Separator(views::Separator::HORIZONTAL)); 1228 layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
1140 1229
1141 if (option_buttons_view) { 1230 if (option_buttons_view) {
1142 layout->StartRow(0, 0); 1231 layout->StartRow(0, 0);
1143 layout->AddView(option_buttons_view); 1232 layout->AddView(option_buttons_view);
(...skipping 11 matching lines...) Expand all
1155 } 1244 }
1156 } 1245 }
1157 1246
1158 layout->StartRow(1, 0); 1247 layout->StartRow(1, 0);
1159 layout->AddView(CreateOtherProfilesView(other_profiles)); 1248 layout->AddView(CreateOtherProfilesView(other_profiles));
1160 } 1249 }
1161 1250
1162 views::View* ProfileChooserView::CreateProfileChooserView( 1251 views::View* ProfileChooserView::CreateProfileChooserView(
1163 AvatarMenu* avatar_menu) { 1252 AvatarMenu* avatar_menu) {
1164 views::View* view = new views::View(); 1253 views::View* view = new views::View();
1165 views::GridLayout* layout = CreateSingleColumnLayout(view, kFixedMenuWidth); 1254 views::GridLayout* layout =
1255 CreateSingleColumnLayout(view, GetFixedMenuWidth());
1166 1256
1167 if (view_mode_ == profiles::BUBBLE_VIEW_MODE_FAST_PROFILE_CHOOSER) { 1257 if (view_mode_ == profiles::BUBBLE_VIEW_MODE_FAST_PROFILE_CHOOSER) {
1168 PopulateMinimalProfileChooserView(layout, avatar_menu); 1258 PopulateMinimalProfileChooserView(layout, avatar_menu);
1169 // The user is using right-click switching, no need to tell them about it. 1259 // The user is using right-click switching, no need to tell them about it.
1170 PrefService* local_state = g_browser_process->local_state(); 1260 PrefService* local_state = g_browser_process->local_state();
1171 local_state->SetBoolean( 1261 local_state->SetBoolean(
1172 prefs::kProfileAvatarRightClickTutorialDismissed, true); 1262 prefs::kProfileAvatarRightClickTutorialDismissed, true);
1173 } else { 1263 } else {
1174 PopulateCompleteProfileChooserView(layout, avatar_menu); 1264 PopulateCompleteProfileChooserView(layout, avatar_menu);
1175 } 1265 }
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1230 const base::string16& button_text, 1320 const base::string16& button_text,
1231 bool stack_button, 1321 bool stack_button,
1232 views::Link** link, 1322 views::Link** link,
1233 views::LabelButton** button, 1323 views::LabelButton** button,
1234 views::ImageButton** close_button) { 1324 views::ImageButton** close_button) {
1235 tutorial_mode_ = tutorial_mode; 1325 tutorial_mode_ = tutorial_mode;
1236 1326
1237 views::View* view = new views::View(); 1327 views::View* view = new views::View();
1238 view->set_background(views::Background::CreateSolidBackground( 1328 view->set_background(views::Background::CreateSolidBackground(
1239 profiles::kAvatarTutorialBackgroundColor)); 1329 profiles::kAvatarTutorialBackgroundColor));
1240 views::GridLayout* layout = CreateSingleColumnLayout(view, 1330 views::GridLayout* layout = CreateSingleColumnLayout(
1241 kFixedMenuWidth - 2 * views::kButtonHEdgeMarginNew); 1331 view, GetFixedMenuWidth() - 2 * views::kButtonHEdgeMarginNew);
1242 // Creates a second column set for buttons and links. 1332 // Creates a second column set for buttons and links.
1243 views::ColumnSet* button_columns = layout->AddColumnSet(1); 1333 views::ColumnSet* button_columns = layout->AddColumnSet(1);
1244 button_columns->AddColumn(views::GridLayout::LEADING, 1334 button_columns->AddColumn(views::GridLayout::LEADING,
1245 views::GridLayout::CENTER, 0, views::GridLayout::USE_PREF, 0, 0); 1335 views::GridLayout::CENTER, 0, views::GridLayout::USE_PREF, 0, 0);
1246 button_columns->AddPaddingColumn( 1336 button_columns->AddPaddingColumn(
1247 1, views::kUnrelatedControlHorizontalSpacing); 1337 1, views::kUnrelatedControlHorizontalSpacing);
1248 button_columns->AddColumn(views::GridLayout::TRAILING, 1338 button_columns->AddColumn(views::GridLayout::TRAILING,
1249 views::GridLayout::CENTER, 0, views::GridLayout::USE_PREF, 0, 0); 1339 views::GridLayout::CENTER, 0, views::GridLayout::USE_PREF, 0, 0);
1250 layout->SetInsets(views::kButtonVEdgeMarginNew, 1340 layout->SetInsets(views::kButtonVEdgeMarginNew,
1251 views::kButtonHEdgeMarginNew, 1341 views::kButtonHEdgeMarginNew,
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
1333 layout->SkipColumns(1); 1423 layout->SkipColumns(1);
1334 } 1424 }
1335 1425
1336 return view; 1426 return view;
1337 } 1427 }
1338 1428
1339 views::View* ProfileChooserView::CreateCurrentProfileView( 1429 views::View* ProfileChooserView::CreateCurrentProfileView(
1340 const AvatarMenu::Item& avatar_item, 1430 const AvatarMenu::Item& avatar_item,
1341 bool is_guest) { 1431 bool is_guest) {
1342 views::View* view = new views::View(); 1432 views::View* view = new views::View();
1343 int column_width = kFixedMenuWidth - 2 * views::kButtonHEdgeMarginNew; 1433 int column_width = GetFixedMenuWidth() - 2 * views::kButtonHEdgeMarginNew;
1344 views::GridLayout* layout = CreateSingleColumnLayout(view, column_width); 1434 views::GridLayout* layout = CreateSingleColumnLayout(view, column_width);
1345 layout->SetInsets(views::kButtonVEdgeMarginNew, 1435 layout->SetInsets(views::kButtonVEdgeMarginNew,
1346 views::kButtonHEdgeMarginNew, 1436 views::kButtonHEdgeMarginNew,
1347 views::kUnrelatedControlVerticalSpacing, 1437 views::kUnrelatedControlVerticalSpacing,
1348 views::kButtonHEdgeMarginNew); 1438 views::kButtonHEdgeMarginNew);
1349 1439
1350 // Profile icon, centered. 1440 // Profile icon, centered.
1351 int x_offset = (column_width - kLargeImageSide) / 2; 1441 int x_offset = (column_width - kLargeImageSide) / 2;
1352 current_profile_photo_ = new EditableProfilePhoto( 1442 current_profile_photo_ = new EditableProfilePhoto(
1353 this, avatar_item.icon, !is_guest, 1443 this, avatar_item.icon, !is_guest, browser_->profile());
1354 gfx::Rect(x_offset, 0, kLargeImageSide, kLargeImageSide)); 1444 current_profile_photo_->SetX(x_offset);
1355 SizedContainer* profile_icon_container = 1445 SizedContainer* profile_icon_container =
1356 new SizedContainer(gfx::Size(column_width, kLargeImageSide)); 1446 new SizedContainer(gfx::Size(column_width, kLargeImageSide));
1357 profile_icon_container->AddChildView(current_profile_photo_); 1447 profile_icon_container->AddChildView(current_profile_photo_);
1358 1448
1359 if (browser_->profile()->IsSupervised()) { 1449 if (browser_->profile()->IsSupervised()) {
1360 views::ImageView* supervised_icon = new views::ImageView(); 1450 views::ImageView* supervised_icon = new views::ImageView();
1361 supervised_icon->SetImage(CreateBadgeForProfile(browser_->profile())); 1451 supervised_icon->SetImage(CreateBadgeForProfile(browser_->profile()));
1362 gfx::Size preferred_size = supervised_icon->GetPreferredSize(); 1452 gfx::Size preferred_size = supervised_icon->GetPreferredSize();
1363 gfx::Rect parent_bounds = current_profile_photo_->bounds(); 1453 gfx::Rect parent_bounds = current_profile_photo_->bounds();
1364 supervised_icon->SetBounds( 1454 supervised_icon->SetBounds(
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
1431 if (signin_manager->IsSigninAllowed()) { 1521 if (signin_manager->IsSigninAllowed()) {
1432 views::Label* promo = new views::Label( 1522 views::Label* promo = new views::Label(
1433 l10n_util::GetStringUTF16(IDS_PROFILES_SIGNIN_PROMO)); 1523 l10n_util::GetStringUTF16(IDS_PROFILES_SIGNIN_PROMO));
1434 promo->SetMultiLine(true); 1524 promo->SetMultiLine(true);
1435 promo->SetHorizontalAlignment(gfx::ALIGN_LEFT); 1525 promo->SetHorizontalAlignment(gfx::ALIGN_LEFT);
1436 layout->StartRowWithPadding(1, 0, 0, 1526 layout->StartRowWithPadding(1, 0, 0,
1437 views::kRelatedControlSmallVerticalSpacing); 1527 views::kRelatedControlSmallVerticalSpacing);
1438 layout->StartRow(1, 0); 1528 layout->StartRow(1, 0);
1439 layout->AddView(promo); 1529 layout->AddView(promo);
1440 1530
1441 signin_current_profile_link_ = new views::BlueButton( 1531 signin_current_profile_button_ = new views::BlueButton(
1442 this, l10n_util::GetStringFUTF16(IDS_SYNC_START_SYNC_BUTTON_LABEL, 1532 this, l10n_util::GetStringFUTF16(
1443 l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME))); 1533 IDS_SYNC_START_SYNC_BUTTON_LABEL,
1534 l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME)));
1444 layout->StartRowWithPadding(1, 0, 0, 1535 layout->StartRowWithPadding(1, 0, 0,
1445 views::kRelatedControlVerticalSpacing); 1536 views::kRelatedControlVerticalSpacing);
1446 layout->StartRow(1, 0); 1537 layout->StartRow(1, 0);
1447 layout->AddView(signin_current_profile_link_); 1538 layout->AddView(signin_current_profile_button_);
1448 content::RecordAction( 1539 content::RecordAction(
1449 base::UserMetricsAction("Signin_Impression_FromAvatarBubbleSignin")); 1540 base::UserMetricsAction("Signin_Impression_FromAvatarBubbleSignin"));
1450 } 1541 }
1451 } 1542 }
1452 1543
1453 return view; 1544 return view;
1454 } 1545 }
1455 1546
1547 views::View* ProfileChooserView::CreateMaterialDesignCurrentProfileView(
1548 const AvatarMenu::Item& avatar_item,
1549 bool is_guest) {
1550 views::View* view = new views::View();
1551 view->SetLayoutManager(
1552 new views::BoxLayout(views::BoxLayout::kVertical, kMaterialMenuEdgeMargin,
1553 views::kRelatedControlVerticalSpacing,
1554 views::kRelatedControlVerticalSpacing));
1555
1556 // Profile container for the profile photo and avatar/user name.
1557 views::View* profile_container = new views::View();
1558
1559 // Profile picture, left-aligned.
1560 current_profile_photo_ = new EditableProfilePhoto(
1561 this, avatar_item.icon, !is_guest, browser_->profile());
1562
1563 // Profile name, left-aligned to the right of profile icon.
1564 bool editing_allowed =
1565 !is_guest && !browser_->profile()->IsLegacySupervised();
1566 current_profile_name_ = new EditableProfileName(
1567 this, profiles::GetAvatarNameForProfile(browser_->profile()->GetPath()),
1568 editing_allowed);
1569 views::View* profile_name_container = new views::View();
1570 int name_container_v_spacing = views::kRelatedControlSmallVerticalSpacing;
1571 if (!avatar_item.signed_in)
1572 name_container_v_spacing += views::kRelatedControlVerticalSpacing;
1573 profile_name_container->SetLayoutManager(new views::BoxLayout(
1574 views::BoxLayout::kVertical, 0, name_container_v_spacing, 0));
1575 profile_name_container->AddChildView(current_profile_name_);
1576
1577 const int between_child_spacing =
1578 kMaterialMenuEdgeMargin - current_profile_photo_->badge_spacing;
1579 profile_container->SetLayoutManager(new views::BoxLayout(
1580 views::BoxLayout::kHorizontal, 0,
1581 views::kRelatedControlSmallVerticalSpacing, between_child_spacing));
1582 profile_container->AddChildView(current_profile_photo_);
1583 profile_container->AddChildView(profile_name_container);
1584 view->AddChildView(profile_container);
1585
1586 if (is_guest)
1587 return view;
1588
1589 // The available links depend on the type of profile that is active.
1590 if (avatar_item.signed_in) {
1591 if (switches::IsEnableAccountConsistency()) {
1592 base::string16 link_title = l10n_util::GetStringUTF16(
1593 IsProfileChooser(view_mode_)
1594 ? IDS_PROFILES_PROFILE_MANAGE_ACCOUNTS_BUTTON
1595 : IDS_PROFILES_PROFILE_HIDE_MANAGE_ACCOUNTS_BUTTON);
1596 manage_accounts_link_ = CreateLink(link_title, this);
1597 manage_accounts_link_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
1598 profile_name_container->AddChildView(manage_accounts_link_);
1599 } else {
1600 views::Label* email_label = new views::Label(avatar_item.username);
1601 email_label->SetElideBehavior(gfx::ELIDE_EMAIL);
1602 email_label->SetEnabled(false);
1603 email_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
1604 profile_name_container->AddChildView(email_label);
1605 }
1606 return view;
1607 }
1608
1609 SigninManagerBase* signin_manager = SigninManagerFactory::GetForProfile(
1610 browser_->profile()->GetOriginalProfile());
1611 if (signin_manager->IsSigninAllowed()) {
1612 views::Label* promo =
1613 new views::Label(l10n_util::GetStringUTF16(IDS_PROFILES_SIGNIN_PROMO));
1614 promo->SetMultiLine(true);
1615 promo->SetHorizontalAlignment(gfx::ALIGN_LEFT);
1616 view->AddChildView(promo);
1617
1618 signin_current_profile_button_ =
1619 views::MdTextButton::CreateSecondaryUiBlueButton(
1620 this, l10n_util::GetStringFUTF16(
1621 IDS_SYNC_START_SYNC_BUTTON_LABEL,
1622 l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME)));
1623 view->AddChildView(signin_current_profile_button_);
1624 content::RecordAction(
1625 base::UserMetricsAction("Signin_Impression_FromAvatarBubbleSignin"));
1626 view->SetBorder(views::Border::CreateEmptyBorder(
1627 0, 0, views::kRelatedControlVerticalSpacing, 0));
1628 }
1629
1630 return view;
1631 }
1632
1456 views::View* ProfileChooserView::CreateGuestProfileView() { 1633 views::View* ProfileChooserView::CreateGuestProfileView() {
1457 gfx::Image guest_icon = 1634 gfx::Image guest_icon =
1458 ui::ResourceBundle::GetSharedInstance().GetImageNamed( 1635 ui::ResourceBundle::GetSharedInstance().GetImageNamed(
1459 profiles::GetPlaceholderAvatarIconResourceID()); 1636 profiles::GetPlaceholderAvatarIconResourceID());
1460 AvatarMenu::Item guest_avatar_item(0, base::FilePath(), guest_icon); 1637 AvatarMenu::Item guest_avatar_item(0, base::FilePath(), guest_icon);
1461 guest_avatar_item.active = true; 1638 guest_avatar_item.active = true;
1462 guest_avatar_item.name = l10n_util::GetStringUTF16( 1639 guest_avatar_item.name = l10n_util::GetStringUTF16(
1463 IDS_PROFILES_GUEST_PROFILE_NAME); 1640 IDS_PROFILES_GUEST_PROFILE_NAME);
1464 guest_avatar_item.signed_in = false; 1641 guest_avatar_item.signed_in = false;
1465 1642
1466 return CreateCurrentProfileView(guest_avatar_item, true); 1643 return switches::IsMaterialDesignUserMenu()
1644 ? CreateMaterialDesignCurrentProfileView(guest_avatar_item, true)
1645 : CreateCurrentProfileView(guest_avatar_item, true);
1467 } 1646 }
1468 1647
1469 views::View* ProfileChooserView::CreateOtherProfilesView( 1648 views::View* ProfileChooserView::CreateOtherProfilesView(
1470 const Indexes& avatars_to_show) { 1649 const Indexes& avatars_to_show) {
1471 views::View* view = new views::View(); 1650 views::View* view = new views::View();
1472 views::GridLayout* layout = CreateSingleColumnLayout(view, kFixedMenuWidth); 1651 views::GridLayout* layout =
1652 CreateSingleColumnLayout(view, GetFixedMenuWidth());
1473 1653
1474 for (size_t index : avatars_to_show) { 1654 for (size_t index : avatars_to_show) {
1475 const AvatarMenu::Item& item = avatar_menu_->GetItemAt(index); 1655 const AvatarMenu::Item& item = avatar_menu_->GetItemAt(index);
1476 const int kSmallImageSide = 32; 1656 const int kSmallImageSide = 32;
1477 1657
1478 // Use the low-res, small default avatars in the fast user switcher, like 1658 // Use the low-res, small default avatars in the fast user switcher, like
1479 // we do in the menu bar. 1659 // we do in the menu bar.
1480 gfx::Image item_icon; 1660 gfx::Image item_icon;
1481 AvatarMenu::GetImageForMenuButton(item.profile_path, &item_icon); 1661 AvatarMenu::GetImageForMenuButton(item.profile_path, &item_icon);
1482 1662
(...skipping 10 matching lines...) Expand all
1493 layout->AddView(new views::Separator(views::Separator::HORIZONTAL)); 1673 layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
1494 layout->StartRow(1, 0); 1674 layout->StartRow(1, 0);
1495 layout->AddView(button); 1675 layout->AddView(button);
1496 } 1676 }
1497 1677
1498 return view; 1678 return view;
1499 } 1679 }
1500 1680
1501 views::View* ProfileChooserView::CreateOptionsView(bool display_lock) { 1681 views::View* ProfileChooserView::CreateOptionsView(bool display_lock) {
1502 views::View* view = new views::View(); 1682 views::View* view = new views::View();
1503 views::GridLayout* layout = CreateSingleColumnLayout(view, kFixedMenuWidth); 1683 views::GridLayout* layout =
1684 CreateSingleColumnLayout(view, GetFixedMenuWidth());
1504 1685
1505 base::string16 text = browser_->profile()->IsGuestSession() ? 1686 base::string16 text = browser_->profile()->IsGuestSession() ?
1506 l10n_util::GetStringUTF16(IDS_PROFILES_EXIT_GUEST) : 1687 l10n_util::GetStringUTF16(IDS_PROFILES_EXIT_GUEST) :
1507 l10n_util::GetStringUTF16(IDS_PROFILES_SWITCH_USERS_BUTTON); 1688 l10n_util::GetStringUTF16(IDS_PROFILES_SWITCH_USERS_BUTTON);
1508 if (!browser_->profile()->IsGuestSession() 1689 if (!browser_->profile()->IsGuestSession()
1509 && switches::IsMaterialDesignUserMenu()) { 1690 && switches::IsMaterialDesignUserMenu()) {
1510 text = l10n_util::GetStringUTF16(IDS_PROFILES_MANAGE_USERS_BUTTON); 1691 text = l10n_util::GetStringUTF16(IDS_PROFILES_MANAGE_USERS_BUTTON);
1511 } 1692 }
1512 const int kIconSize = 16; 1693 const int kIconSize = 16;
1513 1694
(...skipping 29 matching lines...) Expand all
1543 gfx::kChromeIconGrey)); 1724 gfx::kChromeIconGrey));
1544 layout->StartRow(1, 0); 1725 layout->StartRow(1, 0);
1545 layout->AddView(lock_button_); 1726 layout->AddView(lock_button_);
1546 } 1727 }
1547 return view; 1728 return view;
1548 } 1729 }
1549 1730
1550 views::View* ProfileChooserView::CreateSupervisedUserDisclaimerView() { 1731 views::View* ProfileChooserView::CreateSupervisedUserDisclaimerView() {
1551 views::View* view = new views::View(); 1732 views::View* view = new views::View();
1552 views::GridLayout* layout = CreateSingleColumnLayout( 1733 views::GridLayout* layout = CreateSingleColumnLayout(
1553 view, kFixedMenuWidth - 2 * views::kButtonHEdgeMarginNew); 1734 view, GetFixedMenuWidth() - 2 * views::kButtonHEdgeMarginNew);
1554 layout->SetInsets(views::kRelatedControlVerticalSpacing, 1735 if (switches::IsMaterialDesignUserMenu()) {
1555 views::kButtonHEdgeMarginNew, 1736 layout->SetInsets(0, kMaterialMenuEdgeMargin, kMaterialMenuEdgeMargin,
1556 views::kRelatedControlVerticalSpacing, 1737 kMaterialMenuEdgeMargin);
1557 views::kButtonHEdgeMarginNew); 1738 } else {
1739 layout->SetInsets(
1740 views::kRelatedControlVerticalSpacing, views::kButtonHEdgeMarginNew,
1741 views::kRelatedControlVerticalSpacing, views::kButtonHEdgeMarginNew);
1742 }
1743
1558 views::Label* disclaimer = new views::Label( 1744 views::Label* disclaimer = new views::Label(
1559 avatar_menu_->GetSupervisedUserInformation()); 1745 avatar_menu_->GetSupervisedUserInformation());
1560 disclaimer->SetMultiLine(true); 1746 disclaimer->SetMultiLine(true);
1561 disclaimer->SetAllowCharacterBreak(true); 1747 disclaimer->SetAllowCharacterBreak(true);
1562 disclaimer->SetHorizontalAlignment(gfx::ALIGN_LEFT); 1748 disclaimer->SetHorizontalAlignment(gfx::ALIGN_LEFT);
1563 ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); 1749 ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
1564 disclaimer->SetFontList(rb->GetFontList(ui::ResourceBundle::SmallFont)); 1750 disclaimer->SetFontList(rb->GetFontList(ui::ResourceBundle::SmallFont));
1565 layout->StartRow(1, 0); 1751 layout->StartRow(1, 0);
1566 layout->AddView(disclaimer); 1752 layout->AddView(disclaimer);
1567 1753
1568 return view; 1754 return view;
1569 } 1755 }
1570 1756
1571 views::View* ProfileChooserView::CreateCurrentProfileAccountsView( 1757 views::View* ProfileChooserView::CreateCurrentProfileAccountsView(
1572 const AvatarMenu::Item& avatar_item) { 1758 const AvatarMenu::Item& avatar_item) {
1573 DCHECK(avatar_item.signed_in); 1759 DCHECK(avatar_item.signed_in);
1574 views::View* view = new views::View(); 1760 views::View* view = new views::View();
1575 view->set_background(views::Background::CreateSolidBackground( 1761 view->set_background(views::Background::CreateSolidBackground(
1576 profiles::kAvatarBubbleAccountsBackgroundColor)); 1762 profiles::kAvatarBubbleAccountsBackgroundColor));
1577 views::GridLayout* layout = CreateSingleColumnLayout(view, kFixedMenuWidth); 1763 views::GridLayout* layout =
1764 CreateSingleColumnLayout(view, GetFixedMenuWidth());
1578 1765
1579 Profile* profile = browser_->profile(); 1766 Profile* profile = browser_->profile();
1580 std::string primary_account = 1767 std::string primary_account =
1581 SigninManagerFactory::GetForProfile(profile)->GetAuthenticatedAccountId(); 1768 SigninManagerFactory::GetForProfile(profile)->GetAuthenticatedAccountId();
1582 DCHECK(!primary_account.empty()); 1769 DCHECK(!primary_account.empty());
1583 std::vector<std::string>accounts = 1770 std::vector<std::string>accounts =
1584 profiles::GetSecondaryAccountsForProfile(profile, primary_account); 1771 profiles::GetSecondaryAccountsForProfile(profile, primary_account);
1585 1772
1586 // Get state of authentication error, if any. 1773 // Get state of authentication error, if any.
1587 std::string error_account_id = GetAuthErrorAccountId(profile); 1774 std::string error_account_id = GetAuthErrorAccountId(profile);
1588 1775
1589 // The primary account should always be listed first. 1776 // The primary account should always be listed first.
1590 // TODO(rogerta): we still need to further differentiate the primary account 1777 // TODO(rogerta): we still need to further differentiate the primary account
1591 // from the others in the UI, so more work is likely required here: 1778 // from the others in the UI, so more work is likely required here:
1592 // crbug.com/311124. 1779 // crbug.com/311124.
1593 CreateAccountButton(layout, primary_account, true, 1780 CreateAccountButton(layout, primary_account, true,
1594 error_account_id == primary_account, kFixedMenuWidth); 1781 error_account_id == primary_account, GetFixedMenuWidth());
1595 for (size_t i = 0; i < accounts.size(); ++i) 1782 for (size_t i = 0; i < accounts.size(); ++i)
1596 CreateAccountButton(layout, accounts[i], false, 1783 CreateAccountButton(layout, accounts[i], false,
1597 error_account_id == accounts[i], kFixedMenuWidth); 1784 error_account_id == accounts[i], GetFixedMenuWidth());
1598 1785
1599 if (!profile->IsSupervised()) { 1786 if (!profile->IsSupervised()) {
1600 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 1787 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
1601 1788
1602 add_account_link_ = CreateLink(l10n_util::GetStringFUTF16( 1789 add_account_link_ = CreateLink(l10n_util::GetStringFUTF16(
1603 IDS_PROFILES_PROFILE_ADD_ACCOUNT_BUTTON, avatar_item.name), this); 1790 IDS_PROFILES_PROFILE_ADD_ACCOUNT_BUTTON, avatar_item.name), this);
1604 add_account_link_->SetBorder(views::Border::CreateEmptyBorder( 1791 add_account_link_->SetBorder(views::Border::CreateEmptyBorder(
1605 0, views::kButtonVEdgeMarginNew, 1792 0, views::kButtonVEdgeMarginNew,
1606 views::kRelatedControlVerticalSpacing, 0)); 1793 views::kRelatedControlVerticalSpacing, 0));
1607 layout->StartRow(1, 0); 1794 layout->StartRow(1, 0);
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
1897 IncognitoModePrefs::GetAvailability(browser_->profile()->GetPrefs()) != 2084 IncognitoModePrefs::GetAvailability(browser_->profile()->GetPrefs()) !=
1898 IncognitoModePrefs::DISABLED; 2085 IncognitoModePrefs::DISABLED;
1899 return incognito_available && !browser_->profile()->IsGuestSession(); 2086 return incognito_available && !browser_->profile()->IsGuestSession();
1900 } 2087 }
1901 2088
1902 void ProfileChooserView::PostActionPerformed( 2089 void ProfileChooserView::PostActionPerformed(
1903 ProfileMetrics::ProfileDesktopMenu action_performed) { 2090 ProfileMetrics::ProfileDesktopMenu action_performed) {
1904 ProfileMetrics::LogProfileDesktopMenu(action_performed, gaia_service_type_); 2091 ProfileMetrics::LogProfileDesktopMenu(action_performed, gaia_service_type_);
1905 gaia_service_type_ = signin::GAIA_SERVICE_TYPE_NONE; 2092 gaia_service_type_ = signin::GAIA_SERVICE_TYPE_NONE;
1906 } 2093 }
OLDNEW
« 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