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

Unified Diff: chromeos/audio/cras_audio_handler.h

Issue 1746843002: Persist the user's active audio device choice across chromeos session and reboots. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix nits. Created 4 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chromeos/audio/audio_devices_pref_handler_stub.cc ('k') | chromeos/audio/cras_audio_handler.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chromeos/audio/cras_audio_handler.h
diff --git a/chromeos/audio/cras_audio_handler.h b/chromeos/audio/cras_audio_handler.h
index c2e37e8412f4d6d3ece240ff777bfc7f2ee27c67..3d325daadf04eb775ba0bee51328a6010bb57b71 100644
--- a/chromeos/audio/cras_audio_handler.h
+++ b/chromeos/audio/cras_audio_handler.h
@@ -15,6 +15,7 @@
#include "base/observer_list.h"
#include "base/timer/timer.h"
#include "chromeos/audio/audio_device.h"
+#include "chromeos/audio/audio_devices_pref_handler.h"
#include "chromeos/audio/audio_pref_observer.h"
#include "chromeos/dbus/audio_node.h"
#include "chromeos/dbus/cras_audio_client.h"
@@ -71,6 +72,12 @@ class CHROMEOS_EXPORT CrasAudioHandler : public CrasAudioClient::Observer,
DISALLOW_COPY_AND_ASSIGN(AudioObserver);
};
+ enum DeviceActivateType {
+ ACTIVATE_BY_PRIORITY = 0,
+ ACTIVATE_BY_USER,
+ ACTIVATE_BY_RESTORE_PREVIOUS_STATE,
+ };
+
// Sets the global instance. Must be called before any calls to Get().
static void Initialize(
scoped_refptr<AudioDevicesPrefHandler> audio_pref_handler);
@@ -167,8 +174,12 @@ class CHROMEOS_EXPORT CrasAudioHandler : public CrasAudioClient::Observer,
// Mutes or unmutes audio input device.
virtual void SetInputMute(bool mute_on);
- // Switches active audio device to |device|.
- virtual void SwitchToDevice(const AudioDevice& device, bool notify);
+ // Switches active audio device to |device|. |activate_by| indicates why
+ // the device is switched to active: by user's manual choice, by priority,
+ // or by restoring to its previous active state.
+ virtual void SwitchToDevice(const AudioDevice& device,
+ bool notify,
+ DeviceActivateType activate_by);
// Sets volume/gain level for a device.
virtual void SetVolumeGainPercentForDevice(uint64_t device_id, int value);
@@ -227,10 +238,19 @@ class CHROMEOS_EXPORT CrasAudioHandler : public CrasAudioClient::Observer,
// SessionManagerClient::Observer overrides.
void EmitLoginPromptVisibleCalled() override;
- // Sets the active audio output/input node to the node with |node_id|.
+ // Sets the |active_device| to be active.
// If |notify|, notifies Active*NodeChange.
- void SetActiveOutputNode(uint64_t node_id, bool notify);
- void SetActiveInputNode(uint64_t node_id, bool notify);
+ // Saves device active states in prefs. |activate_by| indicates how
+ // the device was activated.
+ void SetActiveDevice(const AudioDevice& active_device,
+ bool notify,
+ DeviceActivateType activate_by);
+
+ // Saves |device|'s state in pref. If |active| is true, |activate_by|
+ // indicates how |device| is activated.
+ void SaveDeviceState(const AudioDevice& device,
+ bool active,
+ DeviceActivateType activate_by);
// Sets up the audio device state based on audio policy and audio settings
// saved in prefs.
@@ -241,12 +261,16 @@ class CHROMEOS_EXPORT CrasAudioHandler : public CrasAudioClient::Observer,
void SetupAdditionalActiveAudioNodeState(uint64_t node_id);
const AudioDevice* GetDeviceFromId(uint64_t device_id) const;
+ const AudioDevice* GetDeviceFromStableDeviceId(
+ uint64_t stable_device_id) const;
const AudioDevice* GetKeyboardMic() const;
// Initializes audio state, which should only be called when CrasAudioHandler
// is created or cras audio client is restarted.
void InitializeAudioState();
+ void InitializeAudioAfterCrasServiceAvailable(bool service_is_available);
+
// Applies the audio muting policies whenever the user logs in or policy
// change notification is received.
void ApplyAudioPolicy();
@@ -275,23 +299,21 @@ class CHROMEOS_EXPORT CrasAudioHandler : public CrasAudioClient::Observer,
// if needed.
void UpdateDevicesAndSwitchActive(const AudioNodeList& nodes);
- // Returns true if *|current_active_node_id| device is changed to
+ // Returns true if the current active device is changed to
// |new_active_device|.
- bool ChangeActiveDevice(const AudioDevice& new_active_device,
- uint64_t* current_active_node_id);
-
- // Returns true if the audio nodes change is caused by some non-active
- // audio nodes unplugged.
- bool NonActiveDeviceUnplugged(size_t old_devices_size,
- size_t new_device_size,
- uint64_t current_active_node);
-
- // Returns true if there is any device change for for input or output,
- // specified by |is_input|.
- // The new discovered nodes are returned in |new_discovered|.
+ bool ChangeActiveDevice(const AudioDevice& new_active_device);
+
+ // Returns true if there are any device changes for input or output
+ // specified by |is_input|, by comparing |audio_devices_| with |new_nodes|.
+ // Passes the new nodes discovered in *|new_discovered|.
+ // *|device_removed| indicates if any devices have been removed.
+ // *|active_device_removed| indicates if the current active device has been
+ // removed.
bool HasDeviceChange(const AudioNodeList& new_nodes,
bool is_input,
- AudioDevicePriorityQueue* new_discovered);
+ AudioDevicePriorityQueue* new_discovered,
+ bool* device_removed,
+ bool* active_device_removed);
// Handles dbus callback for GetNodes.
void HandleGetNodes(const chromeos::AudioNodeList& node_list, bool success);
@@ -334,6 +356,37 @@ class CHROMEOS_EXPORT CrasAudioHandler : public CrasAudioClient::Observer,
void NotifyActiveNodeChanged(bool is_input);
+ // Returns true if it retrieves an active audio device from user preference
+ // among the current |audio_devices_|.
+ bool GetActiveDeviceFromUserPref(bool is_input, AudioDevice* device);
+
+ // Handles either input or output device changes, specified by |is_input|.
+ void HandleAudioDeviceChange(bool is_input,
+ const AudioDevicePriorityQueue& devices_pq,
+ const AudioDevicePriorityQueue& hotplug_nodes,
+ bool has_device_change,
+ bool has_device_removed,
+ bool active_device_removed);
+
+ // Handles non-hotplug nodes change cases.
+ void HandleNonHotplugNodesChange(
+ bool is_input,
+ const AudioDevicePriorityQueue& hotplug_nodes,
+ bool has_device_change,
+ bool has_device_removed,
+ bool active_device_removed);
+
+ // Handles the regular user hotplug case.
+ void HandleHotPlugDevice(
+ const AudioDevice& hotplug_device,
+ const AudioDevicePriorityQueue& device_priority_queue);
+
+ void SwitchToTopPriorityDevice(bool is_input);
+
+ // Switch to previous active device if it is found, otherwise, switch
+ // to the top priority device.
+ void SwitchToPreviousActiveDeviceIfAvailable(bool is_input);
+
scoped_refptr<AudioDevicesPrefHandler> audio_pref_handler_;
base::ObserverList<AudioObserver> observers_;
@@ -362,6 +415,8 @@ class CHROMEOS_EXPORT CrasAudioHandler : public CrasAudioClient::Observer,
int hdmi_rediscover_grace_period_duration_in_ms_;
bool hdmi_rediscovering_;
+ bool cras_service_available_ = false;
+
base::WeakPtrFactory<CrasAudioHandler> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(CrasAudioHandler);
« no previous file with comments | « chromeos/audio/audio_devices_pref_handler_stub.cc ('k') | chromeos/audio/cras_audio_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698