| 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 4c54c885261bdb9c73b2bf27ac2c2129c957e1f9..462bca44b95ed3424b5dcf43c9fd18ee3d5cf5fe 100644
|
| --- a/chrome/browser/ui/cocoa/profiles/profile_chooser_controller.mm
|
| +++ b/chrome/browser/ui/cocoa/profiles/profile_chooser_controller.mm
|
| @@ -676,7 +676,6 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
|
|
|
| // Builds the regular profile chooser view.
|
| - (void)buildProfileChooserViewWithProfileView:(NSView*)currentProfileView
|
| - tutorialView:(NSView*)tutorialView
|
| syncErrorView:(NSView*)syncErrorView
|
| otherProfiles:(NSArray*)otherProfiles
|
| atYOffset:(CGFloat)yOffset
|
| @@ -686,38 +685,9 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
|
| // Builds the profile chooser view.
|
| - (NSView*)buildProfileChooserView;
|
|
|
| -// Builds a tutorial card with a title label using |titleMessage|, a content
|
| -// label using |contentMessage|, a link using |linkMessage|, and a button using
|
| -// |buttonMessage|. If |stackButton| is YES, places the button above the link.
|
| -// Otherwise places both on the same row with the link left aligned and button
|
| -// right aligned. 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:(NSString*)titleMessage
|
| - contentMessage:(NSString*)contentMessage
|
| - linkMessage:(NSString*)linkMessage
|
| - buttonMessage:(NSString*)buttonMessage
|
| - stackButton:(BOOL)stackButton
|
| - hasCloseButton:(BOOL)hasCloseButton
|
| - linkAction:(SEL)linkAction
|
| - buttonAction:(SEL)buttonAction;
|
| -
|
| // Builds a header for signin and sync error surfacing on the user menu.
|
| - (NSView*)buildSyncErrorViewIfNeeded;
|
|
|
| -// 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*)buildWelcomeUpgradeTutorialView:(const AvatarMenu::Item&)item;
|
| -
|
| -// 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;
|
| -
|
| -// Builds a tutorial card to show the last signin error.
|
| -- (NSView*)buildSigninErrorView;
|
| -
|
| // Creates the main profile card for the profile |item| at the top of
|
| // the bubble.
|
| - (NSView*)createCurrentProfileView:(const AvatarMenu::Item&)item;
|
| @@ -793,10 +763,6 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
|
| return viewMode_;
|
| }
|
|
|
| -- (void)setTutorialMode:(profiles::TutorialMode)tutorialMode {
|
| - tutorialMode_ = tutorialMode;
|
| -}
|
| -
|
| - (IBAction)editProfile:(id)sender {
|
| avatarMenu_->EditProfile(avatarMenu_->GetActiveProfileIndex());
|
| [self postActionPerformed:ProfileMetrics::PROFILE_DESKTOP_MENU_EDIT_IMAGE];
|
| @@ -821,7 +787,6 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
|
|
|
| - (IBAction)showUserManager:(id)sender {
|
| UserManager::Show(base::FilePath(),
|
| - profiles::USER_MANAGER_NO_TUTORIAL,
|
| profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION);
|
| [self postActionPerformed:
|
| ProfileMetrics::PROFILE_DESKTOP_MENU_OPEN_USER_MANAGER];
|
| @@ -830,7 +795,6 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
|
| - (IBAction)exitGuest:(id)sender {
|
| DCHECK(browser_->profile()->IsGuestSession());
|
| UserManager::Show(base::FilePath(),
|
| - profiles::USER_MANAGER_NO_TUTORIAL,
|
| profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION);
|
| profiles::CloseGuestProfileWindows();
|
| }
|
| @@ -941,14 +905,6 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
|
| [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT];
|
| }
|
|
|
| -- (IBAction)seeWhatsNew:(id)sender {
|
| - UserManager::Show(base::FilePath(),
|
| - profiles::USER_MANAGER_TUTORIAL_OVERVIEW,
|
| - profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION);
|
| - ProfileMetrics::LogProfileNewAvatarMenuUpgrade(
|
| - ProfileMetrics::PROFILE_AVATAR_MENU_UPGRADE_WHATS_NEW);
|
| -}
|
| -
|
| - (IBAction)showSwitchUserView:(id)sender {
|
| [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_SWITCH_USER];
|
| ProfileMetrics::LogProfileNewAvatarMenuUpgrade(
|
| @@ -960,7 +916,6 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
|
| }
|
|
|
| - (IBAction)configureSyncSettings:(id)sender {
|
| - tutorialMode_ = profiles::TUTORIAL_MODE_NONE;
|
| LoginUIServiceFactory::GetForProfile(browser_->profile())->
|
| SyncConfirmationUIClosed(LoginUIService::CONFIGURE_SYNC_FIRST);
|
| ProfileMetrics::LogProfileNewAvatarMenuSignin(
|
| @@ -968,7 +923,6 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
|
| }
|
|
|
| - (IBAction)syncSettingsConfirmed:(id)sender {
|
| - tutorialMode_ = profiles::TUTORIAL_MODE_NONE;
|
| LoginUIServiceFactory::GetForProfile(browser_->profile())->
|
| SyncConfirmationUIClosed(LoginUIService::SYNC_WITH_DEFAULT_SETTINGS);
|
| ProfileMetrics::LogProfileNewAvatarMenuSignin(
|
| @@ -988,24 +942,7 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
|
| ProfileMetrics::PROFILE_AVATAR_MENU_NOT_YOU_BACK);
|
| }
|
|
|
| -- (IBAction)dismissTutorial:(id)sender {
|
| - // Never shows the upgrade tutorial again if manually closed.
|
| - if (tutorialMode_ == profiles::TUTORIAL_MODE_WELCOME_UPGRADE) {
|
| - browser_->profile()->GetPrefs()->SetInteger(
|
| - prefs::kProfileAvatarTutorialShown,
|
| - signin_ui_util::kUpgradeWelcomeTutorialShowMax + 1);
|
| - }
|
| -
|
| - tutorialMode_ = profiles::TUTORIAL_MODE_NONE;
|
| - [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER];
|
| -}
|
| -
|
| - (void)windowWillClose:(NSNotification*)notification {
|
| - if (tutorialMode_ == profiles::TUTORIAL_MODE_CONFIRM_SIGNIN) {
|
| - LoginUIServiceFactory::GetForProfile(browser_->profile())->
|
| - SyncConfirmationUIClosed(LoginUIService::SYNC_WITH_DEFAULT_SETTINGS);
|
| - }
|
| -
|
| [super windowWillClose:notification];
|
| }
|
|
|
| @@ -1025,7 +962,6 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
|
| - (id)initWithBrowser:(Browser*)browser
|
| anchoredAt:(NSPoint)point
|
| viewMode:(profiles::BubbleViewMode)viewMode
|
| - tutorialMode:(profiles::TutorialMode)tutorialMode
|
| serviceType:(signin::GAIAServiceType)serviceType
|
| accessPoint:(signin_metrics::AccessPoint)accessPoint {
|
| base::scoped_nsobject<InfoBubbleWindow> window([[InfoBubbleWindow alloc]
|
| @@ -1039,7 +975,6 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
|
| anchoredAt:point])) {
|
| browser_ = browser;
|
| viewMode_ = viewMode;
|
| - tutorialMode_ = tutorialMode;
|
| observer_.reset(new ActiveProfileObserverBridge(self, browser_));
|
| serviceType_ = serviceType;
|
| accessPoint_ = accessPoint;
|
| @@ -1114,10 +1049,6 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
|
| break;
|
| }
|
|
|
| - // Clears tutorial mode for all non-profile-chooser views.
|
| - if (viewMode_ != profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER)
|
| - tutorialMode_ = profiles::TUTORIAL_MODE_NONE;
|
| -
|
| // Add a dummy, empty element so that we don't initially display any
|
| // focus rings.
|
| NSButton* dummyFocusButton =
|
| @@ -1158,7 +1089,6 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
|
| }
|
|
|
| - (void)buildProfileChooserViewWithProfileView:(NSView*)currentProfileView
|
| - tutorialView:(NSView*)tutorialView
|
| syncErrorView:(NSView*)syncErrorView
|
| otherProfiles:(NSArray*)otherProfiles
|
| atYOffset:(CGFloat)yOffset
|
| @@ -1229,15 +1159,6 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
|
| yOffset = NSMaxY([syncErrorView frame]);
|
| }
|
|
|
| - if (tutorialView) {
|
| - [tutorialView setFrameOrigin:NSMakePoint(0, yOffset)];
|
| - [container addSubview:tutorialView];
|
| - yOffset = NSMaxY([tutorialView frame]);
|
| - //TODO(mlerman): update UMA stats for the new tutorials.
|
| - } else {
|
| - tutorialMode_ = profiles::TUTORIAL_MODE_NONE;
|
| - }
|
| -
|
| [container setFrameSize:NSMakeSize(kFixedMenuWidth, yOffset)];
|
| }
|
|
|
| @@ -1245,7 +1166,6 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
|
| base::scoped_nsobject<NSView> container(
|
| [[NSView alloc] initWithFrame:NSZeroRect]);
|
|
|
| - NSView* tutorialView = nil;
|
| NSView* syncErrorView = nil;
|
| NSView* currentProfileView = nil;
|
| base::scoped_nsobject<NSMutableArray> otherProfiles(
|
| @@ -1276,7 +1196,6 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
|
| CGFloat yOffset = 1;
|
|
|
| [self buildProfileChooserViewWithProfileView:currentProfileView
|
| - tutorialView:tutorialView
|
| syncErrorView:syncErrorView
|
| otherProfiles:otherProfiles.get()
|
| atYOffset:yOffset
|
| @@ -1285,216 +1204,6 @@ class ActiveProfileObserverBridge : public AvatarMenuObserver,
|
| return container.autorelease();
|
| }
|
|
|
| -- (NSView*)buildSigninConfirmationView {
|
| - ProfileMetrics::LogProfileNewAvatarMenuSignin(
|
| - ProfileMetrics::PROFILE_AVATAR_MENU_SIGNIN_VIEW);
|
| -
|
| - 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
|
| - stackButton:NO
|
| - hasCloseButton:NO
|
| - linkAction:@selector(configureSyncSettings:)
|
| - buttonAction:@selector(syncSettingsConfirmed:)];
|
| -}
|
| -
|
| -- (NSView*)buildSigninErrorView {
|
| - NSString* titleMessage = l10n_util::GetNSString(
|
| - IDS_PROFILES_ERROR_TUTORIAL_TITLE);
|
| - LoginUIService* loginUiService =
|
| - LoginUIServiceFactory::GetForProfile(browser_->profile());
|
| - NSString* contentMessage =
|
| - base::SysUTF16ToNSString(loginUiService->GetLastLoginResult());
|
| - NSString* linkMessage = l10n_util::GetNSString(
|
| - IDS_PROFILES_PROFILE_TUTORIAL_LEARN_MORE);
|
| - return [self tutorialViewWithMode:profiles::TUTORIAL_MODE_CONFIRM_SIGNIN
|
| - titleMessage:titleMessage
|
| - contentMessage:contentMessage
|
| - linkMessage:linkMessage
|
| - buttonMessage:nil
|
| - stackButton:NO
|
| - hasCloseButton:YES
|
| - linkAction:@selector(showLearnMorePage:)
|
| - buttonAction:nil];
|
| -}
|
| -
|
| -- (NSView*)buildWelcomeUpgradeTutorialView:(const AvatarMenu::Item&)item {
|
| - ProfileMetrics::LogProfileNewAvatarMenuUpgrade(
|
| - ProfileMetrics::PROFILE_AVATAR_MENU_UPGRADE_VIEW);
|
| -
|
| - NSString* titleMessage = l10n_util::GetNSString(
|
| - IDS_PROFILES_WELCOME_UPGRADE_TUTORIAL_TITLE);
|
| - NSString* contentMessage = l10n_util::GetNSString(
|
| - IDS_PROFILES_WELCOME_UPGRADE_TUTORIAL_CONTENT_TEXT);
|
| - // For local profiles, the "Not you" link doesn't make sense.
|
| - NSString* linkMessage =
|
| - item.signed_in ? ElideMessage(l10n_util::GetStringFUTF16(
|
| - IDS_PROFILES_NOT_YOU, item.name),
|
| - kFixedMenuWidth - 2 * kHorizontalSpacing)
|
| - : nil;
|
| - 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
|
| - stackButton:YES
|
| - hasCloseButton:YES
|
| - linkAction:@selector(showSwitchUserView:)
|
| - buttonAction:@selector(seeWhatsNew:)];
|
| -}
|
| -
|
| -- (NSView*)tutorialViewWithMode:(profiles::TutorialMode)mode
|
| - titleMessage:(NSString*)titleMessage
|
| - contentMessage:(NSString*)contentMessage
|
| - linkMessage:(NSString*)linkMessage
|
| - buttonMessage:(NSString*)buttonMessage
|
| - stackButton:(BOOL)stackButton
|
| - hasCloseButton:(BOOL)hasCloseButton
|
| - linkAction:(SEL)linkAction
|
| - buttonAction:(SEL)buttonAction {
|
| - tutorialMode_ = mode;
|
| -
|
| - NSColor* tutorialBackgroundColor =
|
| - skia::SkColorToSRGBNSColor(profiles::kAvatarTutorialBackgroundColor);
|
| - base::scoped_nsobject<NSView> container([[BackgroundColorView alloc]
|
| - initWithFrame:NSMakeRect(0, 0, kFixedMenuWidth, 0)
|
| - withColor:tutorialBackgroundColor]);
|
| - CGFloat availableWidth = kFixedMenuWidth - 2 * kHorizontalSpacing;
|
| - CGFloat yOffset = kVerticalSpacing;
|
| -
|
| - // Adds links and buttons at the bottom.
|
| - base::scoped_nsobject<NSButton> tutorialOkButton;
|
| - if (buttonMessage) {
|
| - tutorialOkButton.reset([[HoverButton alloc] initWithFrame:NSZeroRect]);
|
| - [tutorialOkButton setTitle:buttonMessage];
|
| - [tutorialOkButton setBezelStyle:NSRoundedBezelStyle];
|
| - [tutorialOkButton setTarget:self];
|
| - [tutorialOkButton setAction:buttonAction];
|
| - [tutorialOkButton setAlignment:NSCenterTextAlignment];
|
| - [tutorialOkButton sizeToFit];
|
| - }
|
| -
|
| - NSButton* learnMoreLink = nil;
|
| - if (linkMessage) {
|
| - learnMoreLink = [self linkButtonWithTitle:linkMessage
|
| - frameOrigin:NSZeroPoint
|
| - action:linkAction];
|
| - [[learnMoreLink cell] setTextColor:[NSColor whiteColor]];
|
| - }
|
| -
|
| - if (stackButton) {
|
| - [learnMoreLink setFrameOrigin:NSMakePoint((kFixedMenuWidth -
|
| - NSWidth([learnMoreLink frame])) /
|
| - 2,
|
| - yOffset)];
|
| - [tutorialOkButton setFrameSize:NSMakeSize(
|
| - availableWidth, NSHeight([tutorialOkButton frame]))];
|
| - [tutorialOkButton setFrameOrigin:NSMakePoint(
|
| - kHorizontalSpacing,
|
| - yOffset + (learnMoreLink ? NSHeight([learnMoreLink frame]) : 0))];
|
| - } else {
|
| - if (buttonMessage) {
|
| - NSSize buttonSize = [tutorialOkButton frame].size;
|
| - const CGFloat kTopBottomTextPadding = 6;
|
| - const CGFloat kLeftRightTextPadding = 15;
|
| - buttonSize.width += 2 * kLeftRightTextPadding;
|
| - buttonSize.height += 2 * kTopBottomTextPadding;
|
| - [tutorialOkButton setFrameSize:buttonSize];
|
| - CGFloat buttonXOffset = kFixedMenuWidth -
|
| - NSWidth([tutorialOkButton frame]) -
|
| - kHorizontalSpacing;
|
| - [tutorialOkButton setFrameOrigin:NSMakePoint(buttonXOffset, yOffset)];
|
| - }
|
| -
|
| - if (linkMessage) {
|
| - CGFloat linkYOffset = yOffset;
|
| - if (buttonMessage) {
|
| - linkYOffset += (NSHeight([tutorialOkButton frame]) -
|
| - NSHeight([learnMoreLink frame])) / 2;
|
| - }
|
| - [learnMoreLink setFrameOrigin:NSMakePoint(
|
| - kHorizontalSpacing, linkYOffset)];
|
| - }
|
| - }
|
| -
|
| - if (buttonMessage) {
|
| - [container addSubview:tutorialOkButton];
|
| - yOffset = NSMaxY([tutorialOkButton frame]);
|
| - }
|
| -
|
| - if (linkMessage) {
|
| - [container addSubview:learnMoreLink];
|
| - yOffset = std::max(NSMaxY([learnMoreLink frame]), yOffset);
|
| - }
|
| -
|
| - yOffset += kVerticalSpacing;
|
| -
|
| - // Adds body content.
|
| - NSTextField* contentLabel = BuildLabel(
|
| - contentMessage,
|
| - NSMakePoint(kHorizontalSpacing, yOffset),
|
| - skia::SkColorToSRGBNSColor(profiles::kAvatarTutorialContentTextColor));
|
| - [contentLabel setFrameSize:NSMakeSize(availableWidth, 0)];
|
| - [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:contentLabel];
|
| - [container addSubview:contentLabel];
|
| - yOffset = NSMaxY([contentLabel frame]) + kSmallVerticalSpacing;
|
| -
|
| - // Adds title.
|
| - NSTextField* titleLabel =
|
| - BuildLabel(titleMessage,
|
| - NSMakePoint(kHorizontalSpacing, yOffset),
|
| - [NSColor whiteColor] /* text_color */);
|
| - [titleLabel setFont:[NSFont labelFontOfSize:kTitleFontSize]];
|
| -
|
| - if (hasCloseButton) {
|
| - base::scoped_nsobject<HoverImageButton> closeButton(
|
| - [[HoverImageButton alloc] initWithFrame:NSZeroRect]);
|
| - [closeButton setBordered:NO];
|
| -
|
| - ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
|
| - NSImage* closeImage = rb->GetNativeImageNamed(IDR_CLOSE_1).ToNSImage();
|
| - CGFloat closeImageWidth = [closeImage size].width;
|
| - [closeButton setDefaultImage:closeImage];
|
| - [closeButton setHoverImage:
|
| - rb->GetNativeImageNamed(IDR_CLOSE_1_H).ToNSImage()];
|
| - [closeButton setPressedImage:
|
| - rb->GetNativeImageNamed(IDR_CLOSE_1_P).ToNSImage()];
|
| - [closeButton setTarget:self];
|
| - [closeButton setAction:@selector(dismissTutorial:)];
|
| - [closeButton setFrameSize:[closeImage size]];
|
| - [closeButton
|
| - setFrameOrigin:NSMakePoint(kFixedMenuWidth - kHorizontalSpacing -
|
| - closeImageWidth,
|
| - yOffset)];
|
| - [container addSubview:closeButton];
|
| -
|
| - [titleLabel setFrameSize:NSMakeSize(
|
| - availableWidth - closeImageWidth - kHorizontalSpacing, 0)];
|
| - } else {
|
| - [titleLabel setFrameSize:NSMakeSize(availableWidth, 0)];
|
| - }
|
| -
|
| - [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:titleLabel];
|
| - [container addSubview:titleLabel];
|
| - yOffset = NSMaxY([titleLabel frame]) + kVerticalSpacing;
|
| -
|
| - [container setFrameSize:NSMakeSize(kFixedMenuWidth, yOffset)];
|
| - [container setFrameOrigin:NSZeroPoint];
|
| - return container.autorelease();
|
| -}
|
| -
|
| - (NSView*)buildSyncErrorViewIfNeeded {
|
| int contentStringId, buttonStringId;
|
| SEL buttonAction;
|
|
|