| 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
|
|
|