1c29fa5a6Sopenharmony_ci/* 2c29fa5a6Sopenharmony_ci * Copyright (c) 2021-2024 Huawei Device Co., Ltd. 3c29fa5a6Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4c29fa5a6Sopenharmony_ci * you may not use this file except in compliance with the License. 5c29fa5a6Sopenharmony_ci * You may obtain a copy of the License at 6c29fa5a6Sopenharmony_ci * 7c29fa5a6Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8c29fa5a6Sopenharmony_ci * 9c29fa5a6Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10c29fa5a6Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11c29fa5a6Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12c29fa5a6Sopenharmony_ci * See the License for the specific language governing permissions and 13c29fa5a6Sopenharmony_ci * limitations under the License. 14c29fa5a6Sopenharmony_ci */ 15c29fa5a6Sopenharmony_ci 16c29fa5a6Sopenharmony_ci#ifndef KEY_COMMAND_HANDLER_H 17c29fa5a6Sopenharmony_ci#define KEY_COMMAND_HANDLER_H 18c29fa5a6Sopenharmony_ci 19c29fa5a6Sopenharmony_ci#include <chrono> 20c29fa5a6Sopenharmony_ci#include <condition_variable> 21c29fa5a6Sopenharmony_ci#include <functional> 22c29fa5a6Sopenharmony_ci#include <fstream> 23c29fa5a6Sopenharmony_ci#include <map> 24c29fa5a6Sopenharmony_ci#include <mutex> 25c29fa5a6Sopenharmony_ci#include <set> 26c29fa5a6Sopenharmony_ci#include <thread> 27c29fa5a6Sopenharmony_ci#include <vector> 28c29fa5a6Sopenharmony_ci 29c29fa5a6Sopenharmony_ci#include "nocopyable.h" 30c29fa5a6Sopenharmony_ci#include "preferences.h" 31c29fa5a6Sopenharmony_ci#include "preferences_errno.h" 32c29fa5a6Sopenharmony_ci#include "preferences_helper.h" 33c29fa5a6Sopenharmony_ci#include "window_info.h" 34c29fa5a6Sopenharmony_ci 35c29fa5a6Sopenharmony_ci#include "i_input_event_handler.h" 36c29fa5a6Sopenharmony_ci#include "key_event.h" 37c29fa5a6Sopenharmony_ci#include "struct_multimodal.h" 38c29fa5a6Sopenharmony_ci 39c29fa5a6Sopenharmony_cinamespace OHOS { 40c29fa5a6Sopenharmony_cinamespace MMI { 41c29fa5a6Sopenharmony_cienum KeyCommandType : int32_t { 42c29fa5a6Sopenharmony_ci TYPE_SHORTKEY = 0, 43c29fa5a6Sopenharmony_ci TYPE_SEQUENCE = 1, 44c29fa5a6Sopenharmony_ci TYPE_FINGERSCENE = 2, 45c29fa5a6Sopenharmony_ci TYPE_REPEAT_KEY = 3, 46c29fa5a6Sopenharmony_ci TYPE_MULTI_FINGERS = 4, 47c29fa5a6Sopenharmony_ci}; 48c29fa5a6Sopenharmony_ci 49c29fa5a6Sopenharmony_cienum class KnuckleType : int32_t { 50c29fa5a6Sopenharmony_ci KNUCKLE_TYPE_SINGLE = 0, 51c29fa5a6Sopenharmony_ci KNUCKLE_TYPE_DOUBLE = 1, 52c29fa5a6Sopenharmony_ci}; 53c29fa5a6Sopenharmony_ci 54c29fa5a6Sopenharmony_cienum class NotifyType : int32_t { 55c29fa5a6Sopenharmony_ci CANCEL, 56c29fa5a6Sopenharmony_ci INCONSISTENTGESTURE, 57c29fa5a6Sopenharmony_ci REGIONGESTURE, 58c29fa5a6Sopenharmony_ci LETTERGESTURE, 59c29fa5a6Sopenharmony_ci OTHER 60c29fa5a6Sopenharmony_ci}; 61c29fa5a6Sopenharmony_ci 62c29fa5a6Sopenharmony_cistruct Ability { 63c29fa5a6Sopenharmony_ci std::string bundleName; 64c29fa5a6Sopenharmony_ci std::string abilityName; 65c29fa5a6Sopenharmony_ci std::string action; 66c29fa5a6Sopenharmony_ci std::string type; 67c29fa5a6Sopenharmony_ci std::string deviceId; 68c29fa5a6Sopenharmony_ci std::string uri; 69c29fa5a6Sopenharmony_ci std::string abilityType; 70c29fa5a6Sopenharmony_ci std::vector<std::string> entities; 71c29fa5a6Sopenharmony_ci std::map<std::string, std::string> params; 72c29fa5a6Sopenharmony_ci}; 73c29fa5a6Sopenharmony_ci 74c29fa5a6Sopenharmony_cistruct ShortcutKey { 75c29fa5a6Sopenharmony_ci std::set<int32_t> preKeys; 76c29fa5a6Sopenharmony_ci std::string businessId; 77c29fa5a6Sopenharmony_ci std::string statusConfig; 78c29fa5a6Sopenharmony_ci bool statusConfigValue { true }; 79c29fa5a6Sopenharmony_ci int32_t finalKey { -1 }; 80c29fa5a6Sopenharmony_ci int32_t keyDownDuration { 0 }; 81c29fa5a6Sopenharmony_ci int32_t triggerType { KeyEvent::KEY_ACTION_DOWN }; 82c29fa5a6Sopenharmony_ci int32_t timerId { -1 }; 83c29fa5a6Sopenharmony_ci#ifdef SHORTCUT_KEY_MANAGER_ENABLED 84c29fa5a6Sopenharmony_ci int32_t shortcutId { -1 }; 85c29fa5a6Sopenharmony_ci#endif // SHORTCUT_KEY_MANAGER_ENABLED 86c29fa5a6Sopenharmony_ci Ability ability; 87c29fa5a6Sopenharmony_ci void Print() const; 88c29fa5a6Sopenharmony_ci}; 89c29fa5a6Sopenharmony_ci 90c29fa5a6Sopenharmony_cistruct SequenceKey { 91c29fa5a6Sopenharmony_ci int32_t keyCode { -1 }; 92c29fa5a6Sopenharmony_ci int32_t keyAction { 0 }; 93c29fa5a6Sopenharmony_ci int64_t actionTime { 0 }; 94c29fa5a6Sopenharmony_ci int64_t delay { 0 }; 95c29fa5a6Sopenharmony_ci bool operator!=(const SequenceKey &sequenceKey) 96c29fa5a6Sopenharmony_ci { 97c29fa5a6Sopenharmony_ci return (keyCode != sequenceKey.keyCode) || (keyAction != sequenceKey.keyAction); 98c29fa5a6Sopenharmony_ci } 99c29fa5a6Sopenharmony_ci}; 100c29fa5a6Sopenharmony_ci 101c29fa5a6Sopenharmony_cistruct ExcludeKey { 102c29fa5a6Sopenharmony_ci int32_t keyCode { -1 }; 103c29fa5a6Sopenharmony_ci int32_t keyAction { -1 }; 104c29fa5a6Sopenharmony_ci int64_t delay { 0 }; 105c29fa5a6Sopenharmony_ci}; 106c29fa5a6Sopenharmony_ci 107c29fa5a6Sopenharmony_cistruct Sequence { 108c29fa5a6Sopenharmony_ci std::vector<SequenceKey> sequenceKeys; 109c29fa5a6Sopenharmony_ci std::string statusConfig; 110c29fa5a6Sopenharmony_ci bool statusConfigValue { true }; 111c29fa5a6Sopenharmony_ci int64_t abilityStartDelay { 0 }; 112c29fa5a6Sopenharmony_ci int32_t timerId { -1 }; 113c29fa5a6Sopenharmony_ci Ability ability; 114c29fa5a6Sopenharmony_ci friend std::ostream& operator<<(std::ostream&, const Sequence&); 115c29fa5a6Sopenharmony_ci}; 116c29fa5a6Sopenharmony_ci 117c29fa5a6Sopenharmony_cistruct TwoFingerGesture { 118c29fa5a6Sopenharmony_ci inline static constexpr auto MAX_TOUCH_NUM = 2; 119c29fa5a6Sopenharmony_ci bool active = false; 120c29fa5a6Sopenharmony_ci int32_t timerId = -1; 121c29fa5a6Sopenharmony_ci int64_t abilityStartDelay = 0; 122c29fa5a6Sopenharmony_ci Ability ability; 123c29fa5a6Sopenharmony_ci struct { 124c29fa5a6Sopenharmony_ci int32_t id { 0 }; 125c29fa5a6Sopenharmony_ci int32_t x { 0 }; 126c29fa5a6Sopenharmony_ci int32_t y { 0 }; 127c29fa5a6Sopenharmony_ci int64_t downTime { 0 }; 128c29fa5a6Sopenharmony_ci } touches[MAX_TOUCH_NUM]; 129c29fa5a6Sopenharmony_ci}; 130c29fa5a6Sopenharmony_ci 131c29fa5a6Sopenharmony_cistruct KnuckleGesture { 132c29fa5a6Sopenharmony_ci std::shared_ptr<PointerEvent> lastPointerDownEvent { nullptr }; 133c29fa5a6Sopenharmony_ci bool state { false }; 134c29fa5a6Sopenharmony_ci int64_t lastPointerUpTime { 0 }; 135c29fa5a6Sopenharmony_ci int64_t downToPrevUpTime { 0 }; 136c29fa5a6Sopenharmony_ci float doubleClickDistance { 0.0f }; 137c29fa5a6Sopenharmony_ci Ability ability; 138c29fa5a6Sopenharmony_ci struct { 139c29fa5a6Sopenharmony_ci int32_t id { 0 }; 140c29fa5a6Sopenharmony_ci int32_t x { 0 }; 141c29fa5a6Sopenharmony_ci int32_t y { 0 }; 142c29fa5a6Sopenharmony_ci } lastDownPointer; 143c29fa5a6Sopenharmony_ci}; 144c29fa5a6Sopenharmony_ci 145c29fa5a6Sopenharmony_cistruct MultiFingersTap { 146c29fa5a6Sopenharmony_ci Ability ability; 147c29fa5a6Sopenharmony_ci}; 148c29fa5a6Sopenharmony_ci 149c29fa5a6Sopenharmony_cistruct RepeatKey { 150c29fa5a6Sopenharmony_ci int32_t keyCode { -1 }; 151c29fa5a6Sopenharmony_ci int32_t keyAction { 0 }; 152c29fa5a6Sopenharmony_ci int32_t times { 0 }; 153c29fa5a6Sopenharmony_ci int64_t actionTime { 0 }; 154c29fa5a6Sopenharmony_ci int64_t delay { 0 }; 155c29fa5a6Sopenharmony_ci std::string statusConfig; 156c29fa5a6Sopenharmony_ci bool statusConfigValue { true }; 157c29fa5a6Sopenharmony_ci Ability ability; 158c29fa5a6Sopenharmony_ci}; 159c29fa5a6Sopenharmony_ci 160c29fa5a6Sopenharmony_cistruct KnuckleSwitch { 161c29fa5a6Sopenharmony_ci std::string statusConfig { "" }; 162c29fa5a6Sopenharmony_ci bool statusConfigValue { false }; 163c29fa5a6Sopenharmony_ci}; 164c29fa5a6Sopenharmony_ci 165c29fa5a6Sopenharmony_ciclass KeyCommandHandler final : public IInputEventHandler { 166c29fa5a6Sopenharmony_cipublic: 167c29fa5a6Sopenharmony_ci KeyCommandHandler() = default; 168c29fa5a6Sopenharmony_ci DISALLOW_COPY_AND_MOVE(KeyCommandHandler); 169c29fa5a6Sopenharmony_ci ~KeyCommandHandler() override = default; 170c29fa5a6Sopenharmony_ci int32_t UpdateSettingsXml(const std::string &businessId, int32_t delay); 171c29fa5a6Sopenharmony_ci int32_t EnableCombineKey(bool enable); 172c29fa5a6Sopenharmony_ci KnuckleGesture GetSingleKnuckleGesture() const; 173c29fa5a6Sopenharmony_ci KnuckleGesture GetDoubleKnuckleGesture() const; 174c29fa5a6Sopenharmony_ci void Dump(int32_t fd, const std::vector<std::string> &args); 175c29fa5a6Sopenharmony_ci void PrintGestureInfo(int32_t fd); 176c29fa5a6Sopenharmony_ci std::string ConvertKeyActionToString(int32_t keyAction); 177c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_KEYBOARD 178c29fa5a6Sopenharmony_ci void HandleKeyEvent(const std::shared_ptr<KeyEvent> keyEvent) override; 179c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_KEYBOARD 180c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_POINTER 181c29fa5a6Sopenharmony_ci void HandlePointerEvent(const std::shared_ptr<PointerEvent> pointerEvent) override; 182c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER 183c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_TOUCH 184c29fa5a6Sopenharmony_ci void HandleTouchEvent(const std::shared_ptr<PointerEvent> pointerEvent) override; 185c29fa5a6Sopenharmony_ci void HandlePointerActionDownEvent(const std::shared_ptr<PointerEvent> touchEvent); 186c29fa5a6Sopenharmony_ci void HandlePointerActionMoveEvent(const std::shared_ptr<PointerEvent> touchEvent); 187c29fa5a6Sopenharmony_ci void HandlePointerActionUpEvent(const std::shared_ptr<PointerEvent> touchEvent); 188c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_TOUCH 189c29fa5a6Sopenharmony_ci void SetKnuckleDoubleTapIntervalTime(int64_t interval); 190c29fa5a6Sopenharmony_ci void SetKnuckleDoubleTapDistance(float distance); 191c29fa5a6Sopenharmony_ci bool GetKnuckleSwitchValue(); 192c29fa5a6Sopenharmony_ci bool CheckInputMethodArea(const std::shared_ptr<PointerEvent> touchEvent); 193c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_KEYBOARD 194c29fa5a6Sopenharmony_ci bool OnHandleEvent(const std::shared_ptr<KeyEvent> keyEvent); 195c29fa5a6Sopenharmony_ci int32_t SetIsFreezePowerKey(const std::string pageName); 196c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_KEYBOARD 197c29fa5a6Sopenharmony_ci#if defined(OHOS_BUILD_ENABLE_POINTER) || defined(OHOS_BUILD_ENABLE_TOUCH) 198c29fa5a6Sopenharmony_ci bool OnHandleEvent(const std::shared_ptr<PointerEvent> pointerEvent); 199c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_POINTER || OHOS_BUILD_ENABLE_TOUCH 200c29fa5a6Sopenharmony_ci void InitKeyObserver(); 201c29fa5a6Sopenharmony_ci#ifdef UNIT_TEST 202c29fa5a6Sopenharmony_cipublic: 203c29fa5a6Sopenharmony_ci#else 204c29fa5a6Sopenharmony_ciprivate: 205c29fa5a6Sopenharmony_ci#endif // UNIT_TEST 206c29fa5a6Sopenharmony_ci void Print(); 207c29fa5a6Sopenharmony_ci void PrintSeq(); 208c29fa5a6Sopenharmony_ci void PrintExcludeKeys(); 209c29fa5a6Sopenharmony_ci bool ParseConfig(); 210c29fa5a6Sopenharmony_ci bool ParseExcludeConfig(); 211c29fa5a6Sopenharmony_ci bool ParseJson(const std::string &configFile); 212c29fa5a6Sopenharmony_ci bool ParseExcludeJson(const std::string &configFile); 213c29fa5a6Sopenharmony_ci void ParseRepeatKeyMaxCount(); 214c29fa5a6Sopenharmony_ci void ParseStatusConfigObserver(); 215c29fa5a6Sopenharmony_ci void LaunchAbility(const Ability &ability); 216c29fa5a6Sopenharmony_ci void LaunchAbility(const Ability &ability, int64_t delay); 217c29fa5a6Sopenharmony_ci void LaunchAbility(const ShortcutKey &key); 218c29fa5a6Sopenharmony_ci void LaunchAbility(const Sequence &sequence); 219c29fa5a6Sopenharmony_ci void LaunchRepeatKeyAbility(const RepeatKey &item, bool &isLaunched, const std::shared_ptr<KeyEvent> keyEvent); 220c29fa5a6Sopenharmony_ci bool IsKeyMatch(const ShortcutKey &shortcutKey, const std::shared_ptr<KeyEvent> &key); 221c29fa5a6Sopenharmony_ci bool IsRepeatKeyEvent(const SequenceKey &sequenceKey); 222c29fa5a6Sopenharmony_ci bool HandleKeyUp(const std::shared_ptr<KeyEvent> &keyEvent, const ShortcutKey &shortcutKey); 223c29fa5a6Sopenharmony_ci bool HandleKeyDown(ShortcutKey &shortcutKey); 224c29fa5a6Sopenharmony_ci bool HandleKeyCancel(ShortcutKey &shortcutKey); 225c29fa5a6Sopenharmony_ci bool PreHandleEvent(const std::shared_ptr<KeyEvent> key); 226c29fa5a6Sopenharmony_ci bool HandleEvent(const std::shared_ptr<KeyEvent> key); 227c29fa5a6Sopenharmony_ci bool HandleKeyUpCancel(const RepeatKey &item, const std::shared_ptr<KeyEvent> keyEvent); 228c29fa5a6Sopenharmony_ci bool HandleRepeatKeyCount(const RepeatKey &item, const std::shared_ptr<KeyEvent> keyEvent); 229c29fa5a6Sopenharmony_ci void HandleRepeatKeyOwnCount(const RepeatKey &item); 230c29fa5a6Sopenharmony_ci bool HandleRepeatKey(const RepeatKey& item, bool &isLaunchAbility, const std::shared_ptr<KeyEvent> keyEvent); 231c29fa5a6Sopenharmony_ci bool HandleRepeatKeys(const std::shared_ptr<KeyEvent> keyEvent); 232c29fa5a6Sopenharmony_ci bool HandleRepeatKeyAbility(const RepeatKey &item, bool &isLaunched, 233c29fa5a6Sopenharmony_ci const std::shared_ptr<KeyEvent> keyEvent, bool isMaxTimes); 234c29fa5a6Sopenharmony_ci bool HandleSequence(Sequence& sequence, bool &isLaunchAbility); 235c29fa5a6Sopenharmony_ci bool HandleNormalSequence(Sequence& sequence, bool &isLaunchAbility); 236c29fa5a6Sopenharmony_ci bool HandleMatchedSequence(Sequence& sequence, bool &isLaunchAbility); 237c29fa5a6Sopenharmony_ci bool HandleScreenLocked(Sequence& sequence, bool &isLaunchAbility); 238c29fa5a6Sopenharmony_ci bool IsActiveSequenceRepeating(std::shared_ptr<KeyEvent> keyEvent) const; 239c29fa5a6Sopenharmony_ci void MarkActiveSequence(bool active); 240c29fa5a6Sopenharmony_ci bool HandleSequences(const std::shared_ptr<KeyEvent> keyEvent); 241c29fa5a6Sopenharmony_ci bool HandleShortKeys(const std::shared_ptr<KeyEvent> keyEvent); 242c29fa5a6Sopenharmony_ci bool MatchShortcutKeys(const std::shared_ptr<KeyEvent> keyEvent); 243c29fa5a6Sopenharmony_ci bool MatchShortcutKey(std::shared_ptr<KeyEvent> keyEvent, 244c29fa5a6Sopenharmony_ci ShortcutKey &shortcutKey, std::vector<ShortcutKey> &upAbilities); 245c29fa5a6Sopenharmony_ci bool HandleConsumedKeyEvent(const std::shared_ptr<KeyEvent> keyEvent); 246c29fa5a6Sopenharmony_ci bool HandleMulFingersTap(const std::shared_ptr<PointerEvent> pointerEvent); 247c29fa5a6Sopenharmony_ci bool AddSequenceKey(const std::shared_ptr<KeyEvent> keyEvent); 248c29fa5a6Sopenharmony_ci std::shared_ptr<KeyEvent> CreateKeyEvent(int32_t keyCode, int32_t keyAction, bool isPressed); 249c29fa5a6Sopenharmony_ci bool IsEnableCombineKey(const std::shared_ptr<KeyEvent> key); 250c29fa5a6Sopenharmony_ci bool IsExcludeKey(const std::shared_ptr<KeyEvent> key); 251c29fa5a6Sopenharmony_ci void RemoveSubscribedTimer(int32_t keyCode); 252c29fa5a6Sopenharmony_ci void HandleSpecialKeys(int32_t keyCode, int32_t keyAction); 253c29fa5a6Sopenharmony_ci void InterruptTimers(); 254c29fa5a6Sopenharmony_ci void HandlePointerVisibleKeys(const std::shared_ptr<KeyEvent> &keyEvent); 255c29fa5a6Sopenharmony_ci int32_t GetKeyDownDurationFromXml(const std::string &businessId); 256c29fa5a6Sopenharmony_ci void SendKeyEvent(); 257c29fa5a6Sopenharmony_ci bool CheckSpecialRepeatKey(RepeatKey& item, const std::shared_ptr<KeyEvent> keyEvent); 258c29fa5a6Sopenharmony_ci template <class T> 259c29fa5a6Sopenharmony_ci void CreateStatusConfigObserver(T& item); 260c29fa5a6Sopenharmony_ci void ResetLastMatchedKey() 261c29fa5a6Sopenharmony_ci { 262c29fa5a6Sopenharmony_ci lastMatchedKey_.preKeys.clear(); 263c29fa5a6Sopenharmony_ci lastMatchedKey_.finalKey = -1; 264c29fa5a6Sopenharmony_ci lastMatchedKey_.timerId = -1; 265c29fa5a6Sopenharmony_ci lastMatchedKey_.keyDownDuration = 0; 266c29fa5a6Sopenharmony_ci } 267c29fa5a6Sopenharmony_ci void ResetCurrentLaunchAbilityKey() 268c29fa5a6Sopenharmony_ci { 269c29fa5a6Sopenharmony_ci currentLaunchAbilityKey_.preKeys.clear(); 270c29fa5a6Sopenharmony_ci currentLaunchAbilityKey_.finalKey = -1; 271c29fa5a6Sopenharmony_ci currentLaunchAbilityKey_.timerId = -1; 272c29fa5a6Sopenharmony_ci currentLaunchAbilityKey_.keyDownDuration = 0; 273c29fa5a6Sopenharmony_ci } 274c29fa5a6Sopenharmony_ci 275c29fa5a6Sopenharmony_ci void ResetSequenceKeys() 276c29fa5a6Sopenharmony_ci { 277c29fa5a6Sopenharmony_ci keys_.clear(); 278c29fa5a6Sopenharmony_ci filterSequences_.clear(); 279c29fa5a6Sopenharmony_ci } 280c29fa5a6Sopenharmony_ci bool SkipFinalKey(const int32_t keyCode, const std::shared_ptr<KeyEvent> &key); 281c29fa5a6Sopenharmony_ci 282c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_TOUCH 283c29fa5a6Sopenharmony_ci void OnHandleTouchEvent(const std::shared_ptr<PointerEvent> touchEvent); 284c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_TOUCH 285c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_GESTURESENSE_WRAPPER 286c29fa5a6Sopenharmony_ci void StartTwoFingerGesture(); 287c29fa5a6Sopenharmony_ci void StopTwoFingerGesture(); 288c29fa5a6Sopenharmony_ci bool CheckTwoFingerGestureAction() const; 289c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_GESTURESENSE_WRAPPER 290c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_GESTURESENSE_WRAPPER 291c29fa5a6Sopenharmony_ci void HandleFingerGestureDownEvent(const std::shared_ptr<PointerEvent> touchEvent); 292c29fa5a6Sopenharmony_ci void HandleFingerGestureUpEvent(const std::shared_ptr<PointerEvent> touchEvent); 293c29fa5a6Sopenharmony_ci void HandleKnuckleGestureDownEvent(const std::shared_ptr<PointerEvent> touchEvent); 294c29fa5a6Sopenharmony_ci void HandleKnuckleGestureUpEvent(const std::shared_ptr<PointerEvent> touchEvent); 295c29fa5a6Sopenharmony_ci std::pair<int32_t, int32_t> CalcDrawCoordinate(const DisplayInfo& displayInfo, 296c29fa5a6Sopenharmony_ci PointerEvent::PointerItem pointerItem); 297c29fa5a6Sopenharmony_ci void SingleKnuckleGestureProcesser(const std::shared_ptr<PointerEvent> touchEvent); 298c29fa5a6Sopenharmony_ci void DoubleKnuckleGestureProcesser(const std::shared_ptr<PointerEvent> touchEvent); 299c29fa5a6Sopenharmony_ci void ReportKnuckleScreenCapture(const std::shared_ptr<PointerEvent> touchEvent); 300c29fa5a6Sopenharmony_ci void KnuckleGestureProcessor(std::shared_ptr<PointerEvent> touchEvent, 301c29fa5a6Sopenharmony_ci KnuckleGesture &knuckleGesture, KnuckleType type); 302c29fa5a6Sopenharmony_ci void UpdateKnuckleGestureInfo(const std::shared_ptr<PointerEvent> touchEvent, KnuckleGesture &knuckleGesture); 303c29fa5a6Sopenharmony_ci void AdjustTimeIntervalConfigIfNeed(int64_t intervalTime); 304c29fa5a6Sopenharmony_ci void AdjustDistanceConfigIfNeed(float distance); 305c29fa5a6Sopenharmony_ci bool CheckKnuckleCondition(std::shared_ptr<PointerEvent> touchEvent); 306c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_GESTURESENSE_WRAPPER 307c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_TOUCH 308c29fa5a6Sopenharmony_ci int32_t ConvertVPToPX(int32_t vp) const; 309c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_TOUCH 310c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_GESTURESENSE_WRAPPER 311c29fa5a6Sopenharmony_ci void HandleKnuckleGestureEvent(std::shared_ptr<PointerEvent> touchEvent); 312c29fa5a6Sopenharmony_ci void HandleKnuckleGestureTouchDown(std::shared_ptr<PointerEvent> touchEvent); 313c29fa5a6Sopenharmony_ci void HandleKnuckleGestureTouchMove(std::shared_ptr<PointerEvent> touchEvent); 314c29fa5a6Sopenharmony_ci void HandleKnuckleGestureTouchUp(std::shared_ptr<PointerEvent> touchEvent); 315c29fa5a6Sopenharmony_ci void ProcessKnuckleGestureTouchUp(NotifyType type); 316c29fa5a6Sopenharmony_ci void ResetKnuckleGesture(); 317c29fa5a6Sopenharmony_ci std::string GesturePointsToStr() const; 318c29fa5a6Sopenharmony_ci bool IsValidAction(int32_t action); 319c29fa5a6Sopenharmony_ci void ReportIfNeed(); 320c29fa5a6Sopenharmony_ci void ReportRegionGesture(); 321c29fa5a6Sopenharmony_ci void ReportLetterGesture(); 322c29fa5a6Sopenharmony_ci void ReportGestureInfo(); 323c29fa5a6Sopenharmony_ci bool IsMatchedAbility(std::vector<float> gesturePoints_, float gestureLastX, float gestureLastY); 324c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_GESTURESENSE_WRAPPER 325c29fa5a6Sopenharmony_ci void CheckAndUpdateTappingCountAtDown(std::shared_ptr<PointerEvent> touchEvent); 326c29fa5a6Sopenharmony_ci bool TouchPadKnuckleDoubleClickHandle(std::shared_ptr<KeyEvent> event); 327c29fa5a6Sopenharmony_ci void TouchPadKnuckleDoubleClickProcess(const std::string bundleName, const std::string abilityName, 328c29fa5a6Sopenharmony_ci const std::string action); 329c29fa5a6Sopenharmony_ciprivate: 330c29fa5a6Sopenharmony_ci Sequence matchedSequence_; 331c29fa5a6Sopenharmony_ci ShortcutKey lastMatchedKey_; 332c29fa5a6Sopenharmony_ci ShortcutKey currentLaunchAbilityKey_; 333c29fa5a6Sopenharmony_ci std::map<std::string, ShortcutKey> shortcutKeys_; 334c29fa5a6Sopenharmony_ci std::vector<Sequence> sequences_; 335c29fa5a6Sopenharmony_ci std::vector<ExcludeKey> excludeKeys_; 336c29fa5a6Sopenharmony_ci std::vector<Sequence> filterSequences_; 337c29fa5a6Sopenharmony_ci std::vector<SequenceKey> keys_; 338c29fa5a6Sopenharmony_ci std::vector<RepeatKey> repeatKeys_; 339c29fa5a6Sopenharmony_ci std::vector<std::string> businessIds_; 340c29fa5a6Sopenharmony_ci bool isParseConfig_ { false }; 341c29fa5a6Sopenharmony_ci bool isParseExcludeConfig_ { false }; 342c29fa5a6Sopenharmony_ci std::map<int32_t, int32_t> specialKeys_; 343c29fa5a6Sopenharmony_ci std::map<int32_t, std::list<int32_t>> specialTimers_; 344c29fa5a6Sopenharmony_ci std::map<int32_t, int32_t> repeatKeyMaxTimes_; 345c29fa5a6Sopenharmony_ci std::map<std::string, int32_t> repeatKeyTimerIds_; 346c29fa5a6Sopenharmony_ci std::map<std::string, int32_t> repeatKeyCountMap_; 347c29fa5a6Sopenharmony_ci TwoFingerGesture twoFingerGesture_; 348c29fa5a6Sopenharmony_ci KnuckleGesture singleKnuckleGesture_; 349c29fa5a6Sopenharmony_ci KnuckleGesture doubleKnuckleGesture_; 350c29fa5a6Sopenharmony_ci MultiFingersTap threeFingersTap_; 351c29fa5a6Sopenharmony_ci bool isTimeConfig_ { false }; 352c29fa5a6Sopenharmony_ci bool isDistanceConfig_ { false }; 353c29fa5a6Sopenharmony_ci bool isKnuckleSwitchConfig_ { false }; 354c29fa5a6Sopenharmony_ci struct KnuckleSwitch knuckleSwitch_; 355c29fa5a6Sopenharmony_ci int32_t checkAdjustIntervalTimeCount_ { 0 }; 356c29fa5a6Sopenharmony_ci int32_t checkAdjustDistanceCount_ { 0 }; 357c29fa5a6Sopenharmony_ci int64_t downToPrevUpTimeConfig_ { 0 }; 358c29fa5a6Sopenharmony_ci float downToPrevDownDistanceConfig_ { 0.0f }; 359c29fa5a6Sopenharmony_ci float distanceDefaultConfig_ { 0.0f }; 360c29fa5a6Sopenharmony_ci float distanceLongConfig_ { 0.0f }; 361c29fa5a6Sopenharmony_ci bool enableCombineKey_ { true }; 362c29fa5a6Sopenharmony_ci RepeatKey repeatKey_; 363c29fa5a6Sopenharmony_ci int32_t maxCount_ { 0 }; 364c29fa5a6Sopenharmony_ci int32_t count_ { 0 }; 365c29fa5a6Sopenharmony_ci int32_t repeatTimerId_ { -1 }; 366c29fa5a6Sopenharmony_ci int32_t knuckleCount_ { 0 }; 367c29fa5a6Sopenharmony_ci int32_t sosDelayTimerId_ { -1 }; 368c29fa5a6Sopenharmony_ci int64_t downActionTime_ { 0 }; 369c29fa5a6Sopenharmony_ci int64_t lastDownActionTime_ { 0 }; 370c29fa5a6Sopenharmony_ci int64_t lastVolumeDownActionTime_ { 0 }; 371c29fa5a6Sopenharmony_ci int64_t upActionTime_ { 0 }; 372c29fa5a6Sopenharmony_ci int32_t launchAbilityCount_ { 0 }; 373c29fa5a6Sopenharmony_ci int64_t intervalTime_ { 120000 }; 374c29fa5a6Sopenharmony_ci std::atomic<bool> isFreezePowerKey_ { false }; 375c29fa5a6Sopenharmony_ci bool isDownStart_ { false }; 376c29fa5a6Sopenharmony_ci bool isKeyCancel_ { false }; 377c29fa5a6Sopenharmony_ci bool sequenceOccurred_ { false }; 378c29fa5a6Sopenharmony_ci bool isHandleSequence_ { false }; 379c29fa5a6Sopenharmony_ci bool isParseMaxCount_ { false }; 380c29fa5a6Sopenharmony_ci bool isParseStatusConfig_ { false }; 381c29fa5a6Sopenharmony_ci bool isDoubleClick_ { false }; 382c29fa5a6Sopenharmony_ci int32_t lastKeyEventCode_ { -1 }; 383c29fa5a6Sopenharmony_ci std::string sessionKey_ { }; 384c29fa5a6Sopenharmony_ci bool isStartBase_ { false }; 385c29fa5a6Sopenharmony_ci#ifdef OHOS_BUILD_ENABLE_GESTURESENSE_WRAPPER 386c29fa5a6Sopenharmony_ci bool isGesturing_ { false }; 387c29fa5a6Sopenharmony_ci bool isLetterGesturing_ { false }; 388c29fa5a6Sopenharmony_ci bool isLastGestureSucceed_ { false }; 389c29fa5a6Sopenharmony_ci float gestureLastX_ { 0.0f }; 390c29fa5a6Sopenharmony_ci float gestureLastY_ { 0.0f }; 391c29fa5a6Sopenharmony_ci float gestureTrackLength_ { 0.0f }; 392c29fa5a6Sopenharmony_ci std::vector<float> gesturePoints_; 393c29fa5a6Sopenharmony_ci std::vector<int64_t> gestureTimeStamps_; 394c29fa5a6Sopenharmony_ci int64_t drawOFailTimestamp_ { 0 }; 395c29fa5a6Sopenharmony_ci int64_t drawOSuccTimestamp_ { 0 }; 396c29fa5a6Sopenharmony_ci Direction lastDirection_ { DIRECTION0 }; 397c29fa5a6Sopenharmony_ci#endif // OHOS_BUILD_ENABLE_GESTURESENSE_WRAPPER 398c29fa5a6Sopenharmony_ci int64_t lastDownTime_ { 0 }; 399c29fa5a6Sopenharmony_ci int64_t previousUpTime_ { 0 }; 400c29fa5a6Sopenharmony_ci int32_t tappingCount_ { 0 }; 401c29fa5a6Sopenharmony_ci std::mutex mutex_; 402c29fa5a6Sopenharmony_ci std::map<int32_t, int64_t> lastPointerDownTime_; 403c29fa5a6Sopenharmony_ci}; 404c29fa5a6Sopenharmony_ci} // namespace MMI 405c29fa5a6Sopenharmony_ci} // namespace OHOS 406c29fa5a6Sopenharmony_ci#endif // KEY_COMMAND_HANDLER_H