#ifndef ASH_SYSTEM_ACCESSIBILITY_AUTOCLICK_MENU_BUBBLE_CONTROLLER_H_
#define ASH_SYSTEM_ACCESSIBILITY_AUTOCLICK_MENU_BUBBLE_CONTROLLER_H_
#include "ash/ash_export.h"
#include "ash/public/cpp/ash_constants.h"
#include "ash/system/accessibility/autoclick_menu_view.h"
#include "ash/system/locale/locale_update_controller_impl.h"
#include "ash/system/tray/tray_bubble_view.h"
#include "base/memory/raw_ptr.h"
namespace views {
class Widget;
}
namespace ash {
class AutoclickScrollBubbleController;
class TrayBubbleView;
class ASH_EXPORT AutoclickMenuBubbleController
: public TrayBubbleView::Delegate,
public LocaleChangeObserver {
public:
static const int kAnimationDurationMs = 150;
AutoclickMenuBubbleController();
AutoclickMenuBubbleController(const AutoclickMenuBubbleController&) = delete;
AutoclickMenuBubbleController& operator=(
const AutoclickMenuBubbleController&) = delete;
~AutoclickMenuBubbleController() override;
void SetEventType(AutoclickEventType type);
void SetPosition(FloatingMenuPosition position);
void SetScrollPosition(gfx::Rect scroll_bounds_in_dips,
const gfx::Point& scroll_point_in_dips);
void ShowBubble(AutoclickEventType event_type, FloatingMenuPosition position);
void CloseBubble();
void SetBubbleVisibility(bool is_visible);
void ClickOnBubble(gfx::Point location_in_dips, int mouse_event_flags);
void ClickOnScrollBubble(gfx::Point location_in_dips, int mouse_event_flags);
bool ContainsPointInScreen(const gfx::Point& point);
bool ScrollBubbleContainsPointInScreen(const gfx::Point& point);
void BubbleViewDestroyed() override;
std::u16string GetAccessibleNameForBubble() override;
void HideBubble(const TrayBubbleView* bubble_view) override;
void OnLocaleChanged() override;
views::Widget* GetBubbleWidgetForTesting() { return bubble_widget_; }
void SetAnimateForTesting(bool animate) { animate_ = animate; }
private:
friend class AutoclickMenuBubbleControllerTest;
friend class AutoclickTest;
friend class AutoclickTestUtils;
friend class FloatingAccessibilityControllerTest;
raw_ptr<TrayBubbleView> bubble_view_ = nullptr;
raw_ptr<AutoclickMenuView> menu_view_ = nullptr;
FloatingMenuPosition position_ = kDefaultAutoclickMenuPosition;
raw_ptr<views::Widget> bubble_widget_ = nullptr;
std::unique_ptr<AutoclickScrollBubbleController> scroll_bubble_controller_;
bool animate_ = true;
};
}
#endif