// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef UI_TOUCH_SELECTION_LONGPRESS_DRAG_SELECTOR_H_
#define UI_TOUCH_SELECTION_LONGPRESS_DRAG_SELECTOR_H_

#include "base/time/time.h"
#include "ui/gfx/geometry/point_f.h"
#include "ui/gfx/geometry/vector2d_f.h"
#include "ui/touch_selection/touch_selection_draggable.h"
#include "ui/touch_selection/ui_touch_selection_export.h"

namespace ui {

class MotionEvent;

class UI_TOUCH_SELECTION_EXPORT LongPressDragSelectorClient
    : public TouchSelectionDraggableClient {
 public:
  ~LongPressDragSelectorClient() override {}
  virtual void OnLongPressDragActiveStateChanged() = 0;
  virtual gfx::PointF GetSelectionStart() const = 0;
  virtual gfx::PointF GetSelectionEnd() const = 0;
};

// Supports text selection via touch dragging after a longpress-initiated
// selection.
class UI_TOUCH_SELECTION_EXPORT LongPressDragSelector
    : public TouchSelectionDraggable {
 public:
  explicit LongPressDragSelector(LongPressDragSelectorClient* client);
  ~LongPressDragSelector() override;

  // TouchSelectionDraggable implementation.
  bool WillHandleTouchEvent(const MotionEvent& event) override;
  bool IsActive() const override;

  // Called just prior to a longpress event being handled.
  void OnLongPressEvent(base::TimeTicks event_time,
                        const gfx::PointF& position);

  // Called when a scroll is going to happen to cancel longpress-drag gesture.
  void OnScrollBeginEvent();

  // Called when the active selection changes.
  void OnSelectionActivated();
  void OnSelectionDeactivated();

 private:
  enum SelectionState {
    INACTIVE,
    LONGPRESS_PENDING,
    SELECTION_PENDING,
    DRAG_PENDING,
    DRAGGING
  };

  void SetState(SelectionState state);

  LongPressDragSelectorClient* const client_;

  SelectionState state_;

  base::TimeTicks touch_down_time_;
  gfx::PointF touch_down_position_;

  gfx::Vector2dF longpress_drag_selection_offset_;
  gfx::PointF longpress_drag_start_anchor_;
  bool has_longpress_drag_start_anchor_;
};

}  // namespace ui

#endif  // UI_TOUCH_SELECTION_LONGPRESS_DRAG_SELECTOR_H_
