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/common/system/tray/system_tray_bubble.h" | 5 #include "ash/common/system/tray/system_tray_bubble.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "ash/common/material_design/material_design_controller.h" | 10 #include "ash/common/material_design/material_design_controller.h" |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 SystemTrayBubble::~SystemTrayBubble() { | 83 SystemTrayBubble::~SystemTrayBubble() { |
84 DestroyItemViews(); | 84 DestroyItemViews(); |
85 // Reset the host pointer in bubble_view_ in case its destruction is deferred. | 85 // Reset the host pointer in bubble_view_ in case its destruction is deferred. |
86 if (bubble_view_) | 86 if (bubble_view_) |
87 bubble_view_->reset_delegate(); | 87 bubble_view_->reset_delegate(); |
88 } | 88 } |
89 | 89 |
90 void SystemTrayBubble::UpdateView( | 90 void SystemTrayBubble::UpdateView( |
91 const std::vector<ash::SystemTrayItem*>& items, | 91 const std::vector<ash::SystemTrayItem*>& items, |
92 BubbleType bubble_type) { | 92 BubbleType bubble_type) { |
93 DCHECK(bubble_type != BUBBLE_TYPE_NOTIFICATION); | |
94 | 93 |
95 std::unique_ptr<ui::Layer> scoped_layer; | 94 std::unique_ptr<ui::Layer> scoped_layer; |
96 if (bubble_type != bubble_type_) { | 95 if (bubble_type != bubble_type_) { |
97 base::TimeDelta swipe_duration = | 96 base::TimeDelta swipe_duration = |
98 base::TimeDelta::FromMilliseconds(kSwipeDelayMS); | 97 base::TimeDelta::FromMilliseconds(kSwipeDelayMS); |
99 scoped_layer = bubble_view_->RecreateLayer(); | 98 scoped_layer = bubble_view_->RecreateLayer(); |
100 // Keep the reference to layer as we need it after releasing it. | 99 // Keep the reference to layer as we need it after releasing it. |
101 ui::Layer* layer = scoped_layer.get(); | 100 ui::Layer* layer = scoped_layer.get(); |
102 DCHECK(layer); | 101 DCHECK(layer); |
103 layer->SuppressPaint(); | 102 layer->SuppressPaint(); |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
189 | 188 |
190 void SystemTrayBubble::InitView(views::View* anchor, | 189 void SystemTrayBubble::InitView(views::View* anchor, |
191 LoginStatus login_status, | 190 LoginStatus login_status, |
192 TrayBubbleView::InitParams* init_params) { | 191 TrayBubbleView::InitParams* init_params) { |
193 DCHECK(anchor); | 192 DCHECK(anchor); |
194 DCHECK(!bubble_view_); | 193 DCHECK(!bubble_view_); |
195 | 194 |
196 if (bubble_type_ == BUBBLE_TYPE_DETAILED && | 195 if (bubble_type_ == BUBBLE_TYPE_DETAILED && |
197 init_params->max_height < GetDetailedBubbleMaxHeight()) { | 196 init_params->max_height < GetDetailedBubbleMaxHeight()) { |
198 init_params->max_height = GetDetailedBubbleMaxHeight(); | 197 init_params->max_height = GetDetailedBubbleMaxHeight(); |
199 } else if (bubble_type_ == BUBBLE_TYPE_NOTIFICATION) { | |
200 init_params->close_on_deactivate = false; | |
201 } | 198 } |
202 | 199 |
203 bubble_view_ = TrayBubbleView::Create(anchor, tray_, init_params); | 200 bubble_view_ = TrayBubbleView::Create(anchor, tray_, init_params); |
204 UpdateBottomPadding(); | 201 UpdateBottomPadding(); |
205 bubble_view_->set_adjust_if_offscreen(false); | 202 bubble_view_->set_adjust_if_offscreen(false); |
206 CreateItemViews(login_status); | 203 CreateItemViews(login_status); |
207 | 204 |
208 if (bubble_view_->CanActivate()) { | 205 if (bubble_view_->CanActivate()) { |
209 bubble_view_->NotifyAccessibilityEvent(ui::AX_EVENT_ALERT, true); | 206 bubble_view_->NotifyAccessibilityEvent(ui::AX_EVENT_ALERT, true); |
210 } | 207 } |
(...skipping 19 matching lines...) Expand all Loading... |
230 void SystemTrayBubble::DestroyItemViews() { | 227 void SystemTrayBubble::DestroyItemViews() { |
231 for (std::vector<ash::SystemTrayItem*>::iterator it = items_.begin(); | 228 for (std::vector<ash::SystemTrayItem*>::iterator it = items_.begin(); |
232 it != items_.end(); ++it) { | 229 it != items_.end(); ++it) { |
233 switch (bubble_type_) { | 230 switch (bubble_type_) { |
234 case BUBBLE_TYPE_DEFAULT: | 231 case BUBBLE_TYPE_DEFAULT: |
235 (*it)->DestroyDefaultView(); | 232 (*it)->DestroyDefaultView(); |
236 break; | 233 break; |
237 case BUBBLE_TYPE_DETAILED: | 234 case BUBBLE_TYPE_DETAILED: |
238 (*it)->DestroyDetailedView(); | 235 (*it)->DestroyDetailedView(); |
239 break; | 236 break; |
240 case BUBBLE_TYPE_NOTIFICATION: | |
241 (*it)->DestroyNotificationView(); | |
242 break; | |
243 } | 237 } |
244 } | 238 } |
245 } | 239 } |
246 | 240 |
247 void SystemTrayBubble::BubbleViewDestroyed() { | 241 void SystemTrayBubble::BubbleViewDestroyed() { |
248 bubble_view_ = nullptr; | 242 bubble_view_ = nullptr; |
249 } | 243 } |
250 | 244 |
251 void SystemTrayBubble::StartAutoCloseTimer(int seconds) { | 245 void SystemTrayBubble::StartAutoCloseTimer(int seconds) { |
252 autoclose_.Stop(); | 246 autoclose_.Stop(); |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
333 views::View* item_view = nullptr; | 327 views::View* item_view = nullptr; |
334 switch (bubble_type_) { | 328 switch (bubble_type_) { |
335 case BUBBLE_TYPE_DEFAULT: | 329 case BUBBLE_TYPE_DEFAULT: |
336 item_view = items_[i]->CreateDefaultView(login_status); | 330 item_view = items_[i]->CreateDefaultView(login_status); |
337 if (items_[i]->restore_focus()) | 331 if (items_[i]->restore_focus()) |
338 focus_view = item_view; | 332 focus_view = item_view; |
339 break; | 333 break; |
340 case BUBBLE_TYPE_DETAILED: | 334 case BUBBLE_TYPE_DETAILED: |
341 item_view = items_[i]->CreateDetailedView(login_status); | 335 item_view = items_[i]->CreateDetailedView(login_status); |
342 break; | 336 break; |
343 case BUBBLE_TYPE_NOTIFICATION: | |
344 item_view = items_[i]->CreateNotificationView(login_status); | |
345 break; | |
346 } | 337 } |
347 if (item_view) { | 338 if (item_view) { |
348 TrayPopupItemContainer* tray_popup_item_container = | 339 TrayPopupItemContainer* tray_popup_item_container = |
349 new TrayPopupItemContainer( | 340 new TrayPopupItemContainer( |
350 item_view, | 341 item_view, |
351 is_default_bubble && | 342 is_default_bubble && |
352 !MaterialDesignController::IsSystemTrayMenuMaterial()); | 343 !MaterialDesignController::IsSystemTrayMenuMaterial()); |
353 bubble_view_->AddChildView(tray_popup_item_container); | 344 bubble_view_->AddChildView(tray_popup_item_container); |
354 item_containers.push_back(tray_popup_item_container); | 345 item_containers.push_back(tray_popup_item_container); |
355 tray_item_view_map_[items_[i]->uma_type()] = tray_popup_item_container; | 346 tray_item_view_map_[items_[i]->uma_type()] = tray_popup_item_container; |
(...skipping 13 matching lines...) Expand all Loading... |
369 } | 360 } |
370 } | 361 } |
371 | 362 |
372 if (focus_view) { | 363 if (focus_view) { |
373 tray_->ActivateBubble(); | 364 tray_->ActivateBubble(); |
374 focus_view->RequestFocus(); | 365 focus_view->RequestFocus(); |
375 } | 366 } |
376 } | 367 } |
377 | 368 |
378 } // namespace ash | 369 } // namespace ash |
OLD | NEW |