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

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

Issue 869793004: Bring up the Fast User Switcher on Shift+Click on the new Avatar Button (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase before submit Created 5 years, 10 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/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"
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 const int kFixedMenuWidth = 250; 72 const int kFixedMenuWidth = 250;
73 const int kButtonHeight = 32; 73 const int kButtonHeight = 32;
74 const int kFixedGaiaViewHeight = 440; 74 const int kFixedGaiaViewHeight = 440;
75 const int kFixedGaiaViewWidth = 360; 75 const int kFixedGaiaViewWidth = 360;
76 const int kFixedAccountRemovalViewWidth = 280; 76 const int kFixedAccountRemovalViewWidth = 280;
77 const int kFixedSwitchUserViewWidth = 320; 77 const int kFixedSwitchUserViewWidth = 320;
78 const int kLargeImageSide = 88; 78 const int kLargeImageSide = 88;
79 79
80 const int kVerticalSpacing = 16; 80 const int kVerticalSpacing = 16;
81 81
82 bool IsProfileChooser(profiles::BubbleViewMode mode) {
83 return mode == profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER ||
84 mode == profiles::BUBBLE_VIEW_MODE_FAST_PROFILE_CHOOSER;
85 }
86
82 // Creates a GridLayout with a single column. This ensures that all the child 87 // Creates a GridLayout with a single column. This ensures that all the child
83 // views added get auto-expanded to fill the full width of the bubble. 88 // views added get auto-expanded to fill the full width of the bubble.
84 views::GridLayout* CreateSingleColumnLayout(views::View* view, int width) { 89 views::GridLayout* CreateSingleColumnLayout(views::View* view, int width) {
85 views::GridLayout* layout = new views::GridLayout(view); 90 views::GridLayout* layout = new views::GridLayout(view);
86 view->SetLayoutManager(layout); 91 view->SetLayoutManager(layout);
87 92
88 views::ColumnSet* columns = layout->AddColumnSet(0); 93 views::ColumnSet* columns = layout->AddColumnSet(0);
89 columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0, 94 columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0,
90 views::GridLayout::FIXED, width, width); 95 views::GridLayout::FIXED, width, width);
91 return layout; 96 return layout;
(...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 tutorial_close_button_ = NULL; 583 tutorial_close_button_ = NULL;
579 tutorial_sync_settings_link_ = NULL; 584 tutorial_sync_settings_link_ = NULL;
580 tutorial_see_whats_new_button_ = NULL; 585 tutorial_see_whats_new_button_ = NULL;
581 tutorial_not_you_link_ = NULL; 586 tutorial_not_you_link_ = NULL;
582 tutorial_learn_more_link_ = NULL; 587 tutorial_learn_more_link_ = NULL;
583 } 588 }
584 589
585 void ProfileChooserView::Init() { 590 void ProfileChooserView::Init() {
586 // If view mode is PROFILE_CHOOSER but there is an auth error, force 591 // If view mode is PROFILE_CHOOSER but there is an auth error, force
587 // ACCOUNT_MANAGEMENT mode. 592 // ACCOUNT_MANAGEMENT mode.
588 if (view_mode_ == profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER && 593 if (IsProfileChooser(view_mode_) &&
589 HasAuthError(browser_->profile()) && 594 HasAuthError(browser_->profile()) &&
590 switches::IsEnableAccountConsistency() && 595 switches::IsEnableAccountConsistency() &&
591 avatar_menu_->GetItemAt(avatar_menu_->GetActiveProfileIndex()). 596 avatar_menu_->GetItemAt(avatar_menu_->GetActiveProfileIndex()).
592 signed_in) { 597 signed_in) {
593 view_mode_ = profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT; 598 view_mode_ = profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT;
594 } 599 }
595 600
596 // The arrow keys can be used to tab between items. 601 // The arrow keys can be used to tab between items.
597 AddAccelerator(ui::Accelerator(ui::VKEY_DOWN, ui::EF_NONE)); 602 AddAccelerator(ui::Accelerator(ui::VKEY_DOWN, ui::EF_NONE));
598 AddAccelerator(ui::Accelerator(ui::VKEY_UP, ui::EF_NONE)); 603 AddAccelerator(ui::Accelerator(ui::VKEY_UP, ui::EF_NONE));
599 604
600 ShowView(view_mode_, avatar_menu_.get()); 605 ShowView(view_mode_, avatar_menu_.get());
601 } 606 }
602 607
603 void ProfileChooserView::OnAvatarMenuChanged( 608 void ProfileChooserView::OnAvatarMenuChanged(
604 AvatarMenu* avatar_menu) { 609 AvatarMenu* avatar_menu) {
605 if (view_mode_ == profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER || 610 if (IsProfileChooser(view_mode_) ||
606 view_mode_ == profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT) { 611 view_mode_ == profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT) {
607 // Refresh the view with the new menu. We can't just update the local copy 612 // Refresh the view with the new menu. We can't just update the local copy
608 // as this may have been triggered by a sign out action, in which case 613 // as this may have been triggered by a sign out action, in which case
609 // the view is being destroyed. 614 // the view is being destroyed.
610 ShowView(view_mode_, avatar_menu); 615 ShowView(view_mode_, avatar_menu);
611 } 616 }
612 } 617 }
613 618
614 void ProfileChooserView::OnRefreshTokenAvailable( 619 void ProfileChooserView::OnRefreshTokenAvailable(
615 const std::string& account_id) { 620 const std::string& account_id) {
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
884 return true; 889 return true;
885 890
886 profiles::UpdateProfileName(profile, new_profile_name); 891 profiles::UpdateProfileName(profile, new_profile_name);
887 PostActionPerformed(ProfileMetrics::PROFILE_DESKTOP_MENU_EDIT_NAME); 892 PostActionPerformed(ProfileMetrics::PROFILE_DESKTOP_MENU_EDIT_NAME);
888 current_profile_name_->ShowReadOnlyView(); 893 current_profile_name_->ShowReadOnlyView();
889 return true; 894 return true;
890 } 895 }
891 return false; 896 return false;
892 } 897 }
893 898
894 views::View* ProfileChooserView::CreateProfileChooserView( 899 void ProfileChooserView::PopulateCompleteProfileChooserView(
900 views::GridLayout* layout,
895 AvatarMenu* avatar_menu) { 901 AvatarMenu* avatar_menu) {
896 views::View* view = new views::View();
897 views::GridLayout* layout = CreateSingleColumnLayout(view, kFixedMenuWidth);
898 // Separate items into active and alternatives. 902 // Separate items into active and alternatives.
899 Indexes other_profiles; 903 Indexes other_profiles;
900 views::View* tutorial_view = NULL; 904 views::View* tutorial_view = NULL;
901 views::View* current_profile_view = NULL; 905 views::View* current_profile_view = NULL;
902 views::View* current_profile_accounts = NULL; 906 views::View* current_profile_accounts = NULL;
903 views::View* option_buttons_view = NULL; 907 views::View* option_buttons_view = NULL;
904 for (size_t i = 0; i < avatar_menu->GetNumberOfItems(); ++i) { 908 for (size_t i = 0; i < avatar_menu->GetNumberOfItems(); ++i) {
905 const AvatarMenu::Item& item = avatar_menu->GetItemAt(i); 909 const AvatarMenu::Item& item = avatar_menu->GetItemAt(i);
906 if (item.active) { 910 if (item.active) {
907 option_buttons_view = CreateOptionsView( 911 option_buttons_view = CreateOptionsView(
908 item.signed_in && profiles::IsLockAvailable(browser_->profile())); 912 item.signed_in && profiles::IsLockAvailable(browser_->profile()));
909 current_profile_view = CreateCurrentProfileView(item, false); 913 current_profile_view = CreateCurrentProfileView(item, false);
910 if (view_mode_ == profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER) { 914 if (IsProfileChooser(view_mode_)) {
911 switch (tutorial_mode_) { 915 switch (tutorial_mode_) {
912 case profiles::TUTORIAL_MODE_NONE: 916 case profiles::TUTORIAL_MODE_NONE:
913 case profiles::TUTORIAL_MODE_WELCOME_UPGRADE: 917 case profiles::TUTORIAL_MODE_WELCOME_UPGRADE:
914 tutorial_view = CreateWelcomeUpgradeTutorialViewIfNeeded( 918 tutorial_view = CreateWelcomeUpgradeTutorialViewIfNeeded(
915 tutorial_mode_ == profiles::TUTORIAL_MODE_WELCOME_UPGRADE, 919 tutorial_mode_ == profiles::TUTORIAL_MODE_WELCOME_UPGRADE,
916 item); 920 item);
917 break; 921 break;
918 case profiles::TUTORIAL_MODE_CONFIRM_SIGNIN: 922 case profiles::TUTORIAL_MODE_CONFIRM_SIGNIN:
919 tutorial_view = CreateSigninConfirmationView(); 923 tutorial_view = CreateSigninConfirmationView();
920 break; 924 break;
(...skipping 19 matching lines...) Expand all
940 944
941 if (!current_profile_view) { 945 if (!current_profile_view) {
942 // Guest windows don't have an active profile. 946 // Guest windows don't have an active profile.
943 current_profile_view = CreateGuestProfileView(); 947 current_profile_view = CreateGuestProfileView();
944 option_buttons_view = CreateOptionsView(false); 948 option_buttons_view = CreateOptionsView(false);
945 } 949 }
946 950
947 layout->StartRow(1, 0); 951 layout->StartRow(1, 0);
948 layout->AddView(current_profile_view); 952 layout->AddView(current_profile_view);
949 953
950 if (view_mode_ != profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER) { 954 if (!IsProfileChooser(view_mode_)) {
951 DCHECK(current_profile_accounts); 955 DCHECK(current_profile_accounts);
952 layout->StartRow(0, 0); 956 layout->StartRow(0, 0);
953 layout->AddView(new views::Separator(views::Separator::HORIZONTAL)); 957 layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
954 layout->StartRow(1, 0); 958 layout->StartRow(1, 0);
955 layout->AddView(current_profile_accounts); 959 layout->AddView(current_profile_accounts);
956 } 960 }
957 961
958 if (browser_->profile()->IsSupervised()) { 962 if (browser_->profile()->IsSupervised()) {
959 layout->StartRow(0, 0); 963 layout->StartRow(0, 0);
960 layout->AddView(new views::Separator(views::Separator::HORIZONTAL)); 964 layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
961 layout->StartRow(1, 0); 965 layout->StartRow(1, 0);
962 layout->AddView(CreateSupervisedUserDisclaimerView()); 966 layout->AddView(CreateSupervisedUserDisclaimerView());
963 } 967 }
964 968
965 if (view_mode_ == profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER) { 969 if (IsProfileChooser(view_mode_)) {
966 layout->StartRow(1, 0); 970 layout->StartRow(1, 0);
967 if (switches::IsFastUserSwitching()) 971 if (switches::IsFastUserSwitching()) {
968 layout->AddView(CreateOtherProfilesView(other_profiles)); 972 layout->AddView(CreateOtherProfilesView(other_profiles));
973 }
969 } 974 }
970 975
971 layout->StartRow(0, 0); 976 layout->StartRow(0, 0);
972 layout->AddView(new views::Separator(views::Separator::HORIZONTAL)); 977 layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
973 978
974 if (option_buttons_view) { 979 if (option_buttons_view) {
975 layout->StartRow(0, 0); 980 layout->StartRow(0, 0);
976 layout->AddView(option_buttons_view); 981 layout->AddView(option_buttons_view);
977 } 982 }
983 }
984
985 void ProfileChooserView::PopulateMinimalProfileChooserView(
986 views::GridLayout* layout,
987 AvatarMenu* avatar_menu) {
988 Indexes other_profiles;
989 for (size_t i = 0; i < avatar_menu->GetNumberOfItems(); ++i) {
990 const AvatarMenu::Item& item = avatar_menu->GetItemAt(i);
991 if (!item.active) {
992 other_profiles.push_back(i);
993 }
994 }
995
996 layout->StartRow(1, 0);
997 layout->AddView(CreateOtherProfilesView(other_profiles));
998 }
999
1000 views::View* ProfileChooserView::CreateProfileChooserView(
1001 AvatarMenu* avatar_menu) {
1002 views::View* view = new views::View();
1003 views::GridLayout* layout = CreateSingleColumnLayout(view, kFixedMenuWidth);
1004
1005 if (view_mode_ == profiles::BUBBLE_VIEW_MODE_FAST_PROFILE_CHOOSER)
1006 PopulateMinimalProfileChooserView(layout, avatar_menu);
1007 else
1008 PopulateCompleteProfileChooserView(layout, avatar_menu);
978 1009
979 return view; 1010 return view;
980 } 1011 }
981 1012
982 void ProfileChooserView::DismissTutorial() { 1013 void ProfileChooserView::DismissTutorial() {
983 // Never shows the upgrade tutorial again if manually closed. 1014 // Never shows the upgrade tutorial again if manually closed.
984 if (tutorial_mode_ == profiles::TUTORIAL_MODE_WELCOME_UPGRADE) { 1015 if (tutorial_mode_ == profiles::TUTORIAL_MODE_WELCOME_UPGRADE) {
985 browser_->profile()->GetPrefs()->SetInteger( 1016 browser_->profile()->GetPrefs()->SetInteger(
986 prefs::kProfileAvatarTutorialShown, 1017 prefs::kProfileAvatarTutorialShown,
987 signin_ui_util::kUpgradeWelcomeTutorialShowMax + 1); 1018 signin_ui_util::kUpgradeWelcomeTutorialShowMax + 1);
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
1155 layout->AddView(current_profile_name_); 1186 layout->AddView(current_profile_name_);
1156 1187
1157 if (is_guest) 1188 if (is_guest)
1158 return view; 1189 return view;
1159 1190
1160 // The available links depend on the type of profile that is active. 1191 // The available links depend on the type of profile that is active.
1161 if (avatar_item.signed_in) { 1192 if (avatar_item.signed_in) {
1162 layout->StartRow(1, 0); 1193 layout->StartRow(1, 0);
1163 if (switches::IsEnableAccountConsistency()) { 1194 if (switches::IsEnableAccountConsistency()) {
1164 base::string16 link_title = l10n_util::GetStringUTF16( 1195 base::string16 link_title = l10n_util::GetStringUTF16(
1165 view_mode_ == profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER ? 1196 IsProfileChooser(view_mode_) ?
1166 IDS_PROFILES_PROFILE_MANAGE_ACCOUNTS_BUTTON : 1197 IDS_PROFILES_PROFILE_MANAGE_ACCOUNTS_BUTTON :
1167 IDS_PROFILES_PROFILE_HIDE_MANAGE_ACCOUNTS_BUTTON); 1198 IDS_PROFILES_PROFILE_HIDE_MANAGE_ACCOUNTS_BUTTON);
1168 manage_accounts_link_ = CreateLink(link_title, this); 1199 manage_accounts_link_ = CreateLink(link_title, this);
1169 manage_accounts_link_->SetHorizontalAlignment(gfx::ALIGN_CENTER); 1200 manage_accounts_link_->SetHorizontalAlignment(gfx::ALIGN_CENTER);
1170 layout->AddView(manage_accounts_link_); 1201 layout->AddView(manage_accounts_link_);
1171 } else { 1202 } else {
1172 // Badge the email address if there's an authentication error. 1203 // Badge the email address if there's an authentication error.
1173 if (HasAuthError(browser_->profile())) { 1204 if (HasAuthError(browser_->profile())) {
1174 const gfx::ImageSkia warning_image = *rb->GetImageNamed( 1205 const gfx::ImageSkia warning_image = *rb->GetImageNamed(
1175 IDR_ICON_PROFILES_ACCOUNT_BUTTON_ERROR).ToImageSkia(); 1206 IDR_ICON_PROFILES_ACCOUNT_BUTTON_ERROR).ToImageSkia();
(...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after
1674 IncognitoModePrefs::GetAvailability(browser_->profile()->GetPrefs()) != 1705 IncognitoModePrefs::GetAvailability(browser_->profile()->GetPrefs()) !=
1675 IncognitoModePrefs::DISABLED; 1706 IncognitoModePrefs::DISABLED;
1676 return incognito_available && !browser_->profile()->IsGuestSession(); 1707 return incognito_available && !browser_->profile()->IsGuestSession();
1677 } 1708 }
1678 1709
1679 void ProfileChooserView::PostActionPerformed( 1710 void ProfileChooserView::PostActionPerformed(
1680 ProfileMetrics::ProfileDesktopMenu action_performed) { 1711 ProfileMetrics::ProfileDesktopMenu action_performed) {
1681 ProfileMetrics::LogProfileDesktopMenu(action_performed, gaia_service_type_); 1712 ProfileMetrics::LogProfileDesktopMenu(action_performed, gaia_service_type_);
1682 gaia_service_type_ = signin::GAIA_SERVICE_TYPE_NONE; 1713 gaia_service_type_ = signin::GAIA_SERVICE_TYPE_NONE;
1683 } 1714 }
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