已合并
ArkWeb 新增文字长按框选中震动特性回合5.0.1 #44058
zhufenghao创建于 2024年9月20日
ArkWeb 新增文字长按框选中震动特性回合5.0.1 #44058
已合并
zhufenghao创建于 2024年9月20日
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::Framework5133} // 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 
167protected:168protected:
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::Ace1242} // 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+ 
297private:299private:
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::Ace7110} // 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() const993 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::NG1321} // 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() const375 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) {}
193private:194private:
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::NG1175} // 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::NG195} // namespace OHOS::Ace::NG
195#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_WEB_WEB_MODEL_NG_H196#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_WEB_WEB_MODEL_NG_H
@@ -27,16 +27,25 @@
27#if !defined(PREVIEW) && !defined(ACE_UNITTEST) && defined(OHOS_PLATFORM)27#if !defined(PREVIEW) && !defined(ACE_UNITTEST) && defined(OHOS_PLATFORM)
28#include "interfaces/inner_api/ui_session/ui_session_manager.h"28#include "interfaces/inner_api/ui_session/ui_session_manager.h"
29#endif29#endif
30+#include "auto_fill_type.h"
31+#include "page_node_info.h"
32+ 
33+#include "adapter/ohos/capability/html/span_to_html.h"
30#include "base/geometry/ng/offset_t.h"34#include "base/geometry/ng/offset_t.h"
35+#include "base/geometry/rect.h"
31#include "base/image/file_uri_helper.h"36#include "base/image/file_uri_helper.h"
32#include "base/mousestyle/mouse_style.h"37#include "base/mousestyle/mouse_style.h"
33#include "base/utils/date_util.h"38#include "base/utils/date_util.h"
34#include "base/utils/linear_map.h"39#include "base/utils/linear_map.h"
35#include "base/utils/time_util.h"40#include "base/utils/time_util.h"
36#include "base/utils/utils.h"41#include "base/utils/utils.h"
42+#include "core/common/ace_engine_ext.h"
37#include "core/common/ai/data_detector_mgr.h"43#include "core/common/ai/data_detector_mgr.h"
38#include "core/common/ai/image_analyzer_manager.h"44#include "core/common/ai/image_analyzer_manager.h"
39#include "core/common/ime/input_method_manager.h"45#include "core/common/ime/input_method_manager.h"
46+#include "core/common/udmf/udmf_client.h"
47+#include "core/common/udmf/unified_data.h"
48+#include "core/common/vibrator/vibrator_utils.h"
40#include "core/components/dialog/dialog_theme.h"49#include "core/components/dialog/dialog_theme.h"
41#include "core/components/picker/picker_data.h"50#include "core/components/picker/picker_data.h"
42#include "core/components/text_overlay/text_overlay_theme.h"51#include "core/components/text_overlay/text_overlay_theme.h"
@@ -61,14 +70,6 @@
61#include "frameworks/base/utils/system_properties.h"70#include "frameworks/base/utils/system_properties.h"
62#include "frameworks/core/components_ng/base/ui_node.h"71#include "frameworks/core/components_ng/base/ui_node.h"
63 72 
64-#include "adapter/ohos/capability/html/span_to_html.h"
65-#include "base/geometry/rect.h"
66-#include "core/common/ace_engine_ext.h"
67-#include "core/common/udmf/udmf_client.h"
68-#include "core/common/udmf/unified_data.h"
69-#include "page_node_info.h"
70-#include "auto_fill_type.h"
71- 
72namespace OHOS::Ace::NG {73namespace OHOS::Ace::NG {
73namespace {74namespace {
74const std::string IMAGE_POINTER_CONTEXT_MENU_PATH = "etc/webview/ohos_nweb/context-menu.svg";75const 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+ 
2252bool WebPattern::IsRootNeedExportTexture()2258bool 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::NG5941} // 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() const482 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 
669private:671private:
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 
1074protected:1078protected:
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::NG84} // namespace OHOS::Ace::NG