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

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

Issue 2057203002: Bringing back fast user switching on desktop user menu (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed Anthony's comments Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/views/profiles/profile_chooser_view.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/views/profiles/profile_chooser_view.cc
diff --git a/chrome/browser/ui/views/profiles/profile_chooser_view.cc b/chrome/browser/ui/views/profiles/profile_chooser_view.cc
index 6f262f9c51f78fc2fb90a8f49ff347d93027a0f0..aa3ade501c117ea8100156af170511de9164aa20 100644
--- a/chrome/browser/ui/views/profiles/profile_chooser_view.cc
+++ b/chrome/browser/ui/views/profiles/profile_chooser_view.cc
@@ -24,6 +24,7 @@
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/browser_dialogs.h"
+#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/chrome_pages.h"
#include "chrome/browser/ui/singleton_tabs.h"
#include "chrome/browser/ui/user_manager.h"
@@ -630,8 +631,11 @@ void ProfileChooserView::ShowBubble(
// Don't start creating the view if it would be an empty fast user switcher.
// It has to happen here to prevent the view system from creating an empty
// container.
+ // Same for material design user menu since fast profile switcher will be
+ // migrated to the left-click menu.
if (view_mode == profiles::BUBBLE_VIEW_MODE_FAST_PROFILE_CHOOSER &&
- !profiles::HasProfileSwitchTargets(browser->profile())) {
+ (!profiles::HasProfileSwitchTargets(browser->profile()) ||
+ switches::IsMaterialDesignUserMenu())) {
return;
}
@@ -693,27 +697,29 @@ void ProfileChooserView::ResetView() {
open_other_profile_indexes_map_.clear();
delete_account_button_map_.clear();
reauth_account_button_map_.clear();
- manage_accounts_link_ = NULL;
- signin_current_profile_link_ = NULL;
- auth_error_email_button_ = NULL;
- current_profile_photo_ = NULL;
- current_profile_name_ = NULL;
- users_button_ = NULL;
- go_incognito_button_ = NULL;
- lock_button_ = NULL;
- add_account_link_ = NULL;
- gaia_signin_cancel_button_ = NULL;
- remove_account_button_ = NULL;
- account_removal_cancel_button_ = NULL;
- add_person_button_ = NULL;
- disconnect_button_ = NULL;
- switch_user_cancel_button_ = NULL;
- tutorial_sync_settings_ok_button_ = NULL;
- tutorial_close_button_ = NULL;
- tutorial_sync_settings_link_ = NULL;
- tutorial_see_whats_new_button_ = NULL;
- tutorial_not_you_link_ = NULL;
- tutorial_learn_more_link_ = NULL;
+ manage_accounts_link_ = nullptr;
+ signin_current_profile_link_ = nullptr;
+ auth_error_email_button_ = nullptr;
+ current_profile_photo_ = nullptr;
+ current_profile_name_ = nullptr;
+ guest_profile_button_ = nullptr;
+ users_button_ = nullptr;
+ go_incognito_button_ = nullptr;
+ lock_button_ = nullptr;
+ close_all_windows_button_ = nullptr;
+ add_account_link_ = nullptr;
+ gaia_signin_cancel_button_ = nullptr;
+ remove_account_button_ = nullptr;
+ account_removal_cancel_button_ = nullptr;
+ add_person_button_ = nullptr;
+ disconnect_button_ = nullptr;
+ switch_user_cancel_button_ = nullptr;
+ tutorial_sync_settings_ok_button_ = nullptr;
+ tutorial_close_button_ = nullptr;
+ tutorial_sync_settings_link_ = nullptr;
+ tutorial_see_whats_new_button_ = nullptr;
+ tutorial_not_you_link_ = nullptr;
+ tutorial_learn_more_link_ = nullptr;
}
void ProfileChooserView::Init() {
@@ -902,7 +908,12 @@ bool ProfileChooserView::HandleContextMenu(
void ProfileChooserView::ButtonPressed(views::Button* sender,
const ui::Event& event) {
- if (sender == users_button_) {
+ if (sender == guest_profile_button_) {
+ PrefService* service = g_browser_process->local_state();
+ DCHECK(service);
+ DCHECK(service->GetBoolean(prefs::kBrowserGuestModeEnabled));
+ profiles::SwitchToGuestProfile(ProfileManager::CreateCallback());
+ } else if (sender == users_button_) {
// If this is a guest session, close all the guest browser windows.
if (browser_->profile()->IsGuestSession()) {
profiles::CloseGuestProfileWindows();
@@ -919,6 +930,8 @@ void ProfileChooserView::ButtonPressed(views::Button* sender,
} else if (sender == lock_button_) {
profiles::LockProfile(browser_->profile());
PostActionPerformed(ProfileMetrics::PROFILE_DESKTOP_MENU_LOCK);
+ } else if (sender == close_all_windows_button_) {
+ profiles::CloseProfileWindows(browser_->profile());
} else if (sender == auth_error_email_button_) {
ShowViewFromMode(profiles::BUBBLE_VIEW_MODE_GAIA_REAUTH);
} else if (sender == tutorial_sync_settings_ok_button_) {
@@ -1091,7 +1104,8 @@ void ProfileChooserView::PopulateCompleteProfileChooserView(
const AvatarMenu::Item& item = avatar_menu->GetItemAt(i);
if (item.active) {
option_buttons_view = CreateOptionsView(
- item.signed_in && profiles::IsLockAvailable(browser_->profile()));
+ item.signed_in && profiles::IsLockAvailable(browser_->profile()),
+ avatar_menu);
current_profile_view = CreateCurrentProfileView(item, false);
if (IsProfileChooser(view_mode_)) {
tutorial_view = CreateTutorialViewIfNeeded(item);
@@ -1114,7 +1128,7 @@ void ProfileChooserView::PopulateCompleteProfileChooserView(
if (!current_profile_view) {
// Guest windows don't have an active profile.
current_profile_view = CreateGuestProfileView();
- option_buttons_view = CreateOptionsView(false);
+ option_buttons_view = CreateOptionsView(false, avatar_menu);
}
layout->StartRow(1, 0);
@@ -1498,21 +1512,56 @@ views::View* ProfileChooserView::CreateOtherProfilesView(
return view;
}
-views::View* ProfileChooserView::CreateOptionsView(bool display_lock) {
+views::View* ProfileChooserView::CreateOptionsView(bool display_lock,
+ AvatarMenu* avatar_menu) {
views::View* view = new views::View();
views::GridLayout* layout = CreateSingleColumnLayout(view, kFixedMenuWidth);
+ const int kIconSize = switches::IsMaterialDesignUserMenu() ? 20 : 16;
+ if (switches::IsMaterialDesignUserMenu()) {
+ // Add the user switching buttons
+ const int kProfileIconSize = 18;
+ layout->StartRowWithPadding(1, 0, 0, views::kRelatedControlVerticalSpacing);
+ for (size_t i = 0; i < avatar_menu->GetNumberOfItems(); ++i) {
+ const AvatarMenu::Item& item = avatar_menu->GetItemAt(i);
+ if (!item.active) {
+ gfx::Image image = profiles::GetSizedAvatarIcon(
+ item.icon, true, kProfileIconSize, kProfileIconSize,
+ profiles::SHAPE_CIRCLE);
+ views::LabelButton* button = new BackgroundColorHoverButton(
+ this, profiles::GetProfileSwitcherTextForItem(item),
+ *image.ToImageSkia());
+ open_other_profile_indexes_map_[button] = i;
+
+ layout->StartRow(1, 0);
+ layout->AddView(button);
+ }
+ }
+
+ // Add the "Guest" button for browsing as guest
+ if (!browser_->profile()->IsGuestSession()) {
+ PrefService* service = g_browser_process->local_state();
+ DCHECK(service);
+ if (service->GetBoolean(prefs::kBrowserGuestModeEnabled)) {
+ guest_profile_button_ = new BackgroundColorHoverButton(
+ this, l10n_util::GetStringUTF16(IDS_GUEST_PROFILE_NAME),
+ gfx::CreateVectorIcon(gfx::VectorIconId::ACCOUNT_BOX, kIconSize,
+ gfx::kChromeIconGrey));
+ layout->StartRow(1, 0);
+ layout->AddView(guest_profile_button_);
+ }
+ }
+ }
+
base::string16 text = browser_->profile()->IsGuestSession() ?
l10n_util::GetStringUTF16(IDS_PROFILES_EXIT_GUEST) :
l10n_util::GetStringUTF16(IDS_PROFILES_SWITCH_USERS_BUTTON);
+ gfx::VectorIconId settings_icon = gfx::VectorIconId::ACCOUNT_BOX;
if (!browser_->profile()->IsGuestSession()
&& switches::IsMaterialDesignUserMenu()) {
text = l10n_util::GetStringUTF16(IDS_PROFILES_MANAGE_USERS_BUTTON);
+ settings_icon = gfx::VectorIconId::SETTINGS;
}
- const int kIconSize = 16;
-
- gfx::VectorIconId settings_icon = switches::IsMaterialDesignUserMenu() ?
- gfx::VectorIconId::SETTINGS : gfx::VectorIconId::ACCOUNT_BOX;
users_button_ = new BackgroundColorHoverButton(
this, text, gfx::CreateVectorIcon(settings_icon, kIconSize,
gfx::kChromeIconGrey));
@@ -1534,8 +1583,10 @@ views::View* ProfileChooserView::CreateOptionsView(bool display_lock) {
}
if (display_lock) {
- layout->StartRow(1, 0);
- layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
+ if (!switches::IsMaterialDesignUserMenu()) {
+ layout->StartRow(1, 0);
+ layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
+ }
lock_button_ = new BackgroundColorHoverButton(
this, l10n_util::GetStringUTF16(IDS_PROFILES_PROFILE_SIGNOUT_BUTTON),
@@ -1543,7 +1594,27 @@ views::View* ProfileChooserView::CreateOptionsView(bool display_lock) {
gfx::kChromeIconGrey));
layout->StartRow(1, 0);
layout->AddView(lock_button_);
+ } else if (switches::IsMaterialDesignUserMenu() &&
+ !browser_->profile()->IsGuestSession()) {
+ int num_browsers = 0;
+ for (auto* browser : *BrowserList::GetInstance()) {
+ if (browser->profile()->GetOriginalProfile() ==
+ browser_->profile()->GetOriginalProfile())
+ num_browsers++;
+ }
+ if (num_browsers > 1) {
+ close_all_windows_button_ = new BackgroundColorHoverButton(
+ this,
+ l10n_util::GetStringUTF16(IDS_PROFILES_CLOSE_ALL_WINDOWS_BUTTON),
+ gfx::CreateVectorIcon(gfx::VectorIconId::LOCK, kIconSize,
+ gfx::kChromeIconGrey));
+ layout->StartRow(1, 0);
+ layout->AddView(close_all_windows_button_);
+ }
}
+
+ if (switches::IsMaterialDesignUserMenu())
+ layout->StartRowWithPadding(1, 0, 0, views::kRelatedControlVerticalSpacing);
return view;
}
« no previous file with comments | « chrome/browser/ui/views/profiles/profile_chooser_view.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698