blob: 6f59c351b09dd6c0b26d756f48b20cfb469f03ce [file] [log] [blame]
// Copyright 2020 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_BASE_IME_WIN_VIRTUAL_KEYBOARD_DEBOUNCE_TIMER_H_
#define UI_BASE_IME_WIN_VIRTUAL_KEYBOARD_DEBOUNCE_TIMER_H_
#include "base/callback.h"
#include "base/macros.h"
#include "base/time/time.h"
#include "base/timer/timer.h"
namespace ui {
// This class debounces a method call to the on-screen keyboard show/hide.
// This is used to throttle the TryShow/TryHide system API calls to OS and it
// doesn't introduce a strong guarantee about the keyboard visibility itself as
// that is ultimately controlled by the OS input service.
class VirtualKeyboardDebounceTimer {
public:
explicit VirtualKeyboardDebounceTimer(int delay_ms);
~VirtualKeyboardDebounceTimer();
// Request |callback| to be invoked after the debouncing delay. If called
// while a previous request is still pending, the previous request will be
// cancelled.
void RequestRun(base::OnceClosure callback);
// Cancels any pending request.
void CancelRequest();
private:
// This is called when the |timer_| expires.
// It then invokes the |TryShow()|/|TryHide()| API based on the last reported
// state of |VirtualKeyboardVisibilityRequest|.
void HandleLastVirtualKeyboardVisibility();
// The debounce delay.
int delay_ms_ = 0;
// Tracks when to next invoke |callback_|.
base::OneShotTimer timer_;
// The last time |Run| was invoked.
base::TimeTicks time_last_run_;
// The callback to invoke once |timer_| expires.
base::OnceClosure callback_;
};
} // namespace ui
#endif // UI_BASE_IME_WIN_VIRTUAL_KEYBOARD_DEBOUNCE_TIMER_H_