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/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/app/vector_icons/vector_icons.h" | 10 #include "chrome/app/vector_icons/vector_icons.h" |
(...skipping 490 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
501 | 501 |
502 // ProfileChooserView --------------------------------------------------------- | 502 // ProfileChooserView --------------------------------------------------------- |
503 | 503 |
504 // static | 504 // static |
505 ProfileChooserView* ProfileChooserView::profile_bubble_ = nullptr; | 505 ProfileChooserView* ProfileChooserView::profile_bubble_ = nullptr; |
506 bool ProfileChooserView::close_on_deactivate_for_testing_ = true; | 506 bool ProfileChooserView::close_on_deactivate_for_testing_ = true; |
507 | 507 |
508 // static | 508 // static |
509 void ProfileChooserView::ShowBubble( | 509 void ProfileChooserView::ShowBubble( |
510 profiles::BubbleViewMode view_mode, | 510 profiles::BubbleViewMode view_mode, |
511 profiles::TutorialMode tutorial_mode, | |
512 const signin::ManageAccountsParams& manage_accounts_params, | 511 const signin::ManageAccountsParams& manage_accounts_params, |
513 signin_metrics::AccessPoint access_point, | 512 signin_metrics::AccessPoint access_point, |
514 views::View* anchor_view, | 513 views::View* anchor_view, |
515 Browser* browser, | 514 Browser* browser, |
516 bool is_source_keyboard) { | 515 bool is_source_keyboard) { |
517 if (IsShowing()) { | 516 if (IsShowing()) |
518 if (tutorial_mode != profiles::TUTORIAL_MODE_NONE) { | |
519 profile_bubble_->tutorial_mode_ = tutorial_mode; | |
520 profile_bubble_->ShowViewFromMode(view_mode); | |
521 } | |
522 return; | 517 return; |
523 } | |
524 | 518 |
525 profile_bubble_ = | 519 profile_bubble_ = |
526 new ProfileChooserView(anchor_view, browser, view_mode, tutorial_mode, | 520 new ProfileChooserView(anchor_view, browser, view_mode, |
527 manage_accounts_params.service_type, access_point); | 521 manage_accounts_params.service_type, access_point); |
528 views::Widget* widget = | 522 views::Widget* widget = |
529 views::BubbleDialogDelegateView::CreateBubble(profile_bubble_); | 523 views::BubbleDialogDelegateView::CreateBubble(profile_bubble_); |
530 profile_bubble_->SetAlignment(views::BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE); | 524 profile_bubble_->SetAlignment(views::BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE); |
531 profile_bubble_->SetArrowPaintType(views::BubbleBorder::PAINT_NONE); | 525 profile_bubble_->SetArrowPaintType(views::BubbleBorder::PAINT_NONE); |
532 widget->Show(); | 526 widget->Show(); |
533 if (is_source_keyboard) | 527 if (is_source_keyboard) |
534 profile_bubble_->FocusFirstProfileButton(); | 528 profile_bubble_->FocusFirstProfileButton(); |
535 } | 529 } |
536 | 530 |
537 // static | 531 // static |
538 bool ProfileChooserView::IsShowing() { | 532 bool ProfileChooserView::IsShowing() { |
539 return profile_bubble_ != NULL; | 533 return profile_bubble_ != NULL; |
540 } | 534 } |
541 | 535 |
542 // static | 536 // static |
543 views::Widget* ProfileChooserView::GetCurrentBubbleWidget() { | 537 views::Widget* ProfileChooserView::GetCurrentBubbleWidget() { |
544 return profile_bubble_ ? profile_bubble_->GetWidget() : nullptr; | 538 return profile_bubble_ ? profile_bubble_->GetWidget() : nullptr; |
545 } | 539 } |
546 | 540 |
547 // static | 541 // static |
548 void ProfileChooserView::Hide() { | 542 void ProfileChooserView::Hide() { |
549 if (IsShowing()) | 543 if (IsShowing()) |
550 profile_bubble_->GetWidget()->Close(); | 544 profile_bubble_->GetWidget()->Close(); |
551 } | 545 } |
552 | 546 |
553 ProfileChooserView::ProfileChooserView(views::View* anchor_view, | 547 ProfileChooserView::ProfileChooserView(views::View* anchor_view, |
554 Browser* browser, | 548 Browser* browser, |
555 profiles::BubbleViewMode view_mode, | 549 profiles::BubbleViewMode view_mode, |
556 profiles::TutorialMode tutorial_mode, | |
557 signin::GAIAServiceType service_type, | 550 signin::GAIAServiceType service_type, |
558 signin_metrics::AccessPoint access_point) | 551 signin_metrics::AccessPoint access_point) |
559 : BubbleDialogDelegateView(anchor_view, views::BubbleBorder::TOP_RIGHT), | 552 : BubbleDialogDelegateView(anchor_view, views::BubbleBorder::TOP_RIGHT), |
560 browser_(browser), | 553 browser_(browser), |
561 view_mode_(view_mode), | 554 view_mode_(view_mode), |
562 tutorial_mode_(tutorial_mode), | |
563 gaia_service_type_(service_type), | 555 gaia_service_type_(service_type), |
564 access_point_(access_point) { | 556 access_point_(access_point) { |
565 // The sign in webview will be clipped on the bottom corners without these | 557 // The sign in webview will be clipped on the bottom corners without these |
566 // margins, see related bug <http://crbug.com/593203>. | 558 // margins, see related bug <http://crbug.com/593203>. |
567 set_margins(gfx::Insets(0, 0, 2, 0)); | 559 set_margins(gfx::Insets(0, 0, 2, 0)); |
568 ResetView(); | 560 ResetView(); |
569 chrome::RecordDialogCreation(chrome::DialogIdentifier::PROFILE_CHOOSER); | 561 chrome::RecordDialogCreation(chrome::DialogIdentifier::PROFILE_CHOOSER); |
570 } | 562 } |
571 | 563 |
572 ProfileChooserView::~ProfileChooserView() { | 564 ProfileChooserView::~ProfileChooserView() { |
573 ProfileOAuth2TokenService* oauth2_token_service = | 565 ProfileOAuth2TokenService* oauth2_token_service = |
574 ProfileOAuth2TokenServiceFactory::GetForProfile(browser_->profile()); | 566 ProfileOAuth2TokenServiceFactory::GetForProfile(browser_->profile()); |
575 if (oauth2_token_service) | 567 if (oauth2_token_service) |
576 oauth2_token_service->RemoveObserver(this); | 568 oauth2_token_service->RemoveObserver(this); |
577 } | 569 } |
578 | 570 |
579 void ProfileChooserView::ResetView() { | 571 void ProfileChooserView::ResetView() { |
580 open_other_profile_indexes_map_.clear(); | 572 open_other_profile_indexes_map_.clear(); |
581 delete_account_button_map_.clear(); | 573 delete_account_button_map_.clear(); |
582 reauth_account_button_map_.clear(); | 574 reauth_account_button_map_.clear(); |
583 tutorial_sync_settings_ok_button_ = nullptr; | |
584 tutorial_close_button_ = nullptr; | |
585 tutorial_sync_settings_link_ = nullptr; | |
586 tutorial_see_whats_new_button_ = nullptr; | |
587 tutorial_not_you_link_ = nullptr; | |
588 tutorial_learn_more_link_ = nullptr; | |
589 sync_error_signin_button_ = nullptr; | 575 sync_error_signin_button_ = nullptr; |
590 sync_error_passphrase_button_ = nullptr; | 576 sync_error_passphrase_button_ = nullptr; |
591 sync_error_upgrade_button_ = nullptr; | 577 sync_error_upgrade_button_ = nullptr; |
592 sync_error_signin_again_button_ = nullptr; | 578 sync_error_signin_again_button_ = nullptr; |
593 sync_error_signout_button_ = nullptr; | 579 sync_error_signout_button_ = nullptr; |
594 manage_accounts_link_ = nullptr; | 580 manage_accounts_link_ = nullptr; |
595 manage_accounts_button_ = nullptr; | 581 manage_accounts_button_ = nullptr; |
596 signin_current_profile_button_ = nullptr; | 582 signin_current_profile_button_ = nullptr; |
597 auth_error_email_button_ = nullptr; | 583 auth_error_email_button_ = nullptr; |
598 current_profile_card_ = nullptr; | 584 current_profile_card_ = nullptr; |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
732 sub_view = CreateSwitchUserView(); | 718 sub_view = CreateSwitchUserView(); |
733 ProfileMetrics::LogProfileNewAvatarMenuNotYou( | 719 ProfileMetrics::LogProfileNewAvatarMenuNotYou( |
734 ProfileMetrics::PROFILE_AVATAR_MENU_NOT_YOU_VIEW); | 720 ProfileMetrics::PROFILE_AVATAR_MENU_NOT_YOU_VIEW); |
735 break; | 721 break; |
736 case profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT: | 722 case profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT: |
737 case profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER: | 723 case profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER: |
738 layout = CreateSingleColumnLayout(this, kFixedMenuWidth); | 724 layout = CreateSingleColumnLayout(this, kFixedMenuWidth); |
739 sub_view = CreateProfileChooserView(avatar_menu); | 725 sub_view = CreateProfileChooserView(avatar_menu); |
740 break; | 726 break; |
741 } | 727 } |
742 // Clears tutorial mode for all non-profile-chooser views. | |
743 if (view_mode_ != profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER) | |
744 tutorial_mode_ = profiles::TUTORIAL_MODE_NONE; | |
745 | 728 |
746 layout->StartRow(1, 0); | 729 layout->StartRow(1, 0); |
747 layout->AddView(sub_view); | 730 layout->AddView(sub_view); |
748 Layout(); | 731 Layout(); |
749 if (GetBubbleFrameView()) | 732 if (GetBubbleFrameView()) |
750 SizeToContents(); | 733 SizeToContents(); |
751 if (view_to_focus) | 734 if (view_to_focus) |
752 view_to_focus->RequestFocus(); | 735 view_to_focus->RequestFocus(); |
753 } | 736 } |
754 | 737 |
(...skipping 11 matching lines...) Expand all Loading... |
766 } | 749 } |
767 | 750 |
768 void ProfileChooserView::FocusFirstProfileButton() { | 751 void ProfileChooserView::FocusFirstProfileButton() { |
769 if (first_profile_button_) | 752 if (first_profile_button_) |
770 first_profile_button_->RequestFocus(); | 753 first_profile_button_->RequestFocus(); |
771 } | 754 } |
772 | 755 |
773 void ProfileChooserView::WindowClosing() { | 756 void ProfileChooserView::WindowClosing() { |
774 DCHECK_EQ(profile_bubble_, this); | 757 DCHECK_EQ(profile_bubble_, this); |
775 profile_bubble_ = NULL; | 758 profile_bubble_ = NULL; |
776 | |
777 if (tutorial_mode_ == profiles::TUTORIAL_MODE_CONFIRM_SIGNIN) { | |
778 LoginUIServiceFactory::GetForProfile(browser_->profile())-> | |
779 SyncConfirmationUIClosed(LoginUIService::SYNC_WITH_DEFAULT_SETTINGS); | |
780 } | |
781 } | 759 } |
782 | 760 |
783 bool ProfileChooserView::AcceleratorPressed( | 761 bool ProfileChooserView::AcceleratorPressed( |
784 const ui::Accelerator& accelerator) { | 762 const ui::Accelerator& accelerator) { |
785 if (accelerator.key_code() != ui::VKEY_DOWN && | 763 if (accelerator.key_code() != ui::VKEY_DOWN && |
786 accelerator.key_code() != ui::VKEY_UP) | 764 accelerator.key_code() != ui::VKEY_UP) |
787 return BubbleDialogDelegateView::AcceleratorPressed(accelerator); | 765 return BubbleDialogDelegateView::AcceleratorPressed(accelerator); |
788 | 766 |
789 // Move the focus up or down. | 767 // Move the focus up or down. |
790 GetFocusManager()->AdvanceFocus(accelerator.key_code() != ui::VKEY_DOWN); | 768 GetFocusManager()->AdvanceFocus(accelerator.key_code() != ui::VKEY_DOWN); |
(...skipping 21 matching lines...) Expand all Loading... |
812 PrefService* service = g_browser_process->local_state(); | 790 PrefService* service = g_browser_process->local_state(); |
813 DCHECK(service); | 791 DCHECK(service); |
814 DCHECK(service->GetBoolean(prefs::kBrowserGuestModeEnabled)); | 792 DCHECK(service->GetBoolean(prefs::kBrowserGuestModeEnabled)); |
815 profiles::SwitchToGuestProfile(ProfileManager::CreateCallback()); | 793 profiles::SwitchToGuestProfile(ProfileManager::CreateCallback()); |
816 } else if (sender == users_button_) { | 794 } else if (sender == users_button_) { |
817 // If this is a guest session, close all the guest browser windows. | 795 // If this is a guest session, close all the guest browser windows. |
818 if (browser_->profile()->IsGuestSession()) { | 796 if (browser_->profile()->IsGuestSession()) { |
819 profiles::CloseGuestProfileWindows(); | 797 profiles::CloseGuestProfileWindows(); |
820 } else { | 798 } else { |
821 UserManager::Show(base::FilePath(), | 799 UserManager::Show(base::FilePath(), |
822 profiles::USER_MANAGER_NO_TUTORIAL, | |
823 profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION); | 800 profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION); |
824 } | 801 } |
825 PostActionPerformed(ProfileMetrics::PROFILE_DESKTOP_MENU_OPEN_USER_MANAGER); | 802 PostActionPerformed(ProfileMetrics::PROFILE_DESKTOP_MENU_OPEN_USER_MANAGER); |
826 } else if (sender == go_incognito_button_) { | 803 } else if (sender == go_incognito_button_) { |
827 DCHECK(ShouldShowGoIncognito()); | 804 DCHECK(ShouldShowGoIncognito()); |
828 chrome::NewIncognitoWindow(browser_); | 805 chrome::NewIncognitoWindow(browser_); |
829 PostActionPerformed(ProfileMetrics::PROFILE_DESKTOP_MENU_GO_INCOGNITO); | 806 PostActionPerformed(ProfileMetrics::PROFILE_DESKTOP_MENU_GO_INCOGNITO); |
830 } else if (sender == lock_button_) { | 807 } else if (sender == lock_button_) { |
831 profiles::LockProfile(browser_->profile()); | 808 profiles::LockProfile(browser_->profile()); |
832 PostActionPerformed(ProfileMetrics::PROFILE_DESKTOP_MENU_LOCK); | 809 PostActionPerformed(ProfileMetrics::PROFILE_DESKTOP_MENU_LOCK); |
833 } else if (sender == close_all_windows_button_) { | 810 } else if (sender == close_all_windows_button_) { |
834 profiles::CloseProfileWindows(browser_->profile()); | 811 profiles::CloseProfileWindows(browser_->profile()); |
835 } else if (sender == auth_error_email_button_ || | 812 } else if (sender == auth_error_email_button_ || |
836 sender == sync_error_signin_button_) { | 813 sender == sync_error_signin_button_) { |
837 ShowViewFromMode(profiles::BUBBLE_VIEW_MODE_GAIA_REAUTH); | 814 ShowViewFromMode(profiles::BUBBLE_VIEW_MODE_GAIA_REAUTH); |
838 } else if (sender == sync_error_passphrase_button_) { | 815 } else if (sender == sync_error_passphrase_button_) { |
839 chrome::ShowSettingsSubPage(browser_, chrome::kSyncSetupSubPage); | 816 chrome::ShowSettingsSubPage(browser_, chrome::kSyncSetupSubPage); |
840 } else if (sender == sync_error_upgrade_button_) { | 817 } else if (sender == sync_error_upgrade_button_) { |
841 chrome::OpenUpdateChromeDialog(browser_); | 818 chrome::OpenUpdateChromeDialog(browser_); |
842 } else if (sender == sync_error_signin_again_button_) { | 819 } else if (sender == sync_error_signin_again_button_) { |
843 if (ProfileSyncServiceFactory::GetForProfile(browser_->profile())) | 820 if (ProfileSyncServiceFactory::GetForProfile(browser_->profile())) |
844 browser_sync::ProfileSyncService::SyncEvent( | 821 browser_sync::ProfileSyncService::SyncEvent( |
845 browser_sync::ProfileSyncService::STOP_FROM_OPTIONS); | 822 browser_sync::ProfileSyncService::STOP_FROM_OPTIONS); |
846 SigninManagerFactory::GetForProfile(browser_->profile()) | 823 SigninManagerFactory::GetForProfile(browser_->profile()) |
847 ->SignOut(signin_metrics::USER_CLICKED_SIGNOUT_SETTINGS, | 824 ->SignOut(signin_metrics::USER_CLICKED_SIGNOUT_SETTINGS, |
848 signin_metrics::SignoutDelete::IGNORE_METRIC); | 825 signin_metrics::SignoutDelete::IGNORE_METRIC); |
849 ShowViewFromMode(profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN); | 826 ShowViewFromMode(profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN); |
850 } else if (sender == sync_error_signout_button_) { | 827 } else if (sender == sync_error_signout_button_) { |
851 chrome::ShowSettingsSubPage(browser_, chrome::kSignOutSubPage); | 828 chrome::ShowSettingsSubPage(browser_, chrome::kSignOutSubPage); |
852 } else if (sender == tutorial_sync_settings_ok_button_) { | |
853 LoginUIServiceFactory::GetForProfile(browser_->profile())-> | |
854 SyncConfirmationUIClosed(LoginUIService::SYNC_WITH_DEFAULT_SETTINGS); | |
855 DismissTutorial(); | |
856 ProfileMetrics::LogProfileNewAvatarMenuSignin( | |
857 ProfileMetrics::PROFILE_AVATAR_MENU_SIGNIN_OK); | |
858 } else if (sender == tutorial_close_button_) { | |
859 DCHECK(tutorial_mode_ != profiles::TUTORIAL_MODE_NONE && | |
860 tutorial_mode_ != profiles::TUTORIAL_MODE_CONFIRM_SIGNIN); | |
861 DismissTutorial(); | |
862 } else if (sender == tutorial_see_whats_new_button_) { | |
863 ProfileMetrics::LogProfileNewAvatarMenuUpgrade( | |
864 ProfileMetrics::PROFILE_AVATAR_MENU_UPGRADE_WHATS_NEW); | |
865 UserManager::Show(base::FilePath(), | |
866 profiles::USER_MANAGER_TUTORIAL_OVERVIEW, | |
867 profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION); | |
868 } else if (sender == remove_account_button_) { | 829 } else if (sender == remove_account_button_) { |
869 RemoveAccount(); | 830 RemoveAccount(); |
870 } else if (sender == account_removal_cancel_button_) { | 831 } else if (sender == account_removal_cancel_button_) { |
871 account_id_to_remove_.clear(); | 832 account_id_to_remove_.clear(); |
872 ShowViewFromMode(profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT); | 833 ShowViewFromMode(profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT); |
873 } else if (sender == gaia_signin_cancel_button_) { | 834 } else if (sender == gaia_signin_cancel_button_) { |
874 // The account management view is only available with the | 835 // The account management view is only available with the |
875 // --enable-account-consistency flag. | 836 // --enable-account-consistency flag. |
876 bool account_management_available = | 837 bool account_management_available = |
877 SigninManagerFactory::GetForProfile(browser_->profile())-> | 838 SigninManagerFactory::GetForProfile(browser_->profile())-> |
(...skipping 11 matching lines...) Expand all Loading... |
889 // depending on which view it is displayed. | 850 // depending on which view it is displayed. |
890 ShowViewFromMode(view_mode_ == profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT | 851 ShowViewFromMode(view_mode_ == profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT |
891 ? profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER | 852 ? profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER |
892 : profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT); | 853 : profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT); |
893 } else if (sender == signin_current_profile_button_) { | 854 } else if (sender == signin_current_profile_button_) { |
894 ShowViewFromMode(profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN); | 855 ShowViewFromMode(profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN); |
895 } else if (sender == add_person_button_) { | 856 } else if (sender == add_person_button_) { |
896 ProfileMetrics::LogProfileNewAvatarMenuNotYou( | 857 ProfileMetrics::LogProfileNewAvatarMenuNotYou( |
897 ProfileMetrics::PROFILE_AVATAR_MENU_NOT_YOU_ADD_PERSON); | 858 ProfileMetrics::PROFILE_AVATAR_MENU_NOT_YOU_ADD_PERSON); |
898 UserManager::Show(base::FilePath(), | 859 UserManager::Show(base::FilePath(), |
899 profiles::USER_MANAGER_NO_TUTORIAL, | |
900 profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION); | 860 profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION); |
901 } else if (sender == disconnect_button_) { | 861 } else if (sender == disconnect_button_) { |
902 ProfileMetrics::LogProfileNewAvatarMenuNotYou( | 862 ProfileMetrics::LogProfileNewAvatarMenuNotYou( |
903 ProfileMetrics::PROFILE_AVATAR_MENU_NOT_YOU_DISCONNECT); | 863 ProfileMetrics::PROFILE_AVATAR_MENU_NOT_YOU_DISCONNECT); |
904 chrome::ShowSettings(browser_); | 864 chrome::ShowSettings(browser_); |
905 } else if (sender == switch_user_cancel_button_) { | 865 } else if (sender == switch_user_cancel_button_) { |
906 ShowViewFromMode(profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER); | 866 ShowViewFromMode(profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER); |
907 ProfileMetrics::LogProfileNewAvatarMenuNotYou( | 867 ProfileMetrics::LogProfileNewAvatarMenuNotYou( |
908 ProfileMetrics::PROFILE_AVATAR_MENU_NOT_YOU_BACK); | 868 ProfileMetrics::PROFILE_AVATAR_MENU_NOT_YOU_BACK); |
909 } else { | 869 } else { |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
950 // This link can either mean show/hide the account management view, | 910 // This link can either mean show/hide the account management view, |
951 // depending on which view it is displayed. ShowView() will DCHECK if | 911 // depending on which view it is displayed. ShowView() will DCHECK if |
952 // the account management view is displayed for non signed-in users. | 912 // the account management view is displayed for non signed-in users. |
953 ShowViewFromMode( | 913 ShowViewFromMode( |
954 view_mode_ == profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT ? | 914 view_mode_ == profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT ? |
955 profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER : | 915 profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER : |
956 profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT); | 916 profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT); |
957 } else if (sender == add_account_link_) { | 917 } else if (sender == add_account_link_) { |
958 ShowViewFromMode(profiles::BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT); | 918 ShowViewFromMode(profiles::BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT); |
959 PostActionPerformed(ProfileMetrics::PROFILE_DESKTOP_MENU_ADD_ACCT); | 919 PostActionPerformed(ProfileMetrics::PROFILE_DESKTOP_MENU_ADD_ACCT); |
960 } else if (sender == tutorial_sync_settings_link_) { | |
961 LoginUIServiceFactory::GetForProfile(browser_->profile())-> | |
962 SyncConfirmationUIClosed(LoginUIService::CONFIGURE_SYNC_FIRST); | |
963 tutorial_mode_ = profiles::TUTORIAL_MODE_NONE; | |
964 ProfileMetrics::LogProfileNewAvatarMenuSignin( | |
965 ProfileMetrics::PROFILE_AVATAR_MENU_SIGNIN_SETTINGS); | |
966 } else if (sender == tutorial_not_you_link_) { | |
967 ProfileMetrics::LogProfileNewAvatarMenuUpgrade( | |
968 ProfileMetrics::PROFILE_AVATAR_MENU_UPGRADE_NOT_YOU); | |
969 ShowViewFromMode(profiles::BUBBLE_VIEW_MODE_SWITCH_USER); | |
970 } else { | |
971 DCHECK(sender == tutorial_learn_more_link_); | |
972 signin_ui_util::ShowSigninErrorLearnMorePage(browser_->profile()); | |
973 } | 920 } |
974 } | 921 } |
975 | 922 |
976 void ProfileChooserView::StyledLabelLinkClicked(views::StyledLabel* label, | 923 void ProfileChooserView::StyledLabelLinkClicked(views::StyledLabel* label, |
977 const gfx::Range& range, | 924 const gfx::Range& range, |
978 int event_flags) { | 925 int event_flags) { |
979 chrome::ShowSettings(browser_); | 926 chrome::ShowSettings(browser_); |
980 } | 927 } |
981 | 928 |
982 views::View* ProfileChooserView::CreateProfileChooserView( | 929 views::View* ProfileChooserView::CreateProfileChooserView( |
983 AvatarMenu* avatar_menu) { | 930 AvatarMenu* avatar_menu) { |
984 views::View* view = new views::View(); | 931 views::View* view = new views::View(); |
985 views::GridLayout* layout = CreateSingleColumnLayout(view, kFixedMenuWidth); | 932 views::GridLayout* layout = CreateSingleColumnLayout(view, kFixedMenuWidth); |
986 // Separate items into active and alternatives. | 933 // Separate items into active and alternatives. |
987 Indexes other_profiles; | 934 Indexes other_profiles; |
988 views::View* tutorial_view = NULL; | |
989 views::View* sync_error_view = NULL; | 935 views::View* sync_error_view = NULL; |
990 views::View* current_profile_view = NULL; | 936 views::View* current_profile_view = NULL; |
991 views::View* current_profile_accounts = NULL; | 937 views::View* current_profile_accounts = NULL; |
992 views::View* option_buttons_view = NULL; | 938 views::View* option_buttons_view = NULL; |
993 for (size_t i = 0; i < avatar_menu->GetNumberOfItems(); ++i) { | 939 for (size_t i = 0; i < avatar_menu->GetNumberOfItems(); ++i) { |
994 const AvatarMenu::Item& item = avatar_menu->GetItemAt(i); | 940 const AvatarMenu::Item& item = avatar_menu->GetItemAt(i); |
995 if (item.active) { | 941 if (item.active) { |
996 option_buttons_view = CreateOptionsView( | 942 option_buttons_view = CreateOptionsView( |
997 item.signed_in && profiles::IsLockAvailable(browser_->profile()), | 943 item.signed_in && profiles::IsLockAvailable(browser_->profile()), |
998 avatar_menu); | 944 avatar_menu); |
999 current_profile_view = CreateCurrentProfileView(item, false); | 945 current_profile_view = CreateCurrentProfileView(item, false); |
1000 if (!IsProfileChooser(view_mode_)) | 946 if (!IsProfileChooser(view_mode_)) |
1001 current_profile_accounts = CreateCurrentProfileAccountsView(item); | 947 current_profile_accounts = CreateCurrentProfileAccountsView(item); |
1002 sync_error_view = CreateSyncErrorViewIfNeeded(); | 948 sync_error_view = CreateSyncErrorViewIfNeeded(); |
1003 } else { | 949 } else { |
1004 other_profiles.push_back(i); | 950 other_profiles.push_back(i); |
1005 } | 951 } |
1006 } | 952 } |
1007 | 953 |
1008 if (tutorial_view) { | |
1009 // TODO(mlerman): update UMA stats for the new tutorial. | |
1010 layout->StartRow(1, 0); | |
1011 layout->AddView(tutorial_view); | |
1012 } else { | |
1013 tutorial_mode_ = profiles::TUTORIAL_MODE_NONE; | |
1014 } | |
1015 | |
1016 if (sync_error_view) { | 954 if (sync_error_view) { |
1017 layout->StartRow(1, 0); | 955 layout->StartRow(1, 0); |
1018 layout->AddView(sync_error_view); | 956 layout->AddView(sync_error_view); |
1019 layout->StartRow(0, 0); | 957 layout->StartRow(0, 0); |
1020 layout->AddView(new views::Separator()); | 958 layout->AddView(new views::Separator()); |
1021 } | 959 } |
1022 | 960 |
1023 if (!current_profile_view) { | 961 if (!current_profile_view) { |
1024 // Guest windows don't have an active profile. | 962 // Guest windows don't have an active profile. |
1025 current_profile_view = CreateGuestProfileView(); | 963 current_profile_view = CreateGuestProfileView(); |
(...skipping 19 matching lines...) Expand all Loading... |
1045 layout->StartRow(0, 0); | 983 layout->StartRow(0, 0); |
1046 layout->AddView(new views::Separator()); | 984 layout->AddView(new views::Separator()); |
1047 | 985 |
1048 if (option_buttons_view) { | 986 if (option_buttons_view) { |
1049 layout->StartRow(0, 0); | 987 layout->StartRow(0, 0); |
1050 layout->AddView(option_buttons_view); | 988 layout->AddView(option_buttons_view); |
1051 } | 989 } |
1052 return view; | 990 return view; |
1053 } | 991 } |
1054 | 992 |
1055 void ProfileChooserView::DismissTutorial() { | |
1056 // Never shows the upgrade tutorial again if manually closed. | |
1057 if (tutorial_mode_ == profiles::TUTORIAL_MODE_WELCOME_UPGRADE) { | |
1058 browser_->profile()->GetPrefs()->SetInteger( | |
1059 prefs::kProfileAvatarTutorialShown, | |
1060 signin_ui_util::kUpgradeWelcomeTutorialShowMax + 1); | |
1061 } | |
1062 | |
1063 tutorial_mode_ = profiles::TUTORIAL_MODE_NONE; | |
1064 ShowViewFromMode(profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER); | |
1065 } | |
1066 | |
1067 views::View* ProfileChooserView::CreateTutorialViewIfNeeded( | |
1068 const AvatarMenu::Item& item) { | |
1069 if (tutorial_mode_ == profiles::TUTORIAL_MODE_CONFIRM_SIGNIN) | |
1070 return CreateSigninConfirmationView(); | |
1071 | |
1072 if (tutorial_mode_ == profiles::TUTORIAL_MODE_SHOW_ERROR) | |
1073 return CreateSigninErrorView(); | |
1074 | |
1075 if (profiles::ShouldShowWelcomeUpgradeTutorial( | |
1076 browser_->profile(), tutorial_mode_)) { | |
1077 if (tutorial_mode_ != profiles::TUTORIAL_MODE_WELCOME_UPGRADE) { | |
1078 Profile* profile = browser_->profile(); | |
1079 const int show_count = profile->GetPrefs()->GetInteger( | |
1080 prefs::kProfileAvatarTutorialShown); | |
1081 profile->GetPrefs()->SetInteger( | |
1082 prefs::kProfileAvatarTutorialShown, show_count + 1); | |
1083 } | |
1084 | |
1085 return CreateWelcomeUpgradeTutorialView(item); | |
1086 } | |
1087 | |
1088 return nullptr; | |
1089 } | |
1090 | |
1091 views::View* ProfileChooserView::CreateTutorialView( | |
1092 profiles::TutorialMode tutorial_mode, | |
1093 const base::string16& title_text, | |
1094 const base::string16& content_text, | |
1095 const base::string16& link_text, | |
1096 const base::string16& button_text, | |
1097 bool stack_button, | |
1098 views::Link** link, | |
1099 views::LabelButton** button, | |
1100 views::ImageButton** close_button) { | |
1101 tutorial_mode_ = tutorial_mode; | |
1102 | |
1103 // TODO(ananta) | |
1104 // Use the dialog framework to create a dialog here instead of manually | |
1105 // creating one. | |
1106 ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); | |
1107 | |
1108 views::View* view = new views::View(); | |
1109 view->set_background(views::Background::CreateSolidBackground( | |
1110 profiles::kAvatarTutorialBackgroundColor)); | |
1111 | |
1112 gfx::Insets dialog_insets = provider->GetInsetsMetric( | |
1113 views::INSETS_DIALOG_CONTENTS); | |
1114 | |
1115 view->SetBorder(views::CreateEmptyBorder(dialog_insets)); | |
1116 | |
1117 // TODO(ananta) | |
1118 // This seems to add a double margin at the side. Investigate and remove if | |
1119 // so. | |
1120 views::GridLayout* layout = CreateSingleColumnLayout( | |
1121 view, kFixedMenuWidth - dialog_insets.width()); | |
1122 | |
1123 // Creates a second column set for buttons and links. | |
1124 views::ColumnSet* button_columns = layout->AddColumnSet(1); | |
1125 button_columns->AddColumn(views::GridLayout::LEADING, | |
1126 views::GridLayout::CENTER, 0, views::GridLayout::USE_PREF, 0, 0); | |
1127 button_columns->AddPaddingColumn(1, | |
1128 provider->GetDistanceMetric(DISTANCE_UNRELATED_CONTROL_HORIZONTAL)); | |
1129 button_columns->AddColumn(views::GridLayout::TRAILING, | |
1130 views::GridLayout::CENTER, 0, views::GridLayout::USE_PREF, 0, 0); | |
1131 | |
1132 // Adds title and close button if needed. | |
1133 const SkColor kTitleAndButtonTextColor = SK_ColorWHITE; | |
1134 views::Label* title_label = new views::Label(title_text); | |
1135 title_label->SetMultiLine(true); | |
1136 title_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); | |
1137 title_label->SetAutoColorReadabilityEnabled(false); | |
1138 title_label->SetEnabledColor(kTitleAndButtonTextColor); | |
1139 title_label->SetFontList(ui::ResourceBundle::GetSharedInstance().GetFontList( | |
1140 ui::ResourceBundle::MediumFont)); | |
1141 | |
1142 if (close_button) { | |
1143 layout->StartRow(1, 1); | |
1144 layout->AddView(title_label); | |
1145 *close_button = new views::ImageButton(this); | |
1146 (*close_button)->SetImageAlignment(views::ImageButton::ALIGN_RIGHT, | |
1147 views::ImageButton::ALIGN_MIDDLE); | |
1148 ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); | |
1149 (*close_button)->SetImage(views::ImageButton::STATE_NORMAL, | |
1150 rb->GetImageSkiaNamed(IDR_CLOSE_1)); | |
1151 (*close_button)->SetImage(views::ImageButton::STATE_HOVERED, | |
1152 rb->GetImageSkiaNamed(IDR_CLOSE_1_H)); | |
1153 (*close_button)->SetImage(views::ImageButton::STATE_PRESSED, | |
1154 rb->GetImageSkiaNamed(IDR_CLOSE_1_P)); | |
1155 layout->AddView(*close_button); | |
1156 } else { | |
1157 layout->StartRow(1, 0); | |
1158 layout->AddView(title_label); | |
1159 } | |
1160 | |
1161 // Adds body content. | |
1162 views::Label* content_label = new views::Label(content_text); | |
1163 content_label->SetMultiLine(true); | |
1164 content_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); | |
1165 content_label->SetAutoColorReadabilityEnabled(false); | |
1166 content_label->SetEnabledColor(profiles::kAvatarTutorialContentTextColor); | |
1167 | |
1168 const int related_control_vertical = | |
1169 provider->GetDistanceMetric(DISTANCE_UNRELATED_CONTROL_VERTICAL); | |
1170 | |
1171 layout->StartRowWithPadding(1, 0, 0, related_control_vertical); | |
1172 layout->AddView(content_label); | |
1173 | |
1174 // Adds links and buttons. | |
1175 bool has_button = !button_text.empty(); | |
1176 if (has_button) { | |
1177 *button = views::MdTextButton::CreateSecondaryUiButton(this, button_text); | |
1178 if (ui::MaterialDesignController::IsSecondaryUiMaterial()) | |
1179 (*button)->SetEnabledTextColors(kTitleAndButtonTextColor); | |
1180 else | |
1181 (*button)->SetHorizontalAlignment(gfx::ALIGN_CENTER); | |
1182 } | |
1183 | |
1184 bool has_link = !link_text.empty(); | |
1185 if (has_link) { | |
1186 *link = CreateLink(link_text, this); | |
1187 (*link)->SetHorizontalAlignment(gfx::ALIGN_LEFT); | |
1188 (*link)->SetAutoColorReadabilityEnabled(false); | |
1189 (*link)->SetEnabledColor(kTitleAndButtonTextColor); | |
1190 } | |
1191 | |
1192 const int unrelated_control_vertical = | |
1193 provider->GetDistanceMetric(DISTANCE_UNRELATED_CONTROL_VERTICAL); | |
1194 | |
1195 if (stack_button) { | |
1196 DCHECK(has_button); | |
1197 layout->StartRowWithPadding(1, 0, 0, unrelated_control_vertical); | |
1198 layout->AddView(*button); | |
1199 if (has_link) { | |
1200 layout->StartRowWithPadding(1, 0, 0, related_control_vertical); | |
1201 (*link)->SetHorizontalAlignment(gfx::ALIGN_CENTER); | |
1202 layout->AddView(*link); | |
1203 } | |
1204 } else { | |
1205 DCHECK(has_link || has_button); | |
1206 layout->StartRowWithPadding(1, 1, 0, unrelated_control_vertical); | |
1207 if (has_link) | |
1208 layout->AddView(*link); | |
1209 else | |
1210 layout->SkipColumns(1); | |
1211 if (has_button) | |
1212 layout->AddView(*button); | |
1213 else | |
1214 layout->SkipColumns(1); | |
1215 } | |
1216 | |
1217 return view; | |
1218 } | |
1219 | |
1220 views::View* ProfileChooserView::CreateSyncErrorViewIfNeeded() { | 993 views::View* ProfileChooserView::CreateSyncErrorViewIfNeeded() { |
1221 int content_string_id, button_string_id; | 994 int content_string_id, button_string_id; |
1222 views::LabelButton** button_out = nullptr; | 995 views::LabelButton** button_out = nullptr; |
1223 sync_ui_util::AvatarSyncErrorType error = | 996 sync_ui_util::AvatarSyncErrorType error = |
1224 sync_ui_util::GetMessagesForAvatarSyncError( | 997 sync_ui_util::GetMessagesForAvatarSyncError( |
1225 browser_->profile(), &content_string_id, &button_string_id); | 998 browser_->profile(), &content_string_id, &button_string_id); |
1226 switch (error) { | 999 switch (error) { |
1227 case sync_ui_util::MANAGED_USER_UNRECOVERABLE_ERROR: | 1000 case sync_ui_util::MANAGED_USER_UNRECOVERABLE_ERROR: |
1228 button_out = &sync_error_signout_button_; | 1001 button_out = &sync_error_signout_button_; |
1229 break; | 1002 break; |
(...skipping 550 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1780 layout->AddPaddingRow(0, unrelated_vertical_spacing); | 1553 layout->AddPaddingRow(0, unrelated_vertical_spacing); |
1781 } | 1554 } |
1782 | 1555 |
1783 TitleCard* title_card = new TitleCard( | 1556 TitleCard* title_card = new TitleCard( |
1784 l10n_util::GetStringUTF16(IDS_PROFILES_ACCOUNT_REMOVAL_TITLE), | 1557 l10n_util::GetStringUTF16(IDS_PROFILES_ACCOUNT_REMOVAL_TITLE), |
1785 this, &account_removal_cancel_button_); | 1558 this, &account_removal_cancel_button_); |
1786 return TitleCard::AddPaddedTitleCard(view, title_card, | 1559 return TitleCard::AddPaddedTitleCard(view, title_card, |
1787 kFixedAccountRemovalViewWidth); | 1560 kFixedAccountRemovalViewWidth); |
1788 } | 1561 } |
1789 | 1562 |
1790 views::View* ProfileChooserView::CreateWelcomeUpgradeTutorialView( | |
1791 const AvatarMenu::Item& avatar_item) { | |
1792 ProfileMetrics::LogProfileNewAvatarMenuUpgrade( | |
1793 ProfileMetrics::PROFILE_AVATAR_MENU_UPGRADE_VIEW); | |
1794 | |
1795 // For local profiles, the "Not you" link doesn't make sense. | |
1796 base::string16 link_message = avatar_item.signed_in ? | |
1797 l10n_util::GetStringFUTF16(IDS_PROFILES_NOT_YOU, avatar_item.name) : | |
1798 base::string16(); | |
1799 | |
1800 return CreateTutorialView( | |
1801 profiles::TUTORIAL_MODE_WELCOME_UPGRADE, | |
1802 l10n_util::GetStringUTF16( | |
1803 IDS_PROFILES_WELCOME_UPGRADE_TUTORIAL_TITLE), | |
1804 l10n_util::GetStringUTF16( | |
1805 IDS_PROFILES_WELCOME_UPGRADE_TUTORIAL_CONTENT_TEXT), | |
1806 link_message, | |
1807 l10n_util::GetStringUTF16(IDS_PROFILES_TUTORIAL_WHATS_NEW_BUTTON), | |
1808 true /* stack_button */, | |
1809 &tutorial_not_you_link_, | |
1810 &tutorial_see_whats_new_button_, | |
1811 &tutorial_close_button_); | |
1812 } | |
1813 | |
1814 views::View* ProfileChooserView::CreateSigninConfirmationView() { | |
1815 ProfileMetrics::LogProfileNewAvatarMenuSignin( | |
1816 ProfileMetrics::PROFILE_AVATAR_MENU_SIGNIN_VIEW); | |
1817 | |
1818 return CreateTutorialView( | |
1819 profiles::TUTORIAL_MODE_CONFIRM_SIGNIN, | |
1820 l10n_util::GetStringUTF16(IDS_PROFILES_CONFIRM_SIGNIN_TUTORIAL_TITLE), | |
1821 l10n_util::GetStringUTF16( | |
1822 IDS_PROFILES_CONFIRM_SIGNIN_TUTORIAL_CONTENT_TEXT), | |
1823 l10n_util::GetStringUTF16(IDS_PROFILES_SYNC_SETTINGS_LINK), | |
1824 l10n_util::GetStringUTF16(IDS_PROFILES_TUTORIAL_OK_BUTTON), | |
1825 false /* stack_button */, | |
1826 &tutorial_sync_settings_link_, | |
1827 &tutorial_sync_settings_ok_button_, | |
1828 NULL /* close_button*/); | |
1829 } | |
1830 | |
1831 views::View* ProfileChooserView::CreateSigninErrorView() { | |
1832 LoginUIService* login_ui_service = | |
1833 LoginUIServiceFactory::GetForProfile(browser_->profile()); | |
1834 base::string16 last_login_result(login_ui_service->GetLastLoginResult()); | |
1835 return CreateTutorialView( | |
1836 profiles::TUTORIAL_MODE_SHOW_ERROR, | |
1837 l10n_util::GetStringUTF16(IDS_PROFILES_ERROR_TUTORIAL_TITLE), | |
1838 last_login_result, | |
1839 l10n_util::GetStringUTF16(IDS_PROFILES_PROFILE_TUTORIAL_LEARN_MORE), | |
1840 base::string16(), | |
1841 false /* stack_button */, | |
1842 &tutorial_learn_more_link_, | |
1843 NULL, | |
1844 &tutorial_close_button_); | |
1845 } | |
1846 | |
1847 views::View* ProfileChooserView::CreateSwitchUserView() { | 1563 views::View* ProfileChooserView::CreateSwitchUserView() { |
1848 ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); | 1564 ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); |
1849 views::View* view = new views::View(); | 1565 views::View* view = new views::View(); |
1850 views::GridLayout* layout = CreateSingleColumnLayout( | 1566 views::GridLayout* layout = CreateSingleColumnLayout( |
1851 view, kFixedSwitchUserViewWidth); | 1567 view, kFixedSwitchUserViewWidth); |
1852 views::ColumnSet* columns = layout->AddColumnSet(1); | 1568 views::ColumnSet* columns = layout->AddColumnSet(1); |
1853 gfx::Insets dialog_insets = provider->GetInsetsMetric( | 1569 gfx::Insets dialog_insets = provider->GetInsetsMetric( |
1854 views::INSETS_DIALOG_CONTENTS); | 1570 views::INSETS_DIALOG_CONTENTS); |
1855 columns->AddPaddingColumn(0, dialog_insets.left()); | 1571 columns->AddPaddingColumn(0, dialog_insets.left()); |
1856 int label_width = kFixedSwitchUserViewWidth - dialog_insets.width(); | 1572 int label_width = kFixedSwitchUserViewWidth - dialog_insets.width(); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1909 IncognitoModePrefs::GetAvailability(browser_->profile()->GetPrefs()) != | 1625 IncognitoModePrefs::GetAvailability(browser_->profile()->GetPrefs()) != |
1910 IncognitoModePrefs::DISABLED; | 1626 IncognitoModePrefs::DISABLED; |
1911 return incognito_available && !browser_->profile()->IsGuestSession(); | 1627 return incognito_available && !browser_->profile()->IsGuestSession(); |
1912 } | 1628 } |
1913 | 1629 |
1914 void ProfileChooserView::PostActionPerformed( | 1630 void ProfileChooserView::PostActionPerformed( |
1915 ProfileMetrics::ProfileDesktopMenu action_performed) { | 1631 ProfileMetrics::ProfileDesktopMenu action_performed) { |
1916 ProfileMetrics::LogProfileDesktopMenu(action_performed, gaia_service_type_); | 1632 ProfileMetrics::LogProfileDesktopMenu(action_performed, gaia_service_type_); |
1917 gaia_service_type_ = signin::GAIA_SERVICE_TYPE_NONE; | 1633 gaia_service_type_ = signin::GAIA_SERVICE_TYPE_NONE; |
1918 } | 1634 } |
OLD | NEW |