已合并
ArkWeb 新增文字长按框选中震动特性回合5.0.1 #44058
zhufenghao创建于 2024年9月20日
ArkWeb 新增文字长按框选中震动特性回合5.0.1 #44058
已合并
从refs/pull/44058/head合入到OpenHarmony-5.0.1-Release
共 14 个文件变更+77-8
| @@ -1959,6 +1959,7 @@ void JSWeb::JSBind(BindingTarget globalObj) | |||
| 1959 | JSClass<JSWeb>::StaticMethod("forceDisplayScrollBar", &JSWeb::ForceDisplayScrollBar); | 1959 | JSClass<JSWeb>::StaticMethod("forceDisplayScrollBar", &JSWeb::ForceDisplayScrollBar); |
| 1960 | JSClass<JSWeb>::StaticMethod("keyboardAvoidMode", &JSWeb::KeyboardAvoidMode); | 1960 | JSClass<JSWeb>::StaticMethod("keyboardAvoidMode", &JSWeb::KeyboardAvoidMode); |
| 1961 | JSClass<JSWeb>::StaticMethod("editMenuOptions", &JSWeb::EditMenuOptions); | 1961 | JSClass<JSWeb>::StaticMethod("editMenuOptions", &JSWeb::EditMenuOptions); |
| 1962 | + JSClass<JSWeb>::StaticMethod("enableHapticFeedback", &JSWeb::EnableHapticFeedback); | ||
| 1962 | 1963 | ||
| 1963 | JSClass<JSWeb>::InheritAndBind<JSViewAbstract>(globalObj); | 1964 | JSClass<JSWeb>::InheritAndBind<JSViewAbstract>(globalObj); |
| 1964 | JSWebDialog::JSBind(globalObj); | 1965 | JSWebDialog::JSBind(globalObj); |
| @@ -5120,4 +5121,13 @@ void JSWeb::EditMenuOptions(const JSCallbackInfo& info) | |||
| 5120 | WebModel::GetInstance()->SetEditMenuOptions(std::move(onCreateMenuCallback), std::move(onMenuItemClick)); | 5121 | WebModel::GetInstance()->SetEditMenuOptions(std::move(onCreateMenuCallback), std::move(onMenuItemClick)); |
| 5121 | } | 5122 | } |
| 5122 | 5123 | ||
| 5124 | +void JSWeb::EnableHapticFeedback(const JSCallbackInfo& args) | ||
| 5125 | +{ | ||
| 5126 | + if (args.Length() < 1 || !args[0]->IsBoolean()) { | ||
| 5127 | + return; | ||
| 5128 | + } | ||
| 5129 | + bool isEnabled = args[0]->ToBoolean(); | ||
| 5130 | + WebModel::GetInstance()->SetEnabledHapticFeedback(isEnabled); | ||
| 5131 | +} | ||
| 5132 | + | ||
| 5123 | } // namespace OHOS::Ace::Framework | 5133 | } // namespace OHOS::Ace::Framework |
| @@ -163,6 +163,7 @@ public: | |||
| 163 | static void ForceDisplayScrollBar(const JSCallbackInfo& args); | 163 | static void ForceDisplayScrollBar(const JSCallbackInfo& args); |
| 164 | static void KeyboardAvoidMode(int32_t mode); | 164 | static void KeyboardAvoidMode(int32_t mode); |
| 165 | static void EditMenuOptions(const JSCallbackInfo& info); | 165 | static void EditMenuOptions(const JSCallbackInfo& info); |
| 166 | + static void EnableHapticFeedback(const JSCallbackInfo& args); | ||
| 166 | 167 | ||
| 167 | protected: | 168 | protected: |
| 168 | static void OnCommonDialog(const JSCallbackInfo& args, int dialogEventType); | 169 | static void OnCommonDialog(const JSCallbackInfo& args, int dialogEventType); |
| @@ -1231,4 +1231,12 @@ void WebClientImpl::OnNativeEmbedVisibilityChange(const std::string& embedId, bo | |||
| 1231 | ContainerScope scope(delegate->GetInstanceId()); | 1231 | ContainerScope scope(delegate->GetInstanceId()); |
| 1232 | delegate->OnNativeEmbedVisibilityChange(embedId, visibility); | 1232 | delegate->OnNativeEmbedVisibilityChange(embedId, visibility); |
| 1233 | } | 1233 | } |
| 1234 | + | ||
| 1235 | +void WebClientImpl::StartVibraFeedback(const std::string& vibratorType) | ||
| 1236 | +{ | ||
| 1237 | + auto delegate = webDelegate_.Upgrade(); | ||
| 1238 | + CHECK_NULL_VOID(delegate); | ||
| 1239 | + ContainerScope scope(delegate->GetInstanceId()); | ||
| 1240 | + delegate->StartVibraFeedback(vibratorType); | ||
| 1241 | +} | ||
| 1234 | } // namespace OHOS::Ace | 1242 | } // namespace OHOS::Ace |
| @@ -294,6 +294,8 @@ public: | |||
| 294 | 294 | ||
| 295 | void OnNativeEmbedVisibilityChange(const std::string& embedId, bool visibility) override; | 295 | void OnNativeEmbedVisibilityChange(const std::string& embedId, bool visibility) override; |
| 296 | 296 | ||
| 297 | + void StartVibraFeedback(const std::string& vibratorType) override; | ||
| 298 | + | ||
| 297 | private: | 299 | private: |
| 298 | std::weak_ptr<OHOS::NWeb::NWeb> webviewWeak_; | 300 | std::weak_ptr<OHOS::NWeb::NWeb> webviewWeak_; |
| 299 | WeakPtr<WebDelegate> webDelegate_; | 301 | WeakPtr<WebDelegate> webDelegate_; |
| @@ -7100,4 +7100,11 @@ std::string WebDelegate::SpanstringConvertHtml(const std::vector<uint8_t> &conte | |||
| 7100 | " string length = %{public}u", static_cast<int32_t>(htmlStr.length())); | 7100 | " string length = %{public}u", static_cast<int32_t>(htmlStr.length())); |
| 7101 | return htmlStr; | 7101 | return htmlStr; |
| 7102 | } | 7102 | } |
| 7103 | + | ||
| 7104 | +void WebDelegate::StartVibraFeedback(const std::string& vibratorType) | ||
| 7105 | +{ | ||
| 7106 | + auto webPattern = webPattern_.Upgrade(); | ||
| 7107 | + CHECK_NULL_VOID(webPattern); | ||
| 7108 | + webPattern->StartVibraFeedback(vibratorType); | ||
| 7109 | +} | ||
| 7103 | } // namespace OHOS::Ace | 7110 | } // namespace OHOS::Ace |
| @@ -988,6 +988,7 @@ public: | |||
| 988 | 988 | ||
| 989 | void OnAttachContext(const RefPtr<NG::PipelineContext> &context); | 989 | void OnAttachContext(const RefPtr<NG::PipelineContext> &context); |
| 990 | void OnDetachContext(); | 990 | void OnDetachContext(); |
| 991 | + void StartVibraFeedback(const std::string& vibratorType); | ||
| 991 | 992 | ||
| 992 | int32_t GetInstanceId() const | 993 | int32_t GetInstanceId() const |
| 993 | { | 994 | { |
| @@ -1308,4 +1308,14 @@ void WebPattern::UpdateEditMenuOptions(const NG::OnCreateMenuCallback&& onCreate | |||
| 1308 | { | 1308 | { |
| 1309 | // cross platform is not support now; | 1309 | // cross platform is not support now; |
| 1310 | } | 1310 | } |
| 1311 | + | ||
| 1312 | +void WebPattern::OnEnabledHapticFeedbackUpdate(bool enable) | ||
| 1313 | +{ | ||
| 1314 | + // cross platform is not support now; | ||
| 1315 | +} | ||
| 1316 | + | ||
| 1317 | +void WebPattern::StartVibraFeedback(const std::string& vibratorType) | ||
| 1318 | +{ | ||
| 1319 | + // cross platform is not support now; | ||
| 1320 | +} | ||
| 1311 | } // namespace OHOS::Ace::NG | 1321 | } // namespace OHOS::Ace::NG |
| @@ -369,6 +369,7 @@ public: | |||
| 369 | ACE_DEFINE_PROPERTY_FUNC_WITH_GROUP(WebProperty, NativeEmbedRuleType, std::string); | 369 | ACE_DEFINE_PROPERTY_FUNC_WITH_GROUP(WebProperty, NativeEmbedRuleType, std::string); |
| 370 | ACE_DEFINE_PROPERTY_FUNC_WITH_GROUP(WebProperty, OverlayScrollbarEnabled, bool); | 370 | ACE_DEFINE_PROPERTY_FUNC_WITH_GROUP(WebProperty, OverlayScrollbarEnabled, bool); |
| 371 | ACE_DEFINE_PROPERTY_FUNC_WITH_GROUP(WebProperty, KeyboardAvoidMode, WebKeyboardAvoidMode); | 371 | ACE_DEFINE_PROPERTY_FUNC_WITH_GROUP(WebProperty, KeyboardAvoidMode, WebKeyboardAvoidMode); |
| 372 | + ACE_DEFINE_PROPERTY_FUNC_WITH_GROUP(WebProperty, EnabledHapticFeedback, bool); | ||
| 372 | void RequestFullScreen(); | 373 | void RequestFullScreen(); |
| 373 | void ExitFullScreen(); | 374 | void ExitFullScreen(); |
| 374 | bool IsFullScreen() const | 375 | bool IsFullScreen() const |
| @@ -515,6 +516,7 @@ private: | |||
| 515 | void OnMetaViewportUpdate(bool value); | 516 | void OnMetaViewportUpdate(bool value); |
| 516 | void OnOverlayScrollbarEnabledUpdate(bool value); | 517 | void OnOverlayScrollbarEnabledUpdate(bool value); |
| 517 | void OnKeyboardAvoidModeUpdate(const WebKeyboardAvoidMode& mode); | 518 | void OnKeyboardAvoidModeUpdate(const WebKeyboardAvoidMode& mode); |
| 519 | + void OnEnabledHapticFeedbackUpdate(bool enable); | ||
| 518 | 520 | ||
| 519 | void InitEvent(); | 521 | void InitEvent(); |
| 520 | void InitTouchEvent(const RefPtr<GestureEventHub>& gestureHub); | 522 | void InitTouchEvent(const RefPtr<GestureEventHub>& gestureHub); |
| @@ -570,6 +572,7 @@ private: | |||
| 570 | void UpdateBackgroundColorRightNow(int32_t color); | 572 | void UpdateBackgroundColorRightNow(int32_t color); |
| 571 | void UpdateContentOffset(const RefPtr<LayoutWrapper>& dirty); | 573 | void UpdateContentOffset(const RefPtr<LayoutWrapper>& dirty); |
| 572 | void PostTaskToUI(const std::function<void()>&& task) const; | 574 | void PostTaskToUI(const std::function<void()>&& task) const; |
| 575 | + void StartVibraFeedback(const std::string& vibratorType); | ||
| 573 | 576 | ||
| 574 | std::optional<std::string> webSrc_; | 577 | std::optional<std::string> webSrc_; |
| 575 | std::optional<std::string> webData_; | 578 | std::optional<std::string> webData_; |
| @@ -190,6 +190,7 @@ public: | |||
| 190 | virtual void SetKeyboardAvoidMode(const WebKeyboardAvoidMode& mode) {} | 190 | virtual void SetKeyboardAvoidMode(const WebKeyboardAvoidMode& mode) {} |
| 191 | virtual void SetEditMenuOptions(const NG::OnCreateMenuCallback&& onCreateMenuCallback, | 191 | virtual void SetEditMenuOptions(const NG::OnCreateMenuCallback&& onCreateMenuCallback, |
| 192 | const NG::OnMenuItemClickCallback&& onMenuItemClick) {}; | 192 | const NG::OnMenuItemClickCallback&& onMenuItemClick) {}; |
| 193 | + virtual void SetEnabledHapticFeedback(bool isEnabled) {} | ||
| 193 | private: | 194 | private: |
| 194 | static std::unique_ptr<WebModel> instance_; | 195 | static std::unique_ptr<WebModel> instance_; |
| 195 | static std::mutex mutex_; | 196 | static std::mutex mutex_; |
| @@ -1165,4 +1165,11 @@ void WebModelNG::SetKeyboardAvoidMode(const WebKeyboardAvoidMode& mode) | |||
| 1165 | CHECK_NULL_VOID(webPattern); | 1165 | CHECK_NULL_VOID(webPattern); |
| 1166 | webPattern->UpdateKeyboardAvoidMode(mode); | 1166 | webPattern->UpdateKeyboardAvoidMode(mode); |
| 1167 | } | 1167 | } |
| 1168 | + | ||
| 1169 | +void WebModelNG::SetEnabledHapticFeedback(bool isEnabled) | ||
| 1170 | +{ | ||
| 1171 | + auto webPattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern<WebPattern>(); | ||
| 1172 | + CHECK_NULL_VOID(webPattern); | ||
| 1173 | + webPattern->UpdateEnabledHapticFeedback(isEnabled); | ||
| 1174 | +} | ||
| 1168 | } // namespace OHOS::Ace::NG | 1175 | } // namespace OHOS::Ace::NG |
| @@ -190,6 +190,7 @@ public: | |||
| 190 | void SetKeyboardAvoidMode(const WebKeyboardAvoidMode& mode) override; | 190 | void SetKeyboardAvoidMode(const WebKeyboardAvoidMode& mode) override; |
| 191 | void SetEditMenuOptions(const NG::OnCreateMenuCallback&& onCreateMenuCallback, | 191 | void SetEditMenuOptions(const NG::OnCreateMenuCallback&& onCreateMenuCallback, |
| 192 | const NG::OnMenuItemClickCallback&& onMenuItemClick) override; | 192 | const NG::OnMenuItemClickCallback&& onMenuItemClick) override; |
| 193 | + void SetEnabledHapticFeedback(bool isEnabled) override; | ||
| 193 | }; | 194 | }; |
| 194 | } // namespace OHOS::Ace::NG | 195 | } // namespace OHOS::Ace::NG |
| 195 | 196 | ||
| @@ -27,16 +27,25 @@ | |||
| 27 | 27 | ||
| 28 | 28 | ||
| 29 | 29 | ||
| 30 | + | ||
| 31 | + | ||
| 32 | + | ||
| 33 | + | ||
| 30 | 34 | ||
| 35 | + | ||
| 31 | 36 | ||
| 32 | 37 | ||
| 33 | 38 | ||
| 34 | 39 | ||
| 35 | 40 | ||
| 36 | 41 | ||
| 42 | + | ||
| 37 | 43 | ||
| 38 | 44 | ||
| 39 | 45 | ||
| 46 | + | ||
| 47 | + | ||
| 48 | + | ||
| 40 | 49 | ||
| 41 | 50 | ||
| 42 | 51 | ||
| @@ -61,14 +70,6 @@ | |||
| 61 | 70 | ||
| 62 | 71 | ||
| 63 | 72 | ||
| 64 | - | ||
| 65 | - | ||
| 66 | - | ||
| 67 | - | ||
| 68 | - | ||
| 69 | - | ||
| 70 | - | ||
| 71 | - | ||
| 72 | namespace OHOS::Ace::NG { | 73 | namespace OHOS::Ace::NG { |
| 73 | namespace { | 74 | namespace { |
| 74 | const std::string IMAGE_POINTER_CONTEXT_MENU_PATH = "etc/webview/ohos_nweb/context-menu.svg"; | 75 | const std::string IMAGE_POINTER_CONTEXT_MENU_PATH = "etc/webview/ohos_nweb/context-menu.svg"; |
| @@ -2249,6 +2250,11 @@ void WebPattern::OnKeyboardAvoidModeUpdate(const WebKeyboardAvoidMode& mode) | |||
| 2249 | keyBoardAvoidMode_ = mode; | 2250 | keyBoardAvoidMode_ = mode; |
| 2250 | } | 2251 | } |
| 2251 | 2252 | ||
| 2253 | +void WebPattern::OnEnabledHapticFeedbackUpdate(bool enable) | ||
| 2254 | +{ | ||
| 2255 | + isEnabledHapticFeedback_ = enable; | ||
| 2256 | +} | ||
| 2257 | + | ||
| 2252 | bool WebPattern::IsRootNeedExportTexture() | 2258 | bool WebPattern::IsRootNeedExportTexture() |
| 2253 | { | 2259 | { |
| 2254 | auto host = GetHost(); | 2260 | auto host = GetHost(); |
| @@ -5925,4 +5931,11 @@ void WebPattern::InitAiEngine() | |||
| 5925 | "ArkWebTextInitDataDetect"); | 5931 | "ArkWebTextInitDataDetect"); |
| 5926 | isInit = true; | 5932 | isInit = true; |
| 5927 | } | 5933 | } |
| 5934 | + | ||
| 5935 | +void WebPattern::StartVibraFeedback(const std::string& vibratorType) | ||
| 5936 | +{ | ||
| 5937 | + if (isEnabledHapticFeedback_) { | ||
| 5938 | + NG::VibratorUtils::StartVibraFeedback(vibratorType); | ||
| 5939 | + } | ||
| 5940 | +} | ||
| 5928 | } // namespace OHOS::Ace::NG | 5941 | } // namespace OHOS::Ace::NG |
| @@ -477,6 +477,7 @@ public: | |||
| 477 | ACE_DEFINE_PROPERTY_FUNC_WITH_GROUP(WebProperty, SelectionMenuOptions, WebMenuOptionsParam); | 477 | ACE_DEFINE_PROPERTY_FUNC_WITH_GROUP(WebProperty, SelectionMenuOptions, WebMenuOptionsParam); |
| 478 | ACE_DEFINE_PROPERTY_FUNC_WITH_GROUP(WebProperty, OverlayScrollbarEnabled, bool); | 478 | ACE_DEFINE_PROPERTY_FUNC_WITH_GROUP(WebProperty, OverlayScrollbarEnabled, bool); |
| 479 | ACE_DEFINE_PROPERTY_FUNC_WITH_GROUP(WebProperty, KeyboardAvoidMode, WebKeyboardAvoidMode); | 479 | ACE_DEFINE_PROPERTY_FUNC_WITH_GROUP(WebProperty, KeyboardAvoidMode, WebKeyboardAvoidMode); |
| 480 | + ACE_DEFINE_PROPERTY_FUNC_WITH_GROUP(WebProperty, EnabledHapticFeedback, bool); | ||
| 480 | 481 | ||
| 481 | bool IsFocus() const | 482 | bool IsFocus() const |
| 482 | { | 483 | { |
| @@ -665,6 +666,7 @@ public: | |||
| 665 | void RegisterWebComponentClickCallback(WebComponentClickCallback&& callback); | 666 | void RegisterWebComponentClickCallback(WebComponentClickCallback&& callback); |
| 666 | void UnregisterWebComponentClickCallback(); | 667 | void UnregisterWebComponentClickCallback(); |
| 667 | WebComponentClickCallback GetWebComponentClickCallback() const { return webComponentClickCallback_; } | 668 | WebComponentClickCallback GetWebComponentClickCallback() const { return webComponentClickCallback_; } |
| 669 | + void StartVibraFeedback(const std::string& vibratorType); | ||
| 668 | 670 | ||
| 669 | private: | 671 | private: |
| 670 | friend class WebContextSelectOverlay; | 672 | friend class WebContextSelectOverlay; |
| @@ -750,6 +752,7 @@ private: | |||
| 750 | void WindowDrag(int32_t width, int32_t height); | 752 | void WindowDrag(int32_t width, int32_t height); |
| 751 | void OnOverlayScrollbarEnabledUpdate(bool enable); | 753 | void OnOverlayScrollbarEnabledUpdate(bool enable); |
| 752 | void OnKeyboardAvoidModeUpdate(const WebKeyboardAvoidMode& mode); | 754 | void OnKeyboardAvoidModeUpdate(const WebKeyboardAvoidMode& mode); |
| 755 | + void OnEnabledHapticFeedbackUpdate(bool enable); | ||
| 753 | int GetWebId(); | 756 | int GetWebId(); |
| 754 | 757 | ||
| 755 | void InitEvent(); | 758 | void InitEvent(); |
| @@ -1070,6 +1073,7 @@ private: | |||
| 1070 | bool isAutoFillClosing_ = true; | 1073 | bool isAutoFillClosing_ = true; |
| 1071 | ViewDataCommon viewDataCommon_; | 1074 | ViewDataCommon viewDataCommon_; |
| 1072 | bool isPasswordFill_ = false; | 1075 | bool isPasswordFill_ = false; |
| 1076 | + bool isEnabledHapticFeedback_ = true; | ||
| 1073 | 1077 | ||
| 1074 | protected: | 1078 | protected: |
| 1075 | OnCreateMenuCallback onCreateMenuCallback_; | 1079 | OnCreateMenuCallback onCreateMenuCallback_; |
| @@ -78,6 +78,7 @@ struct WebPatternProperty { | |||
| 78 | ACE_DEFINE_PROPERTY_GROUP_ITEM(SelectionMenuOptions, WebMenuOptionsParam); | 78 | ACE_DEFINE_PROPERTY_GROUP_ITEM(SelectionMenuOptions, WebMenuOptionsParam); |
| 79 | ACE_DEFINE_PROPERTY_GROUP_ITEM(OverlayScrollbarEnabled, bool); | 79 | ACE_DEFINE_PROPERTY_GROUP_ITEM(OverlayScrollbarEnabled, bool); |
| 80 | ACE_DEFINE_PROPERTY_GROUP_ITEM(KeyboardAvoidMode, WebKeyboardAvoidMode); | 80 | ACE_DEFINE_PROPERTY_GROUP_ITEM(KeyboardAvoidMode, WebKeyboardAvoidMode); |
| 81 | + ACE_DEFINE_PROPERTY_GROUP_ITEM(EnabledHapticFeedback, bool); | ||
| 81 | }; | 82 | }; |
| 82 | 83 | ||
| 83 | } // namespace OHOS::Ace::NG | 84 | } // namespace OHOS::Ace::NG |