From 16d3e3c473941269a0a5b1e32136ab8dd6ba2865 Mon Sep 17 00:00:00 2001 From: wiiinston Date: Mon, 7 Jul 2025 17:01:27 +0800 Subject: [PATCH] add Set/GetKeyboardAvoidMode Signed-off-by: wiiinston --- .../arkui-ohos/@ohos.arkui.UIContext.ts | 16 +++++ .../src/ani/arkts/ArkUIAniModule.ts | 6 +- .../arkui-ohos/src/ani/native/BUILD.gn | 1 + .../keyboard_avoid_mode_module.cpp | 43 ++++++++++++ .../keyboard_avoid_mode_module.h | 30 ++++++++ .../arkui-ohos/src/ani/native/module.cpp | 11 +++ .../src/handwritten/UIContextImpl.ts | 34 ++++++++- frameworks/core/interfaces/ani/ani_api.h | 6 ++ frameworks/core/interfaces/native/BUILD.gn | 1 + .../ani/keyboard_avoid_mode_ani_modifier.cpp | 69 +++++++++++++++++++ .../ani/keyboard_avoid_mode_ani_modifier.h | 27 ++++++++ .../native/ani/node_ani_modifier.cpp | 2 + 12 files changed, 242 insertions(+), 4 deletions(-) create mode 100644 frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/keyboard_avoid_mode/keyboard_avoid_mode_module.cpp create mode 100644 frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/keyboard_avoid_mode/keyboard_avoid_mode_module.h create mode 100644 frameworks/core/interfaces/native/ani/keyboard_avoid_mode_ani_modifier.cpp create mode 100644 frameworks/core/interfaces/native/ani/keyboard_avoid_mode_ani_modifier.h diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/@ohos.arkui.UIContext.ts b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/@ohos.arkui.UIContext.ts index b9659ec4d79..94eb600f2c8 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/@ohos.arkui.UIContext.ts +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/@ohos.arkui.UIContext.ts @@ -353,6 +353,14 @@ export class CursorController { } } +export const enum KeyboardAvoidMode { + OFFSET = 0, + RESIZE = 1, + OFFSET_WITH_CARET = 2, + RESIZE_WITH_CARET = 3, + NONE = 4, +} + export class UIContext { constructor() { } @@ -395,6 +403,14 @@ export class UIContext { throw Error("getHostContext not implemented in UIContext!") } + public getKeyboardAvoidMode(): KeyboardAvoidMode { + throw Error("getKeyboardAvoidMode not implemented in UIContext!") + } + + public setKeyboardAvoidMode(mode: KeyboardAvoidMode) { + throw Error("setKeyboardAvoidMode not implemented in UIContext!") + } + public getAtomicServiceBar(): Nullable { throw Error("getAtomicServiceBar not implemented in UIContext!") } diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/arkts/ArkUIAniModule.ts b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/arkts/ArkUIAniModule.ts index f2e264f9e7b..da6cc3f9b25 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/arkts/ArkUIAniModule.ts +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/arkts/ArkUIAniModule.ts @@ -19,7 +19,7 @@ import image from "@ohos.multimedia.image" import webview from "@ohos.web.webview" import common from "@ohos.app.ability.common" import unifiedDataChannel from "@ohos.data.unifiedDataChannel" -import { LocalStorage } from '@ohos.arkui.stateManagement'; +import { LocalStorage } from '@ohos.arkui.stateManagement' import { DrawContext } from "arkui/Graphics" import { AnimatableArithmetic, DrawModifier, AsyncCallback, Callback, DragItemInfo, ResourceColor } from "arkui/component" import { ArkCustomComponent } from "arkui/ArkCustomComponent" @@ -28,6 +28,7 @@ import { ChildrenMainSize } from "arkui/component" import { HookDragInfo } from "arkui/handwritten" import { dragController } from "@ohos/arkui/dragController" import { componentSnapshot } from "@ohos/arkui/componentSnapshot" +import { KeyboardAvoidMode } from "@ohos/arkui/UIContext" import { DrawableDescriptor } from "@ohos.arkui.drawableDescriptor" export class ArkUIAniModule { @@ -49,6 +50,8 @@ export class ArkUIAniModule { native static _Common_Get_Current_InstanceId(): KInt native static _Common_GetSharedLocalStorage(): LocalStorage native static _CustomNode_Construct(id: KInt, component: ArkCustomComponent): KPointer + native static _GetKeyboardAvoidMode(): KeyboardAvoidMode + native static _SetKeyboardAvoidMode(mode: KeyboardAvoidMode): void native static _BuilderProxyNode_Construct(id: KInt): KPointer native static _ContentSlot_construct(id: KInt): KPointer native static _ContentSlotInterface_setContentSlotOptions(slot: KPointer, content: KPointer): void @@ -132,6 +135,7 @@ export class ArkUIAniModule { native static _DeleteViewStackProcessor(ptr: KPointer): void native static _BackgroundImage_PixelMap(ptr: KPointer, pixelmap: image.PixelMap, repeat: KInt): void + // for ImageSpan native static _ImageSpan_Set_PixelMap(ptr: KPointer, pixelmap: image.PixelMap): void native static _ImageSpan_SetAlt_PixelMap(ptr: KPointer, pixelmap: image.PixelMap): void diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/BUILD.gn b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/BUILD.gn index 1291fdf810d..69f8b288058 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/BUILD.gn +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/BUILD.gn @@ -46,6 +46,7 @@ ohos_shared_library("arkoala_native_ani") { "utils/convert_utils.cpp", "video/video_module_methods.cpp", "water_flow/waterFlowSection_module.cpp", + "keyboard_avoid_mode/keyboard_avoid_mode_module.cpp", "list/list_children_main_size_module.cpp", "web/web_module_methods.cpp", "xcomponent/xcomponent_module_methods.cpp", diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/keyboard_avoid_mode/keyboard_avoid_mode_module.cpp b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/keyboard_avoid_mode/keyboard_avoid_mode_module.cpp new file mode 100644 index 00000000000..a272ac2aad7 --- /dev/null +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/keyboard_avoid_mode/keyboard_avoid_mode_module.cpp @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "keyboard_avoid_mode_module.h" +#include "load.h" +#include "base/log/log_wrapper.h" +#include "../log/log.h" +#include + +namespace OHOS::Ace::Ani { + +void SetKeyboardAvoidMode(ani_env* env, ani_object obj, ani_enum_item mode) +{ + const auto* modifier = GetNodeAniModifier(); + if (!env || !modifier || !modifier->getKeyboardAvoidModeAniModifier()) { + return; + } + modifier->getKeyboardAvoidModeAniModifier()->setKeyboardAvoidMode(env, mode); +} + +ani_enum_item GetKeyboardAvoidMode(ani_env* env, ani_object obj, ani_int id) +{ + const auto* modifier = GetNodeAniModifier(); + if (!env || !modifier || !modifier->getKeyboardAvoidModeAniModifier()) { + return 0; + } + auto mode = modifier->getKeyboardAvoidModeAniModifier()->getKeyboardAvoidMode(env); + return mode; +} + +} // namespace OHOS::Ace::Ani \ No newline at end of file diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/keyboard_avoid_mode/keyboard_avoid_mode_module.h b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/keyboard_avoid_mode/keyboard_avoid_mode_module.h new file mode 100644 index 00000000000..b948bf56ab1 --- /dev/null +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/keyboard_avoid_mode/keyboard_avoid_mode_module.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef KOALA_PROJECTS_ARKOALA_ARKTS_ARKUI_OHOS_ANI_NATIVE_KEYBOARD_AVOID_MODE_MODULE +#define KOALA_PROJECTS_ARKOALA_ARKTS_ARKUI_OHOS_ANI_NATIVE_KEYBOARD_AVOID_MODE_MODULE + +#include "ani.h" +#include "frameworks/core/components/common/layout/constants.h" + +namespace OHOS::Ace::Ani { + +void SetKeyboardAvoidMode(ani_env* env, ani_object obj, ani_enum_item mode); + +ani_enum_item GetKeyboardAvoidMode(ani_env* env, ani_object obj, ani_int id); + +} // namespace OHOS::Ace::Ani + +#endif // KOALA_PROJECTS_ARKOALA_ARKTS_ARKUI_OHOS_ANI_NATIVE_KEYBOARD_AVOID_MODE_MODULE \ No newline at end of file diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/module.cpp b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/module.cpp index faca499fa6d..c4e5e9459ff 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/module.cpp +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/module.cpp @@ -21,6 +21,7 @@ #include "componentSnapshot/componentSnapshot_module.h" #include "content_slot/content_slot_module.h" #include "custom_node/custom_node_module.h" +#include "keyboard_avoid_mode/keyboard_avoid_mode_module.h" #include "drag_and_drop/native_drag_drop_global.h" #include "dragController/drag_controller_module.h" #include "image_span/image_span_module.h" @@ -115,6 +116,16 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm* vm, uint32_t* result) "ILarkui/ArkCustomComponent/ArkCustomComponent;:J", reinterpret_cast(OHOS::Ace::Ani::ConstructCustomNode) }, + ani_native_function { + "_GetKeyboardAvoidMode", + nullptr, + reinterpret_cast(OHOS::Ace::Ani::GetKeyboardAvoidMode) + }, + ani_native_function { + "_SetKeyboardAvoidMode", + nullptr, + reinterpret_cast(OHOS::Ace::Ani::SetKeyboardAvoidMode) + }, ani_native_function { "_BuilderProxyNode_Construct", "I:J", diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/handwritten/UIContextImpl.ts b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/handwritten/UIContextImpl.ts index 366d3232282..c56f7a12e0d 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/handwritten/UIContextImpl.ts +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/handwritten/UIContextImpl.ts @@ -22,7 +22,7 @@ import { AnimateParam, AnimationExtender, KeyframeAnimateParam, KeyframeState } import { AnimatorResult , AnimatorOptions, Animator, SimpleAnimatorOptions } from "@ohos/animator" import { UIContext, MeasureUtils, Font, TextMenuController, FocusController, ContextMenuController, ComponentUtils, FrameCallback, UIInspector, UIObserver, OverlayManager, PromptAction, AtomicServiceBar, Router, CursorController, - MediaQuery, ComponentSnapshot, OverlayManagerOptions, DragController } + MediaQuery, KeyboardAvoidMode, ComponentSnapshot, OverlayManagerOptions, DragController } from "@ohos/arkui/UIContext" import { StateManager, ComputableState, GlobalStateManager, StateContext, memoEntry } from '@koalaui/runtime' import { Context, PointerStyle, PixelMap } from "#external" @@ -934,13 +934,13 @@ export class UIContextImpl extends UIContext { contextMenuController_: ContextMenuControllerImpl; overlayManager_: OverlayManagerImpl | null = null; promptAction_: PromptActionImpl | null = null; + keyboardAvoidMode_: KeyboardAvoidMode = KeyboardAvoidMode.OFFSET; cursorController_: CursorControllerImpl; font_: FontImpl; measureUtils_: MeasureUtilsImpl; textMenuController_: TextMenuControllerImpl; detachedRootEntryManager_: DetachedRootEntryManager; isDebugMode_: boolean = false; - bufferSize = 4096 buffer: KBuffer = new KBuffer(this.bufferSize) position: int64 = 0 @@ -963,12 +963,15 @@ export class UIContextImpl extends UIContext { this.isDebugMode_ = ArkUIAniModule._IsDebugMode(instanceId) !== 0; this.router_ = new RouterImpl(instanceId); } + public getInstanceId() : int32 { return this.instanceId_; } + public getDetachedRootEntryManager() : DetachedRootEntryManager { return this.detachedRootEntryManager_; } + dispatchCallback(buffer: KSerializerBuffer, length: int32): void { if (length <= 0) { return @@ -998,27 +1001,33 @@ export class UIContextImpl extends UIContext { public getFont() : Font { return this.font_; } + public getMediaQuery(): MediaQuery { return new MediaQueryImpl(this.instanceId_); } + public getMeasureUtils() : MeasureUtils { return this.measureUtils_; } + public getTextMenuController() : TextMenuController { return this.textMenuController_; } + public isFollowingSystemFontScale() : boolean { ArkUIAniModule._Common_Sync_InstanceId(this.instanceId_); let follow = GlobalScopeUicontextFontScale.isFollowingSystemFontScale(); ArkUIAniModule._Common_Restore_InstanceId(); return follow; } + public getMaxFontScale() : number { ArkUIAniModule._Common_Sync_InstanceId(this.instanceId_); let fontScale = GlobalScopeUicontextFontScale.getMaxFontScale(); ArkUIAniModule._Common_Restore_InstanceId(); return fontScale; } + public getFrameNodeById(id: string): FrameNode | null { const id_casted = id as (string); ArkUIAniModule._Common_Sync_InstanceId(this.instanceId_); @@ -1034,9 +1043,11 @@ export class UIContextImpl extends UIContext { ArkUIAniModule._Common_Restore_InstanceId(); return node; } + public getSharedLocalStorage(): LocalStorage | undefined { return ArkUIAniModule._Common_GetSharedLocalStorage(); } + getAttachedFrameNodeById(id: string): FrameNode | null { ArkUIAniModule._Common_Sync_InstanceId(this.instanceId_); const retval = ArkUIGeneratedNativeModule._FrameNode_getAttachedFrameNodeById(id); @@ -1051,6 +1062,7 @@ export class UIContextImpl extends UIContext { ArkUIAniModule._Common_Restore_InstanceId(); return node; } + getFrameNodeByNodeId(id: number): FrameNode | null { ArkUIAniModule._Common_Sync_InstanceId(this.instanceId_); const retval = ArkUIGeneratedNativeModule._FrameNode_getFrameNodeById(id); @@ -1065,6 +1077,7 @@ export class UIContextImpl extends UIContext { ArkUIAniModule._Common_Restore_InstanceId(); return node; } + getFrameNodeByUniqueId(id: number): FrameNode | null { ArkUIAniModule._Common_Sync_InstanceId(this.instanceId_); const retval = ArkUIGeneratedNativeModule._FrameNode_getFrameNodeByUniqueId(id); @@ -1079,11 +1092,26 @@ export class UIContextImpl extends UIContext { ArkUIAniModule._Common_Restore_InstanceId(); return node; } + getHostContext(): Context | undefined { ArkUIAniModule._Common_Sync_InstanceId(this.instanceId_); const result = ArkUIAniModule._Common_GetHostContext(); ArkUIAniModule._Common_Restore_InstanceId(); - return result + return result; + } + + setKeyboardAvoidMode(mode: KeyboardAvoidMode): void { + ArkUIAniModule._Common_Sync_InstanceId(this.instanceId_); + ArkUIAniModule._SetKeyboardAvoidMode(mode); + this.keyboardAvoidMode_ = mode; + ArkUIAniModule._Common_Restore_InstanceId(); + } + + getKeyboardAvoidMode(): KeyboardAvoidMode { + ArkUIAniModule._Common_Sync_InstanceId(this.instanceId_); + let mode = ArkUIAniModule._GetKeyboardAvoidMode(); + ArkUIAniModule._Common_Restore_InstanceId(); + return mode; } public getAtomicServiceBar(): Nullable { diff --git a/frameworks/core/interfaces/ani/ani_api.h b/frameworks/core/interfaces/ani/ani_api.h index 53ba1d85601..6c602377c06 100644 --- a/frameworks/core/interfaces/ani/ani_api.h +++ b/frameworks/core/interfaces/ani/ani_api.h @@ -21,6 +21,7 @@ #include #include "core/common/ace_engine.h" #include "core/common/udmf/udmf_client.h" +#include "frameworks/core/components/common/layout/constants.h" #include "core/components_ng/render/adapter/component_snapshot.h" #include "core/components_ng/render/snapshot_param.h" @@ -105,6 +106,10 @@ struct ArkUIAniCommonModifier { struct ArkUIAniCustomNodeModifier { ani_long (*constructCustomNode)(ani_int); }; +struct ArkUIAniKeyboardAvoidModeModifier { + ani_enum_item (*getKeyboardAvoidMode)([[maybe_unused]] ani_env *env); + void (*setKeyboardAvoidMode)([[maybe_unused]] ani_env *env, ani_enum_item mode); +}; struct ArkUIAniDrawModifier { void (*setDrawModifier)(ani_env* env, ani_long ptr, ani_int flag, ani_object fnObj); void (*invalidate)(ani_env* env, ani_long ptr); @@ -189,6 +194,7 @@ struct ArkUIAniModifiers { const ArkUIAniDragModifier* (*getDragAniModifier) (); const ArkUIAniCommonModifier* (*getCommonAniModifier)(); const ArkUIAniCustomNodeModifier* (*getCustomNodeAniModifier)(); + const ArkUIAniKeyboardAvoidModeModifier* (*getKeyboardAvoidModeAniModifier)(); const ArkUIAniContentSlotModifier* (*getContentSlotAniModifier)(); const ArkUIAniDrawModifier* (*getArkUIAniDrawModifier)(); const ArkUIAniWaterFlowModifier* (*getArkUIAniWaterFlowModifier)(); diff --git a/frameworks/core/interfaces/native/BUILD.gn b/frameworks/core/interfaces/native/BUILD.gn index ff271c32883..cc7bcc713b9 100644 --- a/frameworks/core/interfaces/native/BUILD.gn +++ b/frameworks/core/interfaces/native/BUILD.gn @@ -141,6 +141,7 @@ template("ace_core_interfaces_native_node") { "ani/component_snapshot_ani_modifier.cpp", "ani/content_slot_ani_modifier.cpp", "ani/custom_node_ani_modifier.cpp", + "ani/keyboard_avoid_mode_ani_modifier.cpp", "ani/drag_ani_modifier.cpp", "ani/interop_ani_modifier.cpp", "ani/drag_controller_ani_modifier.cpp", diff --git a/frameworks/core/interfaces/native/ani/keyboard_avoid_mode_ani_modifier.cpp b/frameworks/core/interfaces/native/ani/keyboard_avoid_mode_ani_modifier.cpp new file mode 100644 index 00000000000..c41ba397ede --- /dev/null +++ b/frameworks/core/interfaces/native/ani/keyboard_avoid_mode_ani_modifier.cpp @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "../../ani/ani_api.h" +#include "keyboard_avoid_mode_ani_modifier.h" +#include "base/log/log.h" +#include +#include "core/common/container.h" +#include "core/pipeline_ng/pipeline_context.h" +#include "frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/log/log.h" + +namespace OHOS::Ace::NG { +const std::vector KEYBOARD_AVOID_MODES = { KeyBoardAvoidMode::OFFSET, KeyBoardAvoidMode::RESIZE, + KeyBoardAvoidMode::OFFSET_WITH_CARET, KeyBoardAvoidMode::RESIZE_WITH_CARET, KeyBoardAvoidMode::NONE }; + +void SetKeyboardAvoidMode([[maybe_unused]] ani_env *env, ani_enum_item mode) +{ + auto pipeline = PipelineBase::GetCurrentContext(); + CHECK_NULL_VOID(pipeline); + ani_size idx; + if (ANI_OK != env->EnumItem_GetIndex(mode, &idx)) { + HILOGI("Unable to get enum_index in SetKeyboardAvoidMode"); + return; + } + auto index = static_cast(idx); + if (index < 0 || index >= static_cast(KEYBOARD_AVOID_MODES.size())) { + HILOGI("Invalid mode, cannot be set as KeyboardAvoidMode"); + return; + } + pipeline->SetEnableKeyBoardAvoidMode(KEYBOARD_AVOID_MODES[index]); +} + +ani_enum_item GetKeyboardAvoidMode([[maybe_unused]] ani_env *env) +{ + ani_enum_item enumItem; + ani_enum enumType; + env->FindEnum("L@ohos/arkui/UIContext/KeyboardAvoidMode;", &enumType); + env->Enum_GetEnumItemByIndex(enumType, ani_size(-1), &enumItem); + + auto pipeline = PipelineBase::GetCurrentContext(); + CHECK_NULL_RETURN(pipeline, enumItem); + auto mode = pipeline->GetEnableKeyBoardAvoidMode(); + + auto index = static_cast(mode); + env->Enum_GetEnumItemByIndex(enumType, ani_size(index), &enumItem); + return enumItem; +} + +const ArkUIAniKeyboardAvoidModeModifier* GetKeyboardAvoidModeAniModifier() +{ + static const ArkUIAniKeyboardAvoidModeModifier impl = { + .getKeyboardAvoidMode = OHOS::Ace::NG::GetKeyboardAvoidMode, + .setKeyboardAvoidMode = OHOS::Ace::NG::SetKeyboardAvoidMode + }; + return &impl; +} + +} // namespace OHOS::Ace::NG \ No newline at end of file diff --git a/frameworks/core/interfaces/native/ani/keyboard_avoid_mode_ani_modifier.h b/frameworks/core/interfaces/native/ani/keyboard_avoid_mode_ani_modifier.h new file mode 100644 index 00000000000..0eb55f9ad99 --- /dev/null +++ b/frameworks/core/interfaces/native/ani/keyboard_avoid_mode_ani_modifier.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_INTERFACES_NATIVE_ANI_KEYBOARD_AVOID_MODE_ANI_MODIFIER +#define FOUNDATION_ACE_FRAMEWORKS_CORE_INTERFACES_NATIVE_ANI_KEYBOARD_AVOID_MODE_ANI_MODIFIER + +#include "core/interfaces/ani/ani_api.h" + +namespace OHOS::Ace::NG { + +const ArkUIAniKeyboardAvoidModeModifier* GetKeyboardAvoidModeAniModifier(); + +} // namespace OHOS::Ace::NG + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_INTERFACES_NATIVE_ANI_KEYBOARD_AVOID_MODE_ANI_MODIFIER \ No newline at end of file diff --git a/frameworks/core/interfaces/native/ani/node_ani_modifier.cpp b/frameworks/core/interfaces/native/ani/node_ani_modifier.cpp index e76ff45a51b..620b1722360 100644 --- a/frameworks/core/interfaces/native/ani/node_ani_modifier.cpp +++ b/frameworks/core/interfaces/native/ani/node_ani_modifier.cpp @@ -21,6 +21,7 @@ #include "image_span_ani_modifier.h" #include "web_ani_modifier.h" #include "custom_node_ani_modifier.h" +#include "keyboard_avoid_mode_ani_modifier.h" #include "list_ani_modifier.h" #include "waterflow_ani_modifier.h" #include "drag_ani_modifier.h" @@ -40,6 +41,7 @@ const ArkUIAniModifiers* GetArkUIAniModifiers() .getDragAniModifier = OHOS::Ace::NG::GetDragAniModifier, .getCommonAniModifier = OHOS::Ace::NG::GetCommonAniModifier, .getCustomNodeAniModifier = OHOS::Ace::NG::GetCustomNodeAniModifier, + .getKeyboardAvoidModeAniModifier = OHOS::Ace::NG::GetKeyboardAvoidModeAniModifier, .getContentSlotAniModifier = OHOS::Ace::NG::GetContentSlotAniModifier, .getArkUIAniDrawModifier = OHOS::Ace::NG::GetArkUIAniDrawModifier, .getArkUIAniWaterFlowModifier = OHOS::Ace::NG::GetArkUIAniWaterFlowModifier, -- Gitee