| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include "ash/system/user/tray_user.h" | 5 #include "ash/system/user/tray_user.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <climits> | 8 #include <climits> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 65 #include "ui/views/layout/fill_layout.h" | 65 #include "ui/views/layout/fill_layout.h" |
| 66 #include "ui/views/mouse_watcher.h" | 66 #include "ui/views/mouse_watcher.h" |
| 67 #include "ui/views/painter.h" | 67 #include "ui/views/painter.h" |
| 68 #include "ui/views/view.h" | 68 #include "ui/views/view.h" |
| 69 #include "ui/views/widget/widget.h" | 69 #include "ui/views/widget/widget.h" |
| 70 | 70 |
| 71 namespace { | 71 namespace { |
| 72 | 72 |
| 73 const int kUserDetailsVerticalPadding = 5; | 73 const int kUserDetailsVerticalPadding = 5; |
| 74 const int kUserCardVerticalPadding = 10; | 74 const int kUserCardVerticalPadding = 10; |
| 75 const int kProfileRoundedCornerRadius = 2; | 75 const int kUserIconSize = 32; |
| 76 const int kUserIconSize = 27; | 76 const int kUserIconCornerRadius = 2; |
| 77 const int kUserIconLargeSize = 32; | |
| 78 const int kUserIconLargeCornerRadius = 2; | |
| 79 const int kUserLabelToIconPadding = 5; | 77 const int kUserLabelToIconPadding = 5; |
| 80 | 78 |
| 81 // When a hover border is used, it is starting this many pixels before the icon | 79 // When a hover border is used, it is starting this many pixels before the icon |
| 82 // position. | 80 // position. |
| 83 const int kTrayUserTileHoverBorderInset = 10; | 81 const int kTrayUserTileHoverBorderInset = 10; |
| 84 | 82 |
| 85 // The border color of the user button. | 83 // The border color of the user button. |
| 86 const SkColor kBorderColor = 0xffdcdcdc; | 84 const SkColor kBorderColor = 0xffdcdcdc; |
| 87 | 85 |
| 88 // The invisible word joiner character, used as a marker to indicate the start | 86 // The invisible word joiner character, used as a marker to indicate the start |
| (...skipping 817 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 906 user_card_view_->AddChildView(details); | 904 user_card_view_->AddChildView(details); |
| 907 } else { | 905 } else { |
| 908 if (username) | 906 if (username) |
| 909 user_card_view_->AddChildView(username); | 907 user_card_view_->AddChildView(username); |
| 910 if (additional) | 908 if (additional) |
| 911 user_card_view_->AddChildView(additional); | 909 user_card_view_->AddChildView(additional); |
| 912 } | 910 } |
| 913 } | 911 } |
| 914 | 912 |
| 915 views::View* UserView::CreateIconForUserCard(user::LoginStatus login) { | 913 views::View* UserView::CreateIconForUserCard(user::LoginStatus login) { |
| 916 RoundedImageView* icon = new RoundedImageView(kProfileRoundedCornerRadius, | 914 RoundedImageView* icon = new RoundedImageView(kUserIconCornerRadius, |
| 917 multiprofile_index_ == 0); | 915 multiprofile_index_ == 0); |
| 918 icon->SetEnabled(false); | 916 icon->SetEnabled(false); |
| 919 if (login == user::LOGGED_IN_GUEST) { | 917 if (login == user::LOGGED_IN_GUEST) { |
| 920 icon->SetImage(*ui::ResourceBundle::GetSharedInstance(). | 918 icon->SetImage(*ui::ResourceBundle::GetSharedInstance(). |
| 921 GetImageNamed(IDR_AURA_UBER_TRAY_GUEST_ICON).ToImageSkia(), | 919 GetImageNamed(IDR_AURA_UBER_TRAY_GUEST_ICON).ToImageSkia(), |
| 922 gfx::Size(kUserIconSize, kUserIconSize)); | 920 gfx::Size(kUserIconSize, kUserIconSize)); |
| 923 } else { | 921 } else { |
| 924 icon->SetImage( | 922 icon->SetImage( |
| 925 Shell::GetInstance()->session_state_delegate()-> | 923 Shell::GetInstance()->session_state_delegate()-> |
| 926 GetUserImage(multiprofile_index_), | 924 GetUserImage(multiprofile_index_), |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1068 kTrayPopupPaddingHorizontal - kTrayUserTileHoverBorderInset, | 1066 kTrayPopupPaddingHorizontal - kTrayUserTileHoverBorderInset, |
| 1069 kUserCardVerticalPadding, | 1067 kUserCardVerticalPadding, |
| 1070 kTrayPopupPaddingHorizontal - kTrayUserTileHoverBorderInset)); | 1068 kTrayPopupPaddingHorizontal - kTrayUserTileHoverBorderInset)); |
| 1071 | 1069 |
| 1072 add_user_->SetLayoutManager(new views::BoxLayout( | 1070 add_user_->SetLayoutManager(new views::BoxLayout( |
| 1073 views::BoxLayout::kHorizontal, 0, 0 , kTrayPopupPaddingBetweenItems)); | 1071 views::BoxLayout::kHorizontal, 0, 0 , kTrayPopupPaddingBetweenItems)); |
| 1074 AddChildViewAt(add_user_, 0); | 1072 AddChildViewAt(add_user_, 0); |
| 1075 | 1073 |
| 1076 // Add the [+] icon which is also the anchor for messages. | 1074 // Add the [+] icon which is also the anchor for messages. |
| 1077 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); | 1075 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); |
| 1078 RoundedImageView* icon = new RoundedImageView(kProfileRoundedCornerRadius, | 1076 RoundedImageView* icon = new RoundedImageView(kUserIconCornerRadius, |
| 1079 true); | 1077 true); |
| 1080 anchor_ = icon; | 1078 anchor_ = icon; |
| 1081 icon->SetImage(*ui::ResourceBundle::GetSharedInstance(). | 1079 icon->SetImage(*ui::ResourceBundle::GetSharedInstance(). |
| 1082 GetImageNamed(IDR_AURA_UBER_TRAY_ADD_MULTIPROFILE_USER).ToImageSkia(), | 1080 GetImageNamed(IDR_AURA_UBER_TRAY_ADD_MULTIPROFILE_USER).ToImageSkia(), |
| 1083 gfx::Size(kUserIconSize, kUserIconSize)); | 1081 gfx::Size(kUserIconSize, kUserIconSize)); |
| 1084 add_user_->AddChildView(icon); | 1082 add_user_->AddChildView(icon); |
| 1085 | 1083 |
| 1086 // Add the command text. | 1084 // Add the command text. |
| 1087 views::Label* command_label = new views::Label( | 1085 views::Label* command_label = new views::Label( |
| 1088 bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_SIGN_IN_ANOTHER_ACCOUNT)); | 1086 bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_SIGN_IN_ANOTHER_ACCOUNT)); |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1199 (need_label != (label_ != NULL))) { | 1197 (need_label != (label_ != NULL))) { |
| 1200 layout_view_->RemoveAllChildViews(true); | 1198 layout_view_->RemoveAllChildViews(true); |
| 1201 if (need_label) { | 1199 if (need_label) { |
| 1202 label_ = new views::Label; | 1200 label_ = new views::Label; |
| 1203 SetupLabelForTray(label_); | 1201 SetupLabelForTray(label_); |
| 1204 layout_view_->AddChildView(label_); | 1202 layout_view_->AddChildView(label_); |
| 1205 } else { | 1203 } else { |
| 1206 label_ = NULL; | 1204 label_ = NULL; |
| 1207 } | 1205 } |
| 1208 if (need_avatar) { | 1206 if (need_avatar) { |
| 1209 avatar_ = new tray::RoundedImageView(kProfileRoundedCornerRadius, true); | 1207 avatar_ = new tray::RoundedImageView(kUserIconCornerRadius, true); |
| 1210 layout_view_->AddChildView(avatar_); | 1208 layout_view_->AddChildView(avatar_); |
| 1211 } else { | 1209 } else { |
| 1212 avatar_ = NULL; | 1210 avatar_ = NULL; |
| 1213 } | 1211 } |
| 1214 } | 1212 } |
| 1215 | 1213 |
| 1216 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); | 1214 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); |
| 1217 if (status == user::LOGGED_IN_LOCALLY_MANAGED) { | 1215 if (status == user::LOGGED_IN_LOCALLY_MANAGED) { |
| 1218 label_->SetText( | 1216 label_->SetText( |
| 1219 bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_LOCALLY_MANAGED_LABEL)); | 1217 bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_LOCALLY_MANAGED_LABEL)); |
| 1220 } else if (status == user::LOGGED_IN_GUEST) { | 1218 } else if (status == user::LOGGED_IN_GUEST) { |
| 1221 label_->SetText(bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_GUEST_LABEL)); | 1219 label_->SetText(bundle.GetLocalizedString(IDS_ASH_STATUS_TRAY_GUEST_LABEL)); |
| 1222 } | 1220 } |
| 1223 | 1221 |
| 1224 if (avatar_ && switches::UseAlternateShelfLayout()) { | 1222 if (avatar_) { |
| 1225 avatar_->SetCornerRadii( | 1223 avatar_->SetCornerRadii( |
| 1226 0, kUserIconLargeCornerRadius, kUserIconLargeCornerRadius, 0); | 1224 0, kUserIconCornerRadius, kUserIconCornerRadius, 0); |
| 1227 avatar_->SetBorder(views::Border::NullBorder()); | 1225 avatar_->SetBorder(views::Border::NullBorder()); |
| 1228 } | 1226 } |
| 1229 UpdateAvatarImage(status); | 1227 UpdateAvatarImage(status); |
| 1230 | 1228 |
| 1231 // Update layout after setting label_ and avatar_ with new login status. | 1229 // Update layout after setting label_ and avatar_ with new login status. |
| 1232 UpdateLayoutOfItem(); | 1230 UpdateLayoutOfItem(); |
| 1233 } | 1231 } |
| 1234 | 1232 |
| 1235 void TrayUser::UpdateAfterShelfAlignmentChange(ShelfAlignment alignment) { | 1233 void TrayUser::UpdateAfterShelfAlignmentChange(ShelfAlignment alignment) { |
| 1236 // Inactive users won't have a layout. | 1234 // Inactive users won't have a layout. |
| 1237 if (!layout_view_) | 1235 if (!layout_view_) |
| 1238 return; | 1236 return; |
| 1239 if (alignment == SHELF_ALIGNMENT_BOTTOM || | 1237 if (alignment == SHELF_ALIGNMENT_BOTTOM || |
| 1240 alignment == SHELF_ALIGNMENT_TOP) { | 1238 alignment == SHELF_ALIGNMENT_TOP) { |
| 1241 if (avatar_) { | 1239 if (avatar_) { |
| 1242 if (switches::UseAlternateShelfLayout()) { | 1240 avatar_->SetBorder(views::Border::NullBorder()); |
| 1243 avatar_->SetBorder(views::Border::NullBorder()); | 1241 avatar_->SetCornerRadii( |
| 1244 avatar_->SetCornerRadii( | 1242 0, kUserIconCornerRadius, kUserIconCornerRadius, 0); |
| 1245 0, kUserIconLargeCornerRadius, kUserIconLargeCornerRadius, 0); | |
| 1246 } else { | |
| 1247 avatar_->SetBorder(views::Border::CreateEmptyBorder( | |
| 1248 0, | |
| 1249 kTrayImageItemHorizontalPaddingBottomAlignment + 2, | |
| 1250 0, | |
| 1251 kTrayImageItemHorizontalPaddingBottomAlignment)); | |
| 1252 } | |
| 1253 } | 1243 } |
| 1254 if (label_) { | 1244 if (label_) { |
| 1255 label_->SetBorder(views::Border::CreateEmptyBorder( | 1245 label_->SetBorder(views::Border::CreateEmptyBorder( |
| 1256 0, | 1246 0, |
| 1257 kTrayLabelItemHorizontalPaddingBottomAlignment, | 1247 kTrayLabelItemHorizontalPaddingBottomAlignment, |
| 1258 0, | 1248 0, |
| 1259 kTrayLabelItemHorizontalPaddingBottomAlignment)); | 1249 kTrayLabelItemHorizontalPaddingBottomAlignment)); |
| 1260 } | 1250 } |
| 1261 layout_view_->SetLayoutManager( | 1251 layout_view_->SetLayoutManager( |
| 1262 new views::BoxLayout(views::BoxLayout::kHorizontal, | 1252 new views::BoxLayout(views::BoxLayout::kHorizontal, |
| 1263 0, 0, kUserLabelToIconPadding)); | 1253 0, 0, kUserLabelToIconPadding)); |
| 1264 } else { | 1254 } else { |
| 1265 if (avatar_) { | 1255 if (avatar_) { |
| 1266 if (switches::UseAlternateShelfLayout()) { | 1256 avatar_->SetBorder(views::Border::NullBorder()); |
| 1267 avatar_->SetBorder(views::Border::NullBorder()); | 1257 avatar_->SetCornerRadii( |
| 1268 avatar_->SetCornerRadii( | 1258 0, 0, kUserIconCornerRadius, kUserIconCornerRadius); |
| 1269 0, 0, kUserIconLargeCornerRadius, kUserIconLargeCornerRadius); | |
| 1270 } else { | |
| 1271 SetTrayImageItemBorder(avatar_, alignment); | |
| 1272 } | |
| 1273 } | 1259 } |
| 1274 if (label_) { | 1260 if (label_) { |
| 1275 label_->SetBorder(views::Border::CreateEmptyBorder( | 1261 label_->SetBorder(views::Border::CreateEmptyBorder( |
| 1276 kTrayLabelItemVerticalPaddingVerticalAlignment, | 1262 kTrayLabelItemVerticalPaddingVerticalAlignment, |
| 1277 kTrayLabelItemHorizontalPaddingBottomAlignment, | 1263 kTrayLabelItemHorizontalPaddingBottomAlignment, |
| 1278 kTrayLabelItemVerticalPaddingVerticalAlignment, | 1264 kTrayLabelItemVerticalPaddingVerticalAlignment, |
| 1279 kTrayLabelItemHorizontalPaddingBottomAlignment)); | 1265 kTrayLabelItemHorizontalPaddingBottomAlignment)); |
| 1280 } | 1266 } |
| 1281 layout_view_->SetLayoutManager( | 1267 layout_view_->SetLayoutManager( |
| 1282 new views::BoxLayout(views::BoxLayout::kVertical, | 1268 new views::BoxLayout(views::BoxLayout::kVertical, |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1304 Shell::GetInstance()->system_tray_delegate()->GetUserLoginStatus()); | 1290 Shell::GetInstance()->system_tray_delegate()->GetUserLoginStatus()); |
| 1305 } | 1291 } |
| 1306 | 1292 |
| 1307 void TrayUser::UpdateAvatarImage(user::LoginStatus status) { | 1293 void TrayUser::UpdateAvatarImage(user::LoginStatus status) { |
| 1308 SessionStateDelegate* session_state_delegate = | 1294 SessionStateDelegate* session_state_delegate = |
| 1309 Shell::GetInstance()->session_state_delegate(); | 1295 Shell::GetInstance()->session_state_delegate(); |
| 1310 if (!avatar_ || | 1296 if (!avatar_ || |
| 1311 GetTrayIndex() >= session_state_delegate->NumberOfLoggedInUsers()) | 1297 GetTrayIndex() >= session_state_delegate->NumberOfLoggedInUsers()) |
| 1312 return; | 1298 return; |
| 1313 | 1299 |
| 1314 int icon_size = switches::UseAlternateShelfLayout() ? | |
| 1315 kUserIconLargeSize : kUserIconSize; | |
| 1316 | |
| 1317 avatar_->SetImage( | 1300 avatar_->SetImage( |
| 1318 Shell::GetInstance()->session_state_delegate()->GetUserImage( | 1301 Shell::GetInstance()->session_state_delegate()->GetUserImage( |
| 1319 GetTrayIndex()), | 1302 GetTrayIndex()), |
| 1320 gfx::Size(icon_size, icon_size)); | 1303 gfx::Size(kUserIconSize, kUserIconSize)); |
| 1321 | 1304 |
| 1322 // Unit tests might come here with no images for some users. | 1305 // Unit tests might come here with no images for some users. |
| 1323 if (avatar_->size().IsEmpty()) | 1306 if (avatar_->size().IsEmpty()) |
| 1324 avatar_->SetSize(gfx::Size(icon_size, icon_size)); | 1307 avatar_->SetSize(gfx::Size(kUserIconSize, kUserIconSize)); |
| 1325 } | 1308 } |
| 1326 | 1309 |
| 1327 MultiProfileIndex TrayUser::GetTrayIndex() { | 1310 MultiProfileIndex TrayUser::GetTrayIndex() { |
| 1328 Shell* shell = Shell::GetInstance(); | 1311 Shell* shell = Shell::GetInstance(); |
| 1329 // If multi profile is not enabled we can use the normal index. | 1312 // If multi profile is not enabled we can use the normal index. |
| 1330 if (!shell->delegate()->IsMultiProfilesEnabled()) | 1313 if (!shell->delegate()->IsMultiProfilesEnabled()) |
| 1331 return multiprofile_index_; | 1314 return multiprofile_index_; |
| 1332 // In case of multi profile we need to mirror the indices since the system | 1315 // In case of multi profile we need to mirror the indices since the system |
| 1333 // tray items are in the reverse order then the menu items. | 1316 // tray items are in the reverse order then the menu items. |
| 1334 return shell->session_state_delegate()->GetMaximumNumberOfLoggedInUsers() - | 1317 return shell->session_state_delegate()->GetMaximumNumberOfLoggedInUsers() - |
| 1335 1 - multiprofile_index_; | 1318 1 - multiprofile_index_; |
| 1336 } | 1319 } |
| 1337 | 1320 |
| 1338 void TrayUser::UpdateLayoutOfItem() { | 1321 void TrayUser::UpdateLayoutOfItem() { |
| 1339 internal::RootWindowController* controller = | 1322 internal::RootWindowController* controller = |
| 1340 internal::GetRootWindowController( | 1323 internal::GetRootWindowController( |
| 1341 system_tray()->GetWidget()->GetNativeWindow()->GetRootWindow()); | 1324 system_tray()->GetWidget()->GetNativeWindow()->GetRootWindow()); |
| 1342 if (controller && controller->shelf()) { | 1325 if (controller && controller->shelf()) { |
| 1343 UpdateAfterShelfAlignmentChange( | 1326 UpdateAfterShelfAlignmentChange( |
| 1344 controller->GetShelfLayoutManager()->GetAlignment()); | 1327 controller->GetShelfLayoutManager()->GetAlignment()); |
| 1345 } | 1328 } |
| 1346 } | 1329 } |
| 1347 | 1330 |
| 1348 } // namespace internal | 1331 } // namespace internal |
| 1349 } // namespace ash | 1332 } // namespace ash |
| OLD | NEW |