12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- // Copyright 2021 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef ASH_SESSION_FULLSCREEN_NOTIFICATION_BUBBLE_H_
- #define ASH_SESSION_FULLSCREEN_NOTIFICATION_BUBBLE_H_
- #include <memory>
- #include "ash/ash_export.h"
- #include "ash/wm/window_state.h"
- #include "ash/wm/window_state_observer.h"
- #include "base/memory/weak_ptr.h"
- #include "base/scoped_observation.h"
- #include "ui/aura/window.h"
- #include "ui/aura/window_observer.h"
- class SubtleNotificationView;
- namespace base {
- class OneShotTimer;
- }
- namespace gfx {
- class Rect;
- }
- namespace views {
- class Widget;
- }
- namespace ash {
- // A notification bubble shown when the device returns from sleep, low
- // brightness or the lock screen to remind the user that full screen mode is
- // active.
- class ASH_EXPORT FullscreenNotificationBubble : public aura::WindowObserver,
- public WindowStateObserver {
- public:
- FullscreenNotificationBubble();
- FullscreenNotificationBubble(const FullscreenNotificationBubble&) = delete;
- FullscreenNotificationBubble& operator=(const FullscreenNotificationBubble&) =
- delete;
- ~FullscreenNotificationBubble() override;
- void ShowForWindowState(WindowState* window_state);
- // Returns the underlying widget for testing purposes.
- views::Widget* widget_for_test() { return widget_; }
- private:
- // aura::WindowObserver:
- void OnWindowDestroying(aura::Window* window) override;
- // WindowStateObserver:
- void OnPreWindowStateTypeChange(WindowState* window_state,
- chromeos::WindowStateType old_type) override;
- void Show();
- void Hide();
- gfx::Rect GetBubbleBounds();
- // The contents of the widget.
- SubtleNotificationView* view_ = nullptr;
- // The widget containing the bubble.
- views::Widget* widget_ = nullptr;
- // A timer to auto-dismiss the bubble after a short period of time.
- std::unique_ptr<base::OneShotTimer> timer_;
- base::ScopedObservation<aura::Window, aura::WindowObserver>
- window_observation_{this};
- base::ScopedObservation<ash::WindowState, ash::WindowStateObserver>
- window_state_observation_{this};
- base::WeakPtrFactory<FullscreenNotificationBubble> weak_ptr_factory_{this};
- };
- } // namespace ash
- #endif // ASH_SESSION_FULLSCREEN_NOTIFICATION_BUBBLE_H_
|