// Copyright 2014 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_EVENTS_GESTURE_DETECTION_UI_GESTURE_PROVIDER_H_
#define UI_EVENTS_GESTURE_DETECTION_UI_GESTURE_PROVIDER_H_

#include "base/basictypes.h"
#include "base/memory/scoped_vector.h"
#include "ui/events/event.h"
#include "ui/events/events_export.h"
#include "ui/events/gesture_detection/filtered_gesture_provider.h"
#include "ui/events/gesture_detection/gesture_event_data_packet.h"
#include "ui/events/gesture_detection/touch_disposition_gesture_filter.h"
#include "ui/events/gestures/motion_event_aura.h"

namespace ui {

class EVENTS_EXPORT GestureProviderAuraClient {
 public:
  virtual ~GestureProviderAuraClient() {}
  virtual void OnGestureEvent(GestureEvent* event) = 0;
};

// Provides gesture detection and dispatch given a sequence of touch events
// and touch event acks.
class EVENTS_EXPORT GestureProviderAura : public GestureProviderClient {
 public:
  GestureProviderAura(GestureProviderAuraClient* client);
  virtual ~GestureProviderAura();

  bool OnTouchEvent(const TouchEvent& event);
  void OnTouchEventAck(bool event_consumed);
  const MotionEventAura& pointer_state() { return pointer_state_; }
  ScopedVector<GestureEvent>* GetAndResetPendingGestures();

  // GestureProviderClient implementation
  virtual void OnGestureEvent(const GestureEventData& gesture) override;

 private:
  bool IsConsideredDoubleTap(const GestureEventData& previous_tap,
                             const GestureEventData& current_tap) const;

  scoped_ptr<GestureEventData> previous_tap_;

  GestureProviderAuraClient* client_;
  MotionEventAura pointer_state_;
  FilteredGestureProvider filtered_gesture_provider_;

  ui::LatencyInfo last_touch_event_latency_info_;
  bool handling_event_;
  ScopedVector<GestureEvent> pending_gestures_;

  DISALLOW_COPY_AND_ASSIGN(GestureProviderAura);
};

}  // namespace ui

#endif  // UI_EVENTS_GESTURE_DETECTION_UI_GESTURE_PROVIDER_H_
