#ifndef ASH_FOCUS_FOCUS_CYCLER_H_
#define ASH_FOCUS_FOCUS_CYCLER_H_
#include <vector>
#include "ash/ash_export.h"
#include "base/functional/callback.h"
#include "base/memory/raw_ptr.h"
namespace views {
class Widget;
}
namespace ash {
class ASH_EXPORT FocusCycler {
public:
enum Direction { FORWARD, BACKWARD };
FocusCycler();
FocusCycler(const FocusCycler&) = delete;
FocusCycler& operator=(const FocusCycler&) = delete;
~FocusCycler();
const views::Widget* widget_activating() const { return widget_activating_; }
void AddWidget(views::Widget* widget);
void RemoveWidget(views::Widget* widget);
void RotateFocus(Direction direction, bool move_onto_next_widget = false);
bool FocusWidget(views::Widget* widget);
views::Widget* FindWidget(
base::RepeatingCallback<bool(views::Widget*)> callback);
void ResetForTesting();
private:
std::vector<raw_ptr<views::Widget, VectorExperimental>> widgets_;
raw_ptr<views::Widget> widget_activating_;
};
}
#endif