Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(189)

Side by Side Diff: chrome/browser/ui/toolbar/media_router_action.cc

Issue 1268553002: Reflect the current state in Media Router Action icon. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Changes per pkasting@'s comments. Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "chrome/browser/ui/toolbar/media_router_action.h" 5 #include "chrome/browser/ui/toolbar/media_router_action.h"
6 6
7 #include "base/strings/utf_string_conversions.h" 7 #include "base/strings/utf_string_conversions.h"
8 #include "chrome/browser/media/router/issue.h"
9 #include "chrome/browser/media/router/media_route.h"
10 #include "chrome/browser/media/router/media_router.h"
8 #include "chrome/browser/media/router/media_router_dialog_controller.h" 11 #include "chrome/browser/media/router/media_router_dialog_controller.h"
12 #include "chrome/browser/media/router/media_router_factory.h"
13 #include "chrome/browser/media/router/media_router_mojo_impl.h"
14 #include "chrome/browser/profiles/profile.h"
15 #include "chrome/browser/ui/browser.h"
9 #include "chrome/browser/ui/toolbar/media_router_action_platform_delegate.h" 16 #include "chrome/browser/ui/toolbar/media_router_action_platform_delegate.h"
10 #include "chrome/browser/ui/toolbar/toolbar_action_view_delegate.h" 17 #include "chrome/browser/ui/toolbar/toolbar_action_view_delegate.h"
11 #include "chrome/grit/generated_resources.h" 18 #include "chrome/grit/generated_resources.h"
12 #include "grit/theme_resources.h" 19 #include "grit/theme_resources.h"
13 #include "ui/base/l10n/l10n_util.h" 20 #include "ui/base/l10n/l10n_util.h"
14 #include "ui/base/resource/resource_bundle.h" 21 #include "ui/base/resource/resource_bundle.h"
15 #include "ui/gfx/image/image_skia.h" 22 #include "ui/gfx/image/image_skia.h"
16 23
17 using media_router::MediaRouterDialogController; 24 using media_router::MediaRouterDialogController;
18 25
19 MediaRouterAction::MediaRouterAction(Browser* browser) 26 MediaRouterAction::MediaRouterAction(Browser* browser)
20 : id_("media_router_action"), 27 : media_router::IssuesObserver(GetMediaRouter(browser)),
28 media_router::MediaRoutesObserver(GetMediaRouter(browser)),
29 id_("media_router_action"),
21 name_(l10n_util::GetStringUTF16(IDS_MEDIA_ROUTER_TITLE)), 30 name_(l10n_util::GetStringUTF16(IDS_MEDIA_ROUTER_TITLE)),
31 media_router_active_icon_(ui::ResourceBundle::GetSharedInstance().
32 GetImageNamed(IDR_MEDIA_ROUTER_ACTIVE_ICON)),
33 media_router_error_icon_(ui::ResourceBundle::GetSharedInstance().
34 GetImageNamed(IDR_MEDIA_ROUTER_ERROR_ICON)),
22 media_router_idle_icon_(ui::ResourceBundle::GetSharedInstance(). 35 media_router_idle_icon_(ui::ResourceBundle::GetSharedInstance().
23 GetImageNamed(IDR_MEDIA_ROUTER_IDLE_ICON)), 36 GetImageNamed(IDR_MEDIA_ROUTER_IDLE_ICON)),
37 media_router_warning_icon_(ui::ResourceBundle::GetSharedInstance().
38 GetImageNamed(IDR_MEDIA_ROUTER_WARNING_ICON)),
39 current_icon_(&media_router_idle_icon_),
40 issue_(nullptr),
41 has_local_routes_(false),
24 delegate_(nullptr), 42 delegate_(nullptr),
25 platform_delegate_(MediaRouterActionPlatformDelegate::Create(browser)), 43 platform_delegate_(MediaRouterActionPlatformDelegate::Create(browser)),
26 contextual_menu_(browser) { 44 contextual_menu_(browser) {
27 } 45 }
28 46
29 MediaRouterAction::~MediaRouterAction() { 47 MediaRouterAction::~MediaRouterAction() {
30 } 48 }
31 49
32 const std::string& MediaRouterAction::GetId() const { 50 const std::string& MediaRouterAction::GetId() const {
33 return id_; 51 return id_;
34 } 52 }
35 53
36 void MediaRouterAction::SetDelegate(ToolbarActionViewDelegate* delegate) { 54 void MediaRouterAction::SetDelegate(ToolbarActionViewDelegate* delegate) {
37 delegate_ = delegate; 55 delegate_ = delegate;
38 } 56 }
39 57
40 gfx::Image MediaRouterAction::GetIcon(content::WebContents* web_contents, 58 gfx::Image MediaRouterAction::GetIcon(content::WebContents* web_contents,
41 const gfx::Size& size) { 59 const gfx::Size& size) {
42 // TODO(apacible): Return icon based on casting state. 60 return *current_icon_;
43 return media_router_idle_icon_;
44 } 61 }
45 62
46 base::string16 MediaRouterAction::GetActionName() const { 63 base::string16 MediaRouterAction::GetActionName() const {
47 return name_; 64 return name_;
48 } 65 }
49 66
50 base::string16 MediaRouterAction::GetAccessibleName( 67 base::string16 MediaRouterAction::GetAccessibleName(
51 content::WebContents* web_contents) const { 68 content::WebContents* web_contents) const {
52 return GetTooltip(web_contents); 69 return GetTooltip(web_contents);
53 } 70 }
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 bool MediaRouterAction::ExecuteAction(bool by_user) { 108 bool MediaRouterAction::ExecuteAction(bool by_user) {
92 GetMediaRouterDialogController()->ShowMediaRouterDialog(); 109 GetMediaRouterDialogController()->ShowMediaRouterDialog();
93 if (platform_delegate_) 110 if (platform_delegate_)
94 platform_delegate_->CloseOverflowMenuIfOpen(); 111 platform_delegate_->CloseOverflowMenuIfOpen();
95 return true; 112 return true;
96 } 113 }
97 114
98 void MediaRouterAction::UpdateState() { 115 void MediaRouterAction::UpdateState() {
99 } 116 }
100 117
118 bool MediaRouterAction::DisabledClickOpensMenu() const {
119 return false;
120 }
121
122 void MediaRouterAction::OnIssueUpdated(const media_router::Issue* issue) {
123 issue_.reset(issue ? new media_router::Issue(*issue) : nullptr);
124
125 MaybeUpdateIcon();
126 }
127
128 void MediaRouterAction::OnRoutesUpdated(
129 const std::vector<media_router::MediaRoute>& routes) {
130 has_local_routes_ =
131 std::find_if(routes.begin(), routes.end(),
132 [](const media_router::MediaRoute& route) {
133 return route.is_local(); })
134 != routes.end();
135 MaybeUpdateIcon();
136 }
137
101 MediaRouterDialogController* 138 MediaRouterDialogController*
102 MediaRouterAction::GetMediaRouterDialogController() { 139 MediaRouterAction::GetMediaRouterDialogController() {
103 DCHECK(delegate_); 140 DCHECK(delegate_);
104 content::WebContents* web_contents = delegate_->GetCurrentWebContents(); 141 content::WebContents* web_contents = delegate_->GetCurrentWebContents();
105 DCHECK(web_contents); 142 DCHECK(web_contents);
106 return MediaRouterDialogController::GetOrCreateForWebContents(web_contents); 143 return MediaRouterDialogController::GetOrCreateForWebContents(web_contents);
107 } 144 }
108 145
109 bool MediaRouterAction::DisabledClickOpensMenu() const { 146 media_router::MediaRouter* MediaRouterAction::GetMediaRouter(Browser* browser) {
110 return false; 147 return media_router::MediaRouterFactory::GetApiForBrowserContext(
148 static_cast<content::BrowserContext*>(browser->profile()));
111 } 149 }
150
151 void MediaRouterAction::MaybeUpdateIcon() {
152 gfx::Image* new_icon = GetCurrentIcon();
153
154 // Update the current state if it has changed.
155 if (new_icon != current_icon_) {
156 current_icon_ = new_icon;
157
158 // Update the icon to reflect the new icon.
159 if (delegate_)
160 delegate_->UpdateState();
161 }
162 }
163
164 gfx::Image* MediaRouterAction::GetCurrentIcon() {
Kevin M 2015/08/05 20:20:27 Consider returning a const reference if this can't
apacible 2015/08/05 22:13:52 Done.
165 // Highest priority is to indicate whether there's an issue.
166 if (issue_) {
167 if (issue_->severity() == media_router::Issue::FATAL)
168 return &media_router_error_icon_;
169 if (issue_->severity() == media_router::Issue::WARNING)
170 return &media_router_warning_icon_;
171 }
172
173 return has_local_routes_ ?
174 &media_router_active_icon_ : &media_router_idle_icon_;
175 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698