Chromium Code Reviews| 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 "ui/chromeos/network/network_icon.h" | 5 #include "ash/common/system/chromeos/network/network_icon.h" |
| 6 | 6 |
| 7 #include "ash/common/material_design/material_design_controller.h" | |
| 8 #include "ash/common/system/chromeos/network/network_icon_animation.h" | |
| 9 #include "ash/common/system/chromeos/network/network_icon_animation_observer.h" | |
| 7 #include "base/macros.h" | 10 #include "base/macros.h" |
| 8 #include "base/strings/utf_string_conversions.h" | 11 #include "base/strings/utf_string_conversions.h" |
| 9 #include "chromeos/network/device_state.h" | 12 #include "chromeos/network/device_state.h" |
| 10 #include "chromeos/network/network_connection_handler.h" | 13 #include "chromeos/network/network_connection_handler.h" |
| 11 #include "chromeos/network/network_state.h" | 14 #include "chromeos/network/network_state.h" |
| 12 #include "chromeos/network/network_state_handler.h" | 15 #include "chromeos/network/network_state_handler.h" |
| 13 #include "chromeos/network/portal_detector/network_portal_detector.h" | 16 #include "chromeos/network/portal_detector/network_portal_detector.h" |
| 14 #include "grit/ui_chromeos_resources.h" | 17 #include "grit/ash_resources.h" |
| 15 #include "grit/ui_chromeos_strings.h" | 18 #include "grit/ash_strings.h" |
| 16 #include "third_party/cros_system_api/dbus/service_constants.h" | 19 #include "third_party/cros_system_api/dbus/service_constants.h" |
| 17 #include "third_party/skia/include/core/SkPaint.h" | 20 #include "third_party/skia/include/core/SkPaint.h" |
| 18 #include "third_party/skia/include/core/SkPath.h" | 21 #include "third_party/skia/include/core/SkPath.h" |
| 19 #include "ui/base/l10n/l10n_util.h" | 22 #include "ui/base/l10n/l10n_util.h" |
| 20 #include "ui/base/resource/resource_bundle.h" | 23 #include "ui/base/resource/resource_bundle.h" |
| 21 #include "ui/base/webui/web_ui_util.h" | 24 #include "ui/base/webui/web_ui_util.h" |
| 22 #include "ui/chromeos/material_design_icon_controller.h" | |
| 23 #include "ui/chromeos/network/network_icon_animation.h" | |
| 24 #include "ui/chromeos/network/network_icon_animation_observer.h" | |
| 25 #include "ui/gfx/canvas.h" | 25 #include "ui/gfx/canvas.h" |
| 26 #include "ui/gfx/color_palette.h" | 26 #include "ui/gfx/color_palette.h" |
| 27 #include "ui/gfx/geometry/insets.h" | 27 #include "ui/gfx/geometry/insets.h" |
| 28 #include "ui/gfx/geometry/rect.h" | 28 #include "ui/gfx/geometry/rect.h" |
| 29 #include "ui/gfx/geometry/size_conversions.h" | 29 #include "ui/gfx/geometry/size_conversions.h" |
| 30 #include "ui/gfx/image/canvas_image_source.h" | 30 #include "ui/gfx/image/canvas_image_source.h" |
| 31 #include "ui/gfx/image/image_skia_operations.h" | 31 #include "ui/gfx/image/image_skia_operations.h" |
| 32 #include "ui/gfx/image/image_skia_source.h" | 32 #include "ui/gfx/image/image_skia_source.h" |
| 33 #include "ui/gfx/paint_vector_icon.h" | 33 #include "ui/gfx/paint_vector_icon.h" |
| 34 #include "ui/gfx/skia_util.h" | 34 #include "ui/gfx/skia_util.h" |
| 35 #include "ui/gfx/vector_icons_public.h" | 35 #include "ui/gfx/vector_icons_public.h" |
| 36 | 36 |
| 37 using chromeos::DeviceState; | 37 using chromeos::DeviceState; |
| 38 using chromeos::NetworkConnectionHandler; | 38 using chromeos::NetworkConnectionHandler; |
| 39 using chromeos::NetworkHandler; | 39 using chromeos::NetworkHandler; |
| 40 using chromeos::NetworkPortalDetector; | 40 using chromeos::NetworkPortalDetector; |
| 41 using chromeos::NetworkState; | 41 using chromeos::NetworkState; |
| 42 using chromeos::NetworkStateHandler; | 42 using chromeos::NetworkStateHandler; |
| 43 using chromeos::NetworkTypePattern; | 43 using chromeos::NetworkTypePattern; |
| 44 | 44 |
| 45 namespace ui { | 45 namespace ash { |
| 46 namespace network_icon { | 46 namespace network_icon { |
| 47 | 47 |
| 48 namespace { | 48 namespace { |
| 49 | 49 |
| 50 // Constants for offseting the badge displayed on top of the signal strength | 50 // Constants for offseting the badge displayed on top of the signal strength |
| 51 // icon. The badge will extend outside of the base icon bounds by these amounts. | 51 // icon. The badge will extend outside of the base icon bounds by these amounts. |
| 52 // Only used for MD. All values are in dp. | 52 // Only used for MD. All values are in dp. |
| 53 | 53 |
| 54 // The badge offsets are different depending on whether the icon is in the tray | 54 // The badge offsets are different depending on whether the icon is in the tray |
| 55 // or menu. | 55 // or menu. |
| 56 const int kTrayIconBadgeOffset = 3; | 56 const int kTrayIconBadgeOffset = 3; |
| 57 const int kMenuIconBadgeOffset = 2; | 57 const int kMenuIconBadgeOffset = 2; |
| 58 | 58 |
| 59 // TODO(estade): use kTrayIconSize. See crbug.com/623987 | 59 // TODO(estade): use kTrayIconSize. See crbug.com/623987 |
| 60 const int kTrayIconSide = 16; | 60 const int kTrayIconSide = 16; |
| 61 | 61 |
| 62 bool UseMd() { | 62 bool UseMd() { |
| 63 return md_icon_controller::UseMaterialDesignNetworkIcons(); | 63 return MaterialDesignController::GetMode() != |
|
James Cook
2016/10/20 16:05:55
I think this should be MaterialDesignController::U
stevenjb
2016/10/24 20:08:25
Done.
| |
| 64 MaterialDesignController::NON_MATERIAL; | |
| 64 } | 65 } |
| 65 | 66 |
| 66 //------------------------------------------------------------------------------ | 67 //------------------------------------------------------------------------------ |
| 67 // Struct to pass icon badges to NetworkIconImageSource. | 68 // Struct to pass icon badges to NetworkIconImageSource. |
| 68 struct Badges { | 69 struct Badges { |
| 69 gfx::ImageSkia top_left; | 70 gfx::ImageSkia top_left; |
| 70 gfx::ImageSkia top_right; | 71 gfx::ImageSkia top_right; |
| 71 gfx::ImageSkia bottom_left; | 72 gfx::ImageSkia bottom_left; |
| 72 gfx::ImageSkia bottom_right; | 73 gfx::ImageSkia bottom_right; |
| 73 }; | 74 }; |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 159 NetworkIconMap* GetIconMap(IconType icon_type) { | 160 NetworkIconMap* GetIconMap(IconType icon_type) { |
| 160 return GetIconMapInstance(icon_type, true); | 161 return GetIconMapInstance(icon_type, true); |
| 161 } | 162 } |
| 162 | 163 |
| 163 void PurgeIconMap(IconType icon_type, | 164 void PurgeIconMap(IconType icon_type, |
| 164 const std::set<std::string>& network_paths) { | 165 const std::set<std::string>& network_paths) { |
| 165 NetworkIconMap* icon_map = GetIconMapInstance(icon_type, false); | 166 NetworkIconMap* icon_map = GetIconMapInstance(icon_type, false); |
| 166 if (!icon_map) | 167 if (!icon_map) |
| 167 return; | 168 return; |
| 168 for (NetworkIconMap::iterator loop_iter = icon_map->begin(); | 169 for (NetworkIconMap::iterator loop_iter = icon_map->begin(); |
| 169 loop_iter != icon_map->end(); ) { | 170 loop_iter != icon_map->end();) { |
| 170 NetworkIconMap::iterator cur_iter = loop_iter++; | 171 NetworkIconMap::iterator cur_iter = loop_iter++; |
| 171 if (network_paths.count(cur_iter->first) == 0) { | 172 if (network_paths.count(cur_iter->first) == 0) { |
| 172 delete cur_iter->second; | 173 delete cur_iter->second; |
| 173 icon_map->erase(cur_iter); | 174 icon_map->erase(cur_iter); |
| 174 } | 175 } |
| 175 } | 176 } |
| 176 } | 177 } |
| 177 | 178 |
| 178 //------------------------------------------------------------------------------ | 179 //------------------------------------------------------------------------------ |
| 179 // Utilities for generating icon images. | 180 // Utilities for generating icon images. |
| 180 | 181 |
| 181 // 'NONE' will default to ARCS behavior where appropriate (e.g. no network or | 182 // 'NONE' will default to ARCS behavior where appropriate (e.g. no network or |
| 182 // if a new type gets added). | 183 // if a new type gets added). |
| 183 enum ImageType { | 184 enum ImageType { ARCS, BARS, NONE }; |
| 184 ARCS, | |
| 185 BARS, | |
| 186 NONE | |
| 187 }; | |
| 188 | 185 |
| 189 // Amount to fade icons while connecting. | 186 // Amount to fade icons while connecting. |
| 190 const double kConnectingImageAlpha = 0.5; | 187 const double kConnectingImageAlpha = 0.5; |
| 191 | 188 |
| 192 // Images for strength arcs for wireless networks or strength bars for cellular | 189 // Images for strength arcs for wireless networks or strength bars for cellular |
| 193 // networks. | 190 // networks. |
| 194 const int kNumNetworkImages = 5; | 191 const int kNumNetworkImages = 5; |
| 195 | 192 |
| 196 // Number of discrete images to use for alpha fade animation | 193 // Number of discrete images to use for alpha fade animation |
| 197 const int kNumFadeImages = 10; | 194 const int kNumFadeImages = 10; |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 329 void set_color(SkColor color) { color_ = color; } | 326 void set_color(SkColor color) { color_ = color; } |
| 330 | 327 |
| 331 // gfx::CanvasImageSource: | 328 // gfx::CanvasImageSource: |
| 332 void Draw(gfx::Canvas* canvas) override { | 329 void Draw(gfx::Canvas* canvas) override { |
| 333 if (image_type_ == ARCS) | 330 if (image_type_ == ARCS) |
| 334 DrawArcs(canvas); | 331 DrawArcs(canvas); |
| 335 else | 332 else |
| 336 DrawBars(canvas); | 333 DrawBars(canvas); |
| 337 } | 334 } |
| 338 | 335 |
| 339 bool HasRepresentationAtAllScales() const override { | 336 bool HasRepresentationAtAllScales() const override { return true; } |
| 340 return true; | |
| 341 } | |
| 342 | 337 |
| 343 private: | 338 private: |
| 344 static gfx::Size GetSizeForIconType(IconType icon_type) { | 339 static gfx::Size GetSizeForIconType(IconType icon_type) { |
| 345 return icon_type == ICON_TYPE_TRAY | 340 return icon_type == ICON_TYPE_TRAY |
| 346 ? gfx::Size(kTrayIconSide, kTrayIconSide) | 341 ? gfx::Size(kTrayIconSide, kTrayIconSide) |
| 347 // TODO(estade): use kMenuIconSize instead of 20. | 342 // TODO(estade): use kMenuIconSize instead of 20. |
| 348 : gfx::Size(20, 20); | 343 : gfx::Size(20, 20); |
| 349 } | 344 } |
| 350 | 345 |
| 351 void DrawArcs(gfx::Canvas* canvas) { | 346 void DrawArcs(gfx::Canvas* canvas) { |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 477 gfx::CanvasImageSource* source = | 472 gfx::CanvasImageSource* source = |
| 478 new SignalStrengthImageSource(image_type, icon_type, index); | 473 new SignalStrengthImageSource(image_type, icon_type, index); |
| 479 return gfx::ImageSkia(source, source->size()); | 474 return gfx::ImageSkia(source, source->size()); |
| 480 } | 475 } |
| 481 | 476 |
| 482 if (index < 0 || index >= kNumNetworkImages) | 477 if (index < 0 || index >= kNumNetworkImages) |
| 483 return gfx::ImageSkia(); | 478 return gfx::ImageSkia(); |
| 484 gfx::ImageSkia* images = BaseImageForType(image_type, icon_type); | 479 gfx::ImageSkia* images = BaseImageForType(image_type, icon_type); |
| 485 int width = images->width(); | 480 int width = images->width(); |
| 486 int height = images->height() / kNumNetworkImages; | 481 int height = images->height() / kNumNetworkImages; |
| 487 return gfx::ImageSkiaOperations::ExtractSubset(*images, | 482 return gfx::ImageSkiaOperations::ExtractSubset( |
| 488 gfx::Rect(0, index * height, width, height)); | 483 *images, gfx::Rect(0, index * height, width, height)); |
| 489 } | 484 } |
| 490 | 485 |
| 491 const gfx::ImageSkia GetDisconnectedImage(IconType icon_type, | 486 const gfx::ImageSkia GetDisconnectedImage(IconType icon_type, |
| 492 const std::string& network_type) { | 487 const std::string& network_type) { |
| 493 DCHECK_NE(shill::kTypeVPN, network_type); | 488 DCHECK_NE(shill::kTypeVPN, network_type); |
| 494 ImageType image_type = ImageTypeForNetworkType(network_type); | 489 ImageType image_type = ImageTypeForNetworkType(network_type); |
| 495 const int disconnected_index = 0; | 490 const int disconnected_index = 0; |
| 496 return GetImageForIndex(image_type, icon_type, disconnected_index); | 491 return GetImageForIndex(image_type, icon_type, disconnected_index); |
| 497 } | 492 } |
| 498 | 493 |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 677 } | 672 } |
| 678 | 673 |
| 679 gfx::ImageSkia GetConnectingImage(IconType icon_type, | 674 gfx::ImageSkia GetConnectingImage(IconType icon_type, |
| 680 const std::string& network_type) { | 675 const std::string& network_type) { |
| 681 if (network_type == shill::kTypeVPN) | 676 if (network_type == shill::kTypeVPN) |
| 682 return GetConnectingVpnImage(icon_type); | 677 return GetConnectingVpnImage(icon_type); |
| 683 | 678 |
| 684 ImageType image_type = ImageTypeForNetworkType(network_type); | 679 ImageType image_type = ImageTypeForNetworkType(network_type); |
| 685 double animation = NetworkIconAnimation::GetInstance()->GetAnimation(); | 680 double animation = NetworkIconAnimation::GetInstance()->GetAnimation(); |
| 686 | 681 |
| 687 gfx::ImageSkia* icon = ConnectingWirelessImage( | 682 gfx::ImageSkia* icon = |
| 688 image_type, icon_type, animation); | 683 ConnectingWirelessImage(image_type, icon_type, animation); |
| 689 return UseMd() ? NetworkIconImageSourceMd::CreateImage(*icon, Badges()) | 684 return UseMd() ? NetworkIconImageSourceMd::CreateImage(*icon, Badges()) |
| 690 : gfx::ImageSkia(new NetworkIconImageSource(*icon, Badges()), | 685 : gfx::ImageSkia(new NetworkIconImageSource(*icon, Badges()), |
| 691 icon->size()); | 686 icon->size()); |
| 692 } | 687 } |
| 693 | 688 |
| 694 } // namespace | 689 } // namespace |
| 695 | 690 |
| 696 //------------------------------------------------------------------------------ | 691 //------------------------------------------------------------------------------ |
| 697 // NetworkIconImpl | 692 // NetworkIconImpl |
| 698 | 693 |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 771 state.status == NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL; | 766 state.status == NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL; |
| 772 } | 767 } |
| 773 | 768 |
| 774 if (behind_captive_portal == behind_captive_portal_) | 769 if (behind_captive_portal == behind_captive_portal_) |
| 775 return false; | 770 return false; |
| 776 behind_captive_portal_ = behind_captive_portal; | 771 behind_captive_portal_ = behind_captive_portal; |
| 777 return true; | 772 return true; |
| 778 } | 773 } |
| 779 | 774 |
| 780 bool NetworkIconImpl::UpdateVPNBadge() { | 775 bool NetworkIconImpl::UpdateVPNBadge() { |
| 781 const NetworkState* vpn = NetworkHandler::Get()->network_state_handler()-> | 776 const NetworkState* vpn = |
| 782 ConnectedNetworkByType(NetworkTypePattern::VPN()); | 777 NetworkHandler::Get()->network_state_handler()->ConnectedNetworkByType( |
| 778 NetworkTypePattern::VPN()); | |
| 783 if (vpn && vpn_badge_.isNull()) { | 779 if (vpn && vpn_badge_.isNull()) { |
| 784 vpn_badge_ = | 780 vpn_badge_ = |
| 785 UseMd() ? gfx::CreateVectorIcon(gfx::VectorIconId::NETWORK_BADGE_VPN, | 781 UseMd() ? gfx::CreateVectorIcon(gfx::VectorIconId::NETWORK_BADGE_VPN, |
| 786 GetDefaultColorForIconType(icon_type_)) | 782 GetDefaultColorForIconType(icon_type_)) |
| 787 : *ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( | 783 : *ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( |
| 788 IDR_AURA_UBER_TRAY_NETWORK_VPN_BADGE); | 784 IDR_AURA_UBER_TRAY_NETWORK_VPN_BADGE); |
| 789 return true; | 785 return true; |
| 790 } | 786 } |
| 791 if (!vpn && !vpn_badge_.isNull()) { | 787 if (!vpn && !vpn_badge_.isNull()) { |
| 792 vpn_badge_ = gfx::ImageSkia(); | 788 vpn_badge_ = gfx::ImageSkia(); |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 990 } else { | 986 } else { |
| 991 return base::UTF8ToUTF16(network->name()); | 987 return base::UTF8ToUTF16(network->name()); |
| 992 } | 988 } |
| 993 } | 989 } |
| 994 | 990 |
| 995 int GetCellularUninitializedMsg() { | 991 int GetCellularUninitializedMsg() { |
| 996 static base::Time s_uninitialized_state_time; | 992 static base::Time s_uninitialized_state_time; |
| 997 static int s_uninitialized_msg(0); | 993 static int s_uninitialized_msg(0); |
| 998 | 994 |
| 999 NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler(); | 995 NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler(); |
| 1000 if (handler->GetTechnologyState(NetworkTypePattern::Mobile()) | 996 if (handler->GetTechnologyState(NetworkTypePattern::Mobile()) == |
| 1001 == NetworkStateHandler::TECHNOLOGY_UNINITIALIZED) { | 997 NetworkStateHandler::TECHNOLOGY_UNINITIALIZED) { |
| 1002 s_uninitialized_msg = IDS_ASH_STATUS_TRAY_INITIALIZING_CELLULAR; | 998 s_uninitialized_msg = IDS_ASH_STATUS_TRAY_INITIALIZING_CELLULAR; |
| 1003 s_uninitialized_state_time = base::Time::Now(); | 999 s_uninitialized_state_time = base::Time::Now(); |
| 1004 return s_uninitialized_msg; | 1000 return s_uninitialized_msg; |
| 1005 } else if (handler->GetScanningByType(NetworkTypePattern::Mobile())) { | 1001 } else if (handler->GetScanningByType(NetworkTypePattern::Mobile())) { |
| 1006 s_uninitialized_msg = IDS_ASH_STATUS_TRAY_CELLULAR_SCANNING; | 1002 s_uninitialized_msg = IDS_ASH_STATUS_TRAY_CELLULAR_SCANNING; |
| 1007 s_uninitialized_state_time = base::Time::Now(); | 1003 s_uninitialized_state_time = base::Time::Now(); |
| 1008 return s_uninitialized_msg; | 1004 return s_uninitialized_msg; |
| 1009 } | 1005 } |
| 1010 // There can be a delay between leaving the Initializing state and when | 1006 // There can be a delay between leaving the Initializing state and when |
| 1011 // a Cellular device shows up, so keep showing the initializing | 1007 // a Cellular device shows up, so keep showing the initializing |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1097 for (NetworkStateHandler::NetworkStateList::iterator iter = networks.begin(); | 1093 for (NetworkStateHandler::NetworkStateList::iterator iter = networks.begin(); |
| 1098 iter != networks.end(); ++iter) { | 1094 iter != networks.end(); ++iter) { |
| 1099 network_paths.insert((*iter)->path()); | 1095 network_paths.insert((*iter)->path()); |
| 1100 } | 1096 } |
| 1101 PurgeIconMap(ICON_TYPE_TRAY, network_paths); | 1097 PurgeIconMap(ICON_TYPE_TRAY, network_paths); |
| 1102 PurgeIconMap(ICON_TYPE_DEFAULT_VIEW, network_paths); | 1098 PurgeIconMap(ICON_TYPE_DEFAULT_VIEW, network_paths); |
| 1103 PurgeIconMap(ICON_TYPE_LIST, network_paths); | 1099 PurgeIconMap(ICON_TYPE_LIST, network_paths); |
| 1104 } | 1100 } |
| 1105 | 1101 |
| 1106 } // namespace network_icon | 1102 } // namespace network_icon |
| 1107 } // namespace ui | 1103 } // namespace ash |
| OLD | NEW |