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

Unified Diff: chrome/browser/ui/cocoa/profiles/profile_chooser_controller.mm

Issue 435423005: Implement the inline signin confirmation bubble and mirror upgrade tutorial (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: nits fixed Created 6 years, 4 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/cocoa/profiles/profile_chooser_controller.mm
diff --git a/chrome/browser/ui/cocoa/profiles/profile_chooser_controller.mm b/chrome/browser/ui/cocoa/profiles/profile_chooser_controller.mm
index 84185ba06796f3efa61d8759490c31405f354ce4..8a7c1d710ab46ad2407cbcb301d045e26b90ec66 100644
--- a/chrome/browser/ui/cocoa/profiles/profile_chooser_controller.mm
+++ b/chrome/browser/ui/cocoa/profiles/profile_chooser_controller.mm
@@ -12,6 +12,7 @@
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/first_run/first_run.h"
#include "chrome/browser/lifetime/application_lifetime.h"
#include "chrome/browser/prefs/incognito_mode_prefs.h"
#include "chrome/browser/profiles/avatar_menu.h"
@@ -32,6 +33,8 @@
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/chrome_pages.h"
#include "chrome/browser/ui/chrome_style.h"
+#include "chrome/browser/ui/webui/signin/login_ui_service.h"
+#include "chrome/browser/ui/webui/signin/login_ui_service_factory.h"
#import "chrome/browser/ui/cocoa/hyperlink_text_view.h"
#import "chrome/browser/ui/cocoa/info_bubble_view.h"
#import "chrome/browser/ui/cocoa/info_bubble_window.h"
@@ -88,12 +91,13 @@ const CGFloat kFixedGaiaViewHeight = 400;
// Fixed size for the account removal view.
const CGFloat kFixedAccountRemovalViewWidth = 280;
-// Fixed size for the end-preview view.
-const int kFixedEndPreviewViewWidth = 280;
+
+// Fixed size for the switch user view.
+const int kFixedSwitchUserViewWidth = 280;
// Maximum number of times to show the welcome tutorial in the profile avatar
// bubble.
-const int kProfileAvatarTutorialShowMax = 1;
+const int kUpgradeWelcomeTutorialShowMax = 1;
// The tag number for the primary account.
const int kPrimaryProfileTag = -1;
@@ -192,7 +196,7 @@ NSColor* GetDialogBackgroundColor() {
// Builds a title card with one back button right aligned and one label center
// aligned.
NSView* BuildTitleCard(NSRect frame_rect,
- int message_id,
+ NSString* message,
id back_button_target,
SEL back_button_action) {
base::scoped_nsobject<NSView> container(
@@ -211,8 +215,7 @@ NSView* BuildTitleCard(NSRect frame_rect,
[button setFrameOrigin:NSMakePoint(kHorizontalSpacing, 0)];
NSTextField* title_label =
- BuildLabel(l10n_util::GetNSString(message_id), NSZeroPoint,
- GetDialogBackgroundColor(), nil /* text_color */);
+ BuildLabel(message, NSZeroPoint, GetDialogBackgroundColor(), nil);
[title_label setAlignment:NSCenterTextAlignment];
[title_label setFont:[NSFont labelFontOfSize:kTitleFontSize]];
[title_label sizeToFit];
@@ -289,6 +292,8 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
viewMode == profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN ||
viewMode == profiles::BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT ||
viewMode == profiles::BUBBLE_VIEW_MODE_GAIA_REAUTH) {
+ if (viewMode == profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN)
+ [controller_ setTutorialMode:profiles::TUTORIAL_MODE_CONFIRM_SIGNIN];
[controller_ initMenuContentsWithView:
switches::IsEnableAccountConsistency() ?
profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT :
@@ -306,6 +311,14 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
// AvatarMenuObserver:
virtual void OnAvatarMenuChanged(AvatarMenu* avatar_menu) OVERRIDE {
+ // Do not refresh the avatar menu if the user is on a signin related view.
+ profiles::BubbleViewMode viewMode = [controller_ viewMode];
+ if (viewMode == profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN ||
+ viewMode == profiles::BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT ||
+ viewMode == profiles::BUBBLE_VIEW_MODE_GAIA_REAUTH) {
+ return;
+ }
+
// While the bubble is open, the avatar menu can only change from the
// profile chooser view by modifying the current profile's photo or name.
[controller_
@@ -704,24 +717,28 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
// Builds the profile chooser view.
- (NSView*)buildProfileChooserView;
-// Builds a tutorial card with a title label using |titleMessageId|, a content
-// label using |contentMessageId|, and a bottom row with a right-aligned link
-// using |linkMessageId|, and a left aligned button using |buttonMessageId|.
+// Builds a tutorial card with a title label using |titleMessage|, a content
+// label using |contentMessage|, and a bottom row with a right-aligned link
+// using |linkMessage|, and a left aligned button using |buttonMessage|.
// On click, the link would execute |linkAction|, and the button would execute
// |buttonAction|. It sets |tutorialMode_| to the given |mode|.
- (NSView*)tutorialViewWithMode:(profiles::TutorialMode)mode
- titleMessage:(int)titleMessageId
- contentMessage:(int)contentMessageId
- linkMessage:(int)linkMessageId
- buttonMessage:(int)buttonMessageId
+ titleMessage:(NSString*)titleMessage
+ contentMessage:(NSString*)contentMessage
+ linkMessage:(NSString*)linkMessage
+ buttonMessage:(NSString*)buttonMessage
linkAction:(SEL)linkAction
buttonAction:(SEL)buttonAction;
-// Builds a a tutorial card for new profile management preview if needed. if
-// new profile management is not enabled yet, then it prompts the user to try
-// out the feature. Otherwise, it notifies the user that the feature has been
-// enabled if needed.
-- (NSView*)buildPreviewTutorialIfNeeded:(const AvatarMenu::Item&)item;
+// Builds a tutorial card to introduce an upgrade user to the new avatar menu if
+// needed. |tutorial_shown| indicates if the tutorial has already been shown in
+// the previous active view. |avatar_item| refers to the current profile.
+- (NSView*)buildWelcomeUpgradeTutorialViewIfNeeded;
+
+// Builds a tutorial card to have the user confirm the last Chrome signin,
+// Chrome sync will be delayed until the user either dismisses the tutorial, or
+// configures sync through the "Settings" link.
+- (NSView*)buildSigninConfirmationView;
// Creates the main profile card for the profile |item| at the top of
// the bubble.
@@ -758,8 +775,9 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
// Creates the account removal view.
- (NSView*)buildAccountRemovalView;
-// Creates the end-preview view.
-- (NSView*)buildEndPreviewView;
+// Create a view that shows various options for an upgrade user who is not
+// the same person as the currently signed in user.
+- (NSView*)buildSwitchUserView;
// Creates a button with |text|, an icon given by |imageResourceId| and with
// |action|.
@@ -790,6 +808,10 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
return viewMode_;
}
+- (void)setTutorialMode:(profiles::TutorialMode)tutorialMode {
+ tutorialMode_ = tutorialMode;
+}
+
- (IBAction)switchToProfile:(id)sender {
// Check the event flags to see if a new window should be created.
bool alwaysCreate = ui::WindowOpenDispositionFromNSEvent(
@@ -878,52 +900,47 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
[self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT];
}
-- (IBAction)openTutorialLearnMoreURL:(id)sender {
- ProfileMetrics::LogProfileUpgradeEnrollment(
- ProfileMetrics::PROFILE_ENROLLMENT_LAUNCH_LEARN_MORE);
- // TODO(guohui): update |learnMoreUrl| once it is decided.
- const GURL learnMoreUrl("https://support.google.com/chrome/?hl=en#to");
- chrome::NavigateParams params(browser_->profile(), learnMoreUrl,
- content::PAGE_TRANSITION_LINK);
- params.disposition = NEW_FOREGROUND_TAB;
- chrome::Navigate(&params);
-}
-
-- (IBAction)enableNewProfileManagementPreview:(id)sender {
- ProfileMetrics::LogProfileUpgradeEnrollment(
- ProfileMetrics::PROFILE_ENROLLMENT_ACCEPT_NEW_PROFILE_MGMT);
- profiles::EnableNewProfileManagementPreview(browser_->profile());
-}
-
-- (IBAction)dismissTutorial:(id)sender {
- ProfileMetrics::LogProfileUpgradeEnrollment(
- ProfileMetrics::PROFILE_ENROLLMENT_CLOSE_WELCOME_CARD);
- // 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);
- [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER];
+- (IBAction)seeWhatsNew:(id)sender {
+ chrome::ShowUserManagerWithTutorial(
+ profiles::USER_MANAGER_TUTORIAL_OVERVIEW);
+}
+
+- (IBAction)showSwitchUserView:(id)sender {
+ [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_SWITCH_USER];
+}
+
+- (IBAction)configureSyncSettings:(id)sender {
+ tutorialMode_ = profiles::TUTORIAL_MODE_NONE;
+ LoginUIServiceFactory::GetForProfile(browser_->profile())->
+ SyncConfirmationUIClosed(true);
}
-- (IBAction)showSendFeedbackTutorial:(id)sender {
- ProfileMetrics::LogProfileUpgradeEnrollment(
- ProfileMetrics::PROFILE_ENROLLMENT_SEND_FEEDBACK);
- tutorialMode_ = profiles::TUTORIAL_MODE_SEND_FEEDBACK;
+- (IBAction)syncSettingsConfirmed:(id)sender {
+ tutorialMode_ = profiles::TUTORIAL_MODE_NONE;
+ LoginUIServiceFactory::GetForProfile(browser_->profile())->
+ SyncConfirmationUIClosed(false);
[self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER];
}
-- (IBAction)showEndPreviewView:(id)sender {
- [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_END_PREVIEW];
+- (IBAction)addPerson:(id)sender {
+ profiles::ShowUserManagerMaybeWithTutorial(browser_->profile());
+}
+
+- (IBAction)disconnectProfile:(id)sender {
+ chrome::ShowSettings(browser_);
}
-- (IBAction)sendFeedback:(id)sender {
- chrome::OpenFeedbackDialog(browser_);
+- (IBAction)navigateBackFromSwitchUserView:(id)sender {
+ [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER];
}
-- (IBAction)endPreviewAndRelaunch:(id)sender {
- profiles::DisableNewProfileManagementPreview(browser_->profile());
+- (void)windowWillClose:(NSNotification*)notification {
+ if (tutorialMode_ == profiles::TUTORIAL_MODE_CONFIRM_SIGNIN) {
+ LoginUIServiceFactory::GetForProfile(browser_->profile())->
+ SyncConfirmationUIClosed(false);
+ }
+
+ [super windowWillClose:notification];
}
- (void)cleanUpEmbeddedViewContents {
@@ -998,8 +1015,8 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
case profiles::BUBBLE_VIEW_MODE_ACCOUNT_REMOVAL:
subView = [self buildAccountRemovalView];
break;
- case profiles::BUBBLE_VIEW_MODE_END_PREVIEW:
- subView = [self buildEndPreviewView];
+ case profiles::BUBBLE_VIEW_MODE_SWITCH_USER:
+ subView = [self buildSwitchUserView];
break;
case profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER:
case profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT:
@@ -1022,16 +1039,27 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
[[NSMutableArray alloc] init]);
// Local and guest profiles cannot lock their profile.
bool enableLock = false;
- // Store the most recently displayed tutorial mode
- profiles::TutorialMode lastTutorialMode = tutorialMode_;
// Loop over the profiles in reverse, so that they are sorted by their
// y-coordinate, and separate them into active and "other" profiles.
for (int i = avatarMenu_->GetNumberOfItems() - 1; i >= 0; --i) {
const AvatarMenu::Item& item = avatarMenu_->GetItemAt(i);
if (item.active) {
- if (viewMode_ == profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER)
- tutorialView = [self buildPreviewTutorialIfNeeded:item];
+ if (viewMode_ == profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER) {
+ switch (tutorialMode_) {
+ case profiles::TUTORIAL_MODE_NONE:
+ case profiles::TUTORIAL_MODE_WELCOME_UPGRADE:
+ tutorialView =
+ [self buildWelcomeUpgradeTutorialViewIfNeeded];
+ break;
+ case profiles::TUTORIAL_MODE_CONFIRM_SIGNIN:
+ tutorialView = [self buildSigninConfirmationView];
+ break;
+ case profiles::TUTORIAL_MODE_SHOW_ERROR:
+ // TODO(guohui): not implemented yet.
+ NOTREACHED();
+ }
+ }
currentProfileView = [self createCurrentProfileView:item];
enableLock = switches::IsNewProfileManagement() && item.signed_in;
} else {
@@ -1112,11 +1140,7 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
[tutorialView setFrameOrigin:NSMakePoint(0, yOffset)];
[container addSubview:tutorialView];
yOffset = NSMaxY([tutorialView frame]);
- if (!switches::IsEnableAccountConsistency() &&
- tutorialMode_ != lastTutorialMode) {
- ProfileMetrics::LogProfileUpgradeEnrollment(
- ProfileMetrics::PROFILE_ENROLLMENT_SHOW_PREVIEW_PROMO);
- }
+ //TODO(mlerman): update UMA stats for the new tutorials.
} else {
tutorialMode_ = profiles::TUTORIAL_MODE_NONE;
}
@@ -1125,67 +1149,74 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
return container.autorelease();
}
-- (NSView*)buildPreviewTutorialIfNeeded:(const AvatarMenu::Item&)item {
- if (!switches::IsEnableAccountConsistency()) {
- return [self tutorialViewWithMode:profiles::TUTORIAL_MODE_ENABLE_PREVIEW
- titleMessage:IDS_PROFILES_PREVIEW_TUTORIAL_TITLE
- contentMessage:IDS_PROFILES_PREVIEW_TUTORIAL_CONTENT_TEXT
- linkMessage:IDS_PROFILES_PROFILE_TUTORIAL_LEARN_MORE
- buttonMessage:IDS_PROFILES_TUTORIAL_TRY_BUTTON
- linkAction:@selector(openTutorialLearnMoreURL:)
- buttonAction:
- @selector(enableNewProfileManagementPreview:)];
- }
-
- if (!switches::IsNewProfileManagementPreviewEnabled())
+- (NSView*)buildSigninConfirmationView {
+ NSString* titleMessage = l10n_util::GetNSString(
+ IDS_PROFILES_CONFIRM_SIGNIN_TUTORIAL_TITLE);
+ NSString* contentMessage = l10n_util::GetNSString(
+ IDS_PROFILES_CONFIRM_SIGNIN_TUTORIAL_CONTENT_TEXT);
+ NSString* linkMessage = l10n_util::GetNSString(
+ IDS_PROFILES_SYNC_SETTINGS_LINK);
+ NSString* buttonMessage = l10n_util::GetNSString(
+ IDS_PROFILES_TUTORIAL_OK_BUTTON);
+ return [self tutorialViewWithMode:profiles::TUTORIAL_MODE_CONFIRM_SIGNIN
+ titleMessage:titleMessage
+ contentMessage:contentMessage
+ linkMessage:linkMessage
+ buttonMessage:buttonMessage
+ linkAction:@selector(configureSyncSettings:)
+ buttonAction:@selector(syncSettingsConfirmed:)];
+}
+
+- (NSView*)buildWelcomeUpgradeTutorialViewIfNeeded {
+ if (first_run::IsChromeFirstRun())
return nil;
- if (tutorialMode_ == profiles::TUTORIAL_MODE_SEND_FEEDBACK) {
- return [self tutorialViewWithMode:profiles::TUTORIAL_MODE_SEND_FEEDBACK
- titleMessage:IDS_PROFILES_FEEDBACK_TUTORIAL_TITLE
- contentMessage:
- IDS_PROFILES_FEEDBACK_TUTORIAL_CONTENT_TEXT
- linkMessage:IDS_PROFILES_END_PREVIEW
- buttonMessage:IDS_PROFILES_SEND_FEEDBACK_BUTTON
- linkAction:@selector(showEndPreviewView:)
- buttonAction:@selector(sendFeedback:)];
+ Profile* profile = browser_->profile();
+ const AvatarMenu::Item& avatarItem =
+ avatarMenu_->GetItemAt(avatarMenu_->GetActiveProfileIndex());
+ if (!avatarItem.signed_in) {
+ profile->GetPrefs()->SetInteger(
+ prefs::kProfileAvatarTutorialShown, kUpgradeWelcomeTutorialShowMax + 1);
+ return nil;
}
- Profile* profile = browser_->profile();
const int showCount = profile->GetPrefs()->GetInteger(
prefs::kProfileAvatarTutorialShown);
// Do not show the tutorial if user has dismissed it.
- if (showCount > kProfileAvatarTutorialShowMax)
+ if (showCount > kUpgradeWelcomeTutorialShowMax)
return nil;
- if (tutorialMode_ != profiles::TUTORIAL_MODE_WELCOME) {
- if (showCount == kProfileAvatarTutorialShowMax)
+ if (tutorialMode_ != profiles::TUTORIAL_MODE_WELCOME_UPGRADE) {
+ if (showCount == kUpgradeWelcomeTutorialShowMax)
return nil;
profile->GetPrefs()->SetInteger(
prefs::kProfileAvatarTutorialShown, showCount + 1);
}
- return [self tutorialViewWithMode:profiles::TUTORIAL_MODE_WELCOME
- titleMessage:IDS_PROFILES_PREVIEW_ENABLED_TUTORIAL_TITLE
- contentMessage:
- IDS_PROFILES_PREVIEW_ENABLED_TUTORIAL_CONTENT_TEXT
- linkMessage:IDS_PROFILES_PROFILE_TUTORIAL_LEARN_MORE
- buttonMessage:IDS_PROFILES_TUTORIAL_OK_BUTTON
- linkAction:@selector(openTutorialLearnMoreURL:)
- buttonAction:@selector(dismissTutorial:)];
+ NSString* titleMessage = l10n_util::GetNSStringF(
+ IDS_PROFILES_WELCOME_UPGRADE_TUTORIAL_TITLE, avatarItem.name);
+ NSString* contentMessage = l10n_util::GetNSString(
+ IDS_PROFILES_WELCOME_UPGRADE_TUTORIAL_CONTENT_TEXT);
+ NSString* linkMessage = l10n_util::GetNSStringF(
+ IDS_PROFILES_NOT_YOU, avatarItem.name);
+ NSString* buttonMessage = l10n_util::GetNSString(
+ IDS_PROFILES_TUTORIAL_WHATS_NEW_BUTTON);
+ return [self tutorialViewWithMode:profiles::TUTORIAL_MODE_WELCOME_UPGRADE
+ titleMessage:titleMessage
+ contentMessage:contentMessage
+ linkMessage:linkMessage
+ buttonMessage:buttonMessage
+ linkAction:@selector(showSwitchUserView:)
+ buttonAction:@selector(seeWhatsNew:)];
}
- (NSView*)tutorialViewWithMode:(profiles::TutorialMode)mode
- titleMessage:(int)titleMessageId
- contentMessage:(int)contentMessageId
- linkMessage:(int)linkMessageId
- buttonMessage:(int)buttonMessageId
+ titleMessage:(NSString*)titleMessage
+ contentMessage:(NSString*)contentMessage
+ linkMessage:(NSString*)linkMessage
+ buttonMessage:(NSString*)buttonMessage
linkAction:(SEL)linkAction
buttonAction:(SEL)buttonAction {
- // No promotion to Enable Accounst Consistency.
- if (mode == profiles::TUTORIAL_MODE_ENABLE_PREVIEW)
- return nil;
-
tutorialMode_ = mode;
NSColor* tutorialBackgroundColor =
@@ -1199,8 +1230,7 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
// Adds links and buttons at the bottom.
base::scoped_nsobject<NSButton> tutorialOkButton([[HoverButton alloc]
initWithFrame:NSZeroRect]);
- [tutorialOkButton setTitle:l10n_util::GetNSString(
- buttonMessageId)];
+ [tutorialOkButton setTitle:buttonMessage];
[tutorialOkButton setBezelStyle:NSRoundedBezelStyle];
[tutorialOkButton setTarget:self];
[tutorialOkButton setAction:buttonAction];
@@ -1218,7 +1248,7 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
[container addSubview:tutorialOkButton];
NSButton* learnMoreLink =
- [self linkButtonWithTitle:l10n_util::GetNSString(linkMessageId)
+ [self linkButtonWithTitle:linkMessage
frameOrigin:NSZeroPoint
action:linkAction];
[[learnMoreLink cell] setTextColor:[NSColor whiteColor]];
@@ -1232,7 +1262,7 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
// Adds body content.
NSTextField* contentLabel = BuildLabel(
- l10n_util::GetNSString(contentMessageId),
+ contentMessage,
NSMakePoint(kHorizontalSpacing, yOffset),
tutorialBackgroundColor,
gfx::SkColorToSRGBNSColor(profiles::kAvatarTutorialContentTextColor));
@@ -1243,38 +1273,19 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
// Adds title.
NSTextField* titleLabel =
- BuildLabel(l10n_util::GetNSString(titleMessageId),
+ BuildLabel(titleMessage,
NSMakePoint(kHorizontalSpacing, yOffset),
tutorialBackgroundColor,
[NSColor whiteColor] /* text_color */);
[titleLabel setFont:[NSFont labelFontOfSize:kTitleFontSize]];
- [titleLabel sizeToFit];
- [titleLabel setFrameSize:
- NSMakeSize(availableWidth, NSHeight([titleLabel frame]))];
+ [titleLabel setFrameSize:NSMakeSize(availableWidth, 0)];
+ [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:titleLabel];
[container addSubview:titleLabel];
yOffset = NSMaxY([titleLabel frame]) + kVerticalSpacing;
[container setFrameSize:NSMakeSize(kFixedMenuWidth, yOffset)];
-
- // Adds caret at the bottom.
- NSImage* caretImage = ui::ResourceBundle::GetSharedInstance().
- GetNativeImageNamed(IDR_ICON_PROFILES_MENU_CARET).AsNSImage();
- base::scoped_nsobject<NSImageView> caretView(
- [[NSImageView alloc] initWithFrame:NSMakeRect(
- kHorizontalSpacing, 0, caretImage.size.width,
- caretImage.size.height)]);
- [caretView setImage:caretImage];
-
- base::scoped_nsobject<NSView> containerWithCaret([[NSView alloc]
- initWithFrame:NSMakeRect(0, 0, kFixedMenuWidth, 0)]);
- [containerWithCaret addSubview:caretView];
-
- [container setFrameOrigin:NSMakePoint(0, caretImage.size.height)];
- [containerWithCaret addSubview:container];
-
- [containerWithCaret setFrameSize:
- NSMakeSize(kFixedMenuWidth, NSMaxY([container frame]))];
- return containerWithCaret.autorelease();
+ [container setFrameOrigin:NSZeroPoint];
+ return container.autorelease();
}
- (NSView*)createCurrentProfileView:(const AvatarMenu::Item&)item {
@@ -1347,26 +1358,6 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
[container addSubview:supervisedIcon];
}
- if (switches::IsNewProfileManagementPreviewEnabled()) {
- base::scoped_nsobject<HoverImageButton> questionButton(
- [[HoverImageButton alloc] initWithFrame:NSZeroRect]);
- [questionButton setBordered:NO];
- ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
- [questionButton setDefaultImage:rb->GetNativeImageNamed(
- IDR_ICON_PROFILES_MENU_QUESTION_STABLE).ToNSImage()];
- [questionButton setHoverImage:rb->GetNativeImageNamed(
- IDR_ICON_PROFILES_MENU_QUESTION_HOVER).ToNSImage()];
- [questionButton setPressedImage:rb->GetNativeImageNamed(
- IDR_ICON_PROFILES_MENU_QUESTION_SELECT).ToNSImage()];
- [questionButton setTarget:self];
- [questionButton setAction:@selector(showSendFeedbackTutorial:)];
- [questionButton sizeToFit];
- const CGFloat size = NSHeight([questionButton frame]) + 2;
- [questionButton setFrame:
- NSMakeRect(kHorizontalSpacing, yOffset - size, size, size)];
- [container addSubview:questionButton];
- }
-
[container setFrameSize:NSMakeSize(kFixedMenuWidth, yOffset)];
return container.autorelease();
}
@@ -1698,7 +1689,7 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
NSView* titleView = BuildTitleCard(
NSMakeRect(0, yOffset, kFixedGaiaViewWidth, 0),
- messageId,
+ l10n_util::GetNSString(messageId),
self /* backButtonTarget*/,
@selector(navigateBackFromSigninPage:) /* backButtonAction */);
[container addSubview:titleView];
@@ -1769,7 +1760,7 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
NSView* titleView = BuildTitleCard(
NSMakeRect(0, yOffset, kFixedAccountRemovalViewWidth,0),
- IDS_PROFILES_ACCOUNT_REMOVAL_TITLE,
+ l10n_util::GetNSString(IDS_PROFILES_ACCOUNT_REMOVAL_TITLE),
self /* backButtonTarget*/,
@selector(showAccountManagement:) /* backButtonAction */);
[container addSubview:titleView];
@@ -1779,33 +1770,56 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
return container.autorelease();
}
-- (NSView*)buildEndPreviewView {
+
+- (NSView*)buildSwitchUserView {
base::scoped_nsobject<NSView> container(
[[NSView alloc] initWithFrame:NSZeroRect]);
CGFloat availableWidth =
- kFixedEndPreviewViewWidth - 2 * kHorizontalSpacing;
- CGFloat yOffset = kVerticalSpacing;
+ kFixedSwitchUserViewWidth - 2 * kHorizontalSpacing;
+ CGFloat yOffset = 0;
+ NSRect viewRect = NSMakeRect(0, yOffset,
+ kFixedSwitchUserViewWidth,
+ kBlueButtonHeight + kSmallVerticalSpacing);
- // Adds the "end preview and relaunch" button at the bottom.
- base::scoped_nsobject<NSButton> endPreviewAndRelaunchButton(
- [[BlueLabelButton alloc] initWithFrame:NSZeroRect]);
- [endPreviewAndRelaunchButton setTitle:l10n_util::GetNSString(
- IDS_PROFILES_END_PREVIEW_AND_RELAUNCH)];
- [endPreviewAndRelaunchButton setTarget:self];
- [endPreviewAndRelaunchButton setAction:@selector(endPreviewAndRelaunch:)];
- [endPreviewAndRelaunchButton sizeToFit];
- [endPreviewAndRelaunchButton setAlignment:NSCenterTextAlignment];
- CGFloat xOffset = (kFixedEndPreviewViewWidth -
- NSWidth([endPreviewAndRelaunchButton frame])) / 2;
- [endPreviewAndRelaunchButton setFrameOrigin:NSMakePoint(xOffset, yOffset)];
- [container addSubview:endPreviewAndRelaunchButton];
- yOffset = NSMaxY([endPreviewAndRelaunchButton frame]) + kVerticalSpacing;
-
- // Adds the main text label.
- NSPoint contentFrameOrigin = NSMakePoint(kHorizontalSpacing, yOffset);
- NSString* contentStr =
- l10n_util::GetNSString(IDS_PROFILES_END_PREVIEW_TEXT);
- NSTextField* contentLabel = BuildLabel(contentStr, contentFrameOrigin,
+ const AvatarMenu::Item& avatarItem =
+ avatarMenu_->GetItemAt(avatarMenu_->GetActiveProfileIndex());
+
+ // Adds "Disconnect your Google Account" button at the bottom.
+ NSButton* disconnectButton =
+ [self hoverButtonWithRect:viewRect
+ text:l10n_util::GetNSString(
+ IDS_PROFILES_DISCONNECT_BUTTON)
+ imageResourceId:IDR_ICON_PROFILES_MENU_AVATAR
+ action:@selector(disconnectProfile:)];
+ [container addSubview:disconnectButton];
+ yOffset = NSMaxY([disconnectButton frame]);
+
+ NSBox* separator = [self horizontalSeparatorWithFrame:
+ NSMakeRect(0, yOffset, kFixedMenuWidth, 0)];
+ [container addSubview:separator];
+ yOffset = NSMaxY([separator frame]);
+
+ // Adds "Add person" button.
+ viewRect.origin.y = yOffset;
+ NSButton* addPersonButton =
+ [self hoverButtonWithRect:viewRect
+ text:l10n_util::GetNSString(
+ IDS_PROFILES_ADD_PERSON_BUTTON)
+ imageResourceId:IDR_ICON_PROFILES_MENU_AVATAR
+ action:@selector(addPerson:)];
+ [container addSubview:addPersonButton];
+ yOffset = NSMaxY([addPersonButton frame]);
+
+ separator = [self horizontalSeparatorWithFrame:
+ NSMakeRect(0, yOffset, kFixedMenuWidth, 0)];
+ [container addSubview:separator];
+ yOffset = NSMaxY([separator frame]);
+
+ // Adds the content text.
+ NSTextField* contentLabel = BuildLabel(
+ l10n_util::GetNSStringF(
+ IDS_PROFILES_NOT_YOU_CONTENT_TEXT, avatarItem.name),
+ NSMakePoint(kHorizontalSpacing, yOffset + kVerticalSpacing),
GetDialogBackgroundColor(), nil /* text_color */);
[contentLabel setFrameSize:NSMakeSize(availableWidth, 0)];
[GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:contentLabel];
@@ -1813,20 +1827,20 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
yOffset = NSMaxY([contentLabel frame]) + kVerticalSpacing;
// Adds the title card.
- NSBox* separator = [self horizontalSeparatorWithFrame:
- NSMakeRect(0, yOffset, kFixedEndPreviewViewWidth, 0)];
+ separator = [self horizontalSeparatorWithFrame:
+ NSMakeRect(0, yOffset, kFixedSwitchUserViewWidth, 0)];
[container addSubview:separator];
yOffset = NSMaxY([separator frame]) + kSmallVerticalSpacing;
NSView* titleView = BuildTitleCard(
- NSMakeRect(0, yOffset, kFixedEndPreviewViewWidth, 0),
- IDS_PROFILES_END_PREVIEW,
+ NSMakeRect(0, yOffset, kFixedSwitchUserViewWidth,0),
+ l10n_util::GetNSStringF(IDS_PROFILES_NOT_YOU, avatarItem.name),
self /* backButtonTarget*/,
- @selector(showSendFeedbackTutorial:) /* backButtonAction */);
+ @selector(navigateBackFromSwitchUserView:) /* backButtonAction */);
[container addSubview:titleView];
yOffset = NSMaxY([titleView frame]);
- [container setFrameSize:NSMakeSize(kFixedEndPreviewViewWidth, yOffset)];
+ [container setFrameSize:NSMakeSize(kFixedAccountRemovalViewWidth, yOffset)];
return container.autorelease();
}
« no previous file with comments | « chrome/browser/ui/cocoa/profiles/profile_chooser_controller.h ('k') | chrome/browser/ui/profile_chooser_constants.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698