#ifndef ASH_SHELF_HOME_BUTTON_CONTROLLER_H_
#define ASH_SHELF_HOME_BUTTON_CONTROLLER_H_
#include <memory>
#include "ash/capture_mode/sunfish_scanner_feature_watcher.h"
#include "ash/public/cpp/app_list/app_list_controller_observer.h"
#include "base/memory/raw_ptr.h"
#include "base/scoped_observation.h"
#include "ui/display/display_observer.h"
namespace display {
enum class TabletState;
}
namespace ui {
class GestureEvent;
}
namespace ash {
class HomeButtonTapOverlay;
class HomeButton;
class HomeButtonController : public AppListControllerObserver,
public display::DisplayObserver,
public SunfishScannerFeatureWatcher::Observer {
public:
explicit HomeButtonController(HomeButton* button);
HomeButtonController(const HomeButtonController&) = delete;
HomeButtonController& operator=(const HomeButtonController&) = delete;
~HomeButtonController() override;
bool MaybeHandleGestureEvent(ui::GestureEvent* event);
bool IsLongPressActionAvailable();
private:
bool IsSunfishOrScannerAvailable() const;
void OnAppListVisibilityWillChange(bool shown, int64_t display_id) override;
void OnDisplayTabletStateChanged(display::TabletState state) override;
void OnSunfishScannerFeatureStatesChanged(
SunfishScannerFeatureWatcher& source) override;
void OnAppListShown();
void OnAppListDismissed();
void StartAssistantAnimation();
void InitializeAssistantOverlay();
const raw_ptr<HomeButton> button_;
raw_ptr<HomeButtonTapOverlay> tap_overlay_ = nullptr;
std::unique_ptr<base::OneShotTimer> tap_animation_delay_timer_;
base::ScopedObservation<SunfishScannerFeatureWatcher,
SunfishScannerFeatureWatcher::Observer>
sunfish_scanner_feature_observation_{this};
display::ScopedDisplayObserver display_observer_{this};
};
}
#endif