| OLD | NEW |
| 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/prefs/pref_service.h" | 7 #include "base/prefs/pref_service.h" |
| 8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
| 9 #include "chrome/browser/browser_process.h" | 9 #include "chrome/browser/browser_process.h" |
| 10 #include "chrome/browser/lifetime/application_lifetime.h" | 10 #include "chrome/browser/lifetime/application_lifetime.h" |
| 11 #include "chrome/browser/profiles/profile_avatar_icon_util.h" | 11 #include "chrome/browser/profiles/profile_avatar_icon_util.h" |
| 12 #include "chrome/browser/profiles/profile_info_cache.h" | 12 #include "chrome/browser/profiles/profile_info_cache.h" |
| 13 #include "chrome/browser/profiles/profile_manager.h" | 13 #include "chrome/browser/profiles/profile_manager.h" |
| 14 #include "chrome/browser/profiles/profile_window.h" | 14 #include "chrome/browser/profiles/profile_window.h" |
| 15 #include "chrome/browser/profiles/profiles_state.h" | 15 #include "chrome/browser/profiles/profiles_state.h" |
| 16 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" | 16 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" |
| 17 #include "chrome/browser/signin/signin_manager_factory.h" | 17 #include "chrome/browser/signin/signin_manager_factory.h" |
| 18 #include "chrome/browser/signin/signin_promo.h" | 18 #include "chrome/browser/signin/signin_promo.h" |
| 19 #include "chrome/browser/ui/browser.h" | 19 #include "chrome/browser/ui/browser.h" |
| 20 #include "chrome/browser/ui/browser_commands.h" |
| 20 #include "chrome/browser/ui/browser_dialogs.h" | 21 #include "chrome/browser/ui/browser_dialogs.h" |
| 21 #include "chrome/browser/ui/chrome_pages.h" | 22 #include "chrome/browser/ui/chrome_pages.h" |
| 22 #include "chrome/browser/ui/singleton_tabs.h" | 23 #include "chrome/browser/ui/singleton_tabs.h" |
| 23 #include "chrome/browser/ui/views/profiles/user_manager_view.h" | 24 #include "chrome/browser/ui/views/profiles/user_manager_view.h" |
| 24 #include "chrome/common/pref_names.h" | 25 #include "chrome/common/pref_names.h" |
| 25 #include "chrome/common/url_constants.h" | 26 #include "chrome/common/url_constants.h" |
| 26 #include "components/signin/core/browser/mutable_profile_oauth2_token_service.h" | 27 #include "components/signin/core/browser/mutable_profile_oauth2_token_service.h" |
| 27 #include "components/signin/core/browser/profile_oauth2_token_service.h" | 28 #include "components/signin/core/browser/profile_oauth2_token_service.h" |
| 28 #include "components/signin/core/browser/signin_manager.h" | 29 #include "components/signin/core/browser/signin_manager.h" |
| 29 #include "components/signin/core/common/profile_management_switches.h" | 30 #include "components/signin/core/common/profile_management_switches.h" |
| (...skipping 25 matching lines...) Expand all Loading... |
| 55 namespace { | 56 namespace { |
| 56 | 57 |
| 57 // Helpers -------------------------------------------------------------------- | 58 // Helpers -------------------------------------------------------------------- |
| 58 | 59 |
| 59 const int kFixedMenuWidth = 250; | 60 const int kFixedMenuWidth = 250; |
| 60 const int kButtonHeight = 29; | 61 const int kButtonHeight = 29; |
| 61 const int kProfileAvatarTutorialShowMax = 5; | 62 const int kProfileAvatarTutorialShowMax = 5; |
| 62 const int kFixedGaiaViewHeight = 400; | 63 const int kFixedGaiaViewHeight = 400; |
| 63 const int kFixedGaiaViewWidth = 360; | 64 const int kFixedGaiaViewWidth = 360; |
| 64 const int kFixedAccountRemovalViewWidth = 280; | 65 const int kFixedAccountRemovalViewWidth = 280; |
| 66 const int kFixedEndPreviewViewWidth = 280; |
| 65 const int kLargeImageSide = 88; | 67 const int kLargeImageSide = 88; |
| 66 | 68 |
| 67 // Creates a GridLayout with a single column. This ensures that all the child | 69 // Creates a GridLayout with a single column. This ensures that all the child |
| 68 // views added get auto-expanded to fill the full width of the bubble. | 70 // views added get auto-expanded to fill the full width of the bubble. |
| 69 views::GridLayout* CreateSingleColumnLayout(views::View* view, int width) { | 71 views::GridLayout* CreateSingleColumnLayout(views::View* view, int width) { |
| 70 views::GridLayout* layout = new views::GridLayout(view); | 72 views::GridLayout* layout = new views::GridLayout(view); |
| 71 view->SetLayoutManager(layout); | 73 view->SetLayoutManager(layout); |
| 72 | 74 |
| 73 views::ColumnSet* columns = layout->AddColumnSet(0); | 75 views::ColumnSet* columns = layout->AddColumnSet(0); |
| 74 columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0, | 76 columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0, |
| (...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 380 } | 382 } |
| 381 | 383 |
| 382 ProfileChooserView::ProfileChooserView(views::View* anchor_view, | 384 ProfileChooserView::ProfileChooserView(views::View* anchor_view, |
| 383 views::BubbleBorder::Arrow arrow, | 385 views::BubbleBorder::Arrow arrow, |
| 384 const gfx::Rect& anchor_rect, | 386 const gfx::Rect& anchor_rect, |
| 385 Browser* browser, | 387 Browser* browser, |
| 386 BubbleViewMode view_mode) | 388 BubbleViewMode view_mode) |
| 387 : BubbleDelegateView(anchor_view, arrow), | 389 : BubbleDelegateView(anchor_view, arrow), |
| 388 browser_(browser), | 390 browser_(browser), |
| 389 view_mode_(view_mode), | 391 view_mode_(view_mode), |
| 390 tutorial_showing_(false) { | 392 tutorial_mode_(TUTORIAL_MODE_NONE) { |
| 391 // Reset the default margins inherited from the BubbleDelegateView. | 393 // Reset the default margins inherited from the BubbleDelegateView. |
| 392 set_margins(gfx::Insets()); | 394 set_margins(gfx::Insets()); |
| 393 | 395 |
| 394 ResetView(); | 396 ResetView(); |
| 395 | 397 |
| 396 set_background(views::Background::CreateSolidBackground( | 398 set_background(views::Background::CreateSolidBackground( |
| 397 GetNativeTheme()->GetSystemColor( | 399 GetNativeTheme()->GetSystemColor( |
| 398 ui::NativeTheme::kColorId_DialogBackground))); | 400 ui::NativeTheme::kColorId_DialogBackground))); |
| 399 | 401 |
| 400 avatar_menu_.reset(new AvatarMenu( | 402 avatar_menu_.reset(new AvatarMenu( |
| 401 &g_browser_process->profile_manager()->GetProfileInfoCache(), | 403 &g_browser_process->profile_manager()->GetProfileInfoCache(), |
| 402 this, | 404 this, |
| 403 browser_)); | 405 browser_)); |
| 404 avatar_menu_->RebuildMenu(); | 406 avatar_menu_->RebuildMenu(); |
| 405 | 407 |
| 406 ProfileOAuth2TokenService* oauth2_token_service = | 408 ProfileOAuth2TokenService* oauth2_token_service = |
| 407 ProfileOAuth2TokenServiceFactory::GetForProfile(browser_->profile()); | 409 ProfileOAuth2TokenServiceFactory::GetForProfile(browser_->profile()); |
| 408 if (oauth2_token_service) | 410 if (oauth2_token_service) |
| 409 oauth2_token_service->AddObserver(this); | 411 oauth2_token_service->AddObserver(this); |
| 410 } | 412 } |
| 411 | 413 |
| 412 ProfileChooserView::~ProfileChooserView() { | 414 ProfileChooserView::~ProfileChooserView() { |
| 413 ProfileOAuth2TokenService* oauth2_token_service = | 415 ProfileOAuth2TokenService* oauth2_token_service = |
| 414 ProfileOAuth2TokenServiceFactory::GetForProfile(browser_->profile()); | 416 ProfileOAuth2TokenServiceFactory::GetForProfile(browser_->profile()); |
| 415 if (oauth2_token_service) | 417 if (oauth2_token_service) |
| 416 oauth2_token_service->RemoveObserver(this); | 418 oauth2_token_service->RemoveObserver(this); |
| 417 } | 419 } |
| 418 | 420 |
| 419 void ProfileChooserView::ResetView() { | 421 void ProfileChooserView::ResetView() { |
| 422 question_mark_button_ = NULL; |
| 420 manage_accounts_link_ = NULL; | 423 manage_accounts_link_ = NULL; |
| 421 signin_current_profile_link_ = NULL; | 424 signin_current_profile_link_ = NULL; |
| 422 users_button_ = NULL; | 425 users_button_ = NULL; |
| 423 lock_button_ = NULL; | 426 lock_button_ = NULL; |
| 424 add_account_link_ = NULL; | 427 add_account_link_ = NULL; |
| 425 current_profile_photo_ = NULL; | 428 current_profile_photo_ = NULL; |
| 426 current_profile_name_ = NULL; | 429 current_profile_name_ = NULL; |
| 427 tutorial_ok_button_ = NULL; | 430 tutorial_ok_button_ = NULL; |
| 428 tutorial_learn_more_link_ = NULL; | 431 tutorial_learn_more_link_ = NULL; |
| 429 tutorial_enable_new_profile_management_button_ = NULL; | 432 tutorial_enable_new_profile_management_button_ = NULL; |
| 433 tutorial_end_preview_link_ = NULL; |
| 434 tutorial_send_feedback_button_ = NULL; |
| 435 end_preview_and_relaunch_button_ = NULL; |
| 436 end_preview_cancel_button_ = NULL; |
| 437 remove_account_and_relaunch_button_ = NULL; |
| 430 account_removal_cancel_button_ = NULL; | 438 account_removal_cancel_button_ = NULL; |
| 431 gaia_signin_cancel_button_ = NULL; | 439 gaia_signin_cancel_button_ = NULL; |
| 432 open_other_profile_indexes_map_.clear(); | 440 open_other_profile_indexes_map_.clear(); |
| 433 current_profile_accounts_map_.clear(); | 441 current_profile_accounts_map_.clear(); |
| 434 tutorial_showing_ = false; | 442 tutorial_mode_ = TUTORIAL_MODE_NONE; |
| 435 } | 443 } |
| 436 | 444 |
| 437 void ProfileChooserView::Init() { | 445 void ProfileChooserView::Init() { |
| 438 ShowView(view_mode_, avatar_menu_.get()); | 446 ShowView(view_mode_, avatar_menu_.get()); |
| 439 } | 447 } |
| 440 | 448 |
| 441 void ProfileChooserView::OnAvatarMenuChanged( | 449 void ProfileChooserView::OnAvatarMenuChanged( |
| 442 AvatarMenu* avatar_menu) { | 450 AvatarMenu* avatar_menu) { |
| 443 // Refresh the view with the new menu. We can't just update the local copy | 451 // Refresh the view with the new menu. We can't just update the local copy |
| 444 // as this may have been triggered by a sign out action, in which case | 452 // as this may have been triggered by a sign out action, in which case |
| (...skipping 22 matching lines...) Expand all Loading... |
| 467 void ProfileChooserView::ShowView(BubbleViewMode view_to_display, | 475 void ProfileChooserView::ShowView(BubbleViewMode view_to_display, |
| 468 AvatarMenu* avatar_menu) { | 476 AvatarMenu* avatar_menu) { |
| 469 // The account management view should only be displayed if the active profile | 477 // The account management view should only be displayed if the active profile |
| 470 // is signed in. | 478 // is signed in. |
| 471 if (view_to_display == BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT) { | 479 if (view_to_display == BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT) { |
| 472 const AvatarMenu::Item& active_item = avatar_menu->GetItemAt( | 480 const AvatarMenu::Item& active_item = avatar_menu->GetItemAt( |
| 473 avatar_menu->GetActiveProfileIndex()); | 481 avatar_menu->GetActiveProfileIndex()); |
| 474 DCHECK(active_item.signed_in); | 482 DCHECK(active_item.signed_in); |
| 475 } | 483 } |
| 476 | 484 |
| 477 // Records if the "mirror enabled" tutorial card is currently shown before | 485 // Records the last tutorial mode. |
| 478 // resetting the view. | 486 TutorialMode last_tutorial_mode = tutorial_mode_; |
| 479 bool tutorial_shown = tutorial_showing_; | |
| 480 ResetView(); | 487 ResetView(); |
| 481 RemoveAllChildViews(true); | 488 RemoveAllChildViews(true); |
| 482 view_mode_ = view_to_display; | 489 view_mode_ = view_to_display; |
| 483 | 490 |
| 484 views::GridLayout* layout; | 491 views::GridLayout* layout; |
| 485 views::View* sub_view; | 492 views::View* sub_view; |
| 486 switch (view_mode_) { | 493 switch (view_mode_) { |
| 487 case BUBBLE_VIEW_MODE_GAIA_SIGNIN: | 494 case BUBBLE_VIEW_MODE_GAIA_SIGNIN: |
| 488 case BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT: | 495 case BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT: |
| 489 layout = CreateSingleColumnLayout(this, kFixedGaiaViewWidth); | 496 layout = CreateSingleColumnLayout(this, kFixedGaiaViewWidth); |
| 490 sub_view = CreateGaiaSigninView( | 497 sub_view = CreateGaiaSigninView( |
| 491 view_mode_ == BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT); | 498 view_mode_ == BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT); |
| 492 break; | 499 break; |
| 493 case BUBBLE_VIEW_MODE_ACCOUNT_REMOVAL: | 500 case BUBBLE_VIEW_MODE_ACCOUNT_REMOVAL: |
| 494 layout = CreateSingleColumnLayout(this, kFixedAccountRemovalViewWidth); | 501 layout = CreateSingleColumnLayout(this, kFixedAccountRemovalViewWidth); |
| 495 sub_view = CreateAccountRemovalView(); | 502 sub_view = CreateAccountRemovalView(); |
| 496 break; | 503 break; |
| 504 case BUBBLE_VIEW_MODE_END_PREVIEW: |
| 505 layout = CreateSingleColumnLayout(this, kFixedEndPreviewViewWidth); |
| 506 sub_view = CreateEndPreviewView(); |
| 507 break; |
| 497 default: | 508 default: |
| 498 layout = CreateSingleColumnLayout(this, kFixedMenuWidth); | 509 layout = CreateSingleColumnLayout(this, kFixedMenuWidth); |
| 499 sub_view = CreateProfileChooserView(avatar_menu, tutorial_shown); | 510 sub_view = CreateProfileChooserView(avatar_menu, last_tutorial_mode); |
| 500 } | 511 } |
| 501 layout->StartRow(1, 0); | 512 layout->StartRow(1, 0); |
| 502 layout->AddView(sub_view); | 513 layout->AddView(sub_view); |
| 503 Layout(); | 514 Layout(); |
| 504 if (GetBubbleFrameView()) | 515 if (GetBubbleFrameView()) |
| 505 SizeToContents(); | 516 SizeToContents(); |
| 506 } | 517 } |
| 507 | 518 |
| 508 void ProfileChooserView::WindowClosing() { | 519 void ProfileChooserView::WindowClosing() { |
| 509 DCHECK_EQ(profile_bubble_, this); | 520 DCHECK_EQ(profile_bubble_, this); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 537 } else if (sender == account_removal_cancel_button_) { | 548 } else if (sender == account_removal_cancel_button_) { |
| 538 account_id_to_remove_.clear(); | 549 account_id_to_remove_.clear(); |
| 539 ShowView(BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, avatar_menu_.get()); | 550 ShowView(BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, avatar_menu_.get()); |
| 540 } else if (sender == gaia_signin_cancel_button_) { | 551 } else if (sender == gaia_signin_cancel_button_) { |
| 541 std::string primary_account = | 552 std::string primary_account = |
| 542 SigninManagerFactory::GetForProfile(browser_->profile())-> | 553 SigninManagerFactory::GetForProfile(browser_->profile())-> |
| 543 GetAuthenticatedUsername(); | 554 GetAuthenticatedUsername(); |
| 544 ShowView(primary_account.empty() ? BUBBLE_VIEW_MODE_PROFILE_CHOOSER : | 555 ShowView(primary_account.empty() ? BUBBLE_VIEW_MODE_PROFILE_CHOOSER : |
| 545 BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, | 556 BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, |
| 546 avatar_menu_.get()); | 557 avatar_menu_.get()); |
| 558 } else if (sender == question_mark_button_) { |
| 559 tutorial_mode_ = TUTORIAL_MODE_SEND_FEEDBACK; |
| 560 ShowView(BUBBLE_VIEW_MODE_PROFILE_CHOOSER, avatar_menu_.get()); |
| 561 } else if (sender == tutorial_send_feedback_button_) { |
| 562 chrome::OpenFeedbackDialog(browser_); |
| 563 } else if (sender == end_preview_and_relaunch_button_) { |
| 564 profiles::DisableNewProfileManagementPreview(); |
| 565 } else if (sender == end_preview_cancel_button_) { |
| 566 tutorial_mode_ = TUTORIAL_MODE_SEND_FEEDBACK; |
| 567 ShowView(BUBBLE_VIEW_MODE_PROFILE_CHOOSER, avatar_menu_.get()); |
| 547 } else if (current_profile_photo_ && | 568 } else if (current_profile_photo_ && |
| 548 sender == current_profile_photo_->change_photo_button()) { | 569 sender == current_profile_photo_->change_photo_button()) { |
| 549 avatar_menu_->EditProfile(avatar_menu_->GetActiveProfileIndex()); | 570 avatar_menu_->EditProfile(avatar_menu_->GetActiveProfileIndex()); |
| 550 } else if (sender == signin_current_profile_link_) { | 571 } else if (sender == signin_current_profile_link_) { |
| 551 ShowView(BUBBLE_VIEW_MODE_GAIA_SIGNIN, avatar_menu_.get()); | 572 ShowView(BUBBLE_VIEW_MODE_GAIA_SIGNIN, avatar_menu_.get()); |
| 552 } else { | 573 } else { |
| 553 // Either one of the "other profiles", or one of the profile accounts | 574 // Either one of the "other profiles", or one of the profile accounts |
| 554 // buttons was pressed. | 575 // buttons was pressed. |
| 555 ButtonIndexes::const_iterator profile_match = | 576 ButtonIndexes::const_iterator profile_match = |
| 556 open_other_profile_indexes_map_.find(sender); | 577 open_other_profile_indexes_map_.find(sender); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 587 // This link can either mean show/hide the account management view, | 608 // This link can either mean show/hide the account management view, |
| 588 // depending on which view it is displayed. ShowView() will DCHECK if | 609 // depending on which view it is displayed. ShowView() will DCHECK if |
| 589 // the account management view is displayed for non signed-in users. | 610 // the account management view is displayed for non signed-in users. |
| 590 ShowView( | 611 ShowView( |
| 591 view_mode_ == BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT ? | 612 view_mode_ == BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT ? |
| 592 BUBBLE_VIEW_MODE_PROFILE_CHOOSER : | 613 BUBBLE_VIEW_MODE_PROFILE_CHOOSER : |
| 593 BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, | 614 BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, |
| 594 avatar_menu_.get()); | 615 avatar_menu_.get()); |
| 595 } else if (sender == add_account_link_) { | 616 } else if (sender == add_account_link_) { |
| 596 ShowView(BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT, avatar_menu_.get()); | 617 ShowView(BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT, avatar_menu_.get()); |
| 597 } else { | 618 } else if (sender == tutorial_learn_more_link_) { |
| 598 DCHECK(sender == tutorial_learn_more_link_); | |
| 599 // TODO(guohui): update |learn_more_url| once it is decided. | 619 // TODO(guohui): update |learn_more_url| once it is decided. |
| 600 const GURL lear_more_url("https://support.google.com/chrome/?hl=en#to"); | 620 const GURL lear_more_url("https://support.google.com/chrome/?hl=en#to"); |
| 601 chrome::NavigateParams params( | 621 chrome::NavigateParams params( |
| 602 browser_->profile(), | 622 browser_->profile(), |
| 603 lear_more_url, | 623 lear_more_url, |
| 604 content::PAGE_TRANSITION_LINK); | 624 content::PAGE_TRANSITION_LINK); |
| 605 params.disposition = NEW_FOREGROUND_TAB; | 625 params.disposition = NEW_FOREGROUND_TAB; |
| 606 chrome::Navigate(¶ms); | 626 chrome::Navigate(¶ms); |
| 627 } else { |
| 628 DCHECK(sender == tutorial_end_preview_link_); |
| 629 ShowView(BUBBLE_VIEW_MODE_END_PREVIEW, avatar_menu_.get()); |
| 607 } | 630 } |
| 608 } | 631 } |
| 609 | 632 |
| 610 void ProfileChooserView::StyledLabelLinkClicked( | 633 void ProfileChooserView::StyledLabelLinkClicked( |
| 611 const gfx::Range& range, int event_flags) { | 634 const gfx::Range& range, int event_flags) { |
| 612 chrome::ShowSettings(browser_); | 635 chrome::ShowSettings(browser_); |
| 613 } | 636 } |
| 614 | 637 |
| 615 bool ProfileChooserView::HandleKeyEvent(views::Textfield* sender, | 638 bool ProfileChooserView::HandleKeyEvent(views::Textfield* sender, |
| 616 const ui::KeyEvent& key_event) { | 639 const ui::KeyEvent& key_event) { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 635 return true; | 658 return true; |
| 636 | 659 |
| 637 profiles::UpdateProfileName(profile, new_profile_name); | 660 profiles::UpdateProfileName(profile, new_profile_name); |
| 638 current_profile_name_->ShowReadOnlyView(); | 661 current_profile_name_->ShowReadOnlyView(); |
| 639 return true; | 662 return true; |
| 640 } | 663 } |
| 641 return false; | 664 return false; |
| 642 } | 665 } |
| 643 | 666 |
| 644 views::View* ProfileChooserView::CreateProfileChooserView( | 667 views::View* ProfileChooserView::CreateProfileChooserView( |
| 645 AvatarMenu* avatar_menu, bool tutorial_shown) { | 668 AvatarMenu* avatar_menu, TutorialMode last_tutorial_mode) { |
| 646 // TODO(guohui, noms): the view should be customized based on whether new | 669 // TODO(guohui, noms): the view should be customized based on whether new |
| 647 // profile management preview is enabled or not. | 670 // profile management preview is enabled or not. |
| 648 | 671 |
| 649 views::View* view = new views::View(); | 672 views::View* view = new views::View(); |
| 650 views::GridLayout* layout = CreateSingleColumnLayout(view, kFixedMenuWidth); | 673 views::GridLayout* layout = CreateSingleColumnLayout(view, kFixedMenuWidth); |
| 651 // Separate items into active and alternatives. | 674 // Separate items into active and alternatives. |
| 652 Indexes other_profiles; | 675 Indexes other_profiles; |
| 653 views::View* tutorial_view = NULL; | 676 views::View* tutorial_view = NULL; |
| 654 views::View* current_profile_view = NULL; | 677 views::View* current_profile_view = NULL; |
| 655 views::View* current_profile_accounts = NULL; | 678 views::View* current_profile_accounts = NULL; |
| 656 views::View* option_buttons_view = NULL; | 679 views::View* option_buttons_view = NULL; |
| 680 bool is_new_profile_management = switches::IsNewProfileManagement(); |
| 657 for (size_t i = 0; i < avatar_menu->GetNumberOfItems(); ++i) { | 681 for (size_t i = 0; i < avatar_menu->GetNumberOfItems(); ++i) { |
| 658 const AvatarMenu::Item& item = avatar_menu->GetItemAt(i); | 682 const AvatarMenu::Item& item = avatar_menu->GetItemAt(i); |
| 659 if (item.active) { | 683 if (item.active) { |
| 660 option_buttons_view = CreateOptionsView(item.signed_in); | 684 option_buttons_view = CreateOptionsView(item.signed_in); |
| 661 current_profile_view = CreateCurrentProfileView(item, false); | 685 current_profile_view = CreateCurrentProfileView(item, false); |
| 662 if (view_mode_ == BUBBLE_VIEW_MODE_PROFILE_CHOOSER) { | 686 if (view_mode_ == BUBBLE_VIEW_MODE_PROFILE_CHOOSER) { |
| 663 tutorial_view = switches::IsNewProfileManagement() ? | 687 if (is_new_profile_management) { |
| 664 CreatePreviewEnabledTutorialView(item, tutorial_shown) : | 688 tutorial_view = last_tutorial_mode == TUTORIAL_MODE_SEND_FEEDBACK ? |
| 665 CreateNewProfileManagementPreviewView(); | 689 CreateSendPreviewFeedbackView() : |
| 690 CreatePreviewEnabledTutorialView( |
| 691 item, last_tutorial_mode == TUTORIAL_MODE_PREVIEW_ENABLED); |
| 692 } else { |
| 693 tutorial_view = CreateNewProfileManagementPreviewView(); |
| 694 } |
| 666 } else { | 695 } else { |
| 667 current_profile_accounts = CreateCurrentProfileAccountsView(item); | 696 current_profile_accounts = CreateCurrentProfileAccountsView(item); |
| 668 } | 697 } |
| 669 } else { | 698 } else { |
| 670 other_profiles.push_back(i); | 699 other_profiles.push_back(i); |
| 671 } | 700 } |
| 672 } | 701 } |
| 673 | 702 |
| 674 if (tutorial_view) { | 703 if (tutorial_view) { |
| 675 layout->StartRow(1, 0); | 704 layout->StartRow(1, 0); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 721 // Do not show the tutorial if user has dismissed it. | 750 // Do not show the tutorial if user has dismissed it. |
| 722 if (show_count > kProfileAvatarTutorialShowMax) | 751 if (show_count > kProfileAvatarTutorialShowMax) |
| 723 return NULL; | 752 return NULL; |
| 724 | 753 |
| 725 if (!tutorial_shown) { | 754 if (!tutorial_shown) { |
| 726 if (show_count == kProfileAvatarTutorialShowMax) | 755 if (show_count == kProfileAvatarTutorialShowMax) |
| 727 return NULL; | 756 return NULL; |
| 728 profile->GetPrefs()->SetInteger( | 757 profile->GetPrefs()->SetInteger( |
| 729 prefs::kProfileAvatarTutorialShown, show_count + 1); | 758 prefs::kProfileAvatarTutorialShown, show_count + 1); |
| 730 } | 759 } |
| 731 tutorial_showing_ = true; | |
| 732 | 760 |
| 733 return CreateTutorialView( | 761 return CreateTutorialView( |
| 762 TUTORIAL_MODE_PREVIEW_ENABLED, |
| 734 l10n_util::GetStringUTF16(IDS_PROFILES_PREVIEW_ENABLED_TUTORIAL_TITLE), | 763 l10n_util::GetStringUTF16(IDS_PROFILES_PREVIEW_ENABLED_TUTORIAL_TITLE), |
| 735 l10n_util::GetStringUTF16( | 764 l10n_util::GetStringUTF16( |
| 736 IDS_PROFILES_PREVIEW_ENABLED_TUTORIAL_CONTENT_TEXT), | 765 IDS_PROFILES_PREVIEW_ENABLED_TUTORIAL_CONTENT_TEXT), |
| 737 l10n_util::GetStringUTF16(IDS_PROFILES_PROFILE_TUTORIAL_LEARN_MORE), | 766 l10n_util::GetStringUTF16(IDS_PROFILES_PROFILE_TUTORIAL_LEARN_MORE), |
| 738 l10n_util::GetStringUTF16(IDS_PROFILES_TUTORIAL_OK_BUTTON), | 767 l10n_util::GetStringUTF16(IDS_PROFILES_TUTORIAL_OK_BUTTON), |
| 739 &tutorial_learn_more_link_, | 768 &tutorial_learn_more_link_, |
| 740 &tutorial_ok_button_); | 769 &tutorial_ok_button_); |
| 741 } | 770 } |
| 742 | 771 |
| 772 views::View* ProfileChooserView::CreateSendPreviewFeedbackView() { |
| 773 return CreateTutorialView( |
| 774 TUTORIAL_MODE_SEND_FEEDBACK, |
| 775 l10n_util::GetStringUTF16(IDS_PROFILES_FEEDBACK_TUTORIAL_TITLE), |
| 776 l10n_util::GetStringUTF16( |
| 777 IDS_PROFILES_FEEDBACK_TUTORIAL_CONTENT_TEXT), |
| 778 l10n_util::GetStringUTF16(IDS_PROFILES_END_PREVIEW), |
| 779 l10n_util::GetStringUTF16(IDS_PROFILES_SEND_FEEDBACK_BUTTON), |
| 780 &tutorial_end_preview_link_, |
| 781 &tutorial_send_feedback_button_); |
| 782 } |
| 783 |
| 743 views::View* ProfileChooserView::CreateTutorialView( | 784 views::View* ProfileChooserView::CreateTutorialView( |
| 785 TutorialMode tutorial_mode, |
| 744 const base::string16& title_text, | 786 const base::string16& title_text, |
| 745 const base::string16& content_text, | 787 const base::string16& content_text, |
| 746 const base::string16& link_text, | 788 const base::string16& link_text, |
| 747 const base::string16& button_text, | 789 const base::string16& button_text, |
| 748 views::Link** link, | 790 views::Link** link, |
| 749 views::LabelButton** button) { | 791 views::LabelButton** button) { |
| 792 tutorial_mode_ = tutorial_mode; |
| 793 |
| 750 views::View* view = new views::View(); | 794 views::View* view = new views::View(); |
| 751 view->set_background(views::Background::CreateSolidBackground( | 795 view->set_background(views::Background::CreateSolidBackground( |
| 752 profiles::kAvatarTutorialBackgroundColor)); | 796 profiles::kAvatarTutorialBackgroundColor)); |
| 753 views::GridLayout* layout = CreateSingleColumnLayout(view, | 797 views::GridLayout* layout = CreateSingleColumnLayout(view, |
| 754 kFixedMenuWidth - 2 * views::kButtonHEdgeMarginNew); | 798 kFixedMenuWidth - 2 * views::kButtonHEdgeMarginNew); |
| 755 layout->SetInsets(views::kButtonVEdgeMarginNew, | 799 layout->SetInsets(views::kButtonVEdgeMarginNew, |
| 756 views::kButtonHEdgeMarginNew, | 800 views::kButtonHEdgeMarginNew, |
| 757 views::kButtonVEdgeMarginNew, | 801 views::kButtonVEdgeMarginNew, |
| 758 views::kButtonHEdgeMarginNew); | 802 views::kButtonHEdgeMarginNew); |
| 759 | 803 |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 840 layout->SetInsets(views::kButtonVEdgeMarginNew, | 884 layout->SetInsets(views::kButtonVEdgeMarginNew, |
| 841 views::kButtonHEdgeMarginNew, | 885 views::kButtonHEdgeMarginNew, |
| 842 views::kRelatedControlVerticalSpacing, | 886 views::kRelatedControlVerticalSpacing, |
| 843 views::kButtonHEdgeMarginNew); | 887 views::kButtonHEdgeMarginNew); |
| 844 | 888 |
| 845 // Profile icon, centered. | 889 // Profile icon, centered. |
| 846 float x_offset = (column_width - kLargeImageSide) / 2; | 890 float x_offset = (column_width - kLargeImageSide) / 2; |
| 847 current_profile_photo_ = new EditableProfilePhoto( | 891 current_profile_photo_ = new EditableProfilePhoto( |
| 848 this, avatar_item.icon, !is_guest, | 892 this, avatar_item.icon, !is_guest, |
| 849 gfx::Rect(x_offset, 0, kLargeImageSide, kLargeImageSide)); | 893 gfx::Rect(x_offset, 0, kLargeImageSide, kLargeImageSide)); |
| 894 |
| 895 if (switches::IsNewProfileManagementPreviewEnabled()) { |
| 896 question_mark_button_ = new views::ImageButton(this); |
| 897 question_mark_button_->SetImageAlignment( |
| 898 views::ImageButton::ALIGN_LEFT, views::ImageButton::ALIGN_MIDDLE); |
| 899 ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); |
| 900 question_mark_button_->SetImage(views::ImageButton::STATE_NORMAL, |
| 901 rb->GetImageSkiaNamed(IDR_QUESTION_MARK)); |
| 902 gfx::Size preferred_size = question_mark_button_->GetPreferredSize(); |
| 903 question_mark_button_->SetBounds( |
| 904 0, 0, preferred_size.width(), preferred_size.height()); |
| 905 current_profile_photo_->AddChildView(question_mark_button_); |
| 906 } |
| 907 |
| 850 layout->StartRow(1, 0); | 908 layout->StartRow(1, 0); |
| 851 layout->AddView(current_profile_photo_); | 909 layout->AddView(current_profile_photo_); |
| 852 | 910 |
| 853 // Profile name, centered. | 911 // Profile name, centered. |
| 854 current_profile_name_ = new EditableProfileName( | 912 current_profile_name_ = new EditableProfileName( |
| 855 this, profiles::GetAvatarNameForProfile(browser_->profile()), !is_guest); | 913 this, profiles::GetAvatarNameForProfile(browser_->profile()), !is_guest); |
| 856 layout->StartRow(1, 0); | 914 layout->StartRow(1, 0); |
| 857 layout->AddView(current_profile_name_); | 915 layout->AddView(current_profile_name_); |
| 858 | 916 |
| 859 if (is_guest) | 917 if (is_guest) |
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1141 layout->AddView(remove_account_and_relaunch_button_); | 1199 layout->AddView(remove_account_and_relaunch_button_); |
| 1142 } else { | 1200 } else { |
| 1143 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); | 1201 layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); |
| 1144 } | 1202 } |
| 1145 | 1203 |
| 1146 return view; | 1204 return view; |
| 1147 } | 1205 } |
| 1148 | 1206 |
| 1149 views::View* ProfileChooserView::CreateNewProfileManagementPreviewView() { | 1207 views::View* ProfileChooserView::CreateNewProfileManagementPreviewView() { |
| 1150 return CreateTutorialView( | 1208 return CreateTutorialView( |
| 1209 TUTORIAL_MODE_ENABLE_PREVIEW, |
| 1151 l10n_util::GetStringUTF16(IDS_PROFILES_PREVIEW_TUTORIAL_TITLE), | 1210 l10n_util::GetStringUTF16(IDS_PROFILES_PREVIEW_TUTORIAL_TITLE), |
| 1152 l10n_util::GetStringUTF16(IDS_PROFILES_PREVIEW_TUTORIAL_CONTENT_TEXT), | 1211 l10n_util::GetStringUTF16(IDS_PROFILES_PREVIEW_TUTORIAL_CONTENT_TEXT), |
| 1153 l10n_util::GetStringUTF16(IDS_PROFILES_PROFILE_TUTORIAL_LEARN_MORE), | 1212 l10n_util::GetStringUTF16(IDS_PROFILES_PROFILE_TUTORIAL_LEARN_MORE), |
| 1154 l10n_util::GetStringUTF16(IDS_PROFILES_TUTORIAL_TRY_BUTTON), | 1213 l10n_util::GetStringUTF16(IDS_PROFILES_TUTORIAL_TRY_BUTTON), |
| 1155 &tutorial_learn_more_link_, | 1214 &tutorial_learn_more_link_, |
| 1156 &tutorial_enable_new_profile_management_button_); | 1215 &tutorial_enable_new_profile_management_button_); |
| 1157 } | 1216 } |
| 1217 |
| 1218 views::View* ProfileChooserView::CreateEndPreviewView() { |
| 1219 views::View* view = new views::View(); |
| 1220 views::GridLayout* layout = CreateSingleColumnLayout( |
| 1221 view, kFixedAccountRemovalViewWidth - 2 * views::kButtonHEdgeMarginNew); |
| 1222 layout->SetInsets(views::kButtonVEdgeMarginNew, |
| 1223 views::kButtonHEdgeMarginNew, |
| 1224 views::kButtonVEdgeMarginNew, |
| 1225 views::kButtonHEdgeMarginNew); |
| 1226 |
| 1227 // Adds title. |
| 1228 layout->StartRow(1, 0); |
| 1229 layout->AddView(new TitleCard(IDS_PROFILES_END_PREVIEW, this, |
| 1230 &end_preview_cancel_button_)); |
| 1231 layout->StartRowWithPadding(1, 0, 0, views::kRelatedControlVerticalSpacing); |
| 1232 layout->AddView(new views::Separator(views::Separator::HORIZONTAL)); |
| 1233 |
| 1234 // Adds main text. |
| 1235 views::Label* content_label = new views::Label( |
| 1236 l10n_util::GetStringUTF16(IDS_PROFILES_END_PREVIEW_TEXT)); |
| 1237 content_label->SetMultiLine(true); |
| 1238 content_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
| 1239 ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); |
| 1240 const gfx::FontList& small_font_list = |
| 1241 rb->GetFontList(ui::ResourceBundle::SmallFont); |
| 1242 content_label->SetFontList(small_font_list); |
| 1243 layout->StartRowWithPadding(1, 0, 0, views::kUnrelatedControlVerticalSpacing); |
| 1244 layout->AddView(content_label); |
| 1245 |
| 1246 // Adds button. |
| 1247 end_preview_and_relaunch_button_ = new views::BlueButton( |
| 1248 this, l10n_util::GetStringUTF16(IDS_PROFILES_END_PREVIEW_AND_RELAUNCH)); |
| 1249 end_preview_and_relaunch_button_->SetHorizontalAlignment( |
| 1250 gfx::ALIGN_CENTER); |
| 1251 layout->StartRowWithPadding( |
| 1252 1, 0, 0, views::kUnrelatedControlVerticalSpacing); |
| 1253 layout->AddView(end_preview_and_relaunch_button_); |
| 1254 |
| 1255 return view; |
| 1256 } |
| 1257 |
| OLD | NEW |