#ifndef ASH_SYSTEM_TIME_CALENDAR_UP_NEXT_VIEW_H_
#define ASH_SYSTEM_TIME_CALENDAR_UP_NEXT_VIEW_H_
#include "ash/ash_export.h"
#include "ash/system/time/calendar_view_controller.h"
#include "base/memory/raw_ptr.h"
#include "ui/views/animation/bounds_animator.h"
#include "ui/views/controls/button/button.h"
#include "ui/views/view.h"
namespace ash {
class ASH_EXPORT CalendarUpNextView : public views::View {
METADATA_HEADER(CalendarUpNextView, views::View)
public:
CalendarUpNextView(CalendarViewController* calendar_view_controller,
views::Button::PressedCallback callback);
CalendarUpNextView(const CalendarUpNextView& other) = delete;
CalendarUpNextView& operator=(const CalendarUpNextView& other) = delete;
~CalendarUpNextView() override;
void RefreshEvents();
SkPath GetClipPath() const;
void Layout(PassKey) override;
private:
friend class CalendarUpNextViewAnimationTest;
friend class CalendarUpNextViewPixelTest;
friend class CalendarUpNextViewTest;
friend class CalendarViewTest;
void UpdateEvents(
const std::list<google_apis::calendar::CalendarEvent>& events);
void OnScrollLeftButtonPressed(const ui::Event& event);
void OnScrollRightButtonPressed(const ui::Event& event);
void ToggleScrollButtonState();
void ScrollViewByOffset(int offset);
void AnimateScrollToShowXCoordinate(const int start_edge,
const int target_edge);
raw_ptr<CalendarViewController, DanglingUntriaged> calendar_view_controller_;
const raw_ptr<views::View> todays_events_button_container_;
const raw_ptr<views::View> header_view_;
raw_ptr<views::Button> left_scroll_button_;
raw_ptr<views::Button> right_scroll_button_;
const raw_ptr<views::ScrollView> scroll_view_;
SingleDayEventList displayed_events_;
const raw_ptr<views::View> content_view_;
std::unique_ptr<gfx::LinearAnimation> scrolling_animation_;
scoped_refptr<gfx::AnimationContainer> animation_container_ =
base::MakeRefCounted<gfx::AnimationContainer>();
base::CallbackListSubscription on_contents_scrolled_subscription_;
};
}
#endif