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

Unified 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: Fix tests (lsan). 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/toolbar/media_router_action.cc
diff --git a/chrome/browser/ui/toolbar/media_router_action.cc b/chrome/browser/ui/toolbar/media_router_action.cc
index cc9425e2e29181180028cb4d9f5b94a518816b76..cdfa0ae4332f52ecbd3896b00414eba81a706c43 100644
--- a/chrome/browser/ui/toolbar/media_router_action.cc
+++ b/chrome/browser/ui/toolbar/media_router_action.cc
@@ -5,7 +5,14 @@
#include "chrome/browser/ui/toolbar/media_router_action.h"
#include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/media/router/issue.h"
+#include "chrome/browser/media/router/media_route.h"
+#include "chrome/browser/media/router/media_router.h"
#include "chrome/browser/media/router/media_router_dialog_controller.h"
+#include "chrome/browser/media/router/media_router_factory.h"
+#include "chrome/browser/media/router/media_router_mojo_impl.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/toolbar/media_router_action_platform_delegate.h"
#include "chrome/browser/ui/toolbar/toolbar_action_view_delegate.h"
#include "chrome/grit/generated_resources.h"
@@ -17,10 +24,20 @@
using media_router::MediaRouterDialogController;
MediaRouterAction::MediaRouterAction(Browser* browser)
- : id_("media_router_action"),
+ : media_router::IssuesObserver(GetMediaRouter(browser)),
+ media_router::MediaRoutesObserver(GetMediaRouter(browser)),
+ id_("media_router_action"),
name_(l10n_util::GetStringUTF16(IDS_MEDIA_ROUTER_TITLE)),
+ media_router_active_icon_(ui::ResourceBundle::GetSharedInstance().
+ GetImageNamed(IDR_MEDIA_ROUTER_ACTIVE_ICON)),
+ media_router_error_icon_(ui::ResourceBundle::GetSharedInstance().
+ GetImageNamed(IDR_MEDIA_ROUTER_ERROR_ICON)),
media_router_idle_icon_(ui::ResourceBundle::GetSharedInstance().
GetImageNamed(IDR_MEDIA_ROUTER_IDLE_ICON)),
+ media_router_warning_icon_(ui::ResourceBundle::GetSharedInstance().
+ GetImageNamed(IDR_MEDIA_ROUTER_WARNING_ICON)),
+ current_icon_(&media_router_idle_icon_),
+ has_local_route_(false),
delegate_(nullptr),
platform_delegate_(MediaRouterActionPlatformDelegate::Create(browser)),
contextual_menu_(browser) {
@@ -39,8 +56,7 @@ void MediaRouterAction::SetDelegate(ToolbarActionViewDelegate* delegate) {
gfx::Image MediaRouterAction::GetIcon(content::WebContents* web_contents,
const gfx::Size& size) {
- // TODO(apacible): Return icon based on casting state.
- return media_router_idle_icon_;
+ return *current_icon_;
}
base::string16 MediaRouterAction::GetActionName() const {
@@ -98,6 +114,26 @@ bool MediaRouterAction::ExecuteAction(bool by_user) {
void MediaRouterAction::UpdateState() {
}
+bool MediaRouterAction::DisabledClickOpensMenu() const {
+ return false;
+}
+
+void MediaRouterAction::OnIssueUpdated(const media_router::Issue* issue) {
+ issue_.reset(issue ? new media_router::Issue(*issue) : nullptr);
+
+ MaybeUpdateIcon();
+}
+
+void MediaRouterAction::OnRoutesUpdated(
+ const std::vector<media_router::MediaRoute>& routes) {
+ has_local_route_ =
+ std::find_if(routes.begin(), routes.end(),
+ [](const media_router::MediaRoute& route) {
+ return route.is_local(); }) !=
+ routes.end();
+ MaybeUpdateIcon();
+}
+
MediaRouterDialogController*
MediaRouterAction::GetMediaRouterDialogController() {
DCHECK(delegate_);
@@ -106,6 +142,34 @@ MediaRouterAction::GetMediaRouterDialogController() {
return MediaRouterDialogController::GetOrCreateForWebContents(web_contents);
}
-bool MediaRouterAction::DisabledClickOpensMenu() const {
- return false;
+media_router::MediaRouter* MediaRouterAction::GetMediaRouter(Browser* browser) {
+ return media_router::MediaRouterFactory::GetApiForBrowserContext(
+ static_cast<content::BrowserContext*>(browser->profile()));
+}
+
+void MediaRouterAction::MaybeUpdateIcon() {
+ const gfx::Image* new_icon = GetCurrentIcon();
+
+ // Update the current state if it has changed.
+ if (new_icon != current_icon_) {
+ current_icon_ = new_icon;
+
+ // Tell the associated view to update its icon to reflect the change made
+ // above.
+ if (delegate_)
+ delegate_->UpdateState();
+ }
+}
+
+const gfx::Image* MediaRouterAction::GetCurrentIcon() const {
+ // Highest priority is to indicate whether there's an issue.
+ if (issue_) {
+ if (issue_->severity() == media_router::Issue::FATAL)
+ return &media_router_error_icon_;
+ if (issue_->severity() == media_router::Issue::WARNING)
+ return &media_router_warning_icon_;
+ }
+
+ return has_local_route_ ?
+ &media_router_active_icon_ : &media_router_idle_icon_;
}
« no previous file with comments | « chrome/browser/ui/toolbar/media_router_action.h ('k') | chrome/browser/ui/toolbar/media_router_action_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698