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

Unified Diff: chrome/browser/ui/views/sync/one_click_signin_bubble_view.cc

Issue 11896021: Change the one-click sign in confirmation bubble into a modal dialog (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Make enum protected Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/views/sync/one_click_signin_bubble_view.cc
diff --git a/chrome/browser/ui/views/sync/one_click_signin_bubble_view.cc b/chrome/browser/ui/views/sync/one_click_signin_bubble_view.cc
index 3b9ec083b9629d7dcb32f197d18c57631f63a7b5..6c29a98df4cbabcc2c2894471cd2dd374494b397 100644
--- a/chrome/browser/ui/views/sync/one_click_signin_bubble_view.cc
+++ b/chrome/browser/ui/views/sync/one_click_signin_bubble_view.cc
@@ -10,12 +10,17 @@
#include "chrome/browser/google/google_util.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/common/url_constants.h"
+#include "content/public/browser/web_contents.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
+#include "grit/theme_resources.h"
+#include "grit/ui_resources.h"
#include "ui/base/keycodes/keyboard_codes.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
+#include "ui/views/controls/button/image_button.h"
#include "ui/views/controls/button/text_button.h"
+#include "ui/views/controls/image_view.h"
#include "ui/views/controls/label.h"
#include "ui/views/controls/link.h"
#include "ui/views/layout/grid_layout.h"
@@ -24,6 +29,158 @@
// Minimum width for the mutli-line label.
const int kMinimumLabelWidth = 240;
+const int kDialogMargin = 16;
+
+namespace {
+
+class OneClickSigninDialogView : public OneClickSigninBubbleView {
+ public:
+ // The column set constants that can be used in the InitContent() function
+ // to layout views.
+ enum {
+ kColumnSetTitleBar = kColumnSetLast + 1,
+ kColumnSetDescription
+ };
+
+ OneClickSigninDialogView(
+ content::WebContents* web_content,
+ views::View* anchor_view,
+ const BrowserWindow::StartSyncCallback& start_sync_callback);
+
+ private:
+ // Overridden from views::WidgetDelegate:
+ virtual ui::ModalType GetModalType() const OVERRIDE;
+
+ // Overridden from OneClickSigninBubbleView:
+ virtual void InitContent(views::GridLayout* layout) OVERRIDE;
+ virtual void GetButtons(views::TextButton** ok_button,
+ views::TextButton** undo_button) OVERRIDE;
+
+ // Overridden from views::LinkListener:
+ virtual void LinkClicked(views::Link* source, int event_flags) OVERRIDE;
+
+ content::WebContents* web_content_;
+ views::Link* learn_more_link_;
+ views::ImageButton* close_button_;
+
+ DISALLOW_COPY_AND_ASSIGN(OneClickSigninDialogView);
+};
+
+OneClickSigninDialogView::OneClickSigninDialogView(
+ content::WebContents* web_content,
+ views::View* anchor_view,
+ const BrowserWindow::StartSyncCallback& start_sync_callback)
+ : OneClickSigninBubbleView(anchor_view, start_sync_callback),
+ web_content_(web_content),
+ learn_more_link_(NULL),
+ close_button_(NULL) {
+ set_arrow_location(views::BubbleBorder::NONE);
+ set_anchor_insets(gfx::Insets(0, 0, anchor_view->height() / 2, 0));
+ set_close_on_deactivate(false);
+ set_margins(gfx::Insets(kDialogMargin, kDialogMargin, kDialogMargin,
+ kDialogMargin));
+}
+
+ui::ModalType OneClickSigninDialogView::GetModalType() const {
+ return ui::MODAL_TYPE_CHILD;
+}
+
+void OneClickSigninDialogView::InitContent(views::GridLayout* layout) {
+ // Column set for title bar.
+ views::ColumnSet* cs = layout->AddColumnSet(kColumnSetTitleBar);
+ cs->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER, 0,
+ views::GridLayout::USE_PREF, 0, 0);
+ cs->AddPaddingColumn(1, views::kUnrelatedControlHorizontalSpacing);
+ cs->AddColumn(views::GridLayout::TRAILING, views::GridLayout::CENTER, 0,
+ views::GridLayout::USE_PREF, 0, 0);
+
+ // Column set for descriptive text and link.
+ cs = layout->AddColumnSet(kColumnSetDescription);
+ cs->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER, 0,
+ views::GridLayout::USE_PREF, 0, 0);
+ cs->AddPaddingColumn(0, views::kRelatedControlSmallHorizontalSpacing);
+ cs->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER, 0,
+ views::GridLayout::USE_PREF, 0, 0);
+
+ ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
+
+ {
+ layout->StartRow(0, kColumnSetTitleBar);
+
+ views::Label* label = new views::Label(
+ l10n_util::GetStringUTF16(IDS_ONE_CLICK_SIGNIN_DIALOG_TITLE));
+ label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
+ label->SetFont(label->font().DeriveFont(3, gfx::Font::BOLD));
+ layout->AddView(label);
+
+ close_button_ = new views::ImageButton(this);
+ close_button_->SetImage(views::ImageButton::STATE_NORMAL,
+ rb.GetImageNamed(IDR_CLOSE_BAR).ToImageSkia());
+ close_button_->SetImage(views::ImageButton::STATE_HOVERED,
+ rb.GetImageNamed(IDR_CLOSE_BAR_H).ToImageSkia());
+ close_button_->SetImage(views::ImageButton::STATE_PRESSED,
+ rb.GetImageNamed(IDR_CLOSE_BAR_P).ToImageSkia());
+ layout->AddView(close_button_);
+ }
+
+ {
+ layout->StartRow(0, kColumnSetFillAlign);
+
+ views::ImageView* image = new views::ImageView();
+ image->SetImage(rb.GetImageNamed(IDR_ONE_CLICK_SIGNIN).ToImageSkia());
+ layout->AddView(image);
+ }
+
+ {
+ layout->StartRow(0, kColumnSetDescription);
+
+ views::Label* label = new views::Label(
+ l10n_util::GetStringUTF16(IDS_ONE_CLICK_SIGNIN_DIALOG_MESSAGE));
+ layout->AddView(label);
+
+ learn_more_link_ = new views::Link(
+ l10n_util::GetStringUTF16(IDS_LEARN_MORE));
+ learn_more_link_->set_listener(this);
+ learn_more_link_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
+ layout->AddView(learn_more_link_);
+ }
+
+ layout->AddPaddingRow(0, views::kLabelToControlVerticalSpacing);
+}
+
+void OneClickSigninDialogView::GetButtons(views::TextButton** ok_button,
+ views::TextButton** undo_button) {
+ *ok_button = new views::NativeTextButton(this);
+ *undo_button = new views::NativeTextButton(this);
+
+ // The default size of the buttons is too large. To allow them to be smaller
+ // ignore the minimum default size. Furthermore, to make sure they are the
+ // same size, SetText() is called with both strings on both buttons.
+ string16 ok_label =
+ l10n_util::GetStringUTF16(IDS_ONE_CLICK_SIGNIN_DIALOG_OK_BUTTON);
+ string16 undo_label =
+ l10n_util::GetStringUTF16(IDS_ONE_CLICK_SIGNIN_DIALOG_UNDO_BUTTON);
+ (*ok_button)->SetText(undo_label);
+ (*ok_button)->SetText(ok_label);
+ (*undo_button)->SetText(ok_label);
+ (*undo_button)->SetText(undo_label);
+}
+
+void OneClickSigninDialogView::LinkClicked(views::Link* source,
+ int event_flags) {
+ if (source == learn_more_link_) {
+ StartFade(false);
+ content::OpenURLParams params(
+ GURL(chrome::kChromeSyncLearnMoreURL), content::Referrer(),
+ NEW_WINDOW, content::PAGE_TRANSITION_LINK, false);
+ web_content_->OpenURL(params);
+ return;
+ }
+
+ OneClickSigninBubbleView::LinkClicked(source, event_flags);
+}
+
+}
// OneClickSigninBubbleView ----------------------------------------------------
@@ -32,13 +189,17 @@ OneClickSigninBubbleView* OneClickSigninBubbleView::bubble_view_ = NULL;
// static
void OneClickSigninBubbleView::ShowBubble(
- views::View* anchor_view,
+ BrowserWindow::OneClickSigninBubbleType type,
+ ToolbarView* toolbar_view,
const BrowserWindow::StartSyncCallback& start_sync) {
if (IsShowing())
return;
- bubble_view_ =
- new OneClickSigninBubbleView(anchor_view, start_sync);
+ bubble_view_ = type == BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_BUBBLE ?
+ new OneClickSigninBubbleView(toolbar_view->app_menu(), start_sync) :
+ new OneClickSigninDialogView(toolbar_view->GetWebContents(),
+ toolbar_view->location_bar(), start_sync);
+
views::BubbleDelegateView::CreateBubble(bubble_view_);
bubble_view_->Show();
}
@@ -80,16 +241,12 @@ void OneClickSigninBubbleView::Init() {
SetLayoutManager(layout);
set_border(views::Border::CreateEmptyBorder(8, 8, 8, 8));
- enum {
- kColumnSetFillAlign,
- kColumnSetControls
- };
-
// Column set for descriptive text and link.
views::ColumnSet* cs = layout->AddColumnSet(kColumnSetFillAlign);
cs->AddColumn(views::GridLayout::FILL, views::GridLayout::CENTER, 0,
- views::GridLayout::USE_PREF, 0, kMinimumLabelWidth);
+ views::GridLayout::USE_PREF, 0, 0);
+ // Column set for buttons at bottom of bubble.
cs = layout->AddColumnSet(kColumnSetControls);
cs->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER, 0,
views::GridLayout::USE_PREF, 0, 0);
@@ -100,15 +257,7 @@ void OneClickSigninBubbleView::Init() {
cs->AddColumn(views::GridLayout::TRAILING, views::GridLayout::CENTER, 0,
views::GridLayout::USE_PREF, 0, 0);
- // Add main text description.
- views::Label* label = new views::Label(
- l10n_util::GetStringUTF16(IDS_ONE_CLICK_SIGNIN_BUBBLE_MESSAGE));
- label->SetMultiLine(true);
- label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
- label->SizeToFit(kMinimumLabelWidth);
-
- layout->StartRow(0, kColumnSetFillAlign);
- layout->AddView(label);
+ InitContent(layout);
layout->AddPaddingRow(0, views::kRelatedControlSmallVerticalSpacing);
@@ -119,23 +268,9 @@ void OneClickSigninBubbleView::Init() {
advanced_link_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
// Add controls at the bottom.
- ok_button_ = new views::NativeTextButton(this);
+ GetButtons(&ok_button_, &undo_button_);
ok_button_->SetIsDefault(true);
- undo_button_ = new views::NativeTextButton(this);
-
- // The default size of the buttons is too large. To allow them to be smaller
- // ignore the minimum default size. Furthermore, to make sure they are the
- // same size, SetText() is called with both strings on both buttons.
- ok_button_->set_ignore_minimum_size(true);
- undo_button_->set_ignore_minimum_size(true);
- string16 ok_label = l10n_util::GetStringUTF16(IDS_OK);
- string16 undo_label = l10n_util::GetStringUTF16(IDS_ONE_CLICK_BUBBLE_UNDO);
- ok_button_->SetText(undo_label);
- ok_button_->SetText(ok_label);
- undo_button_->SetText(ok_label);
- undo_button_->SetText(undo_label);
-
layout->StartRow(0, kColumnSetControls);
layout->AddView(advanced_link_);
layout->AddView(ok_button_);
@@ -144,6 +279,36 @@ void OneClickSigninBubbleView::Init() {
AddAccelerator(ui::Accelerator(ui::VKEY_RETURN, 0));
}
+void OneClickSigninBubbleView::InitContent(views::GridLayout* layout) {
+ // Add main text description.
+ views::Label* label = new views::Label(
+ l10n_util::GetStringUTF16(IDS_ONE_CLICK_SIGNIN_BUBBLE_MESSAGE));
+ label->SetMultiLine(true);
+ label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
+ label->SizeToFit(kMinimumLabelWidth);
+
+ layout->StartRow(0, kColumnSetFillAlign);
+ layout->AddView(label);
+}
+
+void OneClickSigninBubbleView::GetButtons(views::TextButton** ok_button,
+ views::TextButton** undo_button) {
+ *ok_button = new views::NativeTextButton(this);
+ *undo_button = new views::NativeTextButton(this);
+
+ // The default size of the buttons is too large. To allow them to be smaller
+ // ignore the minimum default size. Furthermore, to make sure they are the
+ // same size, SetText() is called with both strings on both buttons.
+ (*ok_button)->set_ignore_minimum_size(true);
+ (*undo_button)->set_ignore_minimum_size(true);
+ string16 ok_label = l10n_util::GetStringUTF16(IDS_OK);
+ string16 undo_label = l10n_util::GetStringUTF16(IDS_ONE_CLICK_BUBBLE_UNDO);
+ (*ok_button)->SetText(undo_label);
+ (*ok_button)->SetText(ok_label);
+ (*undo_button)->SetText(ok_label);
+ (*undo_button)->SetText(undo_label);
+}
+
void OneClickSigninBubbleView::WindowClosing() {
// We have to reset |bubble_view_| here, not in our destructor, because
// we'll be destroyed asynchronously and the shown state will be checked

Powered by Google App Engine
This is Rietveld 408576698