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

Side by Side Diff: chromeos/audio/audio_devices_pref_handler_impl.cc

Issue 1380103003: Store audio device's active state in preference (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 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 (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 "chromeos/audio/audio_devices_pref_handler_impl.h" 5 #include "chromeos/audio/audio_devices_pref_handler_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 13 matching lines...) Expand all
24 24
25 // Gets the device id string for storing audio preference. The format of 25 // Gets the device id string for storing audio preference. The format of
26 // device string is a string consisting of 3 parts. 26 // device string is a string consisting of 3 parts.
27 // |device_name| : |integer from lower 32 bit of device id| : 27 // |device_name| : |integer from lower 32 bit of device id| :
28 // |0(output device) or 1(input device)| 28 // |0(output device) or 1(input device)|
29 // If an audio device has both integrated input and output devices, the first 2 29 // If an audio device has both integrated input and output devices, the first 2
30 // parts of the string could be identical, only the last part will differentiate 30 // parts of the string could be identical, only the last part will differentiate
31 // them. 31 // them.
32 std::string GetDeviceIdString(const chromeos::AudioDevice& device) { 32 std::string GetDeviceIdString(const chromeos::AudioDevice& device) {
33 std::string device_id_string = 33 std::string device_id_string =
34 device.device_name + " : " + 34 base::Uint64ToString(device.stable_device_id &
35 base::Uint64ToString(device.id & static_cast<uint64>(0xffffffff)) + 35 static_cast<uint64>(0xffffffff)) +
36 " : " + (device.is_input ? "1" : "0"); 36 " : " + (device.is_input ? "1" : "0");
37 // Replace any periods from the device id string with a space, since setting 37 // Replace any periods from the device id string with a space, since setting
38 // names cannot contain periods. 38 // names cannot contain periods.
39 std::replace(device_id_string.begin(), device_id_string.end(), '.', ' '); 39 std::replace(device_id_string.begin(), device_id_string.end(), '.', ' ');
40 return device_id_string; 40 return device_id_string;
41 } 41 }
42 42
43 } // namespace 43 } // namespace
44 44
45 namespace chromeos { 45 namespace chromeos {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 return (mute == kPrefMuteOn); 78 return (mute == kPrefMuteOn);
79 } 79 }
80 80
81 void AudioDevicesPrefHandlerImpl::SetMuteValue(const AudioDevice& device, 81 void AudioDevicesPrefHandlerImpl::SetMuteValue(const AudioDevice& device,
82 bool mute) { 82 bool mute) {
83 device_mute_settings_->SetInteger(GetDeviceIdString(device), 83 device_mute_settings_->SetInteger(GetDeviceIdString(device),
84 mute ? kPrefMuteOn : kPrefMuteOff); 84 mute ? kPrefMuteOn : kPrefMuteOff);
85 SaveDevicesMutePref(); 85 SaveDevicesMutePref();
86 } 86 }
87 87
88 AudioDeviceState AudioDevicesPrefHandlerImpl::GetDeviceState(
89 const AudioDevice& device) {
90 UpdateDevicesStatePref();
91 std::string device_id_str = GetDeviceIdString(device);
92 if (!device_state_settings_->HasKey(device_id_str)) {
93 device_state_settings_->SetInteger(device_id_str,
94 (int)AUDIO_STATE_NOT_AVAILABLE);
jennyz 2015/12/17 22:50:21 I guess this is what you mean in the .h comment fo
hychao 2015/12/29 10:57:25 Updated the header file.
95 SaveDevicesStatePref();
96 }
97 int state = (int)AUDIO_STATE_NOT_AVAILABLE;
98 device_state_settings_->GetInteger(device_id_str, &state);
99 return (AudioDeviceState)state;
100 }
101
102 void AudioDevicesPrefHandlerImpl::SetDeviceState(const AudioDevice& device,
103 AudioDeviceState state) {
104 device_state_settings_->SetInteger(GetDeviceIdString(device),
105 (int)state);
106 SaveDevicesStatePref();
107 }
108
88 bool AudioDevicesPrefHandlerImpl::GetAudioOutputAllowedValue() { 109 bool AudioDevicesPrefHandlerImpl::GetAudioOutputAllowedValue() {
89 return local_state_->GetBoolean(prefs::kAudioOutputAllowed); 110 return local_state_->GetBoolean(prefs::kAudioOutputAllowed);
90 } 111 }
91 112
92 void AudioDevicesPrefHandlerImpl::AddAudioPrefObserver( 113 void AudioDevicesPrefHandlerImpl::AddAudioPrefObserver(
93 AudioPrefObserver* observer) { 114 AudioPrefObserver* observer) {
94 observers_.AddObserver(observer); 115 observers_.AddObserver(observer);
95 } 116 }
96 117
97 void AudioDevicesPrefHandlerImpl::RemoveAudioPrefObserver( 118 void AudioDevicesPrefHandlerImpl::RemoveAudioPrefObserver(
(...skipping 25 matching lines...) Expand all
123 if (device.type == AUDIO_TYPE_HDMI) 144 if (device.type == AUDIO_TYPE_HDMI)
124 return kDefaultHdmiOutputVolumePercent; 145 return kDefaultHdmiOutputVolumePercent;
125 else 146 else
126 return kDefaultOutputVolumePercent; 147 return kDefaultOutputVolumePercent;
127 } 148 }
128 149
129 AudioDevicesPrefHandlerImpl::AudioDevicesPrefHandlerImpl( 150 AudioDevicesPrefHandlerImpl::AudioDevicesPrefHandlerImpl(
130 PrefService* local_state) 151 PrefService* local_state)
131 : device_mute_settings_(new base::DictionaryValue()), 152 : device_mute_settings_(new base::DictionaryValue()),
132 device_volume_settings_(new base::DictionaryValue()), 153 device_volume_settings_(new base::DictionaryValue()),
154 device_state_settings_(new base::DictionaryValue()),
133 local_state_(local_state) { 155 local_state_(local_state) {
134 InitializePrefObservers(); 156 InitializePrefObservers();
135 157
136 UpdateDevicesMutePref(); 158 UpdateDevicesMutePref();
137 UpdateDevicesVolumePref(); 159 UpdateDevicesVolumePref();
138 } 160 }
139 161
140 AudioDevicesPrefHandlerImpl::~AudioDevicesPrefHandlerImpl() { 162 AudioDevicesPrefHandlerImpl::~AudioDevicesPrefHandlerImpl() {
141 } 163 }
142 164
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 base::DictionaryValue::Iterator it(*device_volume_settings_); 201 base::DictionaryValue::Iterator it(*device_volume_settings_);
180 while (!it.IsAtEnd()) { 202 while (!it.IsAtEnd()) {
181 double volume = kDefaultOutputVolumePercent; 203 double volume = kDefaultOutputVolumePercent;
182 bool success = it.value().GetAsDouble(&volume); 204 bool success = it.value().GetAsDouble(&volume);
183 DCHECK(success); 205 DCHECK(success);
184 dict_update->SetDouble(it.key(), volume); 206 dict_update->SetDouble(it.key(), volume);
185 it.Advance(); 207 it.Advance();
186 } 208 }
187 } 209 }
188 210
211 void AudioDevicesPrefHandlerImpl::UpdateDevicesStatePref() {
212 const base::DictionaryValue* state_prefs =
213 local_state_->GetDictionary(prefs::kAudioDevicesState);
214 if (state_prefs)
215 device_state_settings_.reset(state_prefs->DeepCopy());
216 }
217
218 void AudioDevicesPrefHandlerImpl::SaveDevicesStatePref() {
219 DictionaryPrefUpdate dict_update(local_state_,
220 prefs::kAudioDevicesState);
221 base::DictionaryValue::Iterator it(*device_state_settings_);
222 while (!it.IsAtEnd()) {
223 int state = AUDIO_STATE_NOT_AVAILABLE;
224 bool success = it.value().GetAsInteger(&state);
225 DCHECK(success);
226 dict_update->SetInteger(it.key(), state);
227 it.Advance();
228 }
229 }
230
189 void AudioDevicesPrefHandlerImpl::MigrateDeviceMuteSettings( 231 void AudioDevicesPrefHandlerImpl::MigrateDeviceMuteSettings(
190 const std::string& active_device) { 232 const std::string& active_device) {
191 int old_mute = local_state_->GetInteger(prefs::kAudioMute); 233 int old_mute = local_state_->GetInteger(prefs::kAudioMute);
192 device_mute_settings_->SetInteger(active_device, old_mute); 234 device_mute_settings_->SetInteger(active_device, old_mute);
193 SaveDevicesMutePref(); 235 SaveDevicesMutePref();
194 } 236 }
195 237
196 void AudioDevicesPrefHandlerImpl::MigrateDeviceVolumeSettings( 238 void AudioDevicesPrefHandlerImpl::MigrateDeviceVolumeSettings(
197 const std::string& active_device) { 239 const std::string& active_device) {
198 double old_volume = local_state_->GetDouble(prefs::kAudioVolumePercent); 240 double old_volume = local_state_->GetDouble(prefs::kAudioVolumePercent);
199 device_volume_settings_->SetDouble(active_device, old_volume); 241 device_volume_settings_->SetDouble(active_device, old_volume);
200 SaveDevicesVolumePref(); 242 SaveDevicesVolumePref();
201 } 243 }
202 244
203 void AudioDevicesPrefHandlerImpl::NotifyAudioPolicyChange() { 245 void AudioDevicesPrefHandlerImpl::NotifyAudioPolicyChange() {
204 FOR_EACH_OBSERVER(AudioPrefObserver, 246 FOR_EACH_OBSERVER(AudioPrefObserver,
205 observers_, 247 observers_,
206 OnAudioPolicyPrefChanged()); 248 OnAudioPolicyPrefChanged());
207 } 249 }
208 250
209 // static 251 // static
210 void AudioDevicesPrefHandlerImpl::RegisterPrefs(PrefRegistrySimple* registry) { 252 void AudioDevicesPrefHandlerImpl::RegisterPrefs(PrefRegistrySimple* registry) {
211 registry->RegisterDictionaryPref(prefs::kAudioDevicesVolumePercent); 253 registry->RegisterDictionaryPref(prefs::kAudioDevicesVolumePercent);
212 registry->RegisterDictionaryPref(prefs::kAudioDevicesMute); 254 registry->RegisterDictionaryPref(prefs::kAudioDevicesMute);
255 registry->RegisterDictionaryPref(prefs::kAudioDevicesState);
213 256
214 // Register the prefs backing the audio muting policies. 257 // Register the prefs backing the audio muting policies.
215 // Policy for audio input is handled by kAudioCaptureAllowed in the Chrome 258 // Policy for audio input is handled by kAudioCaptureAllowed in the Chrome
216 // media system. 259 // media system.
217 registry->RegisterBooleanPref(prefs::kAudioOutputAllowed, true); 260 registry->RegisterBooleanPref(prefs::kAudioOutputAllowed, true);
218 261
219 // Register the legacy audio prefs for migration. 262 // Register the legacy audio prefs for migration.
220 registry->RegisterDoublePref(prefs::kAudioVolumePercent, 263 registry->RegisterDoublePref(prefs::kAudioVolumePercent,
221 kDefaultOutputVolumePercent); 264 kDefaultOutputVolumePercent);
222 registry->RegisterIntegerPref(prefs::kAudioMute, kPrefMuteOff); 265 registry->RegisterIntegerPref(prefs::kAudioMute, kPrefMuteOff);
223 } 266 }
224 267
225 } // namespace chromeos 268 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698