unified_slider_bubble_controller.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. // Copyright 2018 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 ASH_SYSTEM_UNIFIED_UNIFIED_SLIDER_BUBBLE_CONTROLLER_H_
  5. #define ASH_SYSTEM_UNIFIED_UNIFIED_SLIDER_BUBBLE_CONTROLLER_H_
  6. #include "ash/ash_export.h"
  7. #include "ash/shelf/shelf_observer.h"
  8. #include "ash/system/audio/unified_volume_slider_controller.h"
  9. #include "ash/system/tray/tray_bubble_view.h"
  10. #include "ash/system/unified/unified_system_tray_model.h"
  11. #include "base/timer/timer.h"
  12. #include "chromeos/ash/components/audio/cras_audio_handler.h"
  13. namespace ash {
  14. class UnifiedSystemTray;
  15. class UnifiedSliderListener;
  16. // Controller class for independent slider bubbles e.g. volume slider and
  17. // brightness slider that can be triggered from hardware buttons.
  18. class ASH_EXPORT UnifiedSliderBubbleController
  19. : public TrayBubbleView::Delegate,
  20. public CrasAudioHandler::AudioObserver,
  21. public UnifiedSystemTrayModel::Observer,
  22. public UnifiedVolumeSliderController::Delegate,
  23. public ShelfObserver {
  24. public:
  25. enum SliderType {
  26. SLIDER_TYPE_VOLUME = 0,
  27. SLIDER_TYPE_DISPLAY_BRIGHTNESS,
  28. SLIDER_TYPE_KEYBOARD_BACKLIGHT_TOGGLE,
  29. SLIDER_TYPE_KEYBOARD_BRIGHTNESS,
  30. SLIDER_TYPE_MIC
  31. };
  32. explicit UnifiedSliderBubbleController(UnifiedSystemTray* tray);
  33. UnifiedSliderBubbleController(const UnifiedSliderBubbleController&) = delete;
  34. UnifiedSliderBubbleController& operator=(
  35. const UnifiedSliderBubbleController&) = delete;
  36. ~UnifiedSliderBubbleController() override;
  37. // Show a slider of |slider_type|. If the slider of same type is already
  38. // shown, it just extends the auto close timer.
  39. void ShowBubble(SliderType slider_type);
  40. void CloseBubble();
  41. // True if a slider bubble is shown.
  42. bool IsBubbleShown() const;
  43. // TrayBubbleView::Delegate:
  44. void BubbleViewDestroyed() override;
  45. void OnMouseEnteredView() override;
  46. void OnMouseExitedView() override;
  47. // CrasAudioHandler::AudioObserver:
  48. void OnOutputNodeVolumeChanged(uint64_t node_id, int volume) override;
  49. void OnOutputMuteChanged(bool mute_on) override;
  50. void OnInputMuteChanged(bool mute_on) override;
  51. // UnifiedSystemTrayModel::Observer:
  52. void OnDisplayBrightnessChanged(bool by_user) override;
  53. void OnKeyboardBrightnessChanged(
  54. power_manager::BacklightBrightnessChange_Cause cause) override;
  55. // UnifiedVolumeSliderController::Delegate:
  56. void OnAudioSettingsButtonClicked() override;
  57. // ShelfObserver:
  58. void OnShelfWorkAreaInsetsChanged() override;
  59. private:
  60. friend class UnifiedSystemTrayTest;
  61. // Instantiate |slider_controller_| of |slider_type_|.
  62. void CreateSliderController();
  63. // Start auto close timer.
  64. void StartAutoCloseTimer();
  65. // Unowned.
  66. UnifiedSystemTray* const tray_;
  67. base::OneShotTimer autoclose_;
  68. TrayBubbleView* bubble_view_ = nullptr;
  69. views::Widget* bubble_widget_ = nullptr;
  70. // Type of the currently shown slider.
  71. SliderType slider_type_ = SLIDER_TYPE_VOLUME;
  72. // Whether mouse is hovered on the bubble.
  73. bool mouse_hovered_ = false;
  74. // Controller of the current slider view. If a slider is not shown, it's null.
  75. // Owned.
  76. std::unique_ptr<UnifiedSliderListener> slider_controller_;
  77. };
  78. } // namespace ash
  79. #endif // ASH_SYSTEM_UNIFIED_UNIFIED_SLIDER_BUBBLE_CONTROLLER_H_