Commit ffaf6d76 authored by Ryan Cui's avatar Ryan Cui Committed by Commit Bot

Add support for bluetooth actions

Bug: b/78189672
Change-Id: Id8716cca1f4cf15a5700a0a4afa822302a829662
Reviewed-on: https://chromium-review.googlesource.com/1142623
Commit-Queue: Ryan Cui <rcui@chromium.org>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Reviewed-by: default avatarSteven Bennetts <stevenjb@chromium.org>
Reviewed-by: default avatarXiaohui Chen <xiaohuic@chromium.org>
Cr-Commit-Position: refs/heads/master@{#577218}
parent fbeda76c
......@@ -3,7 +3,13 @@
// found in the LICENSE file.
#include "chrome/browser/ui/ash/assistant/device_actions.h"
#include "ash/public/cpp/ash_pref_names.h"
#include "chrome/browser/chromeos/profiles/profile_helper.h"
#include "chrome/browser/profiles/profile.h"
#include "chromeos/network/network_state_handler.h"
#include "components/prefs/pref_service.h"
#include "components/user_manager/user_manager.h"
using chromeos::NetworkHandler;
using chromeos::NetworkStateHandler;
......@@ -18,3 +24,14 @@ void DeviceActions::SetWifiEnabled(bool enabled) {
NetworkTypePattern::WiFi(), enabled,
chromeos::network_handler::ErrorCallback());
}
void DeviceActions::SetBluetoothEnabled(bool enabled) {
const user_manager::User* const user =
user_manager::UserManager::Get()->GetActiveUser();
Profile* profile = chromeos::ProfileHelper::Get()->GetProfileByUser(user);
DCHECK(profile);
// Simply toggle the user pref, which is being observed by ash's bluetooth
// power controller.
profile->GetPrefs()->SetBoolean(ash::prefs::kUserBluetoothAdapterEnabled,
enabled);
}
......@@ -14,7 +14,8 @@ class DeviceActions : public chromeos::assistant::mojom::DeviceActions {
~DeviceActions() override;
// mojom::DeviceActions overrides:
void SetWifiEnabled(bool enable) override;
void SetWifiEnabled(bool enabled) override;
void SetBluetoothEnabled(bool enabled) override;
private:
DISALLOW_COPY_AND_ASSIGN(DeviceActions);
......
......@@ -380,32 +380,44 @@ void AssistantManagerServiceImpl::OnSpeechLevelUpdated(
weak_factory_.GetWeakPtr(), speech_level));
}
void HandleOnOffChange(api::client_op::ModifySettingArgs modify_setting_args,
std::function<void(bool)> on_off_handler) {
switch (modify_setting_args.change()) {
case api::client_op::ModifySettingArgs_Change_ON:
on_off_handler(true);
return;
case api::client_op::ModifySettingArgs_Change_OFF:
on_off_handler(false);
return;
case api::client_op::ModifySettingArgs_Change_TOGGLE:
case api::client_op::ModifySettingArgs_Change_INCREASE:
case api::client_op::ModifySettingArgs_Change_DECREASE:
case api::client_op::ModifySettingArgs_Change_SET:
case api::client_op::ModifySettingArgs_Change_UNSPECIFIED:
break;
}
DLOG(ERROR) << "Unsupported change operation: "
<< modify_setting_args.change() << " for setting "
<< modify_setting_args.setting_id();
}
void AssistantManagerServiceImpl::OnModifySettingsAction(
const std::string& modify_setting_args_proto) {
api::client_op::ModifySettingArgs modify_setting_args;
modify_setting_args.ParseFromString(modify_setting_args_proto);
DCHECK(IsSettingSupported(modify_setting_args.setting_id()));
// TODO(rcui): Add support for bluetooth, etc.
if (modify_setting_args.setting_id() == kWiFiDeviceSettingId) {
switch (modify_setting_args.change()) {
case api::client_op::ModifySettingArgs_Change_ON:
service_->device_actions()->SetWifiEnabled(true);
return;
case api::client_op::ModifySettingArgs_Change_OFF:
service_->device_actions()->SetWifiEnabled(false);
return;
case api::client_op::ModifySettingArgs_Change_TOGGLE:
case api::client_op::ModifySettingArgs_Change_INCREASE:
case api::client_op::ModifySettingArgs_Change_DECREASE:
case api::client_op::ModifySettingArgs_Change_SET:
case api::client_op::ModifySettingArgs_Change_UNSPECIFIED:
break;
}
DLOG(ERROR) << "Unsupported change operation: "
<< modify_setting_args.change() << " for setting "
<< modify_setting_args.setting_id();
HandleOnOffChange(modify_setting_args, [this](bool enabled) {
this->service_->device_actions()->SetWifiEnabled(enabled);
});
}
if (modify_setting_args.setting_id() == kBluetoothDeviceSettingId) {
HandleOnOffChange(modify_setting_args, [this](bool enabled) {
this->service_->device_actions()->SetBluetoothEnabled(enabled);
});
}
}
......
......@@ -154,6 +154,9 @@ interface AudioInputObserver {
interface DeviceActions {
// Enables or disables WiFi.
SetWifiEnabled(bool enabled);
// Enables or disables Bluetooth.
SetBluetoothEnabled(bool enabled);
};
// Enumeration of possible completions for an Assistant interaction.
......
......@@ -155,6 +155,7 @@ class FakeDeviceActions : mojom::DeviceActions {
private:
// mojom::DeviceActions:
void SetWifiEnabled(bool enabled) override {}
void SetBluetoothEnabled(bool enabled) override {}
mojo::Binding<mojom::DeviceActions> binding_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment