Index: ash/system/user/user_view.cc |
diff --git a/ash/system/user/user_view.cc b/ash/system/user/user_view.cc |
index 56a77293ae814a47a319e392ea49780756d4dce6..7bdb4782dd6aa5dd7a6fec4f187bc5bcef386a86 100644 |
--- a/ash/system/user/user_view.cc |
+++ b/ash/system/user/user_view.cc |
@@ -37,7 +37,6 @@ |
#include "ui/gfx/color_utils.h" |
#include "ui/gfx/geometry/insets.h" |
#include "ui/gfx/paint_vector_icon.h" |
-#include "ui/native_theme/native_theme.h" |
#include "ui/views/controls/button/label_button.h" |
#include "ui/views/controls/label.h" |
#include "ui/views/controls/separator.h" |
@@ -74,7 +73,8 @@ |
} |
// Creates the view shown in the user switcher popup ("AddUserMenuOption"). |
-views::View* CreateAddUserView(AddUserSessionPolicy policy) { |
+views::View* CreateAddUserView(AddUserSessionPolicy policy, |
+ views::ButtonListener* listener) { |
auto* view = new views::View; |
const int icon_padding = (kMenuButtonSize - kMenuIconSize) / 2; |
auto* layout = |
@@ -82,8 +82,8 @@ |
kTrayPopupLabelHorizontalPadding + icon_padding); |
layout->set_minimum_cross_axis_size(kTrayPopupItemMinHeight); |
view->SetLayoutManager(layout); |
- view->set_background(views::Background::CreateThemedSolidBackground( |
- view, ui::NativeTheme::kColorId_BubbleBackground)); |
+ view->set_background( |
+ views::Background::CreateSolidBackground(kBackgroundColor)); |
int message_id = 0; |
switch (policy) { |
@@ -124,6 +124,13 @@ |
view->SetBorder(views::CreateEmptyBorder(vertical_padding, icon_padding, |
vertical_padding, |
kTrayPopupLabelHorizontalPadding)); |
+ if (policy == AddUserSessionPolicy::ALLOWED) { |
+ auto* button = |
+ new ButtonFromView(view, listener, TrayPopupInkDropStyle::INSET_BOUNDS); |
+ button->SetAccessibleName( |
+ l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_SIGN_IN_ANOTHER_ACCOUNT)); |
+ return button; |
+ } |
return view; |
} |
@@ -221,11 +228,11 @@ |
} |
UserView::~UserView() { |
- HideUserDropdownWidget(); |
+ RemoveAddUserMenuOption(); |
} |
TrayUser::TestState UserView::GetStateForTest() const { |
- if (user_dropdown_widget_) |
+ if (add_menu_option_) |
return add_user_enabled_ ? TrayUser::ACTIVE : TrayUser::ACTIVE_BUT_DISABLED; |
// If the container is the user card view itself, there's no ButtonFromView |
@@ -250,13 +257,13 @@ |
void UserView::ButtonPressed(views::Button* sender, const ui::Event& event) { |
if (sender == logout_button_) { |
ShellPort::Get()->RecordUserMetricsAction(UMA_STATUS_AREA_SIGN_OUT); |
- HideUserDropdownWidget(); |
+ RemoveAddUserMenuOption(); |
Shell::Get()->system_tray_controller()->SignOut(); |
} else if (sender == user_card_container_ && |
IsMultiProfileSupportedAndUserActive()) { |
- ToggleUserDropdownWidget(); |
- } else if (user_dropdown_widget_ && |
- sender->GetWidget() == user_dropdown_widget_.get()) { |
+ ToggleAddUserMenuOption(); |
+ } else if (add_menu_option_ && |
+ sender->GetWidget() == add_menu_option_.get()) { |
DCHECK_EQ(Shell::Get()->session_controller()->NumberOfLoggedInUsers(), |
sender->parent()->child_count() - 1); |
const int index_in_add_menu = sender->parent()->GetIndexOf(sender); |
@@ -268,7 +275,7 @@ |
const int user_index = index_in_add_menu; |
SwitchUser(user_index); |
} |
- HideUserDropdownWidget(); |
+ RemoveAddUserMenuOption(); |
owner_->system_tray()->CloseSystemBubble(); |
} else { |
NOTREACHED(); |
@@ -277,7 +284,7 @@ |
void UserView::OnWillChangeFocus(View* focused_before, View* focused_now) { |
if (focused_now) |
- HideUserDropdownWidget(); |
+ RemoveAddUserMenuOption(); |
} |
void UserView::OnDidChangeFocus(View* focused_before, View* focused_now) { |
@@ -307,16 +314,16 @@ |
AddChildViewAt(user_card_container_, 0); |
} |
-void UserView::ToggleUserDropdownWidget() { |
- if (user_dropdown_widget_) { |
- HideUserDropdownWidget(); |
+void UserView::ToggleAddUserMenuOption() { |
+ if (add_menu_option_) { |
+ RemoveAddUserMenuOption(); |
return; |
} |
// Note: We do not need to install a global event handler to delete this |
// item since it will destroyed automatically before the menu / user menu item |
// gets destroyed.. |
- user_dropdown_widget_.reset(new views::Widget); |
+ add_menu_option_.reset(new views::Widget); |
views::Widget::InitParams params; |
params.type = views::Widget::InitParams::TYPE_MENU; |
params.keep_on_top = true; |
@@ -327,9 +334,9 @@ |
WmWindow::Get(GetWidget()->GetNativeWindow()) |
->GetRootWindowController() |
->ConfigureWidgetInitParamsForContainer( |
- user_dropdown_widget_.get(), |
- kShellWindowId_DragImageAndTooltipContainer, ¶ms); |
- user_dropdown_widget_->Init(params); |
+ add_menu_option_.get(), kShellWindowId_DragImageAndTooltipContainer, |
+ ¶ms); |
+ add_menu_option_->Init(params); |
const SessionController* const session_controller = |
Shell::Get()->session_controller(); |
@@ -345,63 +352,48 @@ |
int row_height = bounds.height(); |
views::View* container = new UserDropdownWidgetContents( |
- base::Bind(&UserView::HideUserDropdownWidget, base::Unretained(this))); |
- views::View* add_user_view = CreateAddUserView(add_user_policy); |
- const SkColor bg_color = add_user_view->background()->get_color(); |
+ base::Bind(&UserView::RemoveAddUserMenuOption, base::Unretained(this))); |
container->SetBorder(views::CreatePaddedBorder( |
- views::CreateSolidSidedBorder(0, 0, 0, kSeparatorWidth, bg_color), |
+ views::CreateSolidSidedBorder(0, 0, 0, kSeparatorWidth, kBackgroundColor), |
gfx::Insets(row_height, 0, 0, 0))); |
- |
- // Create the contents aside from the empty window through which the active |
- // user is seen. |
views::View* user_dropdown_padding = new views::View(); |
user_dropdown_padding->SetBorder(views::CreateSolidSidedBorder( |
- kMenuSeparatorVerticalPadding - kSeparatorWidth, 0, 0, 0, bg_color)); |
+ kMenuSeparatorVerticalPadding - kSeparatorWidth, 0, 0, 0, |
+ kBackgroundColor)); |
user_dropdown_padding->SetLayoutManager( |
new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0)); |
views::Separator* separator = new views::Separator(); |
separator->SetPreferredHeight(kSeparatorWidth); |
- separator->SetColor( |
- color_utils::GetResultingPaintColor(kMenuSeparatorColor, bg_color)); |
+ separator->SetColor(color_utils::GetResultingPaintColor(kMenuSeparatorColor, |
+ kBackgroundColor)); |
const int separator_horizontal_padding = |
(kTrayPopupItemMinStartWidth - kTrayItemSize) / 2; |
- separator->SetBorder( |
- views::CreateSolidSidedBorder(0, separator_horizontal_padding, 0, |
- separator_horizontal_padding, bg_color)); |
+ separator->SetBorder(views::CreateSolidSidedBorder( |
+ 0, separator_horizontal_padding, 0, separator_horizontal_padding, |
+ kBackgroundColor)); |
user_dropdown_padding->AddChildView(separator); |
- // Add other logged in users. |
for (int i = 1; i < session_controller->NumberOfLoggedInUsers(); ++i) { |
user_dropdown_padding->AddChildView( |
new ButtonFromView(new UserCardView(LoginStatus::USER, i), this, |
TrayPopupInkDropStyle::INSET_BOUNDS)); |
} |
- // Add the "add user" option or the "can't add another user" message. |
- if (add_user_enabled_) { |
- auto* button = new ButtonFromView(add_user_view, this, |
- TrayPopupInkDropStyle::INSET_BOUNDS); |
- button->SetAccessibleName( |
- l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_SIGN_IN_ANOTHER_ACCOUNT)); |
- user_dropdown_padding->AddChildView(button); |
- } else { |
- user_dropdown_padding->AddChildView(add_user_view); |
- } |
- |
+ user_dropdown_padding->AddChildView(CreateAddUserView(add_user_policy, this)); |
container->AddChildView(user_dropdown_padding); |
container->SetLayoutManager(new views::FillLayout()); |
- user_dropdown_widget_->SetContentsView(container); |
+ add_menu_option_->SetContentsView(container); |
bounds.set_height(container->GetPreferredSize().height()); |
- user_dropdown_widget_->SetBounds(bounds); |
+ add_menu_option_->SetBounds(bounds); |
// Suppress the appearance of the collective capture icon while the dropdown |
// is open (the icon will appear in the specific user rows). |
user_card_view_->SetSuppressCaptureIcon(true); |
// Show the content. |
- user_dropdown_widget_->SetAlwaysOnTop(true); |
- user_dropdown_widget_->Show(); |
+ add_menu_option_->SetAlwaysOnTop(true); |
+ add_menu_option_->Show(); |
// Install a listener to focus changes so that we can remove the card when |
// the focus gets changed. When called through the destruction of the bubble, |
@@ -410,15 +402,15 @@ |
focus_manager_->AddFocusChangeListener(this); |
} |
-void UserView::HideUserDropdownWidget() { |
- if (!user_dropdown_widget_) |
+void UserView::RemoveAddUserMenuOption() { |
+ if (!add_menu_option_) |
return; |
focus_manager_->RemoveFocusChangeListener(this); |
focus_manager_ = nullptr; |
if (user_card_container_->GetFocusManager()) |
user_card_container_->GetFocusManager()->ClearFocus(); |
user_card_view_->SetSuppressCaptureIcon(false); |
- user_dropdown_widget_.reset(); |
+ add_menu_option_.reset(); |
} |
} // namespace tray |