Index: chrome/browser/ui/views/profile_chooser_view.cc |
diff --git a/chrome/browser/ui/views/profile_chooser_view.cc b/chrome/browser/ui/views/profile_chooser_view.cc |
deleted file mode 100644 |
index 640b3d6bb6dbef8c21378fc65b123db632bf2142..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/views/profile_chooser_view.cc |
+++ /dev/null |
@@ -1,1114 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/ui/views/profile_chooser_view.h" |
- |
-#include "base/prefs/pref_service.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "chrome/browser/browser_process.h" |
-#include "chrome/browser/lifetime/application_lifetime.h" |
-#include "chrome/browser/profiles/profile_info_util.h" |
-#include "chrome/browser/profiles/profile_manager.h" |
-#include "chrome/browser/profiles/profile_window.h" |
-#include "chrome/browser/profiles/profiles_state.h" |
-#include "chrome/browser/signin/profile_oauth2_token_service_factory.h" |
-#include "chrome/browser/signin/signin_manager_factory.h" |
-#include "chrome/browser/signin/signin_promo.h" |
-#include "chrome/browser/ui/browser.h" |
-#include "chrome/browser/ui/browser_dialogs.h" |
-#include "chrome/browser/ui/singleton_tabs.h" |
-#include "chrome/browser/ui/views/user_manager_view.h" |
-#include "chrome/common/pref_names.h" |
-#include "chrome/common/profile_management_switches.h" |
-#include "chrome/common/url_constants.h" |
-#include "components/signin/core/browser/mutable_profile_oauth2_token_service.h" |
-#include "components/signin/core/browser/profile_oauth2_token_service.h" |
-#include "components/signin/core/browser/signin_manager.h" |
-#include "grit/chromium_strings.h" |
-#include "grit/generated_resources.h" |
-#include "grit/theme_resources.h" |
-#include "third_party/skia/include/core/SkColor.h" |
-#include "ui/base/l10n/l10n_util.h" |
-#include "ui/base/resource/resource_bundle.h" |
-#include "ui/gfx/canvas.h" |
-#include "ui/gfx/image/image.h" |
-#include "ui/gfx/image/image_skia.h" |
-#include "ui/gfx/text_elider.h" |
-#include "ui/native_theme/native_theme.h" |
-#include "ui/views/controls/button/blue_button.h" |
-#include "ui/views/controls/button/image_button.h" |
-#include "ui/views/controls/button/label_button.h" |
-#include "ui/views/controls/button/menu_button.h" |
-#include "ui/views/controls/label.h" |
-#include "ui/views/controls/link.h" |
-#include "ui/views/controls/separator.h" |
-#include "ui/views/controls/textfield/textfield.h" |
-#include "ui/views/controls/webview/webview.h" |
-#include "ui/views/layout/grid_layout.h" |
-#include "ui/views/layout/layout_constants.h" |
-#include "ui/views/widget/widget.h" |
- |
-namespace { |
- |
-// Helpers -------------------------------------------------------------------- |
- |
-const int kFixedMenuWidth = 250; |
-const int kButtonHeight = 29; |
-const int kProfileAvatarTutorialShowMax = 5; |
-const int kFixedGaiaViewHeight = 400; |
-const int kFixedGaiaViewWidth = 360; |
-const int kFixedAccountRemovalViewWidth = 280; |
- |
-// Creates a GridLayout with a single column. This ensures that all the child |
-// views added get auto-expanded to fill the full width of the bubble. |
-views::GridLayout* CreateSingleColumnLayout(views::View* view, int width) { |
- views::GridLayout* layout = new views::GridLayout(view); |
- view->SetLayoutManager(layout); |
- |
- views::ColumnSet* columns = layout->AddColumnSet(0); |
- columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0, |
- views::GridLayout::FIXED, width, width); |
- return layout; |
-} |
- |
-// Creates a GridLayout with two columns. |
-views::GridLayout* CreateDoubleColumnLayout(views::View* view) { |
- views::GridLayout* layout = new views::GridLayout(view); |
- view->SetLayoutManager(layout); |
- |
- views::ColumnSet* columns = layout->AddColumnSet(0); |
- columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0, |
- views::GridLayout::USE_PREF, 0, 0); |
- columns->AddPaddingColumn(0, views::kUnrelatedControlLargeHorizontalSpacing); |
- columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1, |
- views::GridLayout::USE_PREF, 0, 0); |
- return layout; |
-} |
- |
-views::Link* CreateLink(const base::string16& link_text, |
- views::LinkListener* listener) { |
- views::Link* link_button = new views::Link(link_text); |
- link_button->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
- link_button->SetUnderline(false); |
- link_button->set_listener(listener); |
- return link_button; |
-} |
- |
- |
-// BackgroundColorHoverButton ------------------------------------------------- |
- |
-// A custom button that allows for setting a background color when hovered over. |
-class BackgroundColorHoverButton : public views::LabelButton { |
- public: |
- BackgroundColorHoverButton(views::ButtonListener* listener, |
- const base::string16& text, |
- const gfx::ImageSkia& normal_icon, |
- const gfx::ImageSkia& hover_icon); |
- virtual ~BackgroundColorHoverButton(); |
- |
- private: |
- // views::LabelButton: |
- virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; |
- |
- DISALLOW_COPY_AND_ASSIGN(BackgroundColorHoverButton); |
-}; |
- |
-BackgroundColorHoverButton::BackgroundColorHoverButton( |
- views::ButtonListener* listener, |
- const base::string16& text, |
- const gfx::ImageSkia& normal_icon, |
- const gfx::ImageSkia& hover_icon) |
- : views::LabelButton(listener, text) { |
- SetBorder(views::Border::CreateEmptyBorder(0, views::kButtonHEdgeMarginNew, |
- 0, views::kButtonHEdgeMarginNew)); |
- set_min_size(gfx::Size(0, kButtonHeight)); |
- SetImage(STATE_NORMAL, normal_icon); |
- SetImage(STATE_HOVERED, hover_icon); |
- SetImage(STATE_PRESSED, hover_icon); |
-} |
- |
-BackgroundColorHoverButton::~BackgroundColorHoverButton() {} |
- |
-void BackgroundColorHoverButton::OnPaint(gfx::Canvas* canvas) { |
- if ((state() == STATE_PRESSED) || (state() == STATE_HOVERED) || HasFocus()) { |
- canvas->DrawColor(GetNativeTheme()->GetSystemColor( |
- ui::NativeTheme::kColorId_MenuSeparatorColor)); |
- } |
- LabelButton::OnPaint(canvas); |
-} |
- |
-} // namespace |
- |
- |
-// EditableProfilePhoto ------------------------------------------------- |
- |
-// A custom Image control that shows a "change" button when moused over. |
-class EditableProfilePhoto : public views::ImageView { |
- public: |
- EditableProfilePhoto(views::ButtonListener* listener, |
- const gfx::Image& icon, |
- bool is_editing_allowed) |
- : views::ImageView(), |
- change_photo_button_(NULL) { |
- const int kLargeImageSide = 64; |
- gfx::Image image = profiles::GetSizedAvatarIconWithBorder( |
- icon, true, |
- kLargeImageSide + profiles::kAvatarIconPadding, |
- kLargeImageSide + profiles::kAvatarIconPadding); |
- SetImage(image.ToImageSkia()); |
- |
- if (!is_editing_allowed) |
- return; |
- |
- set_notify_enter_exit_on_child(true); |
- |
- // Button overlay that appears when hovering over the image. |
- change_photo_button_ = new views::LabelButton(listener, |
- l10n_util::GetStringUTF16(IDS_PROFILES_PROFILE_CHANGE_PHOTO_BUTTON)); |
- change_photo_button_->SetHorizontalAlignment(gfx::ALIGN_CENTER); |
- change_photo_button_->SetBorder(views::Border::NullBorder()); |
- const SkColor color = SK_ColorWHITE; |
- change_photo_button_->SetTextColor(views::Button::STATE_NORMAL, color); |
- change_photo_button_->SetTextColor(views::Button::STATE_HOVERED, color); |
- |
- const SkColor kBackgroundColor = SkColorSetARGB(125, 0, 0, 0); |
- change_photo_button_->set_background( |
- views::Background::CreateSolidBackground(kBackgroundColor)); |
- // Need to take into account the border padding on the avatar. |
- const int kOverlayHeight = 20; |
- change_photo_button_->SetBounds( |
- profiles::kAvatarIconPadding, |
- kLargeImageSide - kOverlayHeight, |
- kLargeImageSide - profiles::kAvatarIconPadding, |
- kOverlayHeight); |
- change_photo_button_->SetVisible(false); |
- AddChildView(change_photo_button_); |
- } |
- |
- views::LabelButton* change_photo_button() { return change_photo_button_; } |
- |
- private: |
- // views::View: |
- virtual void OnMouseEntered(const ui::MouseEvent& event) OVERRIDE { |
- if (change_photo_button_) |
- change_photo_button_->SetVisible(true); |
- } |
- |
- virtual void OnMouseExited(const ui::MouseEvent& event) OVERRIDE { |
- if (change_photo_button_) |
- change_photo_button_->SetVisible(false); |
- } |
- |
- // Button that is shown when hovering over the image view. Can be NULL if |
- // the photo isn't allowed to be edited (e.g. for guest profiles). |
- views::LabelButton* change_photo_button_; |
- |
- DISALLOW_COPY_AND_ASSIGN(EditableProfilePhoto); |
-}; |
- |
- |
-// EditableProfileName ------------------------------------------------- |
- |
-// A custom text control that turns into a textfield for editing when clicked. |
-class EditableProfileName : public views::LabelButton, |
- public views::ButtonListener { |
- public: |
- EditableProfileName(views::TextfieldController* controller, |
- const base::string16& text, |
- bool is_editing_allowed) |
- : views::LabelButton(this, text), |
- profile_name_textfield_(NULL) { |
- ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); |
- const gfx::FontList& medium_font_list = |
- rb->GetFontList(ui::ResourceBundle::MediumFont); |
- SetFontList(medium_font_list); |
- SetBorder(views::Border::NullBorder()); |
- |
- if (!is_editing_allowed) |
- return; |
- |
- SetImage(STATE_HOVERED, |
- *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_EDIT_HOVER)); |
- SetImage(STATE_PRESSED, |
- *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_EDIT_PRESSED)); |
- |
- // Textfield that overlaps the button. |
- profile_name_textfield_ = new views::Textfield(); |
- profile_name_textfield_->set_controller(controller); |
- profile_name_textfield_->SetFontList(medium_font_list); |
- profile_name_textfield_->SetVisible(false); |
- AddChildView(profile_name_textfield_); |
- } |
- |
- views::Textfield* profile_name_textfield() { |
- return profile_name_textfield_; |
- } |
- |
- // Hide the editable textfield to show the profile name button instead. |
- void ShowReadOnlyView() { |
- if (profile_name_textfield_) |
- profile_name_textfield_->SetVisible(false); |
- } |
- |
- private: |
- // views::ButtonListener: |
- virtual void ButtonPressed(views::Button* sender, |
- const ui::Event& event) OVERRIDE { |
- if (profile_name_textfield_) { |
- profile_name_textfield_->SetVisible(true); |
- profile_name_textfield_->SetText(GetText()); |
- profile_name_textfield_->SelectAll(false); |
- profile_name_textfield_->RequestFocus(); |
- } |
- } |
- |
- // views::LabelButton: |
- virtual bool OnKeyReleased(const ui::KeyEvent& event) OVERRIDE { |
- // Override CustomButton's implementation, which presses the button when |
- // you press space and clicks it when you release space, as the space can be |
- // part of the new profile name typed in the textfield. |
- return false; |
- } |
- |
- virtual void Layout() OVERRIDE { |
- if (profile_name_textfield_) |
- profile_name_textfield_->SetBounds(0, 0, width(), height()); |
- // This layout trick keeps the text left-aligned and the icon right-aligned. |
- SetHorizontalAlignment(gfx::ALIGN_RIGHT); |
- views::LabelButton::Layout(); |
- label()->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
- } |
- |
- // Button that is shown when hovering over the image view. Can be NULL if |
- // the profile name isn't allowed to be edited (e.g. for guest profiles). |
- views::Textfield* profile_name_textfield_; |
- |
- DISALLOW_COPY_AND_ASSIGN(EditableProfileName); |
-}; |
- |
-// A title card with one back button right aligned and one label center aligned. |
-class TitleCard : public views::View { |
- public: |
- TitleCard(int message_id, views::ButtonListener* listener, |
- views::ImageButton** back_button) { |
- back_button_ = new views::ImageButton(listener); |
- back_button_->SetImageAlignment(views::ImageButton::ALIGN_LEFT, |
- views::ImageButton::ALIGN_MIDDLE); |
- ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); |
- back_button_->SetImage(views::ImageButton::STATE_NORMAL, |
- rb->GetImageSkiaNamed(IDR_BACK)); |
- back_button_->SetImage(views::ImageButton::STATE_HOVERED, |
- rb->GetImageSkiaNamed(IDR_BACK_H)); |
- back_button_->SetImage(views::ImageButton::STATE_PRESSED, |
- rb->GetImageSkiaNamed(IDR_BACK_P)); |
- back_button_->SetImage(views::ImageButton::STATE_DISABLED, |
- rb->GetImageSkiaNamed(IDR_BACK_D)); |
- *back_button = back_button_; |
- |
- title_label_ = new views::Label(l10n_util::GetStringUTF16(message_id)); |
- title_label_->SetHorizontalAlignment(gfx::ALIGN_CENTER); |
- const gfx::FontList& medium_font_list = |
- rb->GetFontList(ui::ResourceBundle::MediumFont); |
- title_label_->SetFontList(medium_font_list); |
- |
- AddChildView(back_button_); |
- AddChildView(title_label_); |
- } |
- |
- private: |
- virtual void Layout() OVERRIDE{ |
- back_button_->SetBounds( |
- 0, 0, back_button_->GetPreferredSize().width(), height()); |
- title_label_->SetBoundsRect(GetContentsBounds()); |
- } |
- |
- virtual gfx::Size GetPreferredSize() OVERRIDE{ |
- int height = profiles::kAvatarIconPadding * 2 + |
- std::max(title_label_->GetPreferredSize().height(), |
- back_button_->GetPreferredSize().height()); |
- return gfx::Size(width(), height); |
- } |
- |
- views::ImageButton* back_button_; |
- views::Label* title_label_; |
- |
- DISALLOW_COPY_AND_ASSIGN(TitleCard); |
-}; |
- |
-// ProfileChooserView --------------------------------------------------------- |
- |
-// static |
-ProfileChooserView* ProfileChooserView::profile_bubble_ = NULL; |
-bool ProfileChooserView::close_on_deactivate_for_testing_ = true; |
- |
-// static |
-void ProfileChooserView::ShowBubble( |
- BubbleViewMode view_mode, |
- views::View* anchor_view, |
- views::BubbleBorder::Arrow arrow, |
- views::BubbleBorder::BubbleAlignment border_alignment, |
- const gfx::Rect& anchor_rect, |
- Browser* browser) { |
- profile_bubble_ = new ProfileChooserView( |
- anchor_view, arrow, anchor_rect, browser); |
- views::BubbleDelegateView::CreateBubble(profile_bubble_); |
- profile_bubble_->set_close_on_deactivate(close_on_deactivate_for_testing_); |
- profile_bubble_->SetAlignment(border_alignment); |
- profile_bubble_->GetWidget()->Show(); |
- profile_bubble_->SetArrowPaintType(views::BubbleBorder::PAINT_NONE); |
- |
- if (view_mode != BUBBLE_VIEW_MODE_PROFILE_CHOOSER) |
- profile_bubble_->ShowView(view_mode, profile_bubble_->avatar_menu_.get()); |
-} |
- |
-// static |
-bool ProfileChooserView::IsShowing() { |
- return profile_bubble_ != NULL; |
-} |
- |
-// static |
-void ProfileChooserView::Hide() { |
- if (IsShowing()) |
- profile_bubble_->GetWidget()->Close(); |
-} |
- |
-ProfileChooserView::ProfileChooserView(views::View* anchor_view, |
- views::BubbleBorder::Arrow arrow, |
- const gfx::Rect& anchor_rect, |
- Browser* browser) |
- : BubbleDelegateView(anchor_view, arrow), |
- browser_(browser), |
- view_mode_(BUBBLE_VIEW_MODE_PROFILE_CHOOSER), |
- tutorial_showing_(false) { |
- // Reset the default margins inherited from the BubbleDelegateView. |
- set_margins(gfx::Insets()); |
- |
- ResetView(); |
- |
- set_background(views::Background::CreateSolidBackground( |
- GetNativeTheme()->GetSystemColor( |
- ui::NativeTheme::kColorId_DialogBackground))); |
- |
- avatar_menu_.reset(new AvatarMenu( |
- &g_browser_process->profile_manager()->GetProfileInfoCache(), |
- this, |
- browser_)); |
- avatar_menu_->RebuildMenu(); |
- |
- ProfileOAuth2TokenService* oauth2_token_service = |
- ProfileOAuth2TokenServiceFactory::GetForProfile(browser_->profile()); |
- if (oauth2_token_service) |
- oauth2_token_service->AddObserver(this); |
-} |
- |
-ProfileChooserView::~ProfileChooserView() { |
- ProfileOAuth2TokenService* oauth2_token_service = |
- ProfileOAuth2TokenServiceFactory::GetForProfile(browser_->profile()); |
- if (oauth2_token_service) |
- oauth2_token_service->RemoveObserver(this); |
-} |
- |
-void ProfileChooserView::ResetView() { |
- manage_accounts_link_ = NULL; |
- signin_current_profile_link_ = NULL; |
- users_button_ = NULL; |
- lock_button_ = NULL; |
- add_account_button_ = NULL; |
- current_profile_photo_ = NULL; |
- current_profile_name_ = NULL; |
- tutorial_ok_button_ = NULL; |
- tutorial_learn_more_link_ = NULL; |
- account_removal_cancel_button_ = NULL; |
- gaia_signin_cancel_button_ = NULL; |
- open_other_profile_indexes_map_.clear(); |
- current_profile_accounts_map_.clear(); |
- tutorial_showing_ = false; |
-} |
- |
-void ProfileChooserView::Init() { |
- ShowView(BUBBLE_VIEW_MODE_PROFILE_CHOOSER, avatar_menu_.get()); |
-} |
- |
-void ProfileChooserView::OnAvatarMenuChanged( |
- AvatarMenu* avatar_menu) { |
- // Refresh the view with the new menu. We can't just update the local copy |
- // as this may have been triggered by a sign out action, in which case |
- // the view is being destroyed. |
- ShowView(BUBBLE_VIEW_MODE_PROFILE_CHOOSER, avatar_menu); |
-} |
- |
-void ProfileChooserView::OnRefreshTokenAvailable( |
- const std::string& account_id) { |
- // Refresh the account management view when a new account is added to the |
- // profile. |
- if (view_mode_ == BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT || |
- view_mode_ == BUBBLE_VIEW_MODE_GAIA_SIGNIN || |
- view_mode_ == BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT) { |
- ShowView(BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, avatar_menu_.get()); |
- } |
-} |
- |
-void ProfileChooserView::OnRefreshTokenRevoked(const std::string& account_id) { |
- // Refresh the account management view when an account is removed from the |
- // profile. |
- if (view_mode_ == BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT) |
- ShowView(BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, avatar_menu_.get()); |
-} |
- |
-void ProfileChooserView::ShowView(BubbleViewMode view_to_display, |
- AvatarMenu* avatar_menu) { |
- // The account management view should only be displayed if the active profile |
- // is signed in. |
- if (view_to_display == BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT) { |
- const AvatarMenu::Item& active_item = avatar_menu->GetItemAt( |
- avatar_menu->GetActiveProfileIndex()); |
- DCHECK(active_item.signed_in); |
- } |
- |
- // Records if the tutorial card is currently shown before resetting the view. |
- bool tutorial_shown = tutorial_showing_; |
- ResetView(); |
- RemoveAllChildViews(true); |
- view_mode_ = view_to_display; |
- |
- if (view_mode_ == BUBBLE_VIEW_MODE_GAIA_SIGNIN || |
- view_mode_ == BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT || |
- view_mode_ == BUBBLE_VIEW_MODE_ACCOUNT_REMOVAL) { |
- bool is_removal_view = view_mode_ == BUBBLE_VIEW_MODE_ACCOUNT_REMOVAL; |
- views::GridLayout* layout = CreateSingleColumnLayout(this, |
- is_removal_view ? kFixedAccountRemovalViewWidth : kFixedGaiaViewWidth); |
- layout->StartRow(1, 0); |
- layout->AddView(is_removal_view ? CreateAccountRemovalView(): |
- CreateGaiaSigninView(view_mode_ == BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT)); |
- Layout(); |
- if (GetBubbleFrameView()) |
- SizeToContents(); |
- return; |
- } |
- |
- views::GridLayout* layout = CreateSingleColumnLayout(this, kFixedMenuWidth); |
- // Separate items into active and alternatives. |
- Indexes other_profiles; |
- views::View* tutorial_view = NULL; |
- views::View* current_profile_view = NULL; |
- views::View* current_profile_accounts = NULL; |
- views::View* option_buttons_view = NULL; |
- for (size_t i = 0; i < avatar_menu->GetNumberOfItems(); ++i) { |
- const AvatarMenu::Item& item = avatar_menu->GetItemAt(i); |
- if (item.active) { |
- option_buttons_view = CreateOptionsView(item.signed_in); |
- if (view_to_display == BUBBLE_VIEW_MODE_PROFILE_CHOOSER) { |
- tutorial_view = CreateTutorialView(item, tutorial_shown); |
- current_profile_view = CreateCurrentProfileView(item, false); |
- } else { |
- current_profile_view = CreateCurrentProfileEditableView(item); |
- current_profile_accounts = CreateCurrentProfileAccountsView(item); |
- } |
- } else { |
- other_profiles.push_back(i); |
- } |
- } |
- |
- if (tutorial_view) { |
- layout->StartRow(1, 0); |
- layout->AddView(tutorial_view); |
- } |
- |
- if (!current_profile_view) { |
- // Guest windows don't have an active profile. |
- current_profile_view = CreateGuestProfileView(); |
- option_buttons_view = CreateOptionsView(false); |
- } |
- |
- layout->StartRow(1, 0); |
- layout->AddView(current_profile_view); |
- |
- if (view_to_display == BUBBLE_VIEW_MODE_PROFILE_CHOOSER) { |
- layout->StartRow(1, 0); |
- if (switches::IsFastUserSwitching()) |
- layout->AddView(CreateOtherProfilesView(other_profiles)); |
- } else { |
- DCHECK(current_profile_accounts); |
- layout->StartRow(0, 0); |
- layout->AddView(new views::Separator(views::Separator::HORIZONTAL)); |
- layout->StartRow(1, 0); |
- layout->AddView(current_profile_accounts); |
- } |
- |
- layout->StartRow(0, 0); |
- layout->AddView(new views::Separator(views::Separator::HORIZONTAL)); |
- |
- // Action buttons. |
- layout->StartRow(0, 0); |
- layout->AddView(option_buttons_view); |
- |
- Layout(); |
- if (GetBubbleFrameView()) |
- SizeToContents(); |
-} |
- |
-void ProfileChooserView::WindowClosing() { |
- DCHECK_EQ(profile_bubble_, this); |
- profile_bubble_ = NULL; |
-} |
- |
-void ProfileChooserView::ButtonPressed(views::Button* sender, |
- const ui::Event& event) { |
- // Disable button after clicking so that it doesn't get clicked twice and |
- // start a second action... which can crash Chrome. But don't disable if it |
- // has no parent (like in tests) because that will also crash. |
- if (sender->parent()) |
- sender->SetEnabled(false); |
- |
- if (sender == users_button_) { |
- chrome::ShowUserManager(base::FilePath()); |
- } else if (sender == lock_button_) { |
- profiles::LockProfile(browser_->profile()); |
- } else if (sender == add_account_button_) { |
- ShowView(BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT, avatar_menu_.get()); |
- } else if (sender == tutorial_ok_button_) { |
- // If the user manually dismissed the tutorial, never show it again by |
- // setting the number of times shown to the maximum plus 1, so that later we |
- // could distinguish between the dismiss case and the case when the tutorial |
- // is indeed shown for the maximum number of times. |
- browser_->profile()->GetPrefs()->SetInteger( |
- prefs::kProfileAvatarTutorialShown, kProfileAvatarTutorialShowMax + 1); |
- ShowView(BUBBLE_VIEW_MODE_PROFILE_CHOOSER, avatar_menu_.get()); |
- } else if (sender == remove_account_and_relaunch_button_) { |
- RemoveAccount(); |
- } else if (sender == account_removal_cancel_button_) { |
- account_id_to_remove_.clear(); |
- ShowView(BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, avatar_menu_.get()); |
- } else if (sender == gaia_signin_cancel_button_) { |
- std::string primary_account = |
- SigninManagerFactory::GetForProfile(browser_->profile())-> |
- GetAuthenticatedUsername(); |
- ShowView(primary_account.empty() ? BUBBLE_VIEW_MODE_PROFILE_CHOOSER : |
- BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, |
- avatar_menu_.get()); |
- } else if (current_profile_photo_ && |
- sender == current_profile_photo_->change_photo_button()) { |
- avatar_menu_->EditProfile(avatar_menu_->GetActiveProfileIndex()); |
- } else { |
- // One of the "other profiles" buttons was pressed. |
- ButtonIndexes::const_iterator match = |
- open_other_profile_indexes_map_.find(sender); |
- DCHECK(match != open_other_profile_indexes_map_.end()); |
- avatar_menu_->SwitchToProfile( |
- match->second, |
- ui::DispositionFromEventFlags(event.flags()) == NEW_WINDOW, |
- ProfileMetrics::SWITCH_PROFILE_ICON); |
- } |
-} |
- |
-void ProfileChooserView::OnMenuButtonClicked(views::View* source, |
- const gfx::Point& point) { |
- AccountButtonIndexes::const_iterator match = |
- current_profile_accounts_map_.find(source); |
- DCHECK(match != current_profile_accounts_map_.end()); |
- account_id_to_remove_ = match->second; |
- ShowView(BUBBLE_VIEW_MODE_ACCOUNT_REMOVAL, avatar_menu_.get()); |
-} |
- |
-void ProfileChooserView::RemoveAccount() { |
- DCHECK(!account_id_to_remove_.empty()); |
- MutableProfileOAuth2TokenService* oauth2_token_service = |
- ProfileOAuth2TokenServiceFactory::GetPlatformSpecificForProfile( |
- browser_->profile()); |
- if (oauth2_token_service) |
- oauth2_token_service->RevokeCredentials(account_id_to_remove_); |
- account_id_to_remove_.clear(); |
- |
- chrome::AttemptRestart(); |
-} |
- |
-void ProfileChooserView::LinkClicked(views::Link* sender, int event_flags) { |
- if (sender == manage_accounts_link_) { |
- // ShowView() will DCHECK if this view is displayed for non signed-in users. |
- ShowView(BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, avatar_menu_.get()); |
- } else if (sender == tutorial_learn_more_link_) { |
- // TODO(guohui): update |learn_more_url| once it is decided. |
- const GURL lear_more_url("https://support.google.com/chrome/?hl=en#to"); |
- chrome::NavigateParams params( |
- browser_->profile(), |
- lear_more_url, |
- content::PAGE_TRANSITION_LINK); |
- params.disposition = NEW_FOREGROUND_TAB; |
- chrome::Navigate(¶ms); |
- } else { |
- DCHECK(sender == signin_current_profile_link_); |
- ShowView(BUBBLE_VIEW_MODE_GAIA_SIGNIN, avatar_menu_.get()); |
- } |
-} |
- |
-bool ProfileChooserView::HandleKeyEvent(views::Textfield* sender, |
- const ui::KeyEvent& key_event) { |
- views::Textfield* name_textfield = |
- current_profile_name_->profile_name_textfield(); |
- DCHECK(sender == name_textfield); |
- |
- if (key_event.key_code() == ui::VKEY_RETURN || |
- key_event.key_code() == ui::VKEY_TAB) { |
- // Pressing Tab/Enter commits the new profile name, unless it's empty. |
- base::string16 new_profile_name = name_textfield->text(); |
- if (new_profile_name.empty()) |
- return true; |
- |
- const AvatarMenu::Item& active_item = avatar_menu_->GetItemAt( |
- avatar_menu_->GetActiveProfileIndex()); |
- Profile* profile = g_browser_process->profile_manager()->GetProfile( |
- active_item.profile_path); |
- DCHECK(profile); |
- |
- if (profile->IsManaged()) |
- return true; |
- |
- profiles::UpdateProfileName(profile, new_profile_name); |
- current_profile_name_->ShowReadOnlyView(); |
- return true; |
- } |
- return false; |
-} |
- |
-views::View* ProfileChooserView::CreateTutorialView( |
- const AvatarMenu::Item& current_avatar_item, bool tutorial_shown) { |
- if (!current_avatar_item.signed_in) |
- return NULL; |
- |
- Profile* profile = browser_->profile(); |
- const int show_count = profile->GetPrefs()->GetInteger( |
- prefs::kProfileAvatarTutorialShown); |
- // Do not show the tutorial if user has dismissed it. |
- if (show_count > kProfileAvatarTutorialShowMax) |
- return NULL; |
- |
- if (!tutorial_shown) { |
- if (show_count == kProfileAvatarTutorialShowMax) |
- return NULL; |
- profile->GetPrefs()->SetInteger( |
- prefs::kProfileAvatarTutorialShown, show_count + 1); |
- } |
- tutorial_showing_ = true; |
- |
- views::View* view = new views::View(); |
- view->set_background(views::Background::CreateSolidBackground( |
- profiles::kAvatarTutorialBackgroundColor)); |
- views::GridLayout* layout = CreateSingleColumnLayout(view, |
- kFixedMenuWidth - 2 * views::kButtonHEdgeMarginNew); |
- layout->SetInsets(views::kButtonVEdgeMarginNew, |
- views::kButtonHEdgeMarginNew, |
- views::kButtonVEdgeMarginNew, |
- views::kButtonHEdgeMarginNew); |
- |
- // Adds title. |
- views::Label* title_label = new views::Label( |
- l10n_util::GetStringUTF16(IDS_PROFILES_SIGNIN_TUTORIAL_TITLE)); |
- title_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
- title_label->SetAutoColorReadabilityEnabled(false); |
- title_label->SetEnabledColor(SK_ColorWHITE); |
- title_label ->SetFontList(ui::ResourceBundle::GetSharedInstance().GetFontList( |
- ui::ResourceBundle::MediumFont)); |
- layout->StartRow(1, 0); |
- layout->AddView(title_label); |
- |
- // Adds body content. |
- views::Label* content_label = new views::Label( |
- l10n_util::GetStringUTF16(IDS_PROFILES_SIGNIN_TUTORIAL_CONTENT_TEXT)); |
- content_label->SetMultiLine(true); |
- content_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
- content_label->SetAutoColorReadabilityEnabled(false); |
- content_label->SetEnabledColor(profiles::kAvatarTutorialContentTextColor); |
- layout->StartRowWithPadding(1, 0, 0, views::kRelatedControlVerticalSpacing); |
- layout->AddView(content_label); |
- |
- // Adds links and buttons. |
- views::View* button_row = new views::View(); |
- views::GridLayout* button_layout = new views::GridLayout(button_row); |
- views::ColumnSet* button_columns = button_layout->AddColumnSet(0); |
- button_columns->AddColumn(views::GridLayout::LEADING, |
- views::GridLayout::CENTER, 0, views::GridLayout::USE_PREF, 0, 0); |
- button_columns->AddPaddingColumn( |
- 1, views::kUnrelatedControlHorizontalSpacing); |
- button_columns->AddColumn(views::GridLayout::TRAILING, |
- views::GridLayout::CENTER, 0, views::GridLayout::USE_PREF, 0, 0); |
- button_row->SetLayoutManager(button_layout); |
- |
- tutorial_learn_more_link_ = CreateLink( |
- l10n_util::GetStringUTF16(IDS_PROFILES_PROFILE_TUTORIAL_LEARN_MORE), |
- this); |
- tutorial_learn_more_link_->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
- tutorial_learn_more_link_->SetAutoColorReadabilityEnabled(false); |
- tutorial_learn_more_link_->SetEnabledColor(SK_ColorWHITE); |
- button_layout->StartRow(1, 0); |
- button_layout->AddView(tutorial_learn_more_link_); |
- |
- tutorial_ok_button_ = new views::LabelButton( |
- this, l10n_util::GetStringUTF16(IDS_PROFILES_SIGNIN_TUTORIAL_OK_BUTTON)); |
- tutorial_ok_button_->SetHorizontalAlignment(gfx::ALIGN_CENTER); |
- tutorial_ok_button_->SetStyle(views::Button::STYLE_BUTTON); |
- button_layout->AddView(tutorial_ok_button_); |
- |
- layout->StartRowWithPadding(1, 0, 0, views::kUnrelatedControlVerticalSpacing); |
- layout->AddView(button_row); |
- |
- // Adds a padded caret image at the bottom. |
- views::View* padded_caret_view = new views::View(); |
- views::GridLayout* padded_caret_layout = |
- new views::GridLayout(padded_caret_view); |
- views::ColumnSet* padded_columns = padded_caret_layout->AddColumnSet(0); |
- padded_columns->AddPaddingColumn(0, views::kButtonHEdgeMarginNew); |
- padded_columns->AddColumn(views::GridLayout::LEADING, |
- views::GridLayout::CENTER, 0, views::GridLayout::USE_PREF, 0, 0); |
- padded_caret_view->SetLayoutManager(padded_caret_layout); |
- |
- views::ImageView* caret_image_view = new views::ImageView(); |
- ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); |
- caret_image_view->SetImage( |
- *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_CARET)); |
- |
- padded_caret_layout->StartRow(1, 0); |
- padded_caret_layout->AddView(caret_image_view); |
- |
- views::View* view_with_caret = new views::View(); |
- views::GridLayout* layout_with_caret = |
- CreateSingleColumnLayout(view_with_caret, kFixedMenuWidth); |
- layout_with_caret->StartRow(1, 0); |
- layout_with_caret->AddView(view); |
- layout_with_caret->StartRow(1, 0); |
- layout_with_caret->AddView(padded_caret_view); |
- return view_with_caret; |
-} |
- |
-views::View* ProfileChooserView::CreateCurrentProfileView( |
- const AvatarMenu::Item& avatar_item, |
- bool is_guest) { |
- views::View* view = new views::View(); |
- views::GridLayout* layout = CreateDoubleColumnLayout(view); |
- layout->SetInsets(views::kButtonVEdgeMarginNew, |
- views::kButtonHEdgeMarginNew, |
- views::kButtonVEdgeMarginNew, |
- views::kButtonHEdgeMarginNew); |
- |
- current_profile_photo_ = |
- new EditableProfilePhoto(this, avatar_item.icon, !is_guest); |
- view->SetBoundsRect(current_profile_photo_->bounds()); |
- current_profile_name_ = new EditableProfileName( |
- this, profiles::GetAvatarNameForProfile(browser_->profile()), !is_guest); |
- layout->StartRow(1, 0); |
- layout->AddView(current_profile_photo_, 1, 3); |
- layout->AddView(current_profile_name_); |
- |
- if (is_guest) { |
- layout->StartRow(1, 0); |
- layout->SkipColumns(1); |
- layout->StartRow(1, 0); |
- layout->SkipColumns(1); |
- } else if (avatar_item.signed_in) { |
- manage_accounts_link_ = CreateLink( |
- l10n_util::GetStringUTF16(IDS_PROFILES_PROFILE_MANAGE_ACCOUNTS_BUTTON), |
- this); |
- layout->StartRow(1, 0); |
- layout->SkipColumns(1); |
- layout->AddView(manage_accounts_link_); |
- layout->StartRow(1, 0); |
- layout->SkipColumns(1); |
- } else { |
- signin_current_profile_link_ = CreateLink( |
- l10n_util::GetStringFUTF16( |
- IDS_SYNC_START_SYNC_BUTTON_LABEL, |
- l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME)), |
- this); |
- layout->StartRow(1, 0); |
- layout->SkipColumns(1); |
- layout->AddView(signin_current_profile_link_); |
- layout->StartRow(1, 0); |
- layout->SkipColumns(1); |
- } |
- |
- return view; |
-} |
- |
-views::View* ProfileChooserView::CreateCurrentProfileEditableView( |
- const AvatarMenu::Item& avatar_item) { |
- DCHECK(avatar_item.signed_in); |
- views::View* view = new views::View(); |
- views::GridLayout* layout = CreateDoubleColumnLayout(view); |
- layout->SetInsets(views::kButtonVEdgeMarginNew, |
- views::kButtonHEdgeMarginNew, |
- views::kButtonVEdgeMarginNew, |
- views::kButtonHEdgeMarginNew); |
- |
- current_profile_photo_ = |
- new EditableProfilePhoto(this, avatar_item.icon, true); |
- view->SetBoundsRect(current_profile_photo_->bounds()); |
- current_profile_name_ = new EditableProfileName( |
- this, profiles::GetAvatarNameForProfile(browser_->profile()), true); |
- |
- layout->StartRow(1, 0); |
- layout->AddView(current_profile_photo_, 1, 3); |
- layout->AddView(current_profile_name_); |
- |
- layout->StartRow(1, 0); |
- layout->SkipColumns(1); |
- |
- layout->StartRow(1, 0); |
- layout->SkipColumns(1); |
- return view; |
-} |
- |
-views::View* ProfileChooserView::CreateGuestProfileView() { |
- gfx::Image guest_icon = |
- ui::ResourceBundle::GetSharedInstance().GetImageNamed(IDR_LOGIN_GUEST); |
- AvatarMenu::Item guest_avatar_item(0, 0, guest_icon); |
- guest_avatar_item.active = true; |
- guest_avatar_item.name = l10n_util::GetStringUTF16( |
- IDS_PROFILES_GUEST_PROFILE_NAME); |
- guest_avatar_item.signed_in = false; |
- |
- return CreateCurrentProfileView(guest_avatar_item, true); |
-} |
- |
-views::View* ProfileChooserView::CreateOtherProfilesView( |
- const Indexes& avatars_to_show) { |
- views::View* view = new views::View(); |
- views::GridLayout* layout = CreateSingleColumnLayout( |
- view, kFixedMenuWidth - 2 * views::kButtonHEdgeMarginNew); |
- layout->SetInsets(0, views::kButtonHEdgeMarginNew, |
- views::kButtonVEdgeMarginNew, views::kButtonHEdgeMarginNew); |
- int num_avatars_to_show = avatars_to_show.size(); |
- for (int i = 0; i < num_avatars_to_show; ++i) { |
- const size_t index = avatars_to_show[i]; |
- const AvatarMenu::Item& item = avatar_menu_->GetItemAt(index); |
- const int kSmallImageSide = 32; |
- |
- gfx::Image image = profiles::GetSizedAvatarIconWithBorder( |
- item.icon, true, |
- kSmallImageSide + profiles::kAvatarIconPadding, |
- kSmallImageSide + profiles::kAvatarIconPadding); |
- |
- views::LabelButton* button = new views::LabelButton(this, item.name); |
- open_other_profile_indexes_map_[button] = index; |
- button->SetImage(views::Button::STATE_NORMAL, *image.ToImageSkia()); |
- button->SetFontList(ui::ResourceBundle::GetSharedInstance().GetFontList( |
- ui::ResourceBundle::MediumFont)); |
- button->SetBorder(views::Border::NullBorder()); |
- |
- layout->StartRow(1, 0); |
- layout->AddView(button); |
- |
- // The last avatar in the list does not need any bottom padding. |
- if (i < num_avatars_to_show - 1) |
- layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); |
- } |
- |
- return view; |
-} |
- |
-views::View* ProfileChooserView::CreateOptionsView(bool enable_lock) { |
- views::View* view = new views::View(); |
- views::GridLayout* layout; |
- |
- // Only signed-in users have the ability to lock. |
- if (enable_lock) { |
- layout = new views::GridLayout(view); |
- views::ColumnSet* columns = layout->AddColumnSet(0); |
- int width_of_lock_button = |
- 2 * views::kUnrelatedControlLargeHorizontalSpacing + 12; |
- int width_of_users_button = kFixedMenuWidth - width_of_lock_button; |
- columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0, |
- views::GridLayout::FIXED, width_of_users_button, |
- width_of_users_button); |
- columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0, |
- views::GridLayout::FIXED, width_of_lock_button, |
- width_of_lock_button); |
- view->SetLayoutManager(layout); |
- } else { |
- layout = CreateSingleColumnLayout(view, kFixedMenuWidth); |
- } |
- |
- // The horizontal padding will be set by each button individually, so that |
- // in the hovered state the button spans the entire parent view. |
- layout->SetInsets(views::kRelatedControlVerticalSpacing, 0, |
- views::kRelatedControlVerticalSpacing, 0); |
- |
- ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); |
- users_button_ = new BackgroundColorHoverButton( |
- this, |
- l10n_util::GetStringFUTF16(IDS_PROFILES_NOT_YOU_BUTTON, |
- profiles::GetAvatarNameForProfile(browser_->profile())), |
- *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_AVATAR), |
- *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_AVATAR)); |
- |
- layout->StartRow(1, 0); |
- layout->AddView(users_button_); |
- |
- if (enable_lock) { |
- lock_button_ = new BackgroundColorHoverButton( |
- this, |
- base::string16(), |
- *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_LOCK), |
- *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_LOCK)); |
- layout->AddView(lock_button_); |
- } |
- return view; |
-} |
- |
-views::View* ProfileChooserView::CreateCurrentProfileAccountsView( |
- const AvatarMenu::Item& avatar_item) { |
- DCHECK(avatar_item.signed_in); |
- views::View* view = new views::View(); |
- int column_width = kFixedMenuWidth - 2 * views::kButtonHEdgeMarginNew; |
- views::GridLayout* layout = CreateSingleColumnLayout(view, column_width); |
- layout->SetInsets(views::kButtonVEdgeMarginNew, |
- views::kButtonHEdgeMarginNew, |
- views::kButtonVEdgeMarginNew, |
- views::kButtonHEdgeMarginNew); |
- |
- Profile* profile = browser_->profile(); |
- std::string primary_account = |
- SigninManagerFactory::GetForProfile(profile)->GetAuthenticatedUsername(); |
- DCHECK(!primary_account.empty()); |
- std::vector<std::string>accounts = |
- profiles::GetSecondaryAccountsForProfile(profile, primary_account); |
- |
- // The primary account should always be listed first. |
- // TODO(rogerta): we still need to further differentiate the primary account |
- // from the others in the UI, so more work is likely required here: |
- // crbug.com/311124. |
- CreateAccountButton(layout, primary_account, true, column_width); |
- for (size_t i = 0; i < accounts.size(); ++i) |
- CreateAccountButton(layout, accounts[i], false, column_width); |
- layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); |
- |
- add_account_button_ = new views::BlueButton( |
- this, |
- l10n_util::GetStringFUTF16(IDS_PROFILES_PROFILE_ADD_ACCOUNT_BUTTON, |
- avatar_item.name)); |
- layout->StartRow(1, 0); |
- layout->AddView(add_account_button_); |
- return view; |
-} |
- |
-void ProfileChooserView::CreateAccountButton(views::GridLayout* layout, |
- const std::string& account, |
- bool is_primary_account, |
- int width) { |
- ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); |
- const gfx::ImageSkia* menu_marker = |
- rb->GetImageNamed(IDR_CLOSE_1).ToImageSkia(); |
- // Use a MenuButtonListener and not a regular ButtonListener to be |
- // able to distinguish between the unnamed "other profile" buttons and the |
- // unnamed "multiple accounts" buttons. |
- views::MenuButton* email_button = new views::MenuButton( |
- NULL, |
- gfx::ElideEmail(base::UTF8ToUTF16(account), |
- rb->GetFontList(ui::ResourceBundle::BaseFont), |
- width - menu_marker->width()), |
- this, |
- true /* show_menu_marker */); |
- email_button->SetBorder(views::Border::CreateEmptyBorder(0, 0, 0, 0)); |
- email_button->set_menu_marker(menu_marker); |
- if (!is_primary_account) |
- layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); |
- layout->StartRow(1, 0); |
- layout->AddView(email_button); |
- |
- // Save the original email address, as the button text could be elided. |
- current_profile_accounts_map_[email_button] = account; |
-} |
- |
-views::View* ProfileChooserView::CreateGaiaSigninView( |
- bool add_secondary_account) { |
- views::View* view = new views::View(); |
- views::GridLayout* layout = |
- CreateSingleColumnLayout(view, kFixedGaiaViewWidth); |
- |
- // Adds title. |
- views::View* padded_title = new views::View(); |
- int available_width = kFixedGaiaViewWidth - 2 * views::kButtonHEdgeMarginNew; |
- views::GridLayout* padded_layout = CreateSingleColumnLayout( |
- padded_title, available_width); |
- padded_layout->SetInsets(views::kButtonVEdgeMarginNew, |
- views::kButtonHEdgeMarginNew, |
- views::kButtonVEdgeMarginNew, |
- views::kButtonHEdgeMarginNew); |
- padded_layout->StartRow(1, 0); |
- padded_layout->AddView(new TitleCard( |
- add_secondary_account ? IDS_PROFILES_GAIA_ADD_ACCOUNT_TITLE : |
- IDS_PROFILES_GAIA_SIGNIN_TITLE, |
- this, &gaia_signin_cancel_button_)); |
- |
- layout->StartRow(1, 0); |
- layout->AddView(padded_title); |
- layout->StartRow(1, 0); |
- layout->AddView(new views::Separator(views::Separator::HORIZONTAL)); |
- |
- // Adds Gaia signin webview |
- Profile* profile = browser_->profile(); |
- views::WebView* web_view = new views::WebView(profile); |
- signin::Source source = add_secondary_account ? |
- signin::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT : |
- signin::SOURCE_AVATAR_BUBBLE_SIGN_IN; |
- GURL url(signin::GetPromoURL( |
- source, false /* auto_close */, true /* is_constrained */)); |
- web_view->LoadInitialURL(url); |
- web_view->SetPreferredSize( |
- gfx::Size(kFixedGaiaViewWidth, kFixedGaiaViewHeight)); |
- |
- layout->StartRow(1, 0); |
- layout->AddView(web_view); |
- |
- return view; |
-} |
- |
-views::View* ProfileChooserView::CreateAccountRemovalView() { |
- views::View* view = new views::View(); |
- views::GridLayout* layout = CreateSingleColumnLayout( |
- view, kFixedAccountRemovalViewWidth - 2 * views::kButtonHEdgeMarginNew); |
- layout->SetInsets(views::kButtonVEdgeMarginNew, |
- views::kButtonHEdgeMarginNew, |
- views::kButtonVEdgeMarginNew, |
- views::kButtonHEdgeMarginNew); |
- |
- // Adds title. |
- layout->StartRow(1, 0); |
- layout->AddView(new TitleCard(IDS_PROFILES_ACCOUNT_REMOVAL_TITLE, this, |
- &account_removal_cancel_button_)); |
- layout->StartRowWithPadding(1, 0, 0, views::kRelatedControlVerticalSpacing); |
- layout->AddView(new views::Separator(views::Separator::HORIZONTAL)); |
- |
- const std::string& primary_account = SigninManagerFactory::GetForProfile( |
- browser_->profile())->GetAuthenticatedUsername(); |
- bool is_primary_account = primary_account == account_id_to_remove_; |
- |
- // Adds main text. |
- views::Label* content_label = new views::Label(is_primary_account ? |
- l10n_util::GetStringFUTF16(IDS_PROFILES_PRIMARY_ACCOUNT_REMOVAL_TEXT, |
- base::UTF8ToUTF16(account_id_to_remove_)) : |
- l10n_util::GetStringUTF16(IDS_PROFILES_ACCOUNT_REMOVAL_TEXT)); |
- |
- content_label->SetMultiLine(true); |
- content_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
- ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); |
- const gfx::FontList& small_font_list = |
- rb->GetFontList(ui::ResourceBundle::SmallFont); |
- content_label->SetFontList(small_font_list); |
- layout->StartRowWithPadding(1, 0, 0, views::kUnrelatedControlVerticalSpacing); |
- layout->AddView(content_label); |
- |
- // Adds button. |
- if (!is_primary_account) { |
- remove_account_and_relaunch_button_ = new views::BlueButton( |
- this, l10n_util::GetStringUTF16(IDS_PROFILES_ACCOUNT_REMOVAL_BUTTON)); |
- remove_account_and_relaunch_button_->SetHorizontalAlignment( |
- gfx::ALIGN_CENTER); |
- layout->StartRowWithPadding( |
- 1, 0, 0, views::kUnrelatedControlVerticalSpacing); |
- layout->AddView(remove_account_and_relaunch_button_); |
- } else { |
- layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); |
- } |
- |
- return view; |
-} |