| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/cast/tray_cast.h" | 5 #include "ash/system/cast/tray_cast.h" |
| 6 | 6 |
| 7 #include "ash/session/session_state_delegate.h" | 7 #include "ash/session/session_state_delegate.h" |
| 8 #include "ash/shelf/shelf_types.h" | 8 #include "ash/shelf/shelf_types.h" |
| 9 #include "ash/shell.h" | 9 #include "ash/shell.h" |
| 10 #include "ash/system/chromeos/screen_security/screen_tray_item.h" | 10 #include "ash/system/chromeos/screen_security/screen_tray_item.h" |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 | 53 |
| 54 // Updates the label based on the current set of receivers (if there are or | 54 // Updates the label based on the current set of receivers (if there are or |
| 55 // are not any available receivers). | 55 // are not any available receivers). |
| 56 void UpdateLabel(); | 56 void UpdateLabel(); |
| 57 | 57 |
| 58 private: | 58 private: |
| 59 void UpdateLabelCallback( | 59 void UpdateLabelCallback( |
| 60 const CastConfigDelegate::ReceiversAndActivites& receivers_activities); | 60 const CastConfigDelegate::ReceiversAndActivites& receivers_activities); |
| 61 | 61 |
| 62 CastConfigDelegate* cast_config_delegate_; | 62 CastConfigDelegate* cast_config_delegate_; |
| 63 base::WeakPtrFactory<CastSelectDefaultView> weak_ptr_factory_; |
| 63 DISALLOW_COPY_AND_ASSIGN(CastSelectDefaultView); | 64 DISALLOW_COPY_AND_ASSIGN(CastSelectDefaultView); |
| 64 }; | 65 }; |
| 65 | 66 |
| 66 CastSelectDefaultView::CastSelectDefaultView( | 67 CastSelectDefaultView::CastSelectDefaultView( |
| 67 SystemTrayItem* owner, | 68 SystemTrayItem* owner, |
| 68 CastConfigDelegate* cast_config_delegate, | 69 CastConfigDelegate* cast_config_delegate, |
| 69 bool show_more) | 70 bool show_more) |
| 70 : TrayItemMore(owner, show_more), | 71 : TrayItemMore(owner, show_more), |
| 71 cast_config_delegate_(cast_config_delegate) { | 72 cast_config_delegate_(cast_config_delegate), |
| 73 weak_ptr_factory_(this) { |
| 72 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | 74 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
| 73 SetImage(rb.GetImageNamed(IDR_AURA_UBER_TRAY_CAST).ToImageSkia()); | 75 SetImage(rb.GetImageNamed(IDR_AURA_UBER_TRAY_CAST).ToImageSkia()); |
| 74 | 76 |
| 75 // We first set a default label before we actually know what the label will | 77 // We first set a default label before we actually know what the label will |
| 76 // be, because it could take awhile before UpdateLabel() actually applies | 78 // be, because it could take awhile before UpdateLabel() actually applies |
| 77 // the correct label. | 79 // the correct label. |
| 78 SetLabel(rb.GetLocalizedString(IDS_ASH_STATUS_TRAY_CAST_NO_DEVICE)); | 80 SetLabel(rb.GetLocalizedString(IDS_ASH_STATUS_TRAY_CAST_NO_DEVICE)); |
| 79 UpdateLabel(); | 81 UpdateLabel(); |
| 80 } | 82 } |
| 81 | 83 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 92 SetLabel(label); | 94 SetLabel(label); |
| 93 SetAccessibleName(label); | 95 SetAccessibleName(label); |
| 94 SetVisible(true); | 96 SetVisible(true); |
| 95 } | 97 } |
| 96 | 98 |
| 97 void CastSelectDefaultView::UpdateLabel() { | 99 void CastSelectDefaultView::UpdateLabel() { |
| 98 if (cast_config_delegate_ == nullptr || | 100 if (cast_config_delegate_ == nullptr || |
| 99 cast_config_delegate_->HasCastExtension() == false) | 101 cast_config_delegate_->HasCastExtension() == false) |
| 100 return; | 102 return; |
| 101 | 103 |
| 102 cast_config_delegate_->GetReceiversAndActivities(base::Bind( | 104 cast_config_delegate_->GetReceiversAndActivities( |
| 103 &CastSelectDefaultView::UpdateLabelCallback, base::Unretained(this))); | 105 base::Bind(&CastSelectDefaultView::UpdateLabelCallback, |
| 106 weak_ptr_factory_.GetWeakPtr())); |
| 104 } | 107 } |
| 105 | 108 |
| 106 // This view is displayed when the screen is actively being casted; it allows | 109 // This view is displayed when the screen is actively being casted; it allows |
| 107 // the user to easily stop casting. It fully replaces the | 110 // the user to easily stop casting. It fully replaces the |
| 108 // |CastSelectDefaultView| view inside of the |CastDuplexView|. | 111 // |CastSelectDefaultView| view inside of the |CastDuplexView|. |
| 109 class CastCastView : public views::View, public views::ButtonListener { | 112 class CastCastView : public views::View, public views::ButtonListener { |
| 110 public: | 113 public: |
| 111 explicit CastCastView(CastConfigDelegate* cast_config_delegate); | 114 explicit CastCastView(CastConfigDelegate* cast_config_delegate); |
| 112 ~CastCastView() override; | 115 ~CastCastView() override; |
| 113 | 116 |
| 114 // Updates the label for the stop view to include information about the | 117 // Updates the label for the stop view to include information about the |
| 115 // current device that is being casted. | 118 // current device that is being casted. |
| 116 void UpdateLabel(); | 119 void UpdateLabel(); |
| 117 | 120 |
| 118 private: | 121 private: |
| 119 void UpdateLabelCallback( | 122 void UpdateLabelCallback( |
| 120 const CastConfigDelegate::ReceiversAndActivites& receivers_activities); | 123 const CastConfigDelegate::ReceiversAndActivites& receivers_activities); |
| 121 | 124 |
| 122 // Overridden from views::View. | 125 // Overridden from views::View. |
| 123 void Layout() override; | 126 void Layout() override; |
| 124 // Overridden from views::ButtonListener | 127 // Overridden from views::ButtonListener |
| 125 void ButtonPressed(views::Button* sender, const ui::Event& event) override; | 128 void ButtonPressed(views::Button* sender, const ui::Event& event) override; |
| 126 | 129 |
| 127 CastConfigDelegate* cast_config_delegate_; | 130 CastConfigDelegate* cast_config_delegate_; |
| 128 views::ImageView* icon_; | 131 views::ImageView* icon_; |
| 129 views::View* label_container_; | 132 views::View* label_container_; |
| 130 views::Label* title_; | 133 views::Label* title_; |
| 131 views::Label* details_; | 134 views::Label* details_; |
| 132 TrayPopupLabelButton* stop_button_; | 135 TrayPopupLabelButton* stop_button_; |
| 136 base::WeakPtrFactory<CastCastView> weak_ptr_factory_; |
| 133 | 137 |
| 134 DISALLOW_COPY_AND_ASSIGN(CastCastView); | 138 DISALLOW_COPY_AND_ASSIGN(CastCastView); |
| 135 }; | 139 }; |
| 136 | 140 |
| 137 CastCastView::CastCastView(CastConfigDelegate* cast_config_delegate) | 141 CastCastView::CastCastView(CastConfigDelegate* cast_config_delegate) |
| 138 : cast_config_delegate_(cast_config_delegate) { | 142 : cast_config_delegate_(cast_config_delegate), weak_ptr_factory_(this) { |
| 139 // We will initialize the primary tray view which shows a stop button here. | 143 // We will initialize the primary tray view which shows a stop button here. |
| 140 | 144 |
| 141 set_background(views::Background::CreateSolidBackground(kBackgroundColor)); | 145 set_background(views::Background::CreateSolidBackground(kBackgroundColor)); |
| 142 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); | 146 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); |
| 143 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal, | 147 SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal, |
| 144 kTrayPopupPaddingHorizontal, 0, | 148 kTrayPopupPaddingHorizontal, 0, |
| 145 kTrayPopupPaddingBetweenItems)); | 149 kTrayPopupPaddingBetweenItems)); |
| 146 icon_ = new FixedSizedImageView(0, kTrayPopupItemHeight); | 150 icon_ = new FixedSizedImageView(0, kTrayPopupItemHeight); |
| 147 icon_->SetImage( | 151 icon_->SetImage( |
| 148 bundle.GetImageNamed(IDR_AURA_UBER_TRAY_CAST_ENABLED).ToImageSkia()); | 152 bundle.GetImageNamed(IDR_AURA_UBER_TRAY_CAST_ENABLED).ToImageSkia()); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 209 const int extra_height = | 213 const int extra_height = |
| 210 height() - label_container_->GetPreferredSize().height(); | 214 height() - label_container_->GetPreferredSize().height(); |
| 211 label_container_->SetY(extra_height / 2); | 215 label_container_->SetY(extra_height / 2); |
| 212 } | 216 } |
| 213 | 217 |
| 214 void CastCastView::UpdateLabel() { | 218 void CastCastView::UpdateLabel() { |
| 215 if (cast_config_delegate_ == nullptr || | 219 if (cast_config_delegate_ == nullptr || |
| 216 cast_config_delegate_->HasCastExtension() == false) | 220 cast_config_delegate_->HasCastExtension() == false) |
| 217 return; | 221 return; |
| 218 | 222 |
| 219 cast_config_delegate_->GetReceiversAndActivities( | 223 cast_config_delegate_->GetReceiversAndActivities(base::Bind( |
| 220 base::Bind(&CastCastView::UpdateLabelCallback, base::Unretained(this))); | 224 &CastCastView::UpdateLabelCallback, weak_ptr_factory_.GetWeakPtr())); |
| 221 } | 225 } |
| 222 | 226 |
| 223 void CastCastView::UpdateLabelCallback( | 227 void CastCastView::UpdateLabelCallback( |
| 224 const CastConfigDelegate::ReceiversAndActivites& receivers_activities) { | 228 const CastConfigDelegate::ReceiversAndActivites& receivers_activities) { |
| 225 for (auto& i : receivers_activities) { | 229 for (auto& i : receivers_activities) { |
| 226 const CastConfigDelegate::Receiver receiver = i.second.receiver; | 230 const CastConfigDelegate::Receiver receiver = i.second.receiver; |
| 227 const CastConfigDelegate::Activity activity = i.second.activity; | 231 const CastConfigDelegate::Activity activity = i.second.activity; |
| 228 if (!activity.id.empty()) { | 232 if (!activity.id.empty()) { |
| 229 // We want to display different labels inside of the title depending on | 233 // We want to display different labels inside of the title depending on |
| 230 // what we are actually casting - either the desktop, a tab, or a fallback | 234 // what we are actually casting - either the desktop, a tab, or a fallback |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 398 const CastConfigDelegate::ReceiverAndActivity& receiverActivity); | 402 const CastConfigDelegate::ReceiverAndActivity& receiverActivity); |
| 399 | 403 |
| 400 void AppendSettingsEntries(); | 404 void AppendSettingsEntries(); |
| 401 void AppendHeaderEntry(); | 405 void AppendHeaderEntry(); |
| 402 | 406 |
| 403 // Overridden from ViewClickListener. | 407 // Overridden from ViewClickListener. |
| 404 void OnViewClicked(views::View* sender) override; | 408 void OnViewClicked(views::View* sender) override; |
| 405 | 409 |
| 406 CastConfigDelegate* cast_config_delegate_; | 410 CastConfigDelegate* cast_config_delegate_; |
| 407 user::LoginStatus login_; | 411 user::LoginStatus login_; |
| 408 views::View* options_; | 412 views::View* options_ = nullptr; |
| 409 CastConfigDelegate::ReceiversAndActivites receivers_and_activities_; | 413 CastConfigDelegate::ReceiversAndActivites receivers_and_activities_; |
| 410 // A mapping from the view pointer to the associated activity id | 414 // A mapping from the view pointer to the associated activity id |
| 411 std::map<views::View*, std::string> receiver_activity_map_; | 415 std::map<views::View*, std::string> receiver_activity_map_; |
| 416 base::WeakPtrFactory<CastDetailedView> weak_ptr_factory_; |
| 412 | 417 |
| 413 DISALLOW_COPY_AND_ASSIGN(CastDetailedView); | 418 DISALLOW_COPY_AND_ASSIGN(CastDetailedView); |
| 414 }; | 419 }; |
| 415 | 420 |
| 416 CastDetailedView::CastDetailedView(SystemTrayItem* owner, | 421 CastDetailedView::CastDetailedView(SystemTrayItem* owner, |
| 417 CastConfigDelegate* cast_config_delegate, | 422 CastConfigDelegate* cast_config_delegate, |
| 418 user::LoginStatus login) | 423 user::LoginStatus login) |
| 419 : TrayDetailsView(owner), | 424 : TrayDetailsView(owner), |
| 420 cast_config_delegate_(cast_config_delegate), | 425 cast_config_delegate_(cast_config_delegate), |
| 421 login_(login), | 426 login_(login), |
| 422 options_(nullptr) { | 427 weak_ptr_factory_(this) { |
| 423 CreateItems(); | 428 CreateItems(); |
| 424 UpdateReceiverList(); | 429 UpdateReceiverList(); |
| 425 } | 430 } |
| 426 | 431 |
| 427 CastDetailedView::~CastDetailedView() { | 432 CastDetailedView::~CastDetailedView() { |
| 428 } | 433 } |
| 429 | 434 |
| 430 void CastDetailedView::CreateItems() { | 435 void CastDetailedView::CreateItems() { |
| 431 CreateScrollableList(); | 436 CreateScrollableList(); |
| 432 AppendSettingsEntries(); | 437 AppendSettingsEntries(); |
| 433 AppendHeaderEntry(); | 438 AppendHeaderEntry(); |
| 434 } | 439 } |
| 435 | 440 |
| 436 void CastDetailedView::UpdateReceiverList() { | 441 void CastDetailedView::UpdateReceiverList() { |
| 437 cast_config_delegate_->GetReceiversAndActivities(base::Bind( | 442 cast_config_delegate_->GetReceiversAndActivities( |
| 438 &CastDetailedView::UpdateReceiverListCallback, base::Unretained(this))); | 443 base::Bind(&CastDetailedView::UpdateReceiverListCallback, |
| 444 weak_ptr_factory_.GetWeakPtr())); |
| 439 } | 445 } |
| 440 | 446 |
| 441 void CastDetailedView::UpdateReceiverListCallback( | 447 void CastDetailedView::UpdateReceiverListCallback( |
| 442 const CastConfigDelegate::ReceiversAndActivites& | 448 const CastConfigDelegate::ReceiversAndActivites& |
| 443 new_receivers_and_activities) { | 449 new_receivers_and_activities) { |
| 444 // Add/update existing. | 450 // Add/update existing. |
| 445 for (auto i = new_receivers_and_activities.begin(); | 451 for (auto i = new_receivers_and_activities.begin(); |
| 446 i != new_receivers_and_activities.end(); ++i) { | 452 i != new_receivers_and_activities.end(); ++i) { |
| 447 receivers_and_activities_[i->first] = i->second; | 453 receivers_and_activities_[i->first] = i->second; |
| 448 } | 454 } |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 615 is_casting_ = started; | 621 is_casting_ = started; |
| 616 UpdatePrimaryView(); | 622 UpdatePrimaryView(); |
| 617 } | 623 } |
| 618 | 624 |
| 619 void TrayCast::UpdateAfterShelfAlignmentChange(ShelfAlignment alignment) { | 625 void TrayCast::UpdateAfterShelfAlignmentChange(ShelfAlignment alignment) { |
| 620 if (tray_) | 626 if (tray_) |
| 621 tray_->UpdateAlignment(alignment); | 627 tray_->UpdateAlignment(alignment); |
| 622 } | 628 } |
| 623 | 629 |
| 624 } // namespace ash | 630 } // namespace ash |
| OLD | NEW |