// 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 ASH_ACCELERATOR_KEY_HOLD_DETECTOR_H_
#define ASH_ACCELERATOR_KEY_HOLD_DETECTOR_H_

#include "ash/ash_export.h"
#include "base/memory/scoped_ptr.h"
#include "ui/events/event_handler.h"

namespace ui {
class KeyEvent;
}

namespace ash {

// This class is used to implement action when a user press and hold the key.
// When a user just pressed and released a key, normal pressed event gets
// generated upon release.
class ASH_EXPORT KeyHoldDetector : public ui::EventHandler {
 public:
  class Delegate {
   public:
    virtual ~Delegate() {}

    // If this return false, the event handler does not process
    // the event at all.
    virtual bool ShouldProcessEvent(const ui::KeyEvent* event) const = 0;

    // This should return true if the event should start the state transition.
    virtual bool IsStartEvent(const ui::KeyEvent* event) const = 0;

    // Called when the key is held.
    virtual void OnKeyHold(const ui::KeyEvent* event) = 0;

    // Called when the key is release after hold.
    virtual void OnKeyUnhold(const ui::KeyEvent* event) = 0;
  };

  explicit KeyHoldDetector(scoped_ptr<Delegate> delegate);
  virtual ~KeyHoldDetector();

  // ui::EventHandler overrides:
  virtual void OnKeyEvent(ui::KeyEvent* key_event) OVERRIDE;

 private:
  // A state to keep track of one click and click and hold operation.
  //
  // One click:
  // INITIAL --(first press)--> PRESSED --(release)--> INITIAL[SEND PRESS]
  //
  // Click and hold:
  // INITIAL --(first press)--> PRESSED --(press)-->
  //   HOLD[OnKeyHold] --(press)--> HOLD[OnKeyHold] --(release)-->
  //   INITIAL[OnKeyUnhold]
  enum State {
    INITIAL,
    PRESSED,
    HOLD
  };

  State state_;
  scoped_ptr<Delegate> delegate_;

  DISALLOW_COPY_AND_ASSIGN(KeyHoldDetector);
};

}  // namespace ash

#endif  // ASH_ACCELERATOR_KEY_HOLD_DETECTOR_H_
