Chromium Code Reviews| Index: ash/common/system/tray/system_tray_bubble.cc |
| diff --git a/ash/common/system/tray/system_tray_bubble.cc b/ash/common/system/tray/system_tray_bubble.cc |
| index ebe94148f4bb0c0cc063faeb53604107ba141025..c131853fe7435fd44909ba6c20b9cad7291352ba 100644 |
| --- a/ash/common/system/tray/system_tray_bubble.cc |
| +++ b/ash/common/system/tray/system_tray_bubble.cc |
| @@ -4,6 +4,9 @@ |
| #include "ash/common/system/tray/system_tray_bubble.h" |
| +#include <utility> |
| +#include <vector> |
| + |
| #include "ash/common/system/tray/system_tray.h" |
| #include "ash/common/system/tray/system_tray_delegate.h" |
| #include "ash/common/system/tray/system_tray_item.h" |
| @@ -11,6 +14,7 @@ |
| #include "ash/common/system/tray/tray_constants.h" |
| #include "ash/common/system/tray/tray_popup_item_container.h" |
| #include "ash/common/wm_shell.h" |
| +#include "base/metrics/histogram_macros.h" |
| #include "base/threading/thread_task_runner_handle.h" |
| #include "ui/compositor/layer.h" |
| #include "ui/compositor/layer_animation_observer.h" |
| @@ -274,8 +278,24 @@ bool SystemTrayBubble::ShouldShowShelf() const { |
| return false; |
| } |
| +void SystemTrayBubble::RecordVisibleRowMetrics() { |
| + if (bubble_type_ != BUBBLE_TYPE_DEFAULT) { |
| + DCHECK(false) << "Only the BUBBLE_TYPE_DEFAULT BubbleType is supported."; |
|
tdanderson
2016/07/19 21:58:40
Not sure if we need a DCHECK or a message here.
bruthig
2016/07/20 18:15:52
Removed.
|
| + return; |
| + } |
| + |
| + for (const std::pair<SystemTrayItem::ItemType, views::View*>& pair : |
| + tray_item_view_map_) { |
| + if (pair.second->visible()) { |
| + UMA_HISTOGRAM_ENUMERATION("Ash.SystemMenu.DefaultView.VisibleItems", |
| + pair.first, SystemTrayItem::COUNT); |
| + } |
| + } |
| +} |
| + |
| void SystemTrayBubble::CreateItemViews(LoginStatus login_status) { |
| - std::vector<views::View*> item_views; |
| + tray_item_view_map_.clear(); |
| + |
| // If a system modal dialog is present, create the same tray as |
| // in locked state. |
| if (WmShell::Get()->IsSystemModalWindowOpen() && |
| @@ -284,33 +304,44 @@ void SystemTrayBubble::CreateItemViews(LoginStatus login_status) { |
| } |
| views::View* focus_view = NULL; |
| + const bool is_default_bubble = bubble_type_ == BUBBLE_TYPE_DEFAULT; |
| for (size_t i = 0; i < items_.size(); ++i) { |
| - views::View* view = NULL; |
| + views::View* item_view = NULL; |
|
tdanderson
2016/07/19 21:58:40
nit: nullptr here and line 306
bruthig
2016/07/20 18:15:52
Done.
|
| switch (bubble_type_) { |
| case BUBBLE_TYPE_DEFAULT: |
| - view = items_[i]->CreateDefaultView(login_status); |
| + item_view = items_[i]->CreateDefaultView(login_status); |
| if (items_[i]->restore_focus()) |
| - focus_view = view; |
| + focus_view = item_view; |
| break; |
| case BUBBLE_TYPE_DETAILED: |
| - view = items_[i]->CreateDetailedView(login_status); |
| + item_view = items_[i]->CreateDetailedView(login_status); |
| break; |
| case BUBBLE_TYPE_NOTIFICATION: |
| - view = items_[i]->CreateNotificationView(login_status); |
| + item_view = items_[i]->CreateNotificationView(login_status); |
| break; |
| } |
| - if (view) |
| - item_views.push_back(view); |
| + if (item_view) { |
| + views::View* tray_popup_item_container = new TrayPopupItemContainer( |
| + item_view, is_default_bubble, is_default_bubble); |
| + |
|
tdanderson
2016/07/19 21:58:39
nit: omit blank lines at 326 and 328
bruthig
2016/07/20 18:15:52
Done.
|
| + bubble_view_->AddChildView(tray_popup_item_container); |
| + |
| + tray_item_view_map_[items_[i]->type()] = tray_popup_item_container; |
| + } |
| } |
| - bool is_default_bubble = bubble_type_ == BUBBLE_TYPE_DEFAULT; |
| - for (size_t i = 0; i < item_views.size(); ++i) { |
| - // For default view, draw bottom border for each item, except the last |
| - // 2 items, which are the bottom header row and the one just above it. |
| - bubble_view_->AddChildView(new TrayPopupItemContainer( |
| - item_views[i], is_default_bubble, |
| - is_default_bubble && (i < item_views.size() - 2))); |
| + // For default view, draw bottom border for each item, except the last |
| + // 2 items, which are the bottom header row and the one just above it. |
| + const int view_count = bubble_view_->child_count(); |
| + if (is_default_bubble && view_count > 1) { |
| + bubble_view_->child_at(view_count - 1) |
| + ->SetBorder(views::Border::NullBorder()); |
| + if (view_count > 2) { |
| + bubble_view_->child_at(view_count - 2) |
| + ->SetBorder(views::Border::NullBorder()); |
| + } |
| } |
| + |
| if (focus_view) |
| focus_view->RequestFocus(); |
| } |