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

Side by Side Diff: chrome/browser/ui/cocoa/profiles/profile_chooser_controller.mm

Issue 2899083003: Delete unused tutorial code from profile switcher/user manager. (Closed)
Patch Set: fix merge Created 3 years, 6 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "chrome/browser/ui/cocoa/profiles/profile_chooser_controller.h" 5 #import "chrome/browser/ui/cocoa/profiles/profile_chooser_controller.h"
6 6
7 #import <Carbon/Carbon.h> // kVK_Return. 7 #import <Carbon/Carbon.h> // kVK_Return.
8 #import <Cocoa/Cocoa.h> 8 #import <Cocoa/Cocoa.h>
9 #include <stddef.h> 9 #include <stddef.h>
10 10
(...skipping 658 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 atYOffset:(CGFloat)yOffset; 669 atYOffset:(CGFloat)yOffset;
670 670
671 // Builds the fast user switcher view. This appears as part of the user menu. 671 // Builds the fast user switcher view. This appears as part of the user menu.
672 // Returns the yOffset corresponding to after the profile switcher buttons. 672 // Returns the yOffset corresponding to after the profile switcher buttons.
673 - (CGFloat)buildFastUserSwitcherViewWithProfiles:(NSArray*)otherProfiles 673 - (CGFloat)buildFastUserSwitcherViewWithProfiles:(NSArray*)otherProfiles
674 atYOffset:(CGFloat)yOffset 674 atYOffset:(CGFloat)yOffset
675 inContainer:(NSView*)container; 675 inContainer:(NSView*)container;
676 676
677 // Builds the regular profile chooser view. 677 // Builds the regular profile chooser view.
678 - (void)buildProfileChooserViewWithProfileView:(NSView*)currentProfileView 678 - (void)buildProfileChooserViewWithProfileView:(NSView*)currentProfileView
679 tutorialView:(NSView*)tutorialView
680 syncErrorView:(NSView*)syncErrorView 679 syncErrorView:(NSView*)syncErrorView
681 otherProfiles:(NSArray*)otherProfiles 680 otherProfiles:(NSArray*)otherProfiles
682 atYOffset:(CGFloat)yOffset 681 atYOffset:(CGFloat)yOffset
683 inContainer:(NSView*)container 682 inContainer:(NSView*)container
684 showLock:(bool)showLock; 683 showLock:(bool)showLock;
685 684
686 // Builds the profile chooser view. 685 // Builds the profile chooser view.
687 - (NSView*)buildProfileChooserView; 686 - (NSView*)buildProfileChooserView;
688 687
689 // Builds a tutorial card with a title label using |titleMessage|, a content
690 // label using |contentMessage|, a link using |linkMessage|, and a button using
691 // |buttonMessage|. If |stackButton| is YES, places the button above the link.
692 // Otherwise places both on the same row with the link left aligned and button
693 // right aligned. On click, the link would execute |linkAction|, and the button
694 // would execute |buttonAction|. It sets |tutorialMode_| to the given |mode|.
695 - (NSView*)tutorialViewWithMode:(profiles::TutorialMode)mode
696 titleMessage:(NSString*)titleMessage
697 contentMessage:(NSString*)contentMessage
698 linkMessage:(NSString*)linkMessage
699 buttonMessage:(NSString*)buttonMessage
700 stackButton:(BOOL)stackButton
701 hasCloseButton:(BOOL)hasCloseButton
702 linkAction:(SEL)linkAction
703 buttonAction:(SEL)buttonAction;
704
705 // Builds a header for signin and sync error surfacing on the user menu. 688 // Builds a header for signin and sync error surfacing on the user menu.
706 - (NSView*)buildSyncErrorViewIfNeeded; 689 - (NSView*)buildSyncErrorViewIfNeeded;
707 690
708 // Builds a tutorial card to introduce an upgrade user to the new avatar menu if
709 // needed. |tutorial_shown| indicates if the tutorial has already been shown in
710 // the previous active view. |avatar_item| refers to the current profile.
711 - (NSView*)buildWelcomeUpgradeTutorialView:(const AvatarMenu::Item&)item;
712
713 // Builds a tutorial card to have the user confirm the last Chrome signin,
714 // Chrome sync will be delayed until the user either dismisses the tutorial, or
715 // configures sync through the "Settings" link.
716 - (NSView*)buildSigninConfirmationView;
717
718 // Builds a tutorial card to show the last signin error.
719 - (NSView*)buildSigninErrorView;
720
721 // Creates the main profile card for the profile |item| at the top of 691 // Creates the main profile card for the profile |item| at the top of
722 // the bubble. 692 // the bubble.
723 - (NSView*)createCurrentProfileView:(const AvatarMenu::Item&)item; 693 - (NSView*)createCurrentProfileView:(const AvatarMenu::Item&)item;
724 694
725 // Creates the possible links for the main profile card with profile |item|. 695 // Creates the possible links for the main profile card with profile |item|.
726 - (NSView*)createCurrentProfileLinksForItem:(const AvatarMenu::Item&)item 696 - (NSView*)createCurrentProfileLinksForItem:(const AvatarMenu::Item&)item
727 rect:(NSRect)rect; 697 rect:(NSRect)rect;
728 698
729 // Creates the disclaimer text for supervised users, telling them that the 699 // Creates the disclaimer text for supervised users, telling them that the
730 // manager can view their history etc. 700 // manager can view their history etc.
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
786 reauthRequired:(BOOL)reauthRequired; 756 reauthRequired:(BOOL)reauthRequired;
787 757
788 - (bool)shouldShowGoIncognito; 758 - (bool)shouldShowGoIncognito;
789 @end 759 @end
790 760
791 @implementation ProfileChooserController 761 @implementation ProfileChooserController
792 - (profiles::BubbleViewMode) viewMode { 762 - (profiles::BubbleViewMode) viewMode {
793 return viewMode_; 763 return viewMode_;
794 } 764 }
795 765
796 - (void)setTutorialMode:(profiles::TutorialMode)tutorialMode {
797 tutorialMode_ = tutorialMode;
798 }
799
800 - (IBAction)editProfile:(id)sender { 766 - (IBAction)editProfile:(id)sender {
801 avatarMenu_->EditProfile(avatarMenu_->GetActiveProfileIndex()); 767 avatarMenu_->EditProfile(avatarMenu_->GetActiveProfileIndex());
802 [self postActionPerformed:ProfileMetrics::PROFILE_DESKTOP_MENU_EDIT_IMAGE]; 768 [self postActionPerformed:ProfileMetrics::PROFILE_DESKTOP_MENU_EDIT_IMAGE];
803 [self postActionPerformed:ProfileMetrics::PROFILE_DESKTOP_MENU_EDIT_NAME]; 769 [self postActionPerformed:ProfileMetrics::PROFILE_DESKTOP_MENU_EDIT_NAME];
804 } 770 }
805 771
806 - (IBAction)switchToProfile:(id)sender { 772 - (IBAction)switchToProfile:(id)sender {
807 // Check the event flags to see if a new window should be created. 773 // Check the event flags to see if a new window should be created.
808 bool alwaysCreate = 774 bool alwaysCreate =
809 ui::WindowOpenDispositionFromNSEvent([NSApp currentEvent]) == 775 ui::WindowOpenDispositionFromNSEvent([NSApp currentEvent]) ==
810 WindowOpenDisposition::NEW_WINDOW; 776 WindowOpenDisposition::NEW_WINDOW;
811 avatarMenu_->SwitchToProfile([sender tag], alwaysCreate, 777 avatarMenu_->SwitchToProfile([sender tag], alwaysCreate,
812 ProfileMetrics::SWITCH_PROFILE_ICON); 778 ProfileMetrics::SWITCH_PROFILE_ICON);
813 } 779 }
814 780
815 - (IBAction)switchToGuest:(id)sender { 781 - (IBAction)switchToGuest:(id)sender {
816 PrefService* service = g_browser_process->local_state(); 782 PrefService* service = g_browser_process->local_state();
817 DCHECK(service); 783 DCHECK(service);
818 DCHECK(service->GetBoolean(prefs::kBrowserGuestModeEnabled)); 784 DCHECK(service->GetBoolean(prefs::kBrowserGuestModeEnabled));
819 profiles::SwitchToGuestProfile(ProfileManager::CreateCallback()); 785 profiles::SwitchToGuestProfile(ProfileManager::CreateCallback());
820 } 786 }
821 787
822 - (IBAction)showUserManager:(id)sender { 788 - (IBAction)showUserManager:(id)sender {
823 UserManager::Show(base::FilePath(), 789 UserManager::Show(base::FilePath(),
824 profiles::USER_MANAGER_NO_TUTORIAL,
825 profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION); 790 profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION);
826 [self postActionPerformed: 791 [self postActionPerformed:
827 ProfileMetrics::PROFILE_DESKTOP_MENU_OPEN_USER_MANAGER]; 792 ProfileMetrics::PROFILE_DESKTOP_MENU_OPEN_USER_MANAGER];
828 } 793 }
829 794
830 - (IBAction)exitGuest:(id)sender { 795 - (IBAction)exitGuest:(id)sender {
831 DCHECK(browser_->profile()->IsGuestSession()); 796 DCHECK(browser_->profile()->IsGuestSession());
832 UserManager::Show(base::FilePath(), 797 UserManager::Show(base::FilePath(),
833 profiles::USER_MANAGER_NO_TUTORIAL,
834 profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION); 798 profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION);
835 profiles::CloseGuestProfileWindows(); 799 profiles::CloseGuestProfileWindows();
836 } 800 }
837 801
838 - (IBAction)closeAllWindows:(id)sender { 802 - (IBAction)closeAllWindows:(id)sender {
839 profiles::CloseProfileWindows(browser_->profile()); 803 profiles::CloseProfileWindows(browser_->profile());
840 } 804 }
841 805
842 - (IBAction)goIncognito:(id)sender { 806 - (IBAction)goIncognito:(id)sender {
843 DCHECK([self shouldShowGoIncognito]); 807 DCHECK([self shouldShowGoIncognito]);
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
934 - (IBAction)removeAccount:(id)sender { 898 - (IBAction)removeAccount:(id)sender {
935 DCHECK(!accountIdToRemove_.empty()); 899 DCHECK(!accountIdToRemove_.empty());
936 ProfileOAuth2TokenServiceFactory::GetForProfile(browser_->profile()) 900 ProfileOAuth2TokenServiceFactory::GetForProfile(browser_->profile())
937 ->RevokeCredentials(accountIdToRemove_); 901 ->RevokeCredentials(accountIdToRemove_);
938 [self postActionPerformed:ProfileMetrics::PROFILE_DESKTOP_MENU_REMOVE_ACCT]; 902 [self postActionPerformed:ProfileMetrics::PROFILE_DESKTOP_MENU_REMOVE_ACCT];
939 accountIdToRemove_.clear(); 903 accountIdToRemove_.clear();
940 904
941 [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT]; 905 [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT];
942 } 906 }
943 907
944 - (IBAction)seeWhatsNew:(id)sender {
945 UserManager::Show(base::FilePath(),
946 profiles::USER_MANAGER_TUTORIAL_OVERVIEW,
947 profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION);
948 ProfileMetrics::LogProfileNewAvatarMenuUpgrade(
949 ProfileMetrics::PROFILE_AVATAR_MENU_UPGRADE_WHATS_NEW);
950 }
951
952 - (IBAction)showSwitchUserView:(id)sender { 908 - (IBAction)showSwitchUserView:(id)sender {
953 [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_SWITCH_USER]; 909 [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_SWITCH_USER];
954 ProfileMetrics::LogProfileNewAvatarMenuUpgrade( 910 ProfileMetrics::LogProfileNewAvatarMenuUpgrade(
955 ProfileMetrics::PROFILE_AVATAR_MENU_UPGRADE_NOT_YOU); 911 ProfileMetrics::PROFILE_AVATAR_MENU_UPGRADE_NOT_YOU);
956 } 912 }
957 913
958 - (IBAction)showLearnMorePage:(id)sender { 914 - (IBAction)showLearnMorePage:(id)sender {
959 signin_ui_util::ShowSigninErrorLearnMorePage(browser_->profile()); 915 signin_ui_util::ShowSigninErrorLearnMorePage(browser_->profile());
960 } 916 }
961 917
962 - (IBAction)configureSyncSettings:(id)sender { 918 - (IBAction)configureSyncSettings:(id)sender {
963 tutorialMode_ = profiles::TUTORIAL_MODE_NONE;
964 LoginUIServiceFactory::GetForProfile(browser_->profile())-> 919 LoginUIServiceFactory::GetForProfile(browser_->profile())->
965 SyncConfirmationUIClosed(LoginUIService::CONFIGURE_SYNC_FIRST); 920 SyncConfirmationUIClosed(LoginUIService::CONFIGURE_SYNC_FIRST);
966 ProfileMetrics::LogProfileNewAvatarMenuSignin( 921 ProfileMetrics::LogProfileNewAvatarMenuSignin(
967 ProfileMetrics::PROFILE_AVATAR_MENU_SIGNIN_SETTINGS); 922 ProfileMetrics::PROFILE_AVATAR_MENU_SIGNIN_SETTINGS);
968 } 923 }
969 924
970 - (IBAction)syncSettingsConfirmed:(id)sender { 925 - (IBAction)syncSettingsConfirmed:(id)sender {
971 tutorialMode_ = profiles::TUTORIAL_MODE_NONE;
972 LoginUIServiceFactory::GetForProfile(browser_->profile())-> 926 LoginUIServiceFactory::GetForProfile(browser_->profile())->
973 SyncConfirmationUIClosed(LoginUIService::SYNC_WITH_DEFAULT_SETTINGS); 927 SyncConfirmationUIClosed(LoginUIService::SYNC_WITH_DEFAULT_SETTINGS);
974 ProfileMetrics::LogProfileNewAvatarMenuSignin( 928 ProfileMetrics::LogProfileNewAvatarMenuSignin(
975 ProfileMetrics::PROFILE_AVATAR_MENU_SIGNIN_OK); 929 ProfileMetrics::PROFILE_AVATAR_MENU_SIGNIN_OK);
976 [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER]; 930 [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER];
977 } 931 }
978 932
979 - (IBAction)disconnectProfile:(id)sender { 933 - (IBAction)disconnectProfile:(id)sender {
980 chrome::ShowSettings(browser_); 934 chrome::ShowSettings(browser_);
981 ProfileMetrics::LogProfileNewAvatarMenuNotYou( 935 ProfileMetrics::LogProfileNewAvatarMenuNotYou(
982 ProfileMetrics::PROFILE_AVATAR_MENU_NOT_YOU_DISCONNECT); 936 ProfileMetrics::PROFILE_AVATAR_MENU_NOT_YOU_DISCONNECT);
983 } 937 }
984 938
985 - (IBAction)navigateBackFromSwitchUserView:(id)sender { 939 - (IBAction)navigateBackFromSwitchUserView:(id)sender {
986 [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER]; 940 [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER];
987 ProfileMetrics::LogProfileNewAvatarMenuNotYou( 941 ProfileMetrics::LogProfileNewAvatarMenuNotYou(
988 ProfileMetrics::PROFILE_AVATAR_MENU_NOT_YOU_BACK); 942 ProfileMetrics::PROFILE_AVATAR_MENU_NOT_YOU_BACK);
989 } 943 }
990 944
991 - (IBAction)dismissTutorial:(id)sender {
992 // Never shows the upgrade tutorial again if manually closed.
993 if (tutorialMode_ == profiles::TUTORIAL_MODE_WELCOME_UPGRADE) {
994 browser_->profile()->GetPrefs()->SetInteger(
995 prefs::kProfileAvatarTutorialShown,
996 signin_ui_util::kUpgradeWelcomeTutorialShowMax + 1);
997 }
998
999 tutorialMode_ = profiles::TUTORIAL_MODE_NONE;
1000 [self initMenuContentsWithView:profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER];
1001 }
1002
1003 - (void)windowWillClose:(NSNotification*)notification { 945 - (void)windowWillClose:(NSNotification*)notification {
1004 if (tutorialMode_ == profiles::TUTORIAL_MODE_CONFIRM_SIGNIN) {
1005 LoginUIServiceFactory::GetForProfile(browser_->profile())->
1006 SyncConfirmationUIClosed(LoginUIService::SYNC_WITH_DEFAULT_SETTINGS);
1007 }
1008
1009 [super windowWillClose:notification]; 946 [super windowWillClose:notification];
1010 } 947 }
1011 948
1012 - (void)moveDown:(id)sender { 949 - (void)moveDown:(id)sender {
1013 [[self window] selectNextKeyView:self]; 950 [[self window] selectNextKeyView:self];
1014 } 951 }
1015 952
1016 - (void)moveUp:(id)sender { 953 - (void)moveUp:(id)sender {
1017 [[self window] selectPreviousKeyView:self]; 954 [[self window] selectPreviousKeyView:self];
1018 } 955 }
1019 956
1020 - (void)cleanUpEmbeddedViewContents { 957 - (void)cleanUpEmbeddedViewContents {
1021 webContents_.reset(); 958 webContents_.reset();
1022 webContentsDelegate_.reset(); 959 webContentsDelegate_.reset();
1023 } 960 }
1024 961
1025 - (id)initWithBrowser:(Browser*)browser 962 - (id)initWithBrowser:(Browser*)browser
1026 anchoredAt:(NSPoint)point 963 anchoredAt:(NSPoint)point
1027 viewMode:(profiles::BubbleViewMode)viewMode 964 viewMode:(profiles::BubbleViewMode)viewMode
1028 tutorialMode:(profiles::TutorialMode)tutorialMode
1029 serviceType:(signin::GAIAServiceType)serviceType 965 serviceType:(signin::GAIAServiceType)serviceType
1030 accessPoint:(signin_metrics::AccessPoint)accessPoint { 966 accessPoint:(signin_metrics::AccessPoint)accessPoint {
1031 base::scoped_nsobject<InfoBubbleWindow> window([[InfoBubbleWindow alloc] 967 base::scoped_nsobject<InfoBubbleWindow> window([[InfoBubbleWindow alloc]
1032 initWithContentRect:ui::kWindowSizeDeterminedLater 968 initWithContentRect:ui::kWindowSizeDeterminedLater
1033 styleMask:NSBorderlessWindowMask 969 styleMask:NSBorderlessWindowMask
1034 backing:NSBackingStoreBuffered 970 backing:NSBackingStoreBuffered
1035 defer:NO]); 971 defer:NO]);
1036 972
1037 if ((self = [super initWithWindow:window 973 if ((self = [super initWithWindow:window
1038 parentWindow:browser->window()->GetNativeWindow() 974 parentWindow:browser->window()->GetNativeWindow()
1039 anchoredAt:point])) { 975 anchoredAt:point])) {
1040 browser_ = browser; 976 browser_ = browser;
1041 viewMode_ = viewMode; 977 viewMode_ = viewMode;
1042 tutorialMode_ = tutorialMode;
1043 observer_.reset(new ActiveProfileObserverBridge(self, browser_)); 978 observer_.reset(new ActiveProfileObserverBridge(self, browser_));
1044 serviceType_ = serviceType; 979 serviceType_ = serviceType;
1045 accessPoint_ = accessPoint; 980 accessPoint_ = accessPoint;
1046 981
1047 avatarMenu_.reset(new AvatarMenu( 982 avatarMenu_.reset(new AvatarMenu(
1048 &g_browser_process->profile_manager()->GetProfileAttributesStorage(), 983 &g_browser_process->profile_manager()->GetProfileAttributesStorage(),
1049 observer_.get(), 984 observer_.get(),
1050 browser_)); 985 browser_));
1051 avatarMenu_->RebuildMenu(); 986 avatarMenu_->RebuildMenu();
1052 987
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1107 break; 1042 break;
1108 case profiles::BUBBLE_VIEW_MODE_SWITCH_USER: 1043 case profiles::BUBBLE_VIEW_MODE_SWITCH_USER:
1109 subView = [self buildSwitchUserView]; 1044 subView = [self buildSwitchUserView];
1110 break; 1045 break;
1111 case profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER: 1046 case profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER:
1112 case profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT: 1047 case profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT:
1113 subView = [self buildProfileChooserView]; 1048 subView = [self buildProfileChooserView];
1114 break; 1049 break;
1115 } 1050 }
1116 1051
1117 // Clears tutorial mode for all non-profile-chooser views.
1118 if (viewMode_ != profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER)
1119 tutorialMode_ = profiles::TUTORIAL_MODE_NONE;
1120
1121 // Add a dummy, empty element so that we don't initially display any 1052 // Add a dummy, empty element so that we don't initially display any
1122 // focus rings. 1053 // focus rings.
1123 NSButton* dummyFocusButton = 1054 NSButton* dummyFocusButton =
1124 [[[DummyWindowFocusButton alloc] initWithFrame:NSZeroRect] autorelease]; 1055 [[[DummyWindowFocusButton alloc] initWithFrame:NSZeroRect] autorelease];
1125 [dummyFocusButton setNextKeyView:subView]; 1056 [dummyFocusButton setNextKeyView:subView];
1126 [[self window] makeFirstResponder:dummyFocusButton]; 1057 [[self window] makeFirstResponder:dummyFocusButton];
1127 1058
1128 [contentView addSubview:subView]; 1059 [contentView addSubview:subView];
1129 [contentView addSubview:dummyFocusButton]; 1060 [contentView addSubview:dummyFocusButton];
1130 SetWindowSize([self window], 1061 SetWindowSize([self window],
(...skipping 20 matching lines...) Expand all
1151 [otherProfileView setFrameOrigin:NSMakePoint(0, yOffset)]; 1082 [otherProfileView setFrameOrigin:NSMakePoint(0, yOffset)];
1152 [container addSubview:otherProfileView]; 1083 [container addSubview:otherProfileView];
1153 yOffset = NSMaxY([otherProfileView frame]); 1084 yOffset = NSMaxY([otherProfileView frame]);
1154 } 1085 }
1155 1086
1156 [container setFrameSize:NSMakeSize(kFixedMenuWidth, yOffset)]; 1087 [container setFrameSize:NSMakeSize(kFixedMenuWidth, yOffset)];
1157 return yOffset; 1088 return yOffset;
1158 } 1089 }
1159 1090
1160 - (void)buildProfileChooserViewWithProfileView:(NSView*)currentProfileView 1091 - (void)buildProfileChooserViewWithProfileView:(NSView*)currentProfileView
1161 tutorialView:(NSView*)tutorialView
1162 syncErrorView:(NSView*)syncErrorView 1092 syncErrorView:(NSView*)syncErrorView
1163 otherProfiles:(NSArray*)otherProfiles 1093 otherProfiles:(NSArray*)otherProfiles
1164 atYOffset:(CGFloat)yOffset 1094 atYOffset:(CGFloat)yOffset
1165 inContainer:(NSView*)container 1095 inContainer:(NSView*)container
1166 showLock:(bool)showLock { 1096 showLock:(bool)showLock {
1167 yOffset += kRelatedControllVerticalSpacing; 1097 yOffset += kRelatedControllVerticalSpacing;
1168 1098
1169 // Option buttons. 1099 // Option buttons.
1170 NSRect rect = NSMakeRect(0, yOffset, kFixedMenuWidth, 0); 1100 NSRect rect = NSMakeRect(0, yOffset, kFixedMenuWidth, 0);
1171 NSView* optionsView = 1101 NSView* optionsView =
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1222 yOffset = NSMaxY([currentProfileView frame]) + verticalSpacing; 1152 yOffset = NSMaxY([currentProfileView frame]) + verticalSpacing;
1223 } 1153 }
1224 1154
1225 if (syncErrorView) { 1155 if (syncErrorView) {
1226 yOffset = [self addSeparatorToContainer:container atYOffset:yOffset]; 1156 yOffset = [self addSeparatorToContainer:container atYOffset:yOffset];
1227 [syncErrorView setFrameOrigin:NSMakePoint(0, yOffset)]; 1157 [syncErrorView setFrameOrigin:NSMakePoint(0, yOffset)];
1228 [container addSubview:syncErrorView]; 1158 [container addSubview:syncErrorView];
1229 yOffset = NSMaxY([syncErrorView frame]); 1159 yOffset = NSMaxY([syncErrorView frame]);
1230 } 1160 }
1231 1161
1232 if (tutorialView) {
1233 [tutorialView setFrameOrigin:NSMakePoint(0, yOffset)];
1234 [container addSubview:tutorialView];
1235 yOffset = NSMaxY([tutorialView frame]);
1236 //TODO(mlerman): update UMA stats for the new tutorials.
1237 } else {
1238 tutorialMode_ = profiles::TUTORIAL_MODE_NONE;
1239 }
1240
1241 [container setFrameSize:NSMakeSize(kFixedMenuWidth, yOffset)]; 1162 [container setFrameSize:NSMakeSize(kFixedMenuWidth, yOffset)];
1242 } 1163 }
1243 1164
1244 - (NSView*)buildProfileChooserView { 1165 - (NSView*)buildProfileChooserView {
1245 base::scoped_nsobject<NSView> container( 1166 base::scoped_nsobject<NSView> container(
1246 [[NSView alloc] initWithFrame:NSZeroRect]); 1167 [[NSView alloc] initWithFrame:NSZeroRect]);
1247 1168
1248 NSView* tutorialView = nil;
1249 NSView* syncErrorView = nil; 1169 NSView* syncErrorView = nil;
1250 NSView* currentProfileView = nil; 1170 NSView* currentProfileView = nil;
1251 base::scoped_nsobject<NSMutableArray> otherProfiles( 1171 base::scoped_nsobject<NSMutableArray> otherProfiles(
1252 [[NSMutableArray alloc] init]); 1172 [[NSMutableArray alloc] init]);
1253 // Local and guest profiles cannot lock their profile. 1173 // Local and guest profiles cannot lock their profile.
1254 bool showLock = false; 1174 bool showLock = false;
1255 1175
1256 // Loop over the profiles in reverse, so that they are sorted by their 1176 // Loop over the profiles in reverse, so that they are sorted by their
1257 // y-coordinate, and separate them into active and "other" profiles. 1177 // y-coordinate, and separate them into active and "other" profiles.
1258 for (int i = avatarMenu_->GetNumberOfItems() - 1; i >= 0; --i) { 1178 for (int i = avatarMenu_->GetNumberOfItems() - 1; i >= 0; --i) {
(...skipping 10 matching lines...) Expand all
1269 firstProfileView_ = [otherProfiles lastObject]; 1189 firstProfileView_ = [otherProfiles lastObject];
1270 if (!currentProfileView) // Guest windows don't have an active profile. 1190 if (!currentProfileView) // Guest windows don't have an active profile.
1271 currentProfileView = [self createGuestProfileView]; 1191 currentProfileView = [self createGuestProfileView];
1272 1192
1273 // |yOffset| is the next position at which to draw in |container| 1193 // |yOffset| is the next position at which to draw in |container|
1274 // coordinates. Add a pixel offset so that the bottom option buttons don't 1194 // coordinates. Add a pixel offset so that the bottom option buttons don't
1275 // overlap the bubble's rounded corners. 1195 // overlap the bubble's rounded corners.
1276 CGFloat yOffset = 1; 1196 CGFloat yOffset = 1;
1277 1197
1278 [self buildProfileChooserViewWithProfileView:currentProfileView 1198 [self buildProfileChooserViewWithProfileView:currentProfileView
1279 tutorialView:tutorialView
1280 syncErrorView:syncErrorView 1199 syncErrorView:syncErrorView
1281 otherProfiles:otherProfiles.get() 1200 otherProfiles:otherProfiles.get()
1282 atYOffset:yOffset 1201 atYOffset:yOffset
1283 inContainer:container 1202 inContainer:container
1284 showLock:showLock]; 1203 showLock:showLock];
1285 return container.autorelease(); 1204 return container.autorelease();
1286 } 1205 }
1287 1206
1288 - (NSView*)buildSigninConfirmationView {
1289 ProfileMetrics::LogProfileNewAvatarMenuSignin(
1290 ProfileMetrics::PROFILE_AVATAR_MENU_SIGNIN_VIEW);
1291
1292 NSString* titleMessage = l10n_util::GetNSString(
1293 IDS_PROFILES_CONFIRM_SIGNIN_TUTORIAL_TITLE);
1294 NSString* contentMessage = l10n_util::GetNSString(
1295 IDS_PROFILES_CONFIRM_SIGNIN_TUTORIAL_CONTENT_TEXT);
1296 NSString* linkMessage = l10n_util::GetNSString(
1297 IDS_PROFILES_SYNC_SETTINGS_LINK);
1298 NSString* buttonMessage = l10n_util::GetNSString(
1299 IDS_PROFILES_TUTORIAL_OK_BUTTON);
1300 return [self tutorialViewWithMode:profiles::TUTORIAL_MODE_CONFIRM_SIGNIN
1301 titleMessage:titleMessage
1302 contentMessage:contentMessage
1303 linkMessage:linkMessage
1304 buttonMessage:buttonMessage
1305 stackButton:NO
1306 hasCloseButton:NO
1307 linkAction:@selector(configureSyncSettings:)
1308 buttonAction:@selector(syncSettingsConfirmed:)];
1309 }
1310
1311 - (NSView*)buildSigninErrorView {
1312 NSString* titleMessage = l10n_util::GetNSString(
1313 IDS_PROFILES_ERROR_TUTORIAL_TITLE);
1314 LoginUIService* loginUiService =
1315 LoginUIServiceFactory::GetForProfile(browser_->profile());
1316 NSString* contentMessage =
1317 base::SysUTF16ToNSString(loginUiService->GetLastLoginResult());
1318 NSString* linkMessage = l10n_util::GetNSString(
1319 IDS_PROFILES_PROFILE_TUTORIAL_LEARN_MORE);
1320 return [self tutorialViewWithMode:profiles::TUTORIAL_MODE_CONFIRM_SIGNIN
1321 titleMessage:titleMessage
1322 contentMessage:contentMessage
1323 linkMessage:linkMessage
1324 buttonMessage:nil
1325 stackButton:NO
1326 hasCloseButton:YES
1327 linkAction:@selector(showLearnMorePage:)
1328 buttonAction:nil];
1329 }
1330
1331 - (NSView*)buildWelcomeUpgradeTutorialView:(const AvatarMenu::Item&)item {
1332 ProfileMetrics::LogProfileNewAvatarMenuUpgrade(
1333 ProfileMetrics::PROFILE_AVATAR_MENU_UPGRADE_VIEW);
1334
1335 NSString* titleMessage = l10n_util::GetNSString(
1336 IDS_PROFILES_WELCOME_UPGRADE_TUTORIAL_TITLE);
1337 NSString* contentMessage = l10n_util::GetNSString(
1338 IDS_PROFILES_WELCOME_UPGRADE_TUTORIAL_CONTENT_TEXT);
1339 // For local profiles, the "Not you" link doesn't make sense.
1340 NSString* linkMessage =
1341 item.signed_in ? ElideMessage(l10n_util::GetStringFUTF16(
1342 IDS_PROFILES_NOT_YOU, item.name),
1343 kFixedMenuWidth - 2 * kHorizontalSpacing)
1344 : nil;
1345 NSString* buttonMessage = l10n_util::GetNSString(
1346 IDS_PROFILES_TUTORIAL_WHATS_NEW_BUTTON);
1347 return [self tutorialViewWithMode:profiles::TUTORIAL_MODE_WELCOME_UPGRADE
1348 titleMessage:titleMessage
1349 contentMessage:contentMessage
1350 linkMessage:linkMessage
1351 buttonMessage:buttonMessage
1352 stackButton:YES
1353 hasCloseButton:YES
1354 linkAction:@selector(showSwitchUserView:)
1355 buttonAction:@selector(seeWhatsNew:)];
1356 }
1357
1358 - (NSView*)tutorialViewWithMode:(profiles::TutorialMode)mode
1359 titleMessage:(NSString*)titleMessage
1360 contentMessage:(NSString*)contentMessage
1361 linkMessage:(NSString*)linkMessage
1362 buttonMessage:(NSString*)buttonMessage
1363 stackButton:(BOOL)stackButton
1364 hasCloseButton:(BOOL)hasCloseButton
1365 linkAction:(SEL)linkAction
1366 buttonAction:(SEL)buttonAction {
1367 tutorialMode_ = mode;
1368
1369 NSColor* tutorialBackgroundColor =
1370 skia::SkColorToSRGBNSColor(profiles::kAvatarTutorialBackgroundColor);
1371 base::scoped_nsobject<NSView> container([[BackgroundColorView alloc]
1372 initWithFrame:NSMakeRect(0, 0, kFixedMenuWidth, 0)
1373 withColor:tutorialBackgroundColor]);
1374 CGFloat availableWidth = kFixedMenuWidth - 2 * kHorizontalSpacing;
1375 CGFloat yOffset = kVerticalSpacing;
1376
1377 // Adds links and buttons at the bottom.
1378 base::scoped_nsobject<NSButton> tutorialOkButton;
1379 if (buttonMessage) {
1380 tutorialOkButton.reset([[HoverButton alloc] initWithFrame:NSZeroRect]);
1381 [tutorialOkButton setTitle:buttonMessage];
1382 [tutorialOkButton setBezelStyle:NSRoundedBezelStyle];
1383 [tutorialOkButton setTarget:self];
1384 [tutorialOkButton setAction:buttonAction];
1385 [tutorialOkButton setAlignment:NSCenterTextAlignment];
1386 [tutorialOkButton sizeToFit];
1387 }
1388
1389 NSButton* learnMoreLink = nil;
1390 if (linkMessage) {
1391 learnMoreLink = [self linkButtonWithTitle:linkMessage
1392 frameOrigin:NSZeroPoint
1393 action:linkAction];
1394 [[learnMoreLink cell] setTextColor:[NSColor whiteColor]];
1395 }
1396
1397 if (stackButton) {
1398 [learnMoreLink setFrameOrigin:NSMakePoint((kFixedMenuWidth -
1399 NSWidth([learnMoreLink frame])) /
1400 2,
1401 yOffset)];
1402 [tutorialOkButton setFrameSize:NSMakeSize(
1403 availableWidth, NSHeight([tutorialOkButton frame]))];
1404 [tutorialOkButton setFrameOrigin:NSMakePoint(
1405 kHorizontalSpacing,
1406 yOffset + (learnMoreLink ? NSHeight([learnMoreLink frame]) : 0))];
1407 } else {
1408 if (buttonMessage) {
1409 NSSize buttonSize = [tutorialOkButton frame].size;
1410 const CGFloat kTopBottomTextPadding = 6;
1411 const CGFloat kLeftRightTextPadding = 15;
1412 buttonSize.width += 2 * kLeftRightTextPadding;
1413 buttonSize.height += 2 * kTopBottomTextPadding;
1414 [tutorialOkButton setFrameSize:buttonSize];
1415 CGFloat buttonXOffset = kFixedMenuWidth -
1416 NSWidth([tutorialOkButton frame]) -
1417 kHorizontalSpacing;
1418 [tutorialOkButton setFrameOrigin:NSMakePoint(buttonXOffset, yOffset)];
1419 }
1420
1421 if (linkMessage) {
1422 CGFloat linkYOffset = yOffset;
1423 if (buttonMessage) {
1424 linkYOffset += (NSHeight([tutorialOkButton frame]) -
1425 NSHeight([learnMoreLink frame])) / 2;
1426 }
1427 [learnMoreLink setFrameOrigin:NSMakePoint(
1428 kHorizontalSpacing, linkYOffset)];
1429 }
1430 }
1431
1432 if (buttonMessage) {
1433 [container addSubview:tutorialOkButton];
1434 yOffset = NSMaxY([tutorialOkButton frame]);
1435 }
1436
1437 if (linkMessage) {
1438 [container addSubview:learnMoreLink];
1439 yOffset = std::max(NSMaxY([learnMoreLink frame]), yOffset);
1440 }
1441
1442 yOffset += kVerticalSpacing;
1443
1444 // Adds body content.
1445 NSTextField* contentLabel = BuildLabel(
1446 contentMessage,
1447 NSMakePoint(kHorizontalSpacing, yOffset),
1448 skia::SkColorToSRGBNSColor(profiles::kAvatarTutorialContentTextColor));
1449 [contentLabel setFrameSize:NSMakeSize(availableWidth, 0)];
1450 [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:contentLabel];
1451 [container addSubview:contentLabel];
1452 yOffset = NSMaxY([contentLabel frame]) + kSmallVerticalSpacing;
1453
1454 // Adds title.
1455 NSTextField* titleLabel =
1456 BuildLabel(titleMessage,
1457 NSMakePoint(kHorizontalSpacing, yOffset),
1458 [NSColor whiteColor] /* text_color */);
1459 [titleLabel setFont:[NSFont labelFontOfSize:kTitleFontSize]];
1460
1461 if (hasCloseButton) {
1462 base::scoped_nsobject<HoverImageButton> closeButton(
1463 [[HoverImageButton alloc] initWithFrame:NSZeroRect]);
1464 [closeButton setBordered:NO];
1465
1466 ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
1467 NSImage* closeImage = rb->GetNativeImageNamed(IDR_CLOSE_1).ToNSImage();
1468 CGFloat closeImageWidth = [closeImage size].width;
1469 [closeButton setDefaultImage:closeImage];
1470 [closeButton setHoverImage:
1471 rb->GetNativeImageNamed(IDR_CLOSE_1_H).ToNSImage()];
1472 [closeButton setPressedImage:
1473 rb->GetNativeImageNamed(IDR_CLOSE_1_P).ToNSImage()];
1474 [closeButton setTarget:self];
1475 [closeButton setAction:@selector(dismissTutorial:)];
1476 [closeButton setFrameSize:[closeImage size]];
1477 [closeButton
1478 setFrameOrigin:NSMakePoint(kFixedMenuWidth - kHorizontalSpacing -
1479 closeImageWidth,
1480 yOffset)];
1481 [container addSubview:closeButton];
1482
1483 [titleLabel setFrameSize:NSMakeSize(
1484 availableWidth - closeImageWidth - kHorizontalSpacing, 0)];
1485 } else {
1486 [titleLabel setFrameSize:NSMakeSize(availableWidth, 0)];
1487 }
1488
1489 [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:titleLabel];
1490 [container addSubview:titleLabel];
1491 yOffset = NSMaxY([titleLabel frame]) + kVerticalSpacing;
1492
1493 [container setFrameSize:NSMakeSize(kFixedMenuWidth, yOffset)];
1494 [container setFrameOrigin:NSZeroPoint];
1495 return container.autorelease();
1496 }
1497
1498 - (NSView*)buildSyncErrorViewIfNeeded { 1207 - (NSView*)buildSyncErrorViewIfNeeded {
1499 int contentStringId, buttonStringId; 1208 int contentStringId, buttonStringId;
1500 SEL buttonAction; 1209 SEL buttonAction;
1501 sync_ui_util::AvatarSyncErrorType error = 1210 sync_ui_util::AvatarSyncErrorType error =
1502 sync_ui_util::GetMessagesForAvatarSyncError( 1211 sync_ui_util::GetMessagesForAvatarSyncError(
1503 browser_->profile(), &contentStringId, &buttonStringId); 1212 browser_->profile(), &contentStringId, &buttonStringId);
1504 switch (error) { 1213 switch (error) {
1505 case sync_ui_util::MANAGED_USER_UNRECOVERABLE_ERROR: 1214 case sync_ui_util::MANAGED_USER_UNRECOVERABLE_ERROR:
1506 buttonAction = @selector(showSignoutView:); 1215 buttonAction = @selector(showSignoutView:);
1507 break; 1216 break;
(...skipping 892 matching lines...) Expand 10 before | Expand all | Expand 10 after
2400 2109
2401 - (void)showWindow:(id)sender { 2110 - (void)showWindow:(id)sender {
2402 [super showWindow:sender]; 2111 [super showWindow:sender];
2403 NSEvent *event = [[NSApplication sharedApplication] currentEvent]; 2112 NSEvent *event = [[NSApplication sharedApplication] currentEvent];
2404 if (firstProfileView_ && [event type] == NSKeyDown) { 2113 if (firstProfileView_ && [event type] == NSKeyDown) {
2405 [[self window] makeFirstResponder:firstProfileView_]; 2114 [[self window] makeFirstResponder:firstProfileView_];
2406 } 2115 }
2407 } 2116 }
2408 2117
2409 @end 2118 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698