Index: chrome/browser/chromeos/audio/audio_handler.cc |
diff --git a/chrome/browser/chromeos/audio/audio_handler.cc b/chrome/browser/chromeos/audio/audio_handler.cc |
index 7e81a124d7d5f56f67faeb49e276e99ceeae9ab6..943d1a5601ad0b5694818d474899585f6f66b89a 100644 |
--- a/chrome/browser/chromeos/audio/audio_handler.cc |
+++ b/chrome/browser/chromeos/audio/audio_handler.cc |
@@ -21,6 +21,7 @@ |
#include "base/prefs/pref_service.h" |
#include "chrome/common/chrome_notification_types.h" |
#include "chrome/common/pref_names.h" |
+#include "chromeos/audio/audio_pref_handler.h" |
using std::max; |
using std::min; |
@@ -29,9 +30,6 @@ namespace chromeos { |
namespace { |
-// Default value for the volume pref, as a percent in the range [0.0, 100.0]. |
-const double kDefaultVolumePercent = 75.0; |
- |
// Default value for unmuting, as a percent in the range [0.0, 100.0]. |
// Used when sound is unmuted, but volume was less than kMuteThresholdPercent. |
const double kDefaultUnmuteVolumePercent = 4.0; |
@@ -39,21 +37,18 @@ const double kDefaultUnmuteVolumePercent = 4.0; |
// Volume value which should be considered as muted in range [0.0, 100.0]. |
const double kMuteThresholdPercent = 1.0; |
-// Values used for muted preference. |
-const int kPrefMuteOff = 0; |
-const int kPrefMuteOn = 1; |
- |
static AudioHandler* g_audio_handler = NULL; |
} // namespace |
// static |
-void AudioHandler::Initialize() { |
+void AudioHandler::Initialize( |
+ scoped_refptr<AudioPrefHandler> audio_pref_handler) { |
CHECK(!g_audio_handler); |
#if defined(USE_CRAS) |
- g_audio_handler = new AudioHandler(new AudioMixerCras()); |
+ g_audio_handler = new AudioHandler(new AudioMixerCras(), audio_pref_handler); |
#else |
- g_audio_handler = new AudioHandler(new AudioMixerAlsa()); |
+ g_audio_handler = new AudioHandler(new AudioMixerAlsa(), audio_pref_handler); |
#endif |
} |
@@ -67,9 +62,11 @@ void AudioHandler::Shutdown() { |
} |
// static |
-void AudioHandler::InitializeForTesting(AudioMixer* mixer) { |
+void AudioHandler::InitializeForTesting( |
+ AudioMixer* mixer, |
+ scoped_refptr<AudioPrefHandler> audio_pref_handler) { |
CHECK(!g_audio_handler); |
- g_audio_handler = new AudioHandler(mixer); |
+ g_audio_handler = new AudioHandler(mixer, audio_pref_handler); |
} |
// static |
@@ -79,18 +76,6 @@ AudioHandler* AudioHandler::GetInstance() { |
return g_audio_handler; |
} |
-// static |
-void AudioHandler::RegisterPrefs(PrefRegistrySimple* registry) { |
- registry->RegisterDoublePref(prefs::kAudioVolumePercent, |
- kDefaultVolumePercent); |
- registry->RegisterIntegerPref(prefs::kAudioMute, kPrefMuteOff); |
- // Register the prefs backing the audio muting policies. |
- registry->RegisterBooleanPref(prefs::kAudioOutputAllowed, true); |
- // This pref has moved to the media subsystem but we should verify it is there |
- // before we use it. |
- registry->RegisterBooleanPref(prefs::kAudioCaptureAllowed, true); |
-} |
- |
double AudioHandler::GetVolumePercent() { |
return mixer_->GetVolumePercent(); |
} |
@@ -108,7 +93,7 @@ void AudioHandler::SetVolumePercent(double volume_percent) { |
void AudioHandler::SetVolumePercentInternal(double volume_percent) { |
mixer_->SetVolumePercent(volume_percent); |
- local_state_->SetDouble(prefs::kAudioVolumePercent, volume_percent); |
+ audio_pref_handler_->SetOutputVolumeValue(volume_percent); |
if (volume_percent != volume_percent_) { |
volume_percent_ = volume_percent; |
FOR_EACH_OBSERVER(VolumeObserver, volume_observers_, OnVolumeChanged()); |
@@ -126,8 +111,7 @@ bool AudioHandler::IsMuted() { |
void AudioHandler::SetMuted(bool mute) { |
if (!mixer_->IsMuteLocked()) { |
mixer_->SetMuted(mute); |
- local_state_->SetInteger(prefs::kAudioMute, |
- mute ? kPrefMuteOn : kPrefMuteOff); |
+ audio_pref_handler_->SetOutputMuteValue(mute); |
if (!mute) { |
if (GetVolumePercent() <= kMuteThresholdPercent) { |
@@ -160,38 +144,39 @@ void AudioHandler::RemoveVolumeObserver(VolumeObserver* observer) { |
volume_observers_.RemoveObserver(observer); |
} |
-AudioHandler::AudioHandler(AudioMixer* mixer) |
+void AudioHandler::OnAudioPolicyPrefChanged() { |
+ ApplyAudioPolicy(); |
+} |
+ |
+AudioHandler::AudioHandler(AudioMixer* mixer, |
+ scoped_refptr<AudioPrefHandler> audio_pref_handler) |
: mixer_(mixer), |
- local_state_(g_browser_process->local_state()), |
volume_percent_(0), |
- muted_(false) { |
- InitializePrefObservers(); |
+ muted_(false), |
+ audio_pref_handler_(audio_pref_handler) { |
mixer_->Init(); |
+ |
+ DCHECK(audio_pref_handler_.get()); |
+ audio_pref_handler_->AddAudioPrefObserver(this); |
ApplyAudioPolicy(); |
// Set initial state so that notifications are not triggered. |
- muted_ = (local_state_->GetInteger(prefs::kAudioMute) == kPrefMuteOn); |
- volume_percent_ = local_state_->GetDouble(prefs::kAudioVolumePercent); |
+ muted_ = audio_pref_handler_->GetOutputMuteValue(); |
+ volume_percent_ = audio_pref_handler->GetOutputVolumeValue(); |
SetMuted(muted_); |
SetVolumePercentInternal(volume_percent_); |
} |
AudioHandler::~AudioHandler() { |
mixer_.reset(); |
+ audio_pref_handler_->RemoveAudioPrefObserver(this); |
+ audio_pref_handler_ = NULL; |
}; |
-void AudioHandler::InitializePrefObservers() { |
- pref_change_registrar_.Init(local_state_); |
- base::Closure callback = base::Bind(&AudioHandler::ApplyAudioPolicy, |
- base::Unretained(this)); |
- pref_change_registrar_.Add(prefs::kAudioOutputAllowed, callback); |
- pref_change_registrar_.Add(prefs::kAudioCaptureAllowed, callback); |
-} |
- |
void AudioHandler::ApplyAudioPolicy() { |
mixer_->SetMuteLocked(false); |
bool muted = false; |
- if (local_state_->GetBoolean(prefs::kAudioOutputAllowed)) { |
- muted = (local_state_->GetInteger(prefs::kAudioMute) == kPrefMuteOn); |
+ if (audio_pref_handler_->GetAudioOutputAllowedValue()) { |
+ muted = audio_pref_handler_->GetOutputMuteValue(); |
mixer_->SetMuted(muted); |
} else { |
muted = true; |
@@ -203,7 +188,7 @@ void AudioHandler::ApplyAudioPolicy() { |
FOR_EACH_OBSERVER(VolumeObserver, volume_observers_, OnMuteToggled()); |
} |
mixer_->SetCaptureMuteLocked(false); |
- if (local_state_->GetBoolean(prefs::kAudioCaptureAllowed)) { |
+ if (audio_pref_handler_->GetAudioCaptureAllowedValue()) { |
mixer_->SetCaptureMuted(false); |
} else { |
mixer_->SetCaptureMuted(true); |