// Copyright 2016 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_ACCELERATORS_PRE_TARGET_ACCELERATOR_HANDLER_H_
#define ASH_ACCELERATORS_PRE_TARGET_ACCELERATOR_HANDLER_H_

#include "ash/ash_export.h"
#include "base/macros.h"
#include "base/time/time.h"
#include "ui/wm/core/accelerator_delegate.h"

namespace aura {
class Window;
}

namespace ui {
class Accelerator;
class KeyEvent;
}  // namespace ui

namespace ash {

// PreTargetAcceleratorHandler is responsible for handling accelerators that
// are processed before the target is given a chance to process the
// accelerator. This typically includes system or reserved accelerators.
// PreTargetAcceleratorHandler does not actually handle the accelerators, rather
// it calls to AcceleratorController to actually process the accelerator.
class ASH_EXPORT PreTargetAcceleratorHandler
    : public ::wm::AcceleratorDelegate {
 public:
  PreTargetAcceleratorHandler();
  ~PreTargetAcceleratorHandler() override;

  // wm::AcceleratorDelegate:
  bool ProcessAccelerator(const ui::KeyEvent& event,
                          const ui::Accelerator& accelerator) override;

 private:
  // Returns true if the window should be allowed a chance to handle
  // system keys.
  bool CanConsumeSystemKeys(aura::Window* target, const ui::KeyEvent& event);

  // Returns true if the |accelerator| should be processed now.
  bool ShouldProcessAcceleratorNow(aura::Window* target,
                                   const ui::KeyEvent& event,
                                   const ui::Accelerator& accelerator);

  // Records a histogram on how long the "Search" key is held when a user
  // presses an accelerator that involes the "Search" key.
  void RecordSearchKeyStats(const ui::Accelerator& accelerator);

  enum SearchKeyState { RELEASED = 0, PRESSED, RECORDED };
  SearchKeyState search_key_state_ = RELEASED;
  base::TimeTicks search_key_pressed_timestamp_;

  DISALLOW_COPY_AND_ASSIGN(PreTargetAcceleratorHandler);
};

}  // namespace ash

#endif  // ASH_ACCELERATORS_PRE_TARGET_ACCELERATOR_HANDLER_H_
