#ifndef ASH_CAPTURE_MODE_FOLDER_SELECTION_DIALOG_CONTROLLER_H_
#define ASH_CAPTURE_MODE_FOLDER_SELECTION_DIALOG_CONTROLLER_H_
#include "ash/wm/window_dimmer.h"
#include "base/files/file_path.h"
#include "base/functional/callback_forward.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/scoped_refptr.h"
#include "base/scoped_observation.h"
#include "ui/aura/window.h"
#include "ui/shell_dialogs/select_file_dialog.h"
#include "ui/wm/core/transient_window_manager.h"
#include "ui/wm/core/transient_window_observer.h"
namespace ui {
class Event;
}
namespace ash {
class FolderSelectionDialogController : public ui::SelectFileDialog::Listener,
public wm::TransientWindowObserver {
public:
class Delegate {
public:
virtual void OnFolderSelected(const base::FilePath& path) = 0;
virtual void OnSelectionWindowAdded() = 0;
virtual void OnSelectionWindowClosed() = 0;
protected:
virtual ~Delegate() = default;
};
FolderSelectionDialogController(Delegate* delegate, aura::Window* root);
FolderSelectionDialogController(const FolderSelectionDialogController&) =
delete;
FolderSelectionDialogController& operator=(
const FolderSelectionDialogController&) = delete;
~FolderSelectionDialogController() override;
aura::Window* dialog_window() { return dialog_window_; }
bool did_user_select_a_folder() const { return did_user_select_a_folder_; }
bool ShouldConsumeEvent(const ui::Event* event) const;
void FileSelected(const ui::SelectedFileInfo& file, int index) override;
void OnTransientChildAdded(aura::Window* window,
aura::Window* transient) override;
void OnTransientChildRemoved(aura::Window* window,
aura::Window* transient) override;
private:
friend class CaptureModeTestApi;
const raw_ptr<Delegate> delegate_;
WindowDimmer dialog_background_dimmer_;
scoped_refptr<ui::SelectFileDialog> select_folder_dialog_;
raw_ptr<aura::Window> dialog_window_ = nullptr;
bool did_user_select_a_folder_ = false;
base::OnceClosure on_dialog_window_added_callback_for_test_;
base::ScopedObservation<wm::TransientWindowManager,
wm::TransientWindowObserver>
window_observation_{this};
};
}
#endif