| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/chromeos/screen_security/screen_tray_item.h" | 5 #include "ash/system/chromeos/screen_security/screen_tray_item.h" |
| 6 | 6 |
| 7 #include "ash/common/shelf/wm_shelf_util.h" | 7 #include "ash/common/shelf/wm_shelf_util.h" |
| 8 #include "ash/common/system/tray/fixed_sized_image_view.h" | 8 #include "ash/common/system/tray/fixed_sized_image_view.h" |
| 9 #include "ash/common/system/tray/tray_constants.h" | 9 #include "ash/common/system/tray/tray_constants.h" |
| 10 #include "ash/shelf/shelf_util.h" | 10 #include "ash/shelf/shelf_util.h" |
| 11 #include "ui/base/resource/resource_bundle.h" | 11 #include "ui/base/resource/resource_bundle.h" |
| 12 #include "ui/message_center/message_center.h" | 12 #include "ui/message_center/message_center.h" |
| 13 #include "ui/views/controls/label.h" | 13 #include "ui/views/controls/label.h" |
| 14 #include "ui/views/layout/box_layout.h" | 14 #include "ui/views/layout/box_layout.h" |
| 15 | 15 |
| 16 namespace { | 16 namespace { |
| 17 const int kStopButtonRightPadding = 18; | 17 const int kStopButtonRightPadding = 18; |
| 18 } // namespace | 18 } // namespace |
| 19 | 19 |
| 20 namespace ash { | 20 namespace ash { |
| 21 namespace tray { | 21 namespace tray { |
| 22 | 22 |
| 23 // ScreenTrayView implementations. | 23 // ScreenTrayView implementations. |
| 24 ScreenTrayView::ScreenTrayView(ScreenTrayItem* screen_tray_item, int icon_id) | 24 ScreenTrayView::ScreenTrayView(ScreenTrayItem* screen_tray_item, int icon_id) |
| 25 : TrayItemView(screen_tray_item), | 25 : TrayItemView(screen_tray_item), screen_tray_item_(screen_tray_item) { |
| 26 screen_tray_item_(screen_tray_item) { | |
| 27 CreateImageView(); | 26 CreateImageView(); |
| 28 image_view()->SetImage(ui::ResourceBundle::GetSharedInstance() | 27 image_view()->SetImage(ui::ResourceBundle::GetSharedInstance() |
| 29 .GetImageNamed(icon_id).ToImageSkia()); | 28 .GetImageNamed(icon_id) |
| 29 .ToImageSkia()); |
| 30 | 30 |
| 31 Update(); | 31 Update(); |
| 32 } | 32 } |
| 33 | 33 |
| 34 ScreenTrayView::~ScreenTrayView() { | 34 ScreenTrayView::~ScreenTrayView() {} |
| 35 } | |
| 36 | 35 |
| 37 void ScreenTrayView::Update() { | 36 void ScreenTrayView::Update() { |
| 38 SetVisible(screen_tray_item_->is_started()); | 37 SetVisible(screen_tray_item_->is_started()); |
| 39 } | 38 } |
| 40 | 39 |
| 41 | |
| 42 // ScreenStatusView implementations. | 40 // ScreenStatusView implementations. |
| 43 ScreenStatusView::ScreenStatusView(ScreenTrayItem* screen_tray_item, | 41 ScreenStatusView::ScreenStatusView(ScreenTrayItem* screen_tray_item, |
| 44 int icon_id, | 42 int icon_id, |
| 45 const base::string16& label_text, | 43 const base::string16& label_text, |
| 46 const base::string16& stop_button_text) | 44 const base::string16& stop_button_text) |
| 47 : screen_tray_item_(screen_tray_item), | 45 : screen_tray_item_(screen_tray_item), |
| 48 icon_(NULL), | 46 icon_(NULL), |
| 49 label_(NULL), | 47 label_(NULL), |
| 50 stop_button_(NULL), | 48 stop_button_(NULL), |
| 51 icon_id_(icon_id), | 49 icon_id_(icon_id), |
| 52 label_text_(label_text), | 50 label_text_(label_text), |
| 53 stop_button_text_(stop_button_text) { | 51 stop_button_text_(stop_button_text) { |
| 54 CreateItems(); | 52 CreateItems(); |
| 55 Update(); | 53 Update(); |
| 56 } | 54 } |
| 57 | 55 |
| 58 ScreenStatusView::~ScreenStatusView() { | 56 ScreenStatusView::~ScreenStatusView() {} |
| 59 } | |
| 60 | 57 |
| 61 void ScreenStatusView::Layout() { | 58 void ScreenStatusView::Layout() { |
| 62 views::View::Layout(); | 59 views::View::Layout(); |
| 63 | 60 |
| 64 // Give the stop button the space it requests. | 61 // Give the stop button the space it requests. |
| 65 gfx::Size stop_size = stop_button_->GetPreferredSize(); | 62 gfx::Size stop_size = stop_button_->GetPreferredSize(); |
| 66 gfx::Rect stop_bounds(stop_size); | 63 gfx::Rect stop_bounds(stop_size); |
| 67 stop_bounds.set_x(width() - stop_size.width() - kStopButtonRightPadding); | 64 stop_bounds.set_x(width() - stop_size.width() - kStopButtonRightPadding); |
| 68 stop_bounds.set_y((height() - stop_size.height()) / 2); | 65 stop_bounds.set_y((height() - stop_size.height()) / 2); |
| 69 stop_button_->SetBoundsRect(stop_bounds); | 66 stop_button_->SetBoundsRect(stop_bounds); |
| 70 | 67 |
| 71 // Adjust the label's bounds in case it got cut off by |stop_button_|. | 68 // Adjust the label's bounds in case it got cut off by |stop_button_|. |
| 72 if (label_->bounds().Intersects(stop_button_->bounds())) { | 69 if (label_->bounds().Intersects(stop_button_->bounds())) { |
| 73 gfx::Rect label_bounds = label_->bounds(); | 70 gfx::Rect label_bounds = label_->bounds(); |
| 74 label_bounds.set_width( | 71 label_bounds.set_width(stop_button_->x() - kTrayPopupPaddingBetweenItems - |
| 75 stop_button_->x() - kTrayPopupPaddingBetweenItems - label_->x()); | 72 label_->x()); |
| 76 label_->SetBoundsRect(label_bounds); | 73 label_->SetBoundsRect(label_bounds); |
| 77 } | 74 } |
| 78 } | 75 } |
| 79 | 76 |
| 80 void ScreenStatusView::ButtonPressed( | 77 void ScreenStatusView::ButtonPressed(views::Button* sender, |
| 81 views::Button* sender, | 78 const ui::Event& event) { |
| 82 const ui::Event& event) { | |
| 83 DCHECK(sender == stop_button_); | 79 DCHECK(sender == stop_button_); |
| 84 screen_tray_item_->Stop(); | 80 screen_tray_item_->Stop(); |
| 85 } | 81 } |
| 86 | 82 |
| 87 void ScreenStatusView::CreateItems() { | 83 void ScreenStatusView::CreateItems() { |
| 88 set_background(views::Background::CreateSolidBackground(kBackgroundColor)); | 84 set_background(views::Background::CreateSolidBackground(kBackgroundColor)); |
| 89 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); | 85 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); |
| 90 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal, | 86 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal, |
| 91 kTrayPopupPaddingHorizontal, | 87 kTrayPopupPaddingHorizontal, 0, |
| 92 0, | |
| 93 kTrayPopupPaddingBetweenItems)); | 88 kTrayPopupPaddingBetweenItems)); |
| 94 icon_ = new FixedSizedImageView(0, kTrayPopupItemHeight); | 89 icon_ = new FixedSizedImageView(0, kTrayPopupItemHeight); |
| 95 icon_->SetImage(bundle.GetImageNamed(icon_id_).ToImageSkia()); | 90 icon_->SetImage(bundle.GetImageNamed(icon_id_).ToImageSkia()); |
| 96 AddChildView(icon_); | 91 AddChildView(icon_); |
| 97 label_ = new views::Label; | 92 label_ = new views::Label; |
| 98 label_->SetHorizontalAlignment(gfx::ALIGN_LEFT); | 93 label_->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
| 99 label_->SetMultiLine(true); | 94 label_->SetMultiLine(true); |
| 100 label_->SetText(label_text_); | 95 label_->SetText(label_text_); |
| 101 AddChildView(label_); | 96 AddChildView(label_); |
| 102 | 97 |
| 103 stop_button_ = new TrayPopupLabelButton(this, stop_button_text_); | 98 stop_button_ = new TrayPopupLabelButton(this, stop_button_text_); |
| 104 AddChildView(stop_button_); | 99 AddChildView(stop_button_); |
| 105 } | 100 } |
| 106 | 101 |
| 107 void ScreenStatusView::Update() { | 102 void ScreenStatusView::Update() { |
| 108 // Hide the notification bubble when the ash tray bubble opens. | 103 // Hide the notification bubble when the ash tray bubble opens. |
| 109 screen_tray_item_->HideNotificationView(); | 104 screen_tray_item_->HideNotificationView(); |
| 110 SetVisible(screen_tray_item_->is_started()); | 105 SetVisible(screen_tray_item_->is_started()); |
| 111 } | 106 } |
| 112 | 107 |
| 113 ScreenNotificationDelegate::ScreenNotificationDelegate( | 108 ScreenNotificationDelegate::ScreenNotificationDelegate( |
| 114 ScreenTrayItem* screen_tray) | 109 ScreenTrayItem* screen_tray) |
| 115 : screen_tray_(screen_tray) { | 110 : screen_tray_(screen_tray) {} |
| 116 } | |
| 117 | 111 |
| 118 ScreenNotificationDelegate::~ScreenNotificationDelegate() { | 112 ScreenNotificationDelegate::~ScreenNotificationDelegate() {} |
| 119 } | |
| 120 | 113 |
| 121 void ScreenNotificationDelegate::ButtonClick(int button_index) { | 114 void ScreenNotificationDelegate::ButtonClick(int button_index) { |
| 122 DCHECK_EQ(0, button_index); | 115 DCHECK_EQ(0, button_index); |
| 123 screen_tray_->Stop(); | 116 screen_tray_->Stop(); |
| 124 } | 117 } |
| 125 | 118 |
| 126 } // namespace tray | 119 } // namespace tray |
| 127 | 120 |
| 128 ScreenTrayItem::ScreenTrayItem(SystemTray* system_tray) | 121 ScreenTrayItem::ScreenTrayItem(SystemTray* system_tray) |
| 129 : SystemTrayItem(system_tray), | 122 : SystemTrayItem(system_tray), |
| 130 tray_view_(NULL), | 123 tray_view_(NULL), |
| 131 default_view_(NULL), | 124 default_view_(NULL), |
| 132 is_started_(false), | 125 is_started_(false), |
| 133 stop_callback_(base::Bind(&base::DoNothing)) { | 126 stop_callback_(base::Bind(&base::DoNothing)) {} |
| 134 } | |
| 135 | 127 |
| 136 ScreenTrayItem::~ScreenTrayItem() {} | 128 ScreenTrayItem::~ScreenTrayItem() {} |
| 137 | 129 |
| 138 void ScreenTrayItem::Update() { | 130 void ScreenTrayItem::Update() { |
| 139 if (tray_view_) | 131 if (tray_view_) |
| 140 tray_view_->Update(); | 132 tray_view_->Update(); |
| 141 if (default_view_) | 133 if (default_view_) |
| 142 default_view_->Update(); | 134 default_view_->Update(); |
| 143 if (is_started_) { | 135 if (is_started_) { |
| 144 CreateOrUpdateNotification(); | 136 CreateOrUpdateNotification(); |
| 145 } else { | 137 } else { |
| 146 message_center::MessageCenter::Get()->RemoveNotification( | 138 message_center::MessageCenter::Get()->RemoveNotification( |
| 147 GetNotificationId(), false /* by_user */); | 139 GetNotificationId(), false /* by_user */); |
| 148 } | 140 } |
| 149 } | 141 } |
| 150 | 142 |
| 151 void ScreenTrayItem::Start(const base::Closure& stop_callback) { | 143 void ScreenTrayItem::Start(const base::Closure& stop_callback) { |
| 152 stop_callback_ = stop_callback; | 144 stop_callback_ = stop_callback; |
| 153 is_started_ = true; | 145 is_started_ = true; |
| 154 | 146 |
| 155 if (tray_view_) | 147 if (tray_view_) |
| 156 tray_view_->Update(); | 148 tray_view_->Update(); |
| 157 | 149 |
| 158 if (default_view_) | 150 if (default_view_) |
| 159 default_view_->Update(); | 151 default_view_->Update(); |
| 160 | 152 |
| 161 if (!system_tray()->HasSystemBubbleType( | 153 if (!system_tray()->HasSystemBubbleType( |
| 162 SystemTrayBubble::BUBBLE_TYPE_DEFAULT)) { | 154 SystemTrayBubble::BUBBLE_TYPE_DEFAULT)) { |
| 163 CreateOrUpdateNotification(); | 155 CreateOrUpdateNotification(); |
| 164 } | 156 } |
| 165 } | 157 } |
| 166 | 158 |
| 167 void ScreenTrayItem::Stop() { | 159 void ScreenTrayItem::Stop() { |
| 168 is_started_ = false; | 160 is_started_ = false; |
| 169 Update(); | 161 Update(); |
| 170 | 162 |
| 171 if (stop_callback_.is_null()) | 163 if (stop_callback_.is_null()) |
| 172 return; | 164 return; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 190 | 182 |
| 191 // Center the item dependent on the orientation of the shelf. | 183 // Center the item dependent on the orientation of the shelf. |
| 192 views::BoxLayout::Orientation layout = IsHorizontalAlignment(alignment) | 184 views::BoxLayout::Orientation layout = IsHorizontalAlignment(alignment) |
| 193 ? views::BoxLayout::kHorizontal | 185 ? views::BoxLayout::kHorizontal |
| 194 : views::BoxLayout::kVertical; | 186 : views::BoxLayout::kVertical; |
| 195 tray_view_->SetLayoutManager(new views::BoxLayout(layout, 0, 0, 0)); | 187 tray_view_->SetLayoutManager(new views::BoxLayout(layout, 0, 0, 0)); |
| 196 tray_view_->Layout(); | 188 tray_view_->Layout(); |
| 197 } | 189 } |
| 198 | 190 |
| 199 } // namespace ash | 191 } // namespace ash |
| OLD | NEW |