| Index: ash/system/audio/tray_audio.cc
|
| diff --git a/ash/system/audio/tray_audio.cc b/ash/system/audio/tray_audio.cc
|
| index a3b32ca96a822b0a1d33de7e9fb6b443055391d9..a95d163006e2365ea1f0dca7c137fd1094712baa 100644
|
| --- a/ash/system/audio/tray_audio.cc
|
| +++ b/ash/system/audio/tray_audio.cc
|
| @@ -7,6 +7,7 @@
|
| #include <cmath>
|
|
|
| #include "ash/ash_constants.h"
|
| +#include "ash/display/display_manager.h"
|
| #include "ash/metrics/user_metrics_recorder.h"
|
| #include "ash/shell.h"
|
| #include "ash/system/audio/tray_audio_delegate.h"
|
| @@ -26,6 +27,7 @@
|
| #include "third_party/skia/include/core/SkRect.h"
|
| #include "third_party/skia/include/effects/SkGradientShader.h"
|
| #include "ui/gfx/canvas.h"
|
| +#include "ui/gfx/display.h"
|
| #include "ui/gfx/font_list.h"
|
| #include "ui/gfx/image/image.h"
|
| #include "ui/gfx/image/image_skia_operations.h"
|
| @@ -45,9 +47,11 @@ TrayAudio::TrayAudio(SystemTray* system_tray,
|
| volume_view_(NULL),
|
| pop_up_volume_view_(false) {
|
| Shell::GetInstance()->system_tray_notifier()->AddAudioObserver(this);
|
| + Shell::GetScreen()->AddObserver(this);
|
| }
|
|
|
| TrayAudio::~TrayAudio() {
|
| + Shell::GetScreen()->RemoveObserver(this);
|
| Shell::GetInstance()->system_tray_notifier()->RemoveAudioObserver(this);
|
| }
|
|
|
| @@ -127,12 +131,46 @@ void TrayAudio::OnAudioNodesChanged() {
|
|
|
| void TrayAudio::OnActiveOutputNodeChanged() {
|
| Update();
|
| + ChangeAudioChannelMode();
|
| }
|
|
|
| void TrayAudio::OnActiveInputNodeChanged() {
|
| Update();
|
| }
|
|
|
| +void TrayAudio::OnDisplayAdded(const gfx::Display& new_display) {
|
| +}
|
| +
|
| +void TrayAudio::OnDisplayRemoved(const gfx::Display& old_display) {
|
| + if (old_display.id() != gfx::Display::InternalDisplayId())
|
| + return;
|
| + ChangeAudioChannelMode();
|
| +}
|
| +
|
| +void TrayAudio::OnDisplayMetricsChanged(const gfx::Display& display,
|
| + uint32_t changed_metrics) {
|
| + if (display.id() != gfx::Display::InternalDisplayId())
|
| + return;
|
| +
|
| + if (changed_metrics & gfx::DisplayObserver::DISPLAY_METRIC_ROTATION)
|
| + ChangeAudioChannelMode();
|
| +}
|
| +
|
| +void TrayAudio::ChangeAudioChannelMode() {
|
| + // Swap left/right channel only if it is in Yoga mode.
|
| + system::TrayAudioDelegate::AudioChannelMode channel_mode =
|
| + system::TrayAudioDelegate::NORMAL;
|
| + if (gfx::Display::InternalDisplayId() != gfx::Display::kInvalidDisplayID) {
|
| + const DisplayInfo& display_info =
|
| + Shell::GetInstance()->display_manager()->GetDisplayInfo(
|
| + gfx::Display::InternalDisplayId());
|
| + if (display_info.rotation() == gfx::Display::ROTATE_180)
|
| + channel_mode = system::TrayAudioDelegate::LEFT_RIGHT_SWAPPED;
|
| + }
|
| +
|
| + audio_delegate_->SetAudioChannelMode(channel_mode);
|
| +}
|
| +
|
| void TrayAudio::Update() {
|
| if (tray_view())
|
| tray_view()->SetVisible(GetInitialVisibility());
|
|
|