Index: ash/common/accelerators/accelerator_controller.cc |
diff --git a/ash/common/accelerators/accelerator_controller.cc b/ash/common/accelerators/accelerator_controller.cc |
index aa8bcf0573b83f1d71afcfe1d39df6d2c34ccccb..2a58f7c9fd2c712e945000f2f1a8ebb2e35a1c7b 100644 |
--- a/ash/common/accelerators/accelerator_controller.cc |
+++ b/ash/common/accelerators/accelerator_controller.cc |
@@ -23,7 +23,6 @@ |
#include "ash/common/system/status_area_widget.h" |
#include "ash/common/system/tray/system_tray_delegate.h" |
#include "ash/common/system/tray/system_tray_notifier.h" |
-#include "ash/common/system/volume_control_delegate.h" |
#include "ash/common/system/web_notification/web_notification_tray.h" |
#include "ash/common/wm/mru_window_tracker.h" |
#include "ash/common/wm/overview/window_selector_controller.h" |
@@ -36,6 +35,7 @@ |
#include "ash/common/wm_window.h" |
#include "base/metrics/histogram_macros.h" |
#include "base/metrics/user_metrics.h" |
+#include "services/service_manager/public/cpp/connector.h" |
#include "ui/base/accelerators/accelerator.h" |
#include "ui/base/accelerators/accelerator_manager.h" |
#include "ui/keyboard/keyboard_controller.h" |
@@ -479,25 +479,31 @@ void HandleToggleSpokenFeedback() { |
A11Y_NOTIFICATION_SHOW); |
} |
-void HandleVolumeDown(const ui::Accelerator& accelerator) { |
- VolumeControlDelegate* volume_delegate = |
- WmShell::Get()->system_tray_delegate()->GetVolumeControlDelegate(); |
- if (volume_delegate) |
- volume_delegate->HandleVolumeDown(accelerator); |
+void HandleVolumeDown(mojom::VolumeController* volume_controller, |
+ const ui::Accelerator& accelerator) { |
+ if (accelerator.key_code() == ui::VKEY_VOLUME_DOWN) |
+ base::RecordAction(UserMetricsAction("Accel_VolumeDown_F9")); |
+ |
+ if (volume_controller) |
+ volume_controller->VolumeDown(); |
} |
-void HandleVolumeMute(const ui::Accelerator& accelerator) { |
- VolumeControlDelegate* volume_delegate = |
- WmShell::Get()->system_tray_delegate()->GetVolumeControlDelegate(); |
- if (volume_delegate) |
- volume_delegate->HandleVolumeMute(accelerator); |
+void HandleVolumeMute(mojom::VolumeController* volume_controller, |
+ const ui::Accelerator& accelerator) { |
+ if (accelerator.key_code() == ui::VKEY_VOLUME_MUTE) |
+ base::RecordAction(UserMetricsAction("Accel_VolumeMute_F8")); |
+ |
+ if (volume_controller) |
+ volume_controller->VolumeMute(); |
} |
-void HandleVolumeUp(const ui::Accelerator& accelerator) { |
- VolumeControlDelegate* volume_delegate = |
- WmShell::Get()->system_tray_delegate()->GetVolumeControlDelegate(); |
- if (volume_delegate) |
- volume_delegate->HandleVolumeUp(accelerator); |
+void HandleVolumeUp(mojom::VolumeController* volume_controller, |
+ const ui::Accelerator& accelerator) { |
+ if (accelerator.key_code() == ui::VKEY_VOLUME_UP) |
+ base::RecordAction(UserMetricsAction("Accel_VolumeUp_F10")); |
+ |
+ if (volume_controller) |
+ volume_controller->VolumeUp(); |
} |
#endif // defined(OS_CHROMEOS) |
@@ -1060,13 +1066,13 @@ void AcceleratorController::PerformAction(AcceleratorAction action, |
WmShell::Get()->system_tray_notifier()->NotifyRequestToggleWifi(); |
break; |
case VOLUME_DOWN: |
- HandleVolumeDown(accelerator); |
+ HandleVolumeDown(GetVolumeController(), accelerator); |
break; |
case VOLUME_MUTE: |
- HandleVolumeMute(accelerator); |
+ HandleVolumeMute(GetVolumeController(), accelerator); |
break; |
case VOLUME_UP: |
- HandleVolumeUp(accelerator); |
+ HandleVolumeUp(GetVolumeController(), accelerator); |
break; |
#else |
case DUMMY_FOR_RESERVED: |
@@ -1129,4 +1135,19 @@ AcceleratorController::GetAcceleratorProcessingRestriction(int action) { |
return RESTRICTION_NONE; |
} |
+mojom::VolumeController* AcceleratorController::GetVolumeController() { |
+ if (!volume_controller_ && WmShell::Get()->delegate()->GetShellConnector()) { |
+ WmShell::Get()->delegate()->GetShellConnector()->ConnectToInterface( |
+ "service:content_browser", &volume_controller_); |
+ volume_controller_.set_connection_error_handler( |
+ base::Bind(&AcceleratorController::OnVolumeControllerConnectionError, |
+ base::Unretained(this))); |
+ } |
+ return volume_controller_.get(); |
+} |
+ |
+void AcceleratorController::OnVolumeControllerConnectionError() { |
+ volume_controller_.reset(); |
+} |
+ |
} // namespace ash |