remote_command_center_delegate.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. // Copyright 2019 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef COMPONENTS_SYSTEM_MEDIA_CONTROLS_MAC_REMOTE_COMMAND_CENTER_DELEGATE_H_
  5. #define COMPONENTS_SYSTEM_MEDIA_CONTROLS_MAC_REMOTE_COMMAND_CENTER_DELEGATE_H_
  6. #include "base/containers/flat_set.h"
  7. #include "base/mac/scoped_nsobject.h"
  8. #include "base/observer_list.h"
  9. @class RemoteCommandCenterDelegateCocoa;
  10. namespace base {
  11. class TimeDelta;
  12. }
  13. namespace system_media_controls {
  14. class SystemMediaControlsObserver;
  15. namespace internal {
  16. // Wraps an NSObject which interfaces with the MPRemoteCommandCenter.
  17. class RemoteCommandCenterDelegate {
  18. public:
  19. RemoteCommandCenterDelegate();
  20. RemoteCommandCenterDelegate(const RemoteCommandCenterDelegate&) = delete;
  21. RemoteCommandCenterDelegate& operator=(const RemoteCommandCenterDelegate&) =
  22. delete;
  23. ~RemoteCommandCenterDelegate();
  24. // Part of the implementation of SystemMediaControls.
  25. void AddObserver(SystemMediaControlsObserver* observer);
  26. void RemoveObserver(SystemMediaControlsObserver* observer);
  27. void SetIsNextEnabled(bool value);
  28. void SetIsPreviousEnabled(bool value);
  29. void SetIsPlayPauseEnabled(bool value);
  30. void SetIsStopEnabled(bool value);
  31. void SetIsSeekToEnabled(bool value);
  32. // Called by |remote_command_center_delegate_cocoa_| when the event happens.
  33. void OnNext();
  34. void OnPrevious();
  35. void OnPause();
  36. void OnPlayPause();
  37. void OnStop();
  38. void OnPlay();
  39. void OnSeekTo(const base::TimeDelta& time);
  40. private:
  41. // Used to track which commands we're already listening for.
  42. enum class Command {
  43. kStop,
  44. kPlayPause,
  45. kNextTrack,
  46. kPreviousTrack,
  47. kSeekTo,
  48. };
  49. bool ShouldSetCommandEnabled(Command command, bool will_enable);
  50. base::scoped_nsobject<RemoteCommandCenterDelegateCocoa>
  51. remote_command_center_delegate_cocoa_;
  52. base::ObserverList<SystemMediaControlsObserver> observers_;
  53. base::flat_set<Command> enabled_commands_;
  54. };
  55. } // namespace internal
  56. } // namespace system_media_controls
  57. #endif // COMPONENTS_SYSTEM_MEDIA_CONTROLS_MAC_REMOTE_COMMAND_CENTER_DELEGATE_H_