Index: ash/system/user/tray_user.cc |
diff --git a/ash/system/user/tray_user.cc b/ash/system/user/tray_user.cc |
index e8ea56e7680dc96d20b5de6a3213df683ce698e7..e22cdf49d0cd4f6f4a13eed59df88b80a96257ea 100644 |
--- a/ash/system/user/tray_user.cc |
+++ b/ash/system/user/tray_user.cc |
@@ -4,1093 +4,41 @@ |
#include "ash/system/user/tray_user.h" |
-#include <algorithm> |
-#include <climits> |
-#include <vector> |
- |
#include "ash/ash_switches.h" |
-#include "ash/metrics/user_metrics_recorder.h" |
-#include "ash/multi_profile_uma.h" |
-#include "ash/popup_message.h" |
#include "ash/root_window_controller.h" |
#include "ash/session_state_delegate.h" |
#include "ash/shelf/shelf_layout_manager.h" |
-#include "ash/shell.h" |
#include "ash/shell_delegate.h" |
#include "ash/system/tray/system_tray.h" |
-#include "ash/system/tray/system_tray_delegate.h" |
#include "ash/system/tray/system_tray_notifier.h" |
#include "ash/system/tray/tray_constants.h" |
#include "ash/system/tray/tray_item_view.h" |
-#include "ash/system/tray/tray_popup_label_button.h" |
-#include "ash/system/tray/tray_popup_label_button_border.h" |
#include "ash/system/tray/tray_utils.h" |
-#include "base/i18n/rtl.h" |
+#include "ash/system/user/accounts_detailed_view.h" |
+#include "ash/system/user/rounded_image_view.h" |
+#include "ash/system/user/user_view.h" |
#include "base/logging.h" |
-#include "base/memory/scoped_vector.h" |
#include "base/strings/string16.h" |
-#include "base/strings/string_util.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "grit/ash_resources.h" |
#include "grit/ash_strings.h" |
-#include "skia/ext/image_operations.h" |
-#include "third_party/skia/include/core/SkCanvas.h" |
-#include "third_party/skia/include/core/SkPaint.h" |
-#include "third_party/skia/include/core/SkPath.h" |
#include "ui/aura/window.h" |
#include "ui/base/l10n/l10n_util.h" |
-#include "ui/base/resource/resource_bundle.h" |
-#include "ui/gfx/canvas.h" |
-#include "ui/gfx/font_list.h" |
#include "ui/gfx/image/image.h" |
-#include "ui/gfx/image/image_skia_operations.h" |
-#include "ui/gfx/insets.h" |
-#include "ui/gfx/range/range.h" |
-#include "ui/gfx/rect.h" |
-#include "ui/gfx/render_text.h" |
-#include "ui/gfx/size.h" |
-#include "ui/gfx/skia_util.h" |
-#include "ui/gfx/text_elider.h" |
-#include "ui/gfx/text_utils.h" |
#include "ui/views/border.h" |
-#include "ui/views/bubble/tray_bubble_view.h" |
-#include "ui/views/controls/button/button.h" |
-#include "ui/views/controls/button/custom_button.h" |
-#include "ui/views/controls/image_view.h" |
#include "ui/views/controls/label.h" |
-#include "ui/views/controls/link.h" |
-#include "ui/views/controls/link_listener.h" |
#include "ui/views/layout/box_layout.h" |
-#include "ui/views/layout/fill_layout.h" |
-#include "ui/views/mouse_watcher.h" |
-#include "ui/views/painter.h" |
#include "ui/views/view.h" |
#include "ui/views/widget/widget.h" |
-#include "ui/wm/core/shadow_types.h" |
namespace { |
-const int kUserDetailsVerticalPadding = 5; |
-const int kUserCardVerticalPadding = 10; |
-const int kProfileRoundedCornerRadius = 2; |
-const int kUserIconSize = 27; |
-const int kUserIconLargeSize = 32; |
-const int kUserIconLargeCornerRadius = 2; |
const int kUserLabelToIconPadding = 5; |
-// When a hover border is used, it is starting this many pixels before the icon |
-// position. |
-const int kTrayUserTileHoverBorderInset = 10; |
- |
-// The border color of the user button. |
-const SkColor kBorderColor = 0xffdcdcdc; |
- |
-// The invisible word joiner character, used as a marker to indicate the start |
-// and end of the user's display name in the public account user card's text. |
-const base::char16 kDisplayNameMark[] = { 0x2060, 0 }; |
- |
-const int kPublicAccountLogoutButtonBorderImagesNormal[] = { |
- IDR_AURA_TRAY_POPUP_PUBLIC_ACCOUNT_LOGOUT_BUTTON_BORDER, |
- IDR_AURA_TRAY_POPUP_LABEL_BUTTON_NORMAL_BACKGROUND, |
- IDR_AURA_TRAY_POPUP_LABEL_BUTTON_NORMAL_BACKGROUND, |
- IDR_AURA_TRAY_POPUP_PUBLIC_ACCOUNT_LOGOUT_BUTTON_BORDER, |
- IDR_AURA_TRAY_POPUP_LABEL_BUTTON_NORMAL_BACKGROUND, |
- IDR_AURA_TRAY_POPUP_LABEL_BUTTON_NORMAL_BACKGROUND, |
- IDR_AURA_TRAY_POPUP_PUBLIC_ACCOUNT_LOGOUT_BUTTON_BORDER, |
- IDR_AURA_TRAY_POPUP_LABEL_BUTTON_NORMAL_BACKGROUND, |
- IDR_AURA_TRAY_POPUP_LABEL_BUTTON_NORMAL_BACKGROUND, |
-}; |
- |
-const int kPublicAccountLogoutButtonBorderImagesHovered[] = { |
- IDR_AURA_TRAY_POPUP_PUBLIC_ACCOUNT_LOGOUT_BUTTON_BORDER, |
- IDR_AURA_TRAY_POPUP_PUBLIC_ACCOUNT_LOGOUT_BUTTON_BORDER, |
- IDR_AURA_TRAY_POPUP_PUBLIC_ACCOUNT_LOGOUT_BUTTON_BORDER, |
- IDR_AURA_TRAY_POPUP_PUBLIC_ACCOUNT_LOGOUT_BUTTON_BORDER, |
- IDR_AURA_TRAY_POPUP_LABEL_BUTTON_HOVER_BACKGROUND, |
- IDR_AURA_TRAY_POPUP_PUBLIC_ACCOUNT_LOGOUT_BUTTON_BORDER, |
- IDR_AURA_TRAY_POPUP_PUBLIC_ACCOUNT_LOGOUT_BUTTON_BORDER, |
- IDR_AURA_TRAY_POPUP_PUBLIC_ACCOUNT_LOGOUT_BUTTON_BORDER, |
- IDR_AURA_TRAY_POPUP_PUBLIC_ACCOUNT_LOGOUT_BUTTON_BORDER, |
-}; |
- |
-// Offsetting the popup message relative to the tray menu. |
-const int kPopupMessageOffset = 25; |
- |
-// Switch to a user with the given |user_index|. |
-void SwitchUser(ash::MultiProfileIndex user_index) { |
- // Do not switch users when the log screen is presented. |
- if (ash::Shell::GetInstance()->session_state_delegate()-> |
- IsUserSessionBlocked()) |
- return; |
- |
- DCHECK(user_index > 0); |
- ash::SessionStateDelegate* delegate = |
- ash::Shell::GetInstance()->session_state_delegate(); |
- ash::MultiProfileUMA::RecordSwitchActiveUser( |
- ash::MultiProfileUMA::SWITCH_ACTIVE_USER_BY_TRAY); |
- delegate->SwitchActiveUser(delegate->GetUserID(user_index)); |
-} |
+const int kTrayAvatarLargeSize = 32; |
+const int kTrayAvatarLargeCornerRadius = 2; |
} // namespace |
namespace ash { |
-namespace tray { |
- |
-// A custom image view with rounded edges. |
-class RoundedImageView : public views::View { |
- public: |
- // Constructs a new rounded image view with rounded corners of radius |
- // |corner_radius|. If |active_user| is set, the icon will be drawn in |
- // full colors - otherwise it will fade into the background. |
- RoundedImageView(int corner_radius, bool active_user); |
- virtual ~RoundedImageView(); |
- |
- // Set the image that should be displayed. The image contents is copied to the |
- // receiver's image. |
- void SetImage(const gfx::ImageSkia& img, const gfx::Size& size); |
- |
- // Set the radii of the corners independently. |
- void SetCornerRadii(int top_left, |
- int top_right, |
- int bottom_right, |
- int bottom_left); |
- |
- private: |
- // Overridden from views::View. |
- virtual gfx::Size GetPreferredSize() OVERRIDE; |
- virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; |
- |
- gfx::ImageSkia image_; |
- gfx::ImageSkia resized_; |
- gfx::Size image_size_; |
- int corner_radius_[4]; |
- |
- // True if the given user is the active user and the icon should get |
- // painted as active. |
- bool active_user_; |
- |
- DISALLOW_COPY_AND_ASSIGN(RoundedImageView); |
-}; |
- |
-// The user details shown in public account mode. This is essentially a label |
-// but with custom painting code as the text is styled with multiple colors and |
-// contains a link. |
-class PublicAccountUserDetails : public views::View, |
- public views::LinkListener { |
- public: |
- PublicAccountUserDetails(SystemTrayItem* owner, int used_width); |
- virtual ~PublicAccountUserDetails(); |
- |
- private: |
- // Overridden from views::View. |
- virtual void Layout() OVERRIDE; |
- virtual gfx::Size GetPreferredSize() OVERRIDE; |
- virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; |
- |
- // Overridden from views::LinkListener. |
- virtual void LinkClicked(views::Link* source, int event_flags) OVERRIDE; |
- |
- // Calculate a preferred size that ensures the label text and the following |
- // link do not wrap over more than three lines in total for aesthetic reasons |
- // if possible. |
- void CalculatePreferredSize(SystemTrayItem* owner, int used_width); |
- |
- base::string16 text_; |
- views::Link* learn_more_; |
- gfx::Size preferred_size_; |
- ScopedVector<gfx::RenderText> lines_; |
- |
- DISALLOW_COPY_AND_ASSIGN(PublicAccountUserDetails); |
-}; |
- |
-// The button which holds the user card in case of multi profile. |
-class UserCard : public views::CustomButton { |
- public: |
- UserCard(views::ButtonListener* listener, bool active_user); |
- virtual ~UserCard(); |
- |
- // Called when the border should remain even in the non highlighted state. |
- void ForceBorderVisible(bool show); |
- |
- // Overridden from views::View |
- virtual void OnMouseEntered(const ui::MouseEvent& event) OVERRIDE; |
- virtual void OnMouseExited(const ui::MouseEvent& event) OVERRIDE; |
- |
- // Check if the item is hovered. |
- bool is_hovered_for_test() {return button_hovered_; } |
- |
- private: |
- // Change the hover/active state of the "button" when the status changes. |
- void ShowActive(); |
- |
- // True if this is the active user. |
- bool is_active_user_; |
- |
- // True if button is hovered. |
- bool button_hovered_; |
- |
- // True if the border should be visible. |
- bool show_border_; |
- |
- DISALLOW_COPY_AND_ASSIGN(UserCard); |
-}; |
- |
-class UserViewMouseWatcherHost : public views::MouseWatcherHost { |
-public: |
- explicit UserViewMouseWatcherHost(const gfx::Rect& screen_area) |
- : screen_area_(screen_area) {} |
- virtual ~UserViewMouseWatcherHost() {} |
- |
- // Implementation of MouseWatcherHost. |
- virtual bool Contains(const gfx::Point& screen_point, |
- views::MouseWatcherHost::MouseEventType type) OVERRIDE { |
- return screen_area_.Contains(screen_point); |
- } |
- |
-private: |
- gfx::Rect screen_area_; |
- |
- DISALLOW_COPY_AND_ASSIGN(UserViewMouseWatcherHost); |
-}; |
- |
-// The view of a user item. |
-class UserView : public views::View, |
- public views::ButtonListener, |
- public views::MouseWatcherListener { |
- public: |
- UserView(SystemTrayItem* owner, |
- ash::user::LoginStatus login, |
- MultiProfileIndex index); |
- virtual ~UserView(); |
- |
- // Overridden from MouseWatcherListener: |
- virtual void MouseMovedOutOfHost() OVERRIDE; |
- |
- TrayUser::TestState GetStateForTest() const; |
- gfx::Rect GetBoundsInScreenOfUserButtonForTest(); |
- |
- private: |
- // Overridden from views::View. |
- virtual gfx::Size GetPreferredSize() OVERRIDE; |
- virtual int GetHeightForWidth(int width) OVERRIDE; |
- virtual void Layout() OVERRIDE; |
- |
- // Overridden from views::ButtonListener. |
- virtual void ButtonPressed(views::Button* sender, |
- const ui::Event& event) OVERRIDE; |
- |
- void AddLogoutButton(user::LoginStatus login); |
- void AddUserCard(SystemTrayItem* owner, user::LoginStatus login); |
- |
- // Create a user icon representation for the user card. |
- views::View* CreateIconForUserCard(user::LoginStatus login); |
- |
- // Create the additional user card content for the retail logged in mode. |
- void AddLoggedInRetailModeUserCardContent(); |
- |
- // Create the additional user card content for the public mode. |
- void AddLoggedInPublicModeUserCardContent(SystemTrayItem* owner); |
- |
- // Create the menu option to add another user. If |disabled| is set the user |
- // cannot actively click on the item. |
- void ToggleAddUserMenuOption(); |
- |
- // Returns true when multi profile is supported. |
- bool SupportsMultiProfile(); |
- |
- MultiProfileIndex multiprofile_index_; |
- // The view of the user card. |
- views::View* user_card_view_; |
- |
- // This is the owner system tray item of this view. |
- SystemTrayItem* owner_; |
- |
- // True if |user_card_view_| is a |UserView| - otherwise it is only a |
- // |views::View|. |
- bool is_user_card_; |
- views::View* logout_button_; |
- scoped_ptr<PopupMessage> popup_message_; |
- scoped_ptr<views::Widget> add_menu_option_; |
- |
- // True when the add user panel is visible but not activatable. |
- bool add_user_visible_but_disabled_; |
- |
- // The mouse watcher which takes care of out of window hover events. |
- scoped_ptr<views::MouseWatcher> mouse_watcher_; |
- |
- DISALLOW_COPY_AND_ASSIGN(UserView); |
-}; |
- |
-// The menu item view which gets shown when the user clicks in multi profile |
-// mode onto the user item. |
-class AddUserView : public views::CustomButton, |
- public views::ButtonListener { |
- public: |
- // The |owner| is the view for which this view gets created. The |listener| |
- // will get notified when this item gets clicked. |
- AddUserView(UserCard* owner, views::ButtonListener* listener); |
- virtual ~AddUserView(); |
- |
- // Get the anchor view for a message. |
- views::View* anchor() { return anchor_; } |
- |
- // Overridden from views::ButtonListener. |
- virtual void ButtonPressed(views::Button* sender, |
- const ui::Event& event) OVERRIDE; |
- |
- private: |
- // Overridden from views::View. |
- virtual gfx::Size GetPreferredSize() OVERRIDE; |
- virtual int GetHeightForWidth(int width) OVERRIDE; |
- virtual void Layout() OVERRIDE; |
- |
- // Create the additional client content for this item. |
- void AddContent(); |
- |
- // This is the content we create and show. |
- views::View* add_user_; |
- |
- // This listener will get informed when someone clicks on this button. |
- views::ButtonListener* listener_; |
- |
- // This is the owner view of this item. |
- UserCard* owner_; |
- |
- // The anchor view for targetted bubble messages. |
- views::View* anchor_; |
- |
- DISALLOW_COPY_AND_ASSIGN(AddUserView); |
-}; |
- |
-RoundedImageView::RoundedImageView(int corner_radius, bool active_user) |
- : active_user_(active_user) { |
- for (int i = 0; i < 4; ++i) |
- corner_radius_[i] = corner_radius; |
-} |
- |
-RoundedImageView::~RoundedImageView() {} |
- |
-void RoundedImageView::SetImage(const gfx::ImageSkia& img, |
- const gfx::Size& size) { |
- image_ = img; |
- image_size_ = size; |
- |
- // Try to get the best image quality for the avatar. |
- resized_ = gfx::ImageSkiaOperations::CreateResizedImage(image_, |
- skia::ImageOperations::RESIZE_BEST, size); |
- if (GetWidget() && visible()) { |
- PreferredSizeChanged(); |
- SchedulePaint(); |
- } |
-} |
- |
-void RoundedImageView::SetCornerRadii(int top_left, |
- int top_right, |
- int bottom_right, |
- int bottom_left) { |
- corner_radius_[0] = top_left; |
- corner_radius_[1] = top_right; |
- corner_radius_[2] = bottom_right; |
- corner_radius_[3] = bottom_left; |
-} |
- |
-gfx::Size RoundedImageView::GetPreferredSize() { |
- return gfx::Size(image_size_.width() + GetInsets().width(), |
- image_size_.height() + GetInsets().height()); |
-} |
- |
-void RoundedImageView::OnPaint(gfx::Canvas* canvas) { |
- View::OnPaint(canvas); |
- gfx::Rect image_bounds(size()); |
- image_bounds.ClampToCenteredSize(GetPreferredSize()); |
- image_bounds.Inset(GetInsets()); |
- const SkScalar kRadius[8] = { |
- SkIntToScalar(corner_radius_[0]), |
- SkIntToScalar(corner_radius_[0]), |
- SkIntToScalar(corner_radius_[1]), |
- SkIntToScalar(corner_radius_[1]), |
- SkIntToScalar(corner_radius_[2]), |
- SkIntToScalar(corner_radius_[2]), |
- SkIntToScalar(corner_radius_[3]), |
- SkIntToScalar(corner_radius_[3]) |
- }; |
- SkPath path; |
- path.addRoundRect(gfx::RectToSkRect(image_bounds), kRadius); |
- SkPaint paint; |
- paint.setAntiAlias(true); |
- paint.setXfermodeMode(active_user_ ? SkXfermode::kSrcOver_Mode : |
- SkXfermode::kLuminosity_Mode); |
- canvas->DrawImageInPath(resized_, image_bounds.x(), image_bounds.y(), |
- path, paint); |
-} |
- |
-PublicAccountUserDetails::PublicAccountUserDetails(SystemTrayItem* owner, |
- int used_width) |
- : learn_more_(NULL) { |
- const int inner_padding = |
- kTrayPopupPaddingHorizontal - kTrayPopupPaddingBetweenItems; |
- const bool rtl = base::i18n::IsRTL(); |
- SetBorder(views::Border::CreateEmptyBorder(kUserDetailsVerticalPadding, |
- rtl ? 0 : inner_padding, |
- kUserDetailsVerticalPadding, |
- rtl ? inner_padding : 0)); |
- |
- // Retrieve the user's display name and wrap it with markers. |
- // Note that since this is a public account it always has to be the primary |
- // user. |
- base::string16 display_name = |
- Shell::GetInstance()->session_state_delegate()->GetUserDisplayName(0); |
- base::RemoveChars(display_name, kDisplayNameMark, &display_name); |
- display_name = kDisplayNameMark[0] + display_name + kDisplayNameMark[0]; |
- // Retrieve the domain managing the device and wrap it with markers. |
- base::string16 domain = base::UTF8ToUTF16( |
- Shell::GetInstance()->system_tray_delegate()->GetEnterpriseDomain()); |
- base::RemoveChars(domain, kDisplayNameMark, &domain); |
- base::i18n::WrapStringWithLTRFormatting(&domain); |
- // Retrieve the label text, inserting the display name and domain. |
- text_ = l10n_util::GetStringFUTF16(IDS_ASH_STATUS_TRAY_PUBLIC_LABEL, |
- display_name, domain); |
- |
- learn_more_ = new views::Link(l10n_util::GetStringUTF16(IDS_ASH_LEARN_MORE)); |
- learn_more_->SetUnderline(false); |
- learn_more_->set_listener(this); |
- AddChildView(learn_more_); |
- |
- CalculatePreferredSize(owner, used_width); |
-} |
- |
-PublicAccountUserDetails::~PublicAccountUserDetails() {} |
- |
-void PublicAccountUserDetails::Layout() { |
- lines_.clear(); |
- const gfx::Rect contents_area = GetContentsBounds(); |
- if (contents_area.IsEmpty()) |
- return; |
- |
- // Word-wrap the label text. |
- const gfx::FontList font_list; |
- std::vector<base::string16> lines; |
- gfx::ElideRectangleText(text_, font_list, contents_area.width(), |
- contents_area.height(), gfx::ELIDE_LONG_WORDS, |
- &lines); |
- // Loop through the lines, creating a renderer for each. |
- gfx::Point position = contents_area.origin(); |
- gfx::Range display_name(gfx::Range::InvalidRange()); |
- for (std::vector<base::string16>::const_iterator it = lines.begin(); |
- it != lines.end(); ++it) { |
- gfx::RenderText* line = gfx::RenderText::CreateInstance(); |
- line->SetDirectionalityMode(gfx::DIRECTIONALITY_FROM_UI); |
- line->SetText(*it); |
- const gfx::Size size(contents_area.width(), line->GetStringSize().height()); |
- line->SetDisplayRect(gfx::Rect(position, size)); |
- position.set_y(position.y() + size.height()); |
- |
- // Set the default text color for the line. |
- line->SetColor(kPublicAccountUserCardTextColor); |
- |
- // If a range of the line contains the user's display name, apply a custom |
- // text color to it. |
- if (display_name.is_empty()) |
- display_name.set_start(it->find(kDisplayNameMark)); |
- if (!display_name.is_empty()) { |
- display_name.set_end( |
- it->find(kDisplayNameMark, display_name.start() + 1)); |
- gfx::Range line_range(0, it->size()); |
- line->ApplyColor(kPublicAccountUserCardNameColor, |
- display_name.Intersect(line_range)); |
- // Update the range for the next line. |
- if (display_name.end() >= line_range.end()) |
- display_name.set_start(0); |
- else |
- display_name = gfx::Range::InvalidRange(); |
- } |
- |
- lines_.push_back(line); |
- } |
- |
- // Position the link after the label text, separated by a space. If it does |
- // not fit onto the last line of the text, wrap the link onto its own line. |
- const gfx::Size last_line_size = lines_.back()->GetStringSize(); |
- const int space_width = |
- gfx::GetStringWidth(base::ASCIIToUTF16(" "), font_list); |
- const gfx::Size link_size = learn_more_->GetPreferredSize(); |
- if (contents_area.width() - last_line_size.width() >= |
- space_width + link_size.width()) { |
- position.set_x(position.x() + last_line_size.width() + space_width); |
- position.set_y(position.y() - last_line_size.height()); |
- } |
- position.set_y(position.y() - learn_more_->GetInsets().top()); |
- gfx::Rect learn_more_bounds(position, link_size); |
- learn_more_bounds.Intersect(contents_area); |
- if (base::i18n::IsRTL()) { |
- const gfx::Insets insets = GetInsets(); |
- learn_more_bounds.Offset(insets.right() - insets.left(), 0); |
- } |
- learn_more_->SetBoundsRect(learn_more_bounds); |
-} |
- |
-gfx::Size PublicAccountUserDetails::GetPreferredSize() { |
- return preferred_size_; |
-} |
- |
-void PublicAccountUserDetails::OnPaint(gfx::Canvas* canvas) { |
- for (ScopedVector<gfx::RenderText>::const_iterator it = lines_.begin(); |
- it != lines_.end(); ++it) { |
- (*it)->Draw(canvas); |
- } |
- views::View::OnPaint(canvas); |
-} |
- |
-void PublicAccountUserDetails::LinkClicked(views::Link* source, |
- int event_flags) { |
- DCHECK_EQ(source, learn_more_); |
- Shell::GetInstance()->system_tray_delegate()->ShowPublicAccountInfo(); |
-} |
- |
-void PublicAccountUserDetails::CalculatePreferredSize(SystemTrayItem* owner, |
- int used_width) { |
- const gfx::FontList font_list; |
- const gfx::Size link_size = learn_more_->GetPreferredSize(); |
- const int space_width = |
- gfx::GetStringWidth(base::ASCIIToUTF16(" "), font_list); |
- const gfx::Insets insets = GetInsets(); |
- views::TrayBubbleView* bubble_view = |
- owner->system_tray()->GetSystemBubble()->bubble_view(); |
- int min_width = std::max( |
- link_size.width(), |
- bubble_view->GetPreferredSize().width() - (used_width + insets.width())); |
- int max_width = std::min( |
- gfx::GetStringWidth(text_, font_list) + space_width + link_size.width(), |
- bubble_view->GetMaximumSize().width() - (used_width + insets.width())); |
- // Do a binary search for the minimum width that ensures no more than three |
- // lines are needed. The lower bound is the minimum of the current bubble |
- // width and the width of the link (as no wrapping is permitted inside the |
- // link). The upper bound is the maximum of the largest allowed bubble width |
- // and the sum of the label text and link widths when put on a single line. |
- std::vector<base::string16> lines; |
- while (min_width < max_width) { |
- lines.clear(); |
- const int width = (min_width + max_width) / 2; |
- const bool too_narrow = |
- gfx::ElideRectangleText(text_, font_list, width, INT_MAX, |
- gfx::TRUNCATE_LONG_WORDS, &lines) != 0; |
- int line_count = lines.size(); |
- if (!too_narrow && line_count == 3 && |
- width - gfx::GetStringWidth(lines.back(), font_list) <= |
- space_width + link_size.width()) |
- ++line_count; |
- if (too_narrow || line_count > 3) |
- min_width = width + 1; |
- else |
- max_width = width; |
- } |
- |
- // Calculate the corresponding height and set the preferred size. |
- lines.clear(); |
- gfx::ElideRectangleText( |
- text_, font_list, min_width, INT_MAX, gfx::TRUNCATE_LONG_WORDS, &lines); |
- int line_count = lines.size(); |
- if (min_width - gfx::GetStringWidth(lines.back(), font_list) <= |
- space_width + link_size.width()) { |
- ++line_count; |
- } |
- const int line_height = font_list.GetHeight(); |
- const int link_extra_height = std::max( |
- link_size.height() - learn_more_->GetInsets().top() - line_height, 0); |
- preferred_size_ = gfx::Size( |
- min_width + insets.width(), |
- line_count * line_height + link_extra_height + insets.height()); |
- |
- bubble_view->SetWidth(preferred_size_.width() + used_width); |
-} |
- |
-UserCard::UserCard(views::ButtonListener* listener, bool active_user) |
- : CustomButton(listener), |
- is_active_user_(active_user), |
- button_hovered_(false), |
- show_border_(false) { |
- if (is_active_user_) { |
- set_background( |
- views::Background::CreateSolidBackground(kBackgroundColor)); |
- ShowActive(); |
- } |
-} |
- |
-UserCard::~UserCard() {} |
- |
-void UserCard::ForceBorderVisible(bool show) { |
- show_border_ = show; |
- ShowActive(); |
-} |
- |
-void UserCard::OnMouseEntered(const ui::MouseEvent& event) { |
- if (is_active_user_) { |
- button_hovered_ = true; |
- background()->SetNativeControlColor(kHoverBackgroundColor); |
- ShowActive(); |
- } |
-} |
- |
-void UserCard::OnMouseExited(const ui::MouseEvent& event) { |
- if (is_active_user_) { |
- button_hovered_ = false; |
- background()->SetNativeControlColor(kBackgroundColor); |
- ShowActive(); |
- } |
-} |
- |
-void UserCard::ShowActive() { |
- int width = button_hovered_ || show_border_ ? 1 : 0; |
- SetBorder(views::Border::CreateSolidSidedBorder( |
- width, width, width, 1, kBorderColor)); |
- SchedulePaint(); |
-} |
- |
-UserView::UserView(SystemTrayItem* owner, |
- user::LoginStatus login, |
- MultiProfileIndex index) |
- : multiprofile_index_(index), |
- user_card_view_(NULL), |
- owner_(owner), |
- is_user_card_(false), |
- logout_button_(NULL), |
- add_user_visible_but_disabled_(false) { |
- CHECK_NE(user::LOGGED_IN_NONE, login); |
- if (!index) { |
- // Only the logged in user will have a background. All other users will have |
- // to allow the TrayPopupContainer highlighting the menu line. |
- set_background(views::Background::CreateSolidBackground( |
- login == user::LOGGED_IN_PUBLIC ? kPublicAccountBackgroundColor : |
- kBackgroundColor)); |
- } |
- SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, |
- kTrayPopupPaddingBetweenItems)); |
- // The logout button must be added before the user card so that the user card |
- // can correctly calculate the remaining available width. |
- // Note that only the current multiprofile user gets a button. |
- if (!multiprofile_index_) |
- AddLogoutButton(login); |
- AddUserCard(owner, login); |
-} |
- |
-UserView::~UserView() {} |
- |
-void UserView::MouseMovedOutOfHost() { |
- popup_message_.reset(); |
- mouse_watcher_.reset(); |
- add_menu_option_.reset(); |
-} |
- |
-TrayUser::TestState UserView::GetStateForTest() const { |
- if (add_menu_option_.get()) { |
- return add_user_visible_but_disabled_ ? TrayUser::ACTIVE_BUT_DISABLED : |
- TrayUser::ACTIVE; |
- } |
- |
- if (!is_user_card_) |
- return TrayUser::SHOWN; |
- |
- return static_cast<UserCard*>(user_card_view_)->is_hovered_for_test() ? |
- TrayUser::HOVERED : TrayUser::SHOWN; |
-} |
- |
-gfx::Rect UserView::GetBoundsInScreenOfUserButtonForTest() { |
- DCHECK(user_card_view_); |
- return user_card_view_->GetBoundsInScreen(); |
-} |
- |
-gfx::Size UserView::GetPreferredSize() { |
- gfx::Size size = views::View::GetPreferredSize(); |
- // Only the active user panel will be forced to a certain height. |
- if (!multiprofile_index_) { |
- size.set_height(std::max(size.height(), |
- kTrayPopupItemHeight + GetInsets().height())); |
- } |
- return size; |
-} |
- |
-int UserView::GetHeightForWidth(int width) { |
- return GetPreferredSize().height(); |
-} |
- |
-void UserView::Layout() { |
- gfx::Rect contents_area(GetContentsBounds()); |
- if (user_card_view_ && logout_button_) { |
- // Give the logout button the space it requests. |
- gfx::Rect logout_area = contents_area; |
- logout_area.ClampToCenteredSize(logout_button_->GetPreferredSize()); |
- logout_area.set_x(contents_area.right() - logout_area.width()); |
- |
- // Give the remaining space to the user card. |
- gfx::Rect user_card_area = contents_area; |
- int remaining_width = contents_area.width() - logout_area.width(); |
- if (SupportsMultiProfile()) { |
- // In multiprofile case |user_card_view_| and |logout_button_| have to |
- // have the same height. |
- int y = std::min(user_card_area.y(), logout_area.y()); |
- int height = std::max(user_card_area.height(), logout_area.height()); |
- logout_area.set_y(y); |
- logout_area.set_height(height); |
- user_card_area.set_y(y); |
- user_card_area.set_height(height); |
- |
- // In multiprofile mode we have also to increase the size of the card by |
- // the size of the border to make it overlap with the logout button. |
- user_card_area.set_width(std::max(0, remaining_width + 1)); |
- |
- // To make the logout button symmetrical with the user card we also make |
- // the button longer by the same size the hover area in front of the icon |
- // got inset. |
- logout_area.set_width(logout_area.width() + |
- kTrayUserTileHoverBorderInset); |
- } else { |
- // In all other modes we have to make sure that there is enough spacing |
- // between the two. |
- remaining_width -= kTrayPopupPaddingBetweenItems; |
- } |
- user_card_area.set_width(remaining_width); |
- user_card_view_->SetBoundsRect(user_card_area); |
- logout_button_->SetBoundsRect(logout_area); |
- } else if (user_card_view_) { |
- user_card_view_->SetBoundsRect(contents_area); |
- } else if (logout_button_) { |
- logout_button_->SetBoundsRect(contents_area); |
- } |
-} |
- |
-void UserView::ButtonPressed(views::Button* sender, const ui::Event& event) { |
- if (sender == logout_button_) { |
- Shell::GetInstance()->metrics()->RecordUserMetricsAction( |
- ash::UMA_STATUS_AREA_SIGN_OUT); |
- Shell::GetInstance()->system_tray_delegate()->SignOut(); |
- } else if (sender == user_card_view_ && SupportsMultiProfile()) { |
- if (!multiprofile_index_) { |
- ToggleAddUserMenuOption(); |
- } else { |
- SwitchUser(multiprofile_index_); |
- // Since the user list is about to change the system menu should get |
- // closed. |
- owner_->system_tray()->CloseSystemBubble(); |
- } |
- } else if (add_menu_option_.get() && |
- sender == add_menu_option_->GetContentsView()) { |
- // Let the user add another account to the session. |
- MultiProfileUMA::RecordSigninUser(MultiProfileUMA::SIGNIN_USER_BY_TRAY); |
- Shell::GetInstance()->system_tray_delegate()->ShowUserLogin(); |
- owner_->system_tray()->CloseSystemBubble(); |
- } else { |
- NOTREACHED(); |
- } |
-} |
- |
-void UserView::AddLogoutButton(user::LoginStatus login) { |
- const base::string16 title = user::GetLocalizedSignOutStringForStatus(login, |
- true); |
- TrayPopupLabelButton* logout_button = new TrayPopupLabelButton(this, title); |
- logout_button->SetAccessibleName(title); |
- logout_button_ = logout_button; |
- // In public account mode, the logout button border has a custom color. |
- if (login == user::LOGGED_IN_PUBLIC) { |
- scoped_ptr<TrayPopupLabelButtonBorder> border( |
- new TrayPopupLabelButtonBorder()); |
- border->SetPainter(false, views::Button::STATE_NORMAL, |
- views::Painter::CreateImageGridPainter( |
- kPublicAccountLogoutButtonBorderImagesNormal)); |
- border->SetPainter(false, views::Button::STATE_HOVERED, |
- views::Painter::CreateImageGridPainter( |
- kPublicAccountLogoutButtonBorderImagesHovered)); |
- border->SetPainter(false, views::Button::STATE_PRESSED, |
- views::Painter::CreateImageGridPainter( |
- kPublicAccountLogoutButtonBorderImagesHovered)); |
- logout_button_->SetBorder(border.PassAs<views::Border>()); |
- } |
- AddChildView(logout_button_); |
-} |
- |
-void UserView::AddUserCard(SystemTrayItem* owner, user::LoginStatus login) { |
- // Add padding around the panel. |
- SetBorder(views::Border::CreateEmptyBorder(kUserCardVerticalPadding, |
- kTrayPopupPaddingHorizontal, |
- kUserCardVerticalPadding, |
- kTrayPopupPaddingHorizontal)); |
- |
- if (SupportsMultiProfile() && login != user::LOGGED_IN_RETAIL_MODE) { |
- user_card_view_ = new UserCard(this, multiprofile_index_ == 0); |
- is_user_card_ = true; |
- } else { |
- user_card_view_ = new views::View(); |
- is_user_card_ = false; |
- } |
- |
- user_card_view_->SetLayoutManager(new views::BoxLayout( |
- views::BoxLayout::kHorizontal, 0, 0 , kTrayPopupPaddingBetweenItems)); |
- AddChildViewAt(user_card_view_, 0); |
- |
- if (login == user::LOGGED_IN_RETAIL_MODE) { |
- AddLoggedInRetailModeUserCardContent(); |
- return; |
- } |
- |
- // The entire user card should trigger hover (the inner items get disabled). |
- user_card_view_->SetEnabled(true); |
- user_card_view_->set_notify_enter_exit_on_child(true); |
- |
- if (login == user::LOGGED_IN_PUBLIC) { |
- AddLoggedInPublicModeUserCardContent(owner); |
- return; |
- } |
- |
- views::View* icon = CreateIconForUserCard(login); |
- user_card_view_->AddChildView(icon); |
- |
- // To allow the border to start before the icon, reduce the size before and |
- // add an inset to the icon to get the spacing. |
- if (multiprofile_index_ == 0 && SupportsMultiProfile()) { |
- icon->SetBorder(views::Border::CreateEmptyBorder( |
- 0, kTrayUserTileHoverBorderInset, 0, 0)); |
- SetBorder(views::Border::CreateEmptyBorder( |
- kUserCardVerticalPadding, |
- kTrayPopupPaddingHorizontal - kTrayUserTileHoverBorderInset, |
- kUserCardVerticalPadding, |
- kTrayPopupPaddingHorizontal)); |
- } |
- SessionStateDelegate* delegate = |
- Shell::GetInstance()->session_state_delegate(); |
- views::Label* username = NULL; |
- ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); |
- if (!multiprofile_index_) { |
- base::string16 user_name_string = |
- login == user::LOGGED_IN_GUEST ? |
- bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_GUEST_LABEL) : |
- delegate->GetUserDisplayName(multiprofile_index_); |
- if (!user_name_string.empty()) { |
- username = new views::Label(user_name_string); |
- username->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
- } |
- } |
- |
- views::Label* additional = NULL; |
- if (login != user::LOGGED_IN_GUEST) { |
- base::string16 user_email_string = |
- login == user::LOGGED_IN_LOCALLY_MANAGED ? |
- bundle.GetLocalizedString( |
- IDS_ASH_STATUS_TRAY_LOCALLY_MANAGED_LABEL) : |
- base::UTF8ToUTF16(delegate->GetUserEmail(multiprofile_index_)); |
- if (!user_email_string.empty()) { |
- additional = new views::Label(user_email_string); |
- additional->SetFontList( |
- bundle.GetFontList(ui::ResourceBundle::SmallFont)); |
- additional->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
- } |
- } |
- |
- // Adjust text properties dependent on if it is an active or inactive user. |
- if (multiprofile_index_) { |
- // Fade the text of non active users to 50%. |
- SkColor text_color = additional->enabled_color(); |
- text_color = SkColorSetA(text_color, SkColorGetA(text_color) / 2); |
- if (additional) |
- additional->SetDisabledColor(text_color); |
- if (username) |
- username->SetDisabledColor(text_color); |
- } |
- |
- if (additional && username) { |
- views::View* details = new views::View; |
- details->SetLayoutManager(new views::BoxLayout( |
- views::BoxLayout::kVertical, 0, kUserDetailsVerticalPadding, 0)); |
- details->AddChildView(username); |
- details->AddChildView(additional); |
- user_card_view_->AddChildView(details); |
- } else { |
- if (username) |
- user_card_view_->AddChildView(username); |
- if (additional) |
- user_card_view_->AddChildView(additional); |
- } |
-} |
- |
-views::View* UserView::CreateIconForUserCard(user::LoginStatus login) { |
- RoundedImageView* icon = new RoundedImageView(kProfileRoundedCornerRadius, |
- multiprofile_index_ == 0); |
- icon->SetEnabled(false); |
- if (login == user::LOGGED_IN_GUEST) { |
- icon->SetImage(*ui::ResourceBundle::GetSharedInstance(). |
- GetImageNamed(IDR_AURA_UBER_TRAY_GUEST_ICON).ToImageSkia(), |
- gfx::Size(kUserIconSize, kUserIconSize)); |
- } else { |
- SessionStateDelegate* delegate = |
- Shell::GetInstance()->session_state_delegate(); |
- content::BrowserContext* context = delegate->GetBrowserContextByIndex( |
- multiprofile_index_); |
- icon->SetImage(delegate->GetUserImage(context), |
- gfx::Size(kUserIconSize, kUserIconSize)); |
- } |
- return icon; |
-} |
- |
-void UserView::AddLoggedInRetailModeUserCardContent() { |
- views::Label* details = new views::Label; |
- ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); |
- details->SetText( |
- bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_KIOSK_LABEL)); |
- details->SetBorder(views::Border::CreateEmptyBorder(0, 4, 0, 1)); |
- details->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
- user_card_view_->AddChildView(details); |
-} |
- |
-void UserView::AddLoggedInPublicModeUserCardContent(SystemTrayItem* owner) { |
- user_card_view_->AddChildView(CreateIconForUserCard(user::LOGGED_IN_PUBLIC)); |
- user_card_view_->AddChildView(new PublicAccountUserDetails( |
- owner, GetPreferredSize().width() + kTrayPopupPaddingBetweenItems)); |
-} |
- |
-void UserView::ToggleAddUserMenuOption() { |
- if (add_menu_option_.get()) { |
- popup_message_.reset(); |
- mouse_watcher_.reset(); |
- add_menu_option_.reset(); |
- 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.. |
- const SessionStateDelegate* session_state_delegate = |
- Shell::GetInstance()->session_state_delegate(); |
- add_user_visible_but_disabled_ = |
- session_state_delegate->NumberOfLoggedInUsers() >= |
- session_state_delegate->GetMaximumNumberOfLoggedInUsers(); |
- add_menu_option_.reset(new views::Widget); |
- views::Widget::InitParams params; |
- params.type = views::Widget::InitParams::TYPE_TOOLTIP; |
- params.keep_on_top = true; |
- params.context = this->GetWidget()->GetNativeWindow(); |
- params.accept_events = true; |
- params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
- params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; |
- add_menu_option_->Init(params); |
- add_menu_option_->SetOpacity(0xFF); |
- add_menu_option_->GetNativeWindow()->set_owned_by_parent(false); |
- SetShadowType(add_menu_option_->GetNativeView(), |
- wm::SHADOW_TYPE_NONE); |
- |
- // Position it below our user card. |
- gfx::Rect bounds = user_card_view_->GetBoundsInScreen(); |
- bounds.set_y(bounds.y() + bounds.height()); |
- add_menu_option_->SetBounds(bounds); |
- |
- // Show the content. |
- AddUserView* add_user_view = new AddUserView( |
- static_cast<UserCard*>(user_card_view_), this); |
- add_menu_option_->SetContentsView(add_user_view); |
- add_menu_option_->SetAlwaysOnTop(true); |
- add_menu_option_->Show(); |
- if (add_user_visible_but_disabled_) { |
- ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); |
- popup_message_.reset(new PopupMessage( |
- bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_CAPTION_CANNOT_ADD_USER), |
- bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_MESSAGE_CANNOT_ADD_USER), |
- PopupMessage::ICON_WARNING, |
- add_user_view->anchor(), |
- views::BubbleBorder::TOP_LEFT, |
- gfx::Size(parent()->bounds().width() - kPopupMessageOffset, 0), |
- 2 * kPopupMessageOffset)); |
- } |
- // Find the screen area which encloses both elements and sets then a mouse |
- // watcher which will close the "menu". |
- gfx::Rect area = user_card_view_->GetBoundsInScreen(); |
- area.set_height(2 * area.height()); |
- mouse_watcher_.reset(new views::MouseWatcher( |
- new UserViewMouseWatcherHost(area), |
- this)); |
- mouse_watcher_->Start(); |
-} |
- |
-bool UserView::SupportsMultiProfile() { |
- // We do not want to see any multi profile additions to a user view when the |
- // log in screen is shown. |
- return Shell::GetInstance()->delegate()->IsMultiProfilesEnabled() && |
- !Shell::GetInstance()->session_state_delegate()->IsUserSessionBlocked(); |
-} |
- |
-AddUserView::AddUserView(UserCard* owner, views::ButtonListener* listener) |
- : CustomButton(listener), |
- add_user_(NULL), |
- listener_(listener), |
- owner_(owner), |
- anchor_(NULL) { |
- AddContent(); |
- owner_->ForceBorderVisible(true); |
-} |
- |
-AddUserView::~AddUserView() { |
- owner_->ForceBorderVisible(false); |
-} |
- |
-gfx::Size AddUserView::GetPreferredSize() { |
- return owner_->bounds().size(); |
-} |
- |
-int AddUserView::GetHeightForWidth(int width) { |
- return owner_->bounds().size().height(); |
-} |
- |
-void AddUserView::Layout() { |
- gfx::Rect contents_area(GetContentsBounds()); |
- add_user_->SetBoundsRect(contents_area); |
-} |
- |
-void AddUserView::ButtonPressed(views::Button* sender, const ui::Event& event) { |
- if (add_user_ == sender) |
- listener_->ButtonPressed(this, event); |
- else |
- NOTREACHED(); |
-} |
- |
-void AddUserView::AddContent() { |
- set_notify_enter_exit_on_child(true); |
- |
- const SessionStateDelegate* delegate = |
- Shell::GetInstance()->session_state_delegate(); |
- bool enable = delegate->NumberOfLoggedInUsers() < |
- delegate->GetMaximumNumberOfLoggedInUsers(); |
- |
- SetLayoutManager(new views::FillLayout()); |
- set_background(views::Background::CreateSolidBackground(kBackgroundColor)); |
- |
- // Add padding around the panel. |
- SetBorder(views::Border::CreateSolidBorder(1, kBorderColor)); |
- |
- add_user_ = new UserCard(this, enable); |
- add_user_->SetBorder(views::Border::CreateEmptyBorder( |
- kUserCardVerticalPadding, |
- kTrayPopupPaddingHorizontal - kTrayUserTileHoverBorderInset, |
- kUserCardVerticalPadding, |
- kTrayPopupPaddingHorizontal - kTrayUserTileHoverBorderInset)); |
- |
- add_user_->SetLayoutManager(new views::BoxLayout( |
- views::BoxLayout::kHorizontal, 0, 0 , kTrayPopupPaddingBetweenItems)); |
- AddChildViewAt(add_user_, 0); |
- |
- // Add the [+] icon which is also the anchor for messages. |
- ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); |
- RoundedImageView* icon = new RoundedImageView(kProfileRoundedCornerRadius, |
- true); |
- anchor_ = icon; |
- icon->SetImage(*ui::ResourceBundle::GetSharedInstance(). |
- GetImageNamed(IDR_AURA_UBER_TRAY_ADD_MULTIPROFILE_USER).ToImageSkia(), |
- gfx::Size(kUserIconSize, kUserIconSize)); |
- add_user_->AddChildView(icon); |
- |
- // Add the command text. |
- views::Label* command_label = new views::Label( |
- bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_SIGN_IN_ANOTHER_ACCOUNT)); |
- command_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
- add_user_->AddChildView(command_label); |
-} |
- |
-} // namespace tray |
TrayUser::TrayUser(SystemTray* system_tray, MultiProfileIndex index) |
: SystemTrayItem(system_tray), |
@@ -1132,7 +80,7 @@ void TrayUser::UpdateAfterLoginStatusChangeForTest(user::LoginStatus status) { |
views::View* TrayUser::CreateTrayView(user::LoginStatus status) { |
CHECK(layout_view_ == NULL); |
- layout_view_ = new views::View(); |
+ layout_view_ = new views::View; |
layout_view_->SetLayoutManager( |
new views::BoxLayout(views::BoxLayout::kHorizontal, |
0, 0, kUserLabelToIconPadding)); |
@@ -1158,12 +106,12 @@ views::View* TrayUser::CreateDefaultView(user::LoginStatus status) { |
if (multiprofile_index_ >= logged_in_users) |
return NULL; |
- user_ = new tray::UserView(this, status, multiprofile_index_); |
+ user_ = new tray::UserView(this, status, multiprofile_index_, false); |
return user_; |
} |
views::View* TrayUser::CreateDetailedView(user::LoginStatus status) { |
- return NULL; |
+ return new tray::AccountsDetailedView(this, status); |
} |
void TrayUser::DestroyTrayView() { |
@@ -1218,24 +166,23 @@ void TrayUser::UpdateAfterLoginStatusChange(user::LoginStatus status) { |
label_ = NULL; |
} |
if (need_avatar) { |
- avatar_ = new tray::RoundedImageView(kProfileRoundedCornerRadius, true); |
+ avatar_ = new tray::RoundedImageView(kTrayAvatarCornerRadius, true); |
layout_view_->AddChildView(avatar_); |
} else { |
avatar_ = NULL; |
} |
} |
- ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); |
if (status == user::LOGGED_IN_LOCALLY_MANAGED) { |
label_->SetText( |
- bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_LOCALLY_MANAGED_LABEL)); |
+ l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_LOCALLY_MANAGED_LABEL)); |
} else if (status == user::LOGGED_IN_GUEST) { |
- label_->SetText(bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_GUEST_LABEL)); |
+ label_->SetText(l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_GUEST_LABEL)); |
} |
if (avatar_ && switches::UseAlternateShelfLayout()) { |
avatar_->SetCornerRadii( |
- 0, kUserIconLargeCornerRadius, kUserIconLargeCornerRadius, 0); |
+ 0, kTrayAvatarLargeCornerRadius, kTrayAvatarLargeCornerRadius, 0); |
avatar_->SetBorder(views::Border::NullBorder()); |
} |
UpdateAvatarImage(status); |
@@ -1254,7 +201,7 @@ void TrayUser::UpdateAfterShelfAlignmentChange(ShelfAlignment alignment) { |
if (switches::UseAlternateShelfLayout()) { |
avatar_->SetBorder(views::Border::NullBorder()); |
avatar_->SetCornerRadii( |
- 0, kUserIconLargeCornerRadius, kUserIconLargeCornerRadius, 0); |
+ 0, kTrayAvatarLargeCornerRadius, kTrayAvatarLargeCornerRadius, 0); |
} else { |
avatar_->SetBorder(views::Border::CreateEmptyBorder( |
0, |
@@ -1284,7 +231,7 @@ void TrayUser::UpdateAfterShelfAlignmentChange(ShelfAlignment alignment) { |
if (switches::UseAlternateShelfLayout()) { |
avatar_->SetBorder(views::Border::NullBorder()); |
avatar_->SetCornerRadii( |
- 0, 0, kUserIconLargeCornerRadius, kUserIconLargeCornerRadius); |
+ 0, 0, kTrayAvatarLargeCornerRadius, kTrayAvatarLargeCornerRadius); |
} else { |
SetTrayImageItemBorder(avatar_, alignment); |
} |
@@ -1329,8 +276,8 @@ void TrayUser::UpdateAvatarImage(user::LoginStatus status) { |
GetTrayIndex() >= session_state_delegate->NumberOfLoggedInUsers()) |
return; |
- int icon_size = switches::UseAlternateShelfLayout() ? |
- kUserIconLargeSize : kUserIconSize; |
+ int icon_size = switches::UseAlternateShelfLayout() ? kTrayAvatarLargeSize |
+ : kTrayAvatarSize; |
content::BrowserContext* context = session_state_delegate-> |
GetBrowserContextByIndex(GetTrayIndex()); |