diff --git a/adapter/ohos/entrance/ace_container.cpp b/adapter/ohos/entrance/ace_container.cpp index 5718977a7139d5d2bd573046317e00a2ea354707..2ef54c799a3ba68d15d879653476151617101025 100644 --- a/adapter/ohos/entrance/ace_container.cpp +++ b/adapter/ohos/entrance/ace_container.cpp @@ -2455,18 +2455,16 @@ void AceContainer::SetAniLocalStorage(void* storage, const std::shared_ptrPostSyncTask([frontend = WeakPtr(frontend_), storage, - contextWeak = std::weak_ptr(context), - id = instanceId_, sharedRuntime = sharedRuntime_] { + contextWeak = std::weak_ptr(context)] { auto sp = frontend.Upgrade(); auto contextRef = contextWeak.lock(); if (!sp || !contextRef) { - ArktsFrontendLoader::GetInstance().DeleteAniReference(sharedRuntime, storage); return; } if (contextRef->GetBindingObject() && contextRef->GetBindingObject()->Get()) { - sp->SetHostContext(id, contextRef->GetBindingObject()->Get()); + sp->SetHostContext(contextRef->GetBindingObject()->Get()); } - sp->RegisterLocalStorage(id, storage); + sp->SetLocalStorage(storage); }, TaskExecutor::TaskType::UI, "ArkUISetAniLocalStorage"); } diff --git a/adapter/ohos/entrance/ui_content_impl.cpp b/adapter/ohos/entrance/ui_content_impl.cpp index fdaabadc8dcd6bb62e147ee90bfb01c27c6f4b42..3856bec215bb2918e4bd04b5c952a9dd79929314 100644 --- a/adapter/ohos/entrance/ui_content_impl.cpp +++ b/adapter/ohos/entrance/ui_content_impl.cpp @@ -2659,8 +2659,7 @@ UIContentErrorCode UIContentImpl::CommonInitialize( if (!storage) { container->SetAniLocalStorage(nullptr, context); } else { - auto ref = ArktsFrontendLoader::GetInstance().CreateAniReference(runtime_, storage); - container->SetAniLocalStorage(ref, context); + container->SetAniLocalStorage(storage, context); } } diff --git a/frameworks/bridge/arkts_frontend/BUILD.gn b/frameworks/bridge/arkts_frontend/BUILD.gn index 598da5175dc9f7a14983e8e070bf63f12bf0f6ba..12b97390b6cf5d9a6f59541e3164fefaa48c5fcc 100644 --- a/frameworks/bridge/arkts_frontend/BUILD.gn +++ b/frameworks/bridge/arkts_frontend/BUILD.gn @@ -57,7 +57,6 @@ template("arkts_frontend") { ] sources = [ - "ani_context_module.cpp", "arkts_frontend.cpp", "arkts_plugin_frontend.cpp", "entry/arkts_entry_loader.cpp", diff --git a/frameworks/bridge/arkts_frontend/arkts_frontend.cpp b/frameworks/bridge/arkts_frontend/arkts_frontend.cpp index 091a5f1c70c9d71e50c865b48527fa7b8e74246c..dd2228610f83c553517c0d32c2fb48f2f5c43a42 100644 --- a/frameworks/bridge/arkts_frontend/arkts_frontend.cpp +++ b/frameworks/bridge/arkts_frontend/arkts_frontend.cpp @@ -23,7 +23,6 @@ #include "core/components_ng/pattern/stage/page_pattern.h" #include "core/pipeline_ng/pipeline_context.h" #include "frameworks/base/subwindow/subwindow_manager.h" -#include "bridge/arkts_frontend/ani_context_module.h" namespace OHOS::Ace { UIContentErrorCode ArktsFrontend::RunPage( @@ -50,6 +49,10 @@ struct AppInfo { const char* handleMessageMethodSig; const char* registerNativeModule; const char* registerNativeModuleSig; + const char* setHostContextMethodName; + const char* setHostContextMethodSig; + const char* setSharedLocalStorageMethodName; + const char* setSharedLocalStorageMethodSig; }; /* copied from arkcompiler_ets_frontend vmloader.cc*/ const AppInfo KOALA_APP_INFO = { @@ -69,8 +72,14 @@ const AppInfo KOALA_APP_INFO = { "liC{std.core.String}:z", "registerNativeModulePreloader", ":", + "setHostContext", + "Lapplication/Context/Context;:V", + "setSharedLocalStorage", + "Larkui/stateManagement/storage/localStorage/LocalStorage;:V", }; +const char ANI_UICONTEXT_UTIL[] = "Larkui/handwritten/UIContextUtil/UIContextUtil;"; + std::string GetErrorProperty(ani_env* aniEnv, ani_error aniError, const char* property) { TAG_LOGD(AceLogTag::ACE_SUB_WINDOW, "called"); @@ -290,6 +299,9 @@ UIContentErrorCode ArktsFrontend::RunPage(const std::string& url, const std::str return UIContentErrorCode::INVALID_URL; } + SetAniHostContext(); + SetSharedLocalStorage(); + // TODO: init event loop CHECK_NULL_RETURN(pipeline_, UIContentErrorCode::NULL_POINTER); pipeline_->SetVsyncListener([vm = vm_, app = app_]() { @@ -315,20 +327,6 @@ void ArktsFrontend::AttachPipelineContext(const RefPtr& context) } } -ani_ref ArktsFrontend::GetSharedStorage(int32_t id) -{ - int32_t currentInstance = id; - if (currentInstance >= MIN_SUBCONTAINER_ID && currentInstance < MIN_PLUGIN_SUBCONTAINER_ID) { - currentInstance = SubwindowManager::GetInstance()->GetParentContainerId(currentInstance); - } - auto it = storageMap_.find(currentInstance); - if (it == storageMap_.end()) { - LOGW("LocalStorage with ID %{public}d not found!", currentInstance); - return nullptr; - } - return reinterpret_cast(it->second); -} - void ArktsFrontend::Destroy() { CHECK_NULL_VOID(vm_); @@ -337,6 +335,10 @@ void ArktsFrontend::Destroy() env->GlobalReference_Delete(app_); app_ = nullptr; handleMessageMethod_ = nullptr; + setHostContextMethod_ = nullptr; + setSharedLocalStorageMethod_ = nullptr; + ani_ref_context_ = nullptr; + ani_ref_storage_ = nullptr; } ani_object ArktsFrontend::GetUIContext(int32_t instanceId) @@ -348,7 +350,7 @@ ani_object ArktsFrontend::GetUIContext(int32_t instanceId) CHECK_NULL_RETURN(env, result); ani_class uiContextClass; - if ((status = env->FindClass("arkui.handwritten.UIContextUtil.UIContextUtil", &uiContextClass)) != ANI_OK) { + if ((status = env->FindClass(ANI_UICONTEXT_UTIL, &uiContextClass)) != ANI_OK) { LOGE("FindClass UIContext failed, %{public}d", status); return result; } @@ -543,16 +545,69 @@ bool ArktsFrontend::HandleMessage(void *frameNode, int32_t type, const std::stri return result == ANI_TRUE; } -void ArktsFrontend::SetHostContext(int32_t instanceId, ani_ref* context) +void ArktsFrontend::SetHostContext(ani_ref* context) { - Framework::AniContextModule::AddAniContext(instanceId, context); + ani_ref_context_ = *context; } -ani_ref* ArktsFrontend::GetHostContext(int32_t instanceId) +void ArktsFrontend::SetLocalStorage(void* storage) { - return Framework::AniContextModule::GetAniContext(instanceId); + ani_ref_storage_ = static_cast(storage); +} + +void ArktsFrontend::SetAniHostContext() +{ + auto* env = ArktsAniUtils::GetAniEnv(vm_); + CHECK_NULL_VOID(ani_ref_context_); + CHECK_NULL_VOID(env); + CHECK_NULL_VOID(app_); + ani_status status = ANI_ERROR; + if (setHostContextMethod_ == nullptr) { + ani_class appClass; + if ((status = env->FindClass(KOALA_APP_INFO.className, &appClass)) != ANI_OK) { + LOGE("Call setHostContext failed due to FindClass failed, status : %{public}d", status); + return; + } + ani_method setHostContextMethod = nullptr; + if ((status = env->Class_FindMethod(appClass, KOALA_APP_INFO.setHostContextMethodName, + KOALA_APP_INFO.setHostContextMethodSig, &setHostContextMethod)) != ANI_OK) { + LOGE("Call setHostContext failed due to Class_FindMethod failed, status : %{public}d", status); + return; + } + setHostContextMethod_ = setHostContextMethod; + } + ani_object context_object = reinterpret_cast(ani_ref_context_); + if ((status = env->Object_CallMethod_Void(static_cast(app_), + setHostContextMethod_, context_object)) != ANI_OK) { + LOGE("Call setHostContext failed, status: %{public}d", status); + } } +void ArktsFrontend::SetSharedLocalStorage() +{ + auto* env = ArktsAniUtils::GetAniEnv(vm_); + CHECK_NULL_VOID(ani_ref_storage_); + CHECK_NULL_VOID(app_); + ani_status status = ANI_ERROR; + if (setSharedLocalStorageMethod_ == nullptr) { + ani_class appClass; + if ((status = env->FindClass(KOALA_APP_INFO.className, &appClass)) != ANI_OK) { + LOGE("Call SetSharedLocalStorage failed due to FindClass failed, status : %{public}d", status); + return; + } + ani_method setSharedLocalStorageMethod = nullptr; + if ((status = env->Class_FindMethod(appClass, KOALA_APP_INFO.setSharedLocalStorageMethodName, + KOALA_APP_INFO.setSharedLocalStorageMethodSig, &setSharedLocalStorageMethod)) != ANI_OK) { + LOGE("Call SetSharedLocalStorage failed due to Class_FindMethod failed, status : %{public}d", status); + return; + } + setSharedLocalStorageMethod_ = setSharedLocalStorageMethod; + } + if ((status = env->Object_CallMethod_Void(static_cast(app_), + setSharedLocalStorageMethod_, ani_ref_storage_)) != ANI_OK) { + LOGE("Call SetSharedLocalStorage failed, status: %{public}d", status); + } +} void* ArktsFrontend::preloadArkTSRuntime = nullptr; void ArktsFrontend::PreloadAceModule(void* aniEnv) { diff --git a/frameworks/bridge/arkts_frontend/arkts_frontend.h b/frameworks/bridge/arkts_frontend/arkts_frontend.h index 4d32e73a9ec9be1af5d7c43a60b71ebf7ade70ca..2afe147036848b840de2176d24471daf69e8b64f 100644 --- a/frameworks/bridge/arkts_frontend/arkts_frontend.h +++ b/frameworks/bridge/arkts_frontend/arkts_frontend.h @@ -307,8 +307,6 @@ public: void FlushReload() override {} void HotReload() override {} - ani_ref GetSharedStorage(int32_t id) override; - void RegisterLayoutInspectorCallback(const RefPtr& layoutFunc, const std::string& componentId) { layoutCallbacks_[componentId] = layoutFunc; @@ -350,9 +348,10 @@ public: ani_object GetUIContext(int32_t instanceId) override; - void SetHostContext(int32_t instanceId, ani_ref* context) override; - - ani_ref* GetHostContext(int32_t instanceId) override; + void SetHostContext(ani_ref* context) override; + void SetLocalStorage(void* storage) override; + void SetAniHostContext(); + void SetSharedLocalStorage(); RefPtr GetPageRouterManager() { @@ -369,6 +368,10 @@ private: ani_vm* vm_ = nullptr; ani_ref app_ = nullptr; ani_method handleMessageMethod_ = nullptr; + ani_method setHostContextMethod_ = nullptr; + ani_method setSharedLocalStorageMethod_ = nullptr; + ani_ref ani_ref_context_ = nullptr; + ani_object ani_ref_storage_ = nullptr; bool foregroundFrontend_ = false; RefPtr pageRouterManager_ = nullptr; diff --git a/frameworks/bridge/arkts_frontend/arkts_frontend_loader.cpp b/frameworks/bridge/arkts_frontend/arkts_frontend_loader.cpp index ea1f53b8ef8d54f87139ad13ad0357bbd47728c6..b3fc5ccc98cea6339808ae8e020ee460e8a50df6 100644 --- a/frameworks/bridge/arkts_frontend/arkts_frontend_loader.cpp +++ b/frameworks/bridge/arkts_frontend/arkts_frontend_loader.cpp @@ -19,8 +19,6 @@ namespace OHOS::Ace { namespace { const char* CREATE_ARKTS_FRONTEND = "OHOS_ACE_CreateArktsFrontend"; const char* CREATE_ARKTS_PLUGIN_FRONTEND = "OHOS_ACE_CreateArktsPluginFrontend"; -const char* CREATE_ANI_REFERENCE = "OHOS_ACE_CreateAniReference"; -const char* DELETE_ANI_REFERENCE = "OHOS_ACE_DeleteAniReference"; const char* ARKTS_FRONTEND_LIB = "libarkts_frontend.z.so"; } @@ -38,36 +36,6 @@ Frontend* ArktsFrontendLoader::CreatArkTsFrontend(const void* sharedRuntime) return createArktsFrontendFunc_(sharedRuntime); } -void* ArktsFrontendLoader::CreateAniReference(const void* runtime, const void* storage) -{ - if (!runtime || !storage) { - return nullptr; - } - - if (!createAniReferenceFunc_) { - createAniReferenceFunc_ = - reinterpret_cast(LoadSymbol(CREATE_ANI_REFERENCE)); - } - CHECK_NULL_RETURN(createAniReferenceFunc_, nullptr); - - return createAniReferenceFunc_(runtime, storage); -} - -void ArktsFrontendLoader::DeleteAniReference(const void* runtime, const void* storage) -{ - if (!runtime || !storage) { - return; - } - - if (!deleteAniReferenceFunc_) { - deleteAniReferenceFunc_ = - reinterpret_cast(LoadSymbol(DELETE_ANI_REFERENCE)); - } - CHECK_NULL_VOID(deleteAniReferenceFunc_); - - deleteAniReferenceFunc_(runtime, storage); -} - PluginFrontend* ArktsFrontendLoader::CreateArktsPluginFrontend(const void* sharedRuntime) { if (!sharedRuntime) { @@ -89,8 +57,6 @@ void ArktsFrontendLoader::CloseLibrary() } handle_ = nullptr; createArktsFrontendFunc_ = nullptr; - createAniReferenceFunc_ = nullptr; - deleteAniReferenceFunc_ = nullptr; createArktsPluginFrontendFunc_ = nullptr; } diff --git a/frameworks/bridge/arkts_frontend/arkts_frontend_loader.h b/frameworks/bridge/arkts_frontend/arkts_frontend_loader.h index 6cccd018debcc32348af480f677c7174bb85647e..077ed5ae5b23bdd517068e79d81fba96817a4ef7 100644 --- a/frameworks/bridge/arkts_frontend/arkts_frontend_loader.h +++ b/frameworks/bridge/arkts_frontend/arkts_frontend_loader.h @@ -59,8 +59,6 @@ private: LIBHANDLE handle_ = nullptr; CreateArktsFrontendFunc createArktsFrontendFunc_ = nullptr; - CreateAniReferenceFunc createAniReferenceFunc_ = nullptr; - DeleteAniReferenceFunc deleteAniReferenceFunc_ = nullptr; CreateArktsPluginFrontendFunc createArktsPluginFrontendFunc_ = nullptr; }; 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 d28741f4b939a38e84dd8fef393cf99d25733f86..14e18aed71205b1b5785cee2b265ba6b9c13486c 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 @@ -644,6 +644,12 @@ export class UIContext { public getFilteredInspectorTreeById(id: string, depth: number, filters?: Array): string { throw Error("getFilteredInspectorTreeById not implemented in UIContext!") } + public setHostContext(context: Context): void { + throw Error("setHostContext not implemented in UIContext!") + } + public setSharedLocalStorage(storage: LocalStorage): void { + throw Error("setSharedLocalStorage not implemented in UIContext!") + } } export abstract class FrameCallback { onFrame(frameTimeInNano: number): void {} diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ArkUIEntry.ts b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ArkUIEntry.ts index 6e813180f3ec6c9ea7d81234b4abc76077ece338..78a805be7795e6b93fc2347ce237a8b3fa2478a3 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ArkUIEntry.ts +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ArkUIEntry.ts @@ -38,6 +38,8 @@ import { UIContextUtil } from "arkui/handwritten/UIContextUtil" import { flushBuilderRootNode } from "./BuilderNode" import { ObserveSingleton } from './stateManagement/base/observeSingleton'; import { AceTrace } from "./AceTrace" +import { Context } from '#external'; +import { LocalStorage } from './stateManagement/storage/localStorage'; setCustomEventsChecker(checkArkoalaCallbacks) @@ -288,6 +290,24 @@ export class Application { return result; } + setHostContext(context: Context) : void { + if (this.instanceId < 0) { + InteropNativeModule._NativeLog( + `ArkTS setHostContext failed due to instanceId: ${this.instanceId} is illegal`); + return; + } + UIContextUtil.setHostContext(this.instanceId, context); + } + + setSharedLocalStorage(storage: LocalStorage) : void { + if (this.instanceId < 0) { + InteropNativeModule._NativeLog( + `ArkTS setSharedLocalStorage failed due to instanceId: ${this.instanceId} is illegal`); + return; + } + UIContextUtil.setSharedLocalStorage(this.instanceId, storage); + } + private checkEvents(what: int32) { // NativeModule._NativeLog("ARKTS: checkEvents") checkEvents() 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 b2fc43b45876150b1c549f04445622c0d5780356..5f954d7756db8716f9781456293fbd4c137a5178 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 @@ -17,9 +17,7 @@ import { KPointer, KInt, KLong, KBoolean, KFloat, KUInt, KSerializerBuffer } fr import { drawing } from "@ohos/graphics/drawing" 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 { DrawContext } from "arkui/Graphics" import { AnimatableArithmetic, DrawModifier, AsyncCallback, Callback, DragItemInfo, ResourceColor } from "arkui/component" import { ArkCustomComponent } from "arkui/ArkCustomComponent" @@ -46,7 +44,6 @@ export class ArkUIAniModule { native static _Web_SetWebController_ControllerHandler(ptr: KPointer, webviewController: webview.WebviewController): void native static _ConvertUtils_ConvertFromPixelMapAni(pixelmap: image.PixelMap): KPointer native static _ConvertUtils_ConvertToPixelMapAni(ptr: KPointer): image.PixelMap - native static _Common_GetHostContext(key: KInt): common.Context native static _Common_Sync_InstanceId(id: KInt): void native static _Common_Restore_InstanceId(): void native static _Common_Get_Current_InstanceId(): KInt @@ -57,7 +54,6 @@ export class ArkUIAniModule { native static _CreateRenderNodePeerWithNodePtr(ptr: KPointer): KPointer native static _ToColorLong(color: KInt): KLong native static _ToColorInt(color: KLong): KInt - native static _Common_GetSharedLocalStorage(): LocalStorage native static _CustomNode_Construct(id: KInt, component: ArkCustomComponent): KPointer native static _CustomNode_RequestFrame(): void native static _CustomNode_QueryNavigationInfo(ptr: KPointer): uiObserver.NavigationInfo diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/common/common_module.cpp b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/common/common_module.cpp index 72ab04cd792414f8d7d5deb4507724eda0754461..346605bfd8a6df9e00d2c64afb833e15a73212a8 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/common/common_module.cpp +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/common/common_module.cpp @@ -72,20 +72,6 @@ private: ani_vm* vm_ = nullptr; ani_ref func_ = nullptr; }; -ani_object GetHostContext([[maybe_unused]] ani_env* env, ani_object obj, ani_int key) -{ - const auto* modifier = GetNodeAniModifier(); - if (!modifier || !modifier->getCommonAniModifier() || !env) { - return nullptr; - } - ani_ref* context = modifier->getCommonAniModifier()->getHostContext(key); - if (context) { - ani_object context_object = reinterpret_cast(*context); - return context_object; - } - return nullptr; -} - void SyncInstanceId([[maybe_unused]] ani_env* env, ani_object obj, ani_int id) { const auto* modifier = GetNodeAniModifier(); @@ -179,20 +165,6 @@ void AddComponentToFrameNode(ani_env* env, ani_object obj, ani_long node, ani_lo modifier->getArkUIAniComponentConentModifier()->addComponentToFrameNode(node, content); } -ani_object GetSharedLocalStorage([[maybe_unused]] ani_env* env) -{ - const auto* modifier = GetNodeAniModifier(); - if (!modifier) { - return nullptr; - } - ani_ref storage = modifier->getCommonAniModifier()->getSharedLocalStorage(); - if (storage) { - ani_object storage_object = reinterpret_cast(storage); - return storage_object; - } - return nullptr; -} - void SetBackgroundImagePixelMap([[maybe_unused]] ani_env* env, [[maybe_unused]] ani_object aniClass, ani_object node, ani_object pixelMap, ani_int repeat) { diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/common/common_module.h b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/common/common_module.h index 25e2fe0d5a69d908b4989475e6debb11ea689108..1a5a81cc444b3750ab0cbe984c65a776a2cef75f 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/common/common_module.h +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/common/common_module.h @@ -19,8 +19,6 @@ #include "ani.h" namespace OHOS::Ace::Ani { -ani_object GetHostContext([[maybe_unused]] ani_env* env, ani_object obj, ani_int key); -ani_object GetSharedLocalStorage([[maybe_unused]] ani_env* env); void SyncInstanceId(ani_env* env, ani_object obj, ani_int id); void RestoreInstanceId(ani_env* env); ani_int GetCurrentInstanceId(ani_env* env); 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 ef5d3088f233bc02aee3f077df0113b026e09bb9..c76dfebb6a9ad2f717818e2620b1a5e1e951571b 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 @@ -299,11 +299,6 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm* vm, uint32_t* result) "J:L@ohos/multimedia/image/image/PixelMap;", reinterpret_cast(OHOS::Ace::Ani::ConvertToPixelMapAni) }, - ani_native_function { - "_Common_GetHostContext", - nullptr, - reinterpret_cast(OHOS::Ace::Ani::GetHostContext) - }, ani_native_function { "_Common_Sync_InstanceId", "I:V", @@ -479,11 +474,6 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm* vm, uint32_t* result) nullptr, reinterpret_cast(OHOS::Ace::Ani::CreateFromBuilderWithPromise) }, - ani_native_function { - "_Common_GetSharedLocalStorage", - nullptr, - reinterpret_cast(OHOS::Ace::Ani::GetSharedLocalStorage) - }, ani_native_function { "_ComponentSnapshot_createFromComponentWithPromise", nullptr, diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/module_linux.cpp b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/module_linux.cpp index 669307bc3523fe9c2886f5b193b890011336890d..ed284c28b1b2aa42f5a9396d3b7a70ec49d9b133 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/module_linux.cpp +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/ani/native/module_linux.cpp @@ -65,11 +65,6 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm* vm, uint32_t* result) nullptr, reinterpret_cast(OHOS::Ace::Ani::QueryRouterPageInfo) }, - ani_native_function { - "_Common_GetHostContext", - nullptr, - reinterpret_cast(OHOS::Ace::Ani::GetHostContext) - }, ani_native_function { "_Common_Sync_InstanceId", "I:V", @@ -150,11 +145,6 @@ ANI_EXPORT ani_status ANI_Constructor(ani_vm* vm, uint32_t* result) "JLarkui/component/common/ChildrenMainSize;:V", reinterpret_cast(OHOS::Ace::Ani::SetListChildrenMainSize) }, - ani_native_function { - "_Common_GetSharedLocalStorage", - nullptr, - reinterpret_cast(OHOS::Ace::Ani::GetSharedLocalStorage) - }, ani_native_function { "_Animation_SetOrCreateAnimatableProperty", nullptr, 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 56805e905467c7f212c3d41b2b310ff9f069f1fb..c14a5470703d047d37c924236232202af7859574 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 @@ -1293,6 +1293,8 @@ export class UIContextImpl extends UIContext { textMenuController_: TextMenuControllerImpl; detachedRootEntryManager_: DetachedRootEntryManager; isDebugMode_: boolean = false; + context: Context | undefined = undefined; + storage: LocalStorage | undefined = undefined; bufferSize = 4096 buffer: KBuffer = new KBuffer(this.bufferSize) @@ -1388,7 +1390,7 @@ export class UIContextImpl extends UIContext { return node; } public getSharedLocalStorage(): LocalStorage | undefined { - return ArkUIAniModule._Common_GetSharedLocalStorage(); + return this.storage; } getAttachedFrameNodeById(id: string): FrameNode | null { ArkUIAniModule._Common_Sync_InstanceId(this.instanceId_); @@ -1433,7 +1435,7 @@ export class UIContextImpl extends UIContext { return node; } getHostContext(): Context | undefined { - return ArkUIAniModule._Common_GetHostContext(this.instanceId_); + return this.context; } public getAtomicServiceBar(): Nullable { @@ -1786,4 +1788,12 @@ export class UIContextImpl extends UIContext { public getFilteredInspectorTreeById(id: string, depth: number, filters?: Array): string { return inspector.getFilteredInspectorTreeById(id, depth, filters); } + + public setHostContext(context: Context): void { + this.context = context; + } + + public setSharedLocalStorage(storage: LocalStorage): void { + this.storage = storage; + } } diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/handwritten/UIContextUtil.ts b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/handwritten/UIContextUtil.ts index f6561d2d7dfbe6d0c4d089693ef93fd2adef45ae..6f2d99eabfe8373188cdbd5d9be57de2f5b42d28 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/handwritten/UIContextUtil.ts +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/src/handwritten/UIContextUtil.ts @@ -17,6 +17,8 @@ import { int32 } from "@koalaui/common" import { UIContext } from "@ohos/arkui/UIContext" import { UIContextImpl } from "./UIContextImpl"; import { ArkUIAniModule } from "arkui.ani"; +import { LocalStorage } from '../stateManagement/storage/localStorage'; +import { Context } from '#external'; export class UIContextUtil { static contextMap_: Map = new Map(); @@ -58,4 +60,18 @@ export class UIContextUtil { let instanceId = UIContextUtil.getCurrentInstanceId(); return ArkUIAniModule._CheckIsUIThread(instanceId) !== 0; } + + static setHostContext(instanceId: int32, context: Context): void { + const uiContext = UIContextUtil.getOrCreateUIContextById(instanceId); + if (uiContext) { + uiContext.setHostContext(context); + } + } + + static setSharedLocalStorage(instanceId: int32, storage: LocalStorage): void { + const uiContext = UIContextUtil.getOrCreateUIContextById(instanceId); + if (uiContext) { + uiContext.setSharedLocalStorage(storage); + } + } } diff --git a/frameworks/core/common/frontend.h b/frameworks/core/common/frontend.h index cb19fc84b521c9dfd30bf9aef43d2b2f2a508c97..388ddfbdb1d13bd00290d9d0198a486101392bfa 100644 --- a/frameworks/core/common/frontend.h +++ b/frameworks/core/common/frontend.h @@ -389,32 +389,14 @@ public: } virtual void* GetEnv() { return nullptr; } - void RegisterLocalStorage(int32_t id, void* storage) - { - storageMap_.emplace(id, storage); - } - - void UnRegisterLocalStorage(int32_t id) - { - storageMap_.erase(id); - } - virtual ani_object GetUIContext(int32_t instanceId) { return nullptr; } - - virtual ani_ref GetSharedStorage(int32_t id) - { - return nullptr; - } - virtual void SetHostContext(int32_t instanceId, ani_ref* context) {} + virtual void SetHostContext(ani_ref* context) {} - virtual ani_ref* GetHostContext(int32_t instanceId) - { - return nullptr; - } + virtual void SetLocalStorage(void* storage) {} virtual bool HandleMessage(void *frameNode, int32_t type, const std::string& param) { @@ -432,7 +414,6 @@ protected: State state_ = State::UNDEFINE; mutable std::recursive_mutex mutex_; mutable std::mutex destructMutex_; - std::unordered_map storageMap_; }; } // namespace OHOS::Ace diff --git a/frameworks/core/interfaces/ani/ani_api.h b/frameworks/core/interfaces/ani/ani_api.h index 0f5f356d316ba4e356df515a55dc37ed048eef42..6796caa9c9dc07906af24b93c9359be328d23457 100644 --- a/frameworks/core/interfaces/ani/ani_api.h +++ b/frameworks/core/interfaces/ani/ani_api.h @@ -366,14 +366,12 @@ struct ArkUIAniDragModifier { const char* (*getUdKey)(ani_ref event); }; struct ArkUIAniCommonModifier { - ani_ref* (*getHostContext)(ArkUI_Int32 key); void (*syncInstanceId)(ArkUI_Int32 id); void (*restoreInstanceId)(); void (*setDrawCallback)(ani_env* env, ani_long ptr, ani_fn_object fnObj); ArkUI_Int32 (*getCurrentInstanceId)(); ArkUI_Int32 (*getFocusedInstanceId)(); ani_long (*builderProxyNodeConstruct)(ArkUI_Int32 id); - ani_ref (*getSharedLocalStorage)(); void (*setBackgroundImagePixelMap)(ani_env* env, ArkUINodeHandle node, ani_ref pixelMapPtr, ArkUI_Int32 repeat); void (*setCustomCallback)(ani_env* env, ani_long ptr, ani_fn_object fnObjMeasure, ani_fn_object fnObjLayout); ArkUI_Int32 (*requireArkoalaNodeId)(ArkUI_Int32 capacity); diff --git a/frameworks/core/interfaces/native/ani/common_ani_modifier.cpp b/frameworks/core/interfaces/native/ani/common_ani_modifier.cpp index c2f4e848c4f2d09bee104f972a02f6d7892c1fe3..2246002bb16a40f44155bfc2766ee150f6941af6 100644 --- a/frameworks/core/interfaces/native/ani/common_ani_modifier.cpp +++ b/frameworks/core/interfaces/native/ani/common_ani_modifier.cpp @@ -42,7 +42,6 @@ #include "core/pipeline_ng/pipeline_context.h" #include "bridge/arkts_frontend/ani_graphics_module.h" #include "bridge/arkts_frontend/arkts_frontend.h" -#include "bridge/arkts_frontend/ani_context_module.h" #include "core/components/container_modal/container_modal_constants.h" #include "core/interfaces/native/implementation/key_event_peer.h" #include "core/interfaces/native/implementation/scrollable_target_info_peer.h" @@ -82,21 +81,6 @@ uint32_t ColorAlphaAdapt(uint32_t origin) static thread_local std::vector restoreInstanceIds_; -ani_ref* GetHostContext(ArkUI_Int32 key) -{ - auto context = NG::PipelineContext::GetCurrentContextSafely(); - if (context == nullptr) { - TAG_LOGE(AceLogTag::ACE_LAYOUT_INSPECTOR, "GetHostContext-ani can not get current context."); - return nullptr; - } - auto frontend = context->GetFrontend(); - if (frontend == nullptr) { - TAG_LOGE(AceLogTag::ACE_LAYOUT_INSPECTOR, "GetHostContext-ani can not get current frontend."); - return nullptr; - } - return frontend->GetHostContext(key); -} - void SyncInstanceId(ArkUI_Int32 instanceId) { restoreInstanceIds_.emplace_back(ContainerScope::CurrentId()); @@ -146,26 +130,6 @@ ani_long BuilderProxyNodeConstruct(ArkUI_Int32 id) return reinterpret_cast(AceType::RawPtr(proxyNode)); } -ani_ref GetSharedLocalStorage() -{ - auto context = NG::PipelineContext::GetCurrentContextSafely(); - if (context == nullptr) { - TAG_LOGE(AceLogTag::ACE_LAYOUT_INSPECTOR, "GetSharedLocalStorage-ani can not get current context."); - return nullptr; - } - auto frontend = context->GetFrontend(); - if (frontend == nullptr) { - TAG_LOGE(AceLogTag::ACE_LAYOUT_INSPECTOR, "GetSharedLocalStorage-ani can not get current frontend."); - return nullptr; - } - int32_t currentInstance = Container::CurrentIdSafely(); - auto storage = frontend->GetSharedStorage(currentInstance); - if (storage) { - return storage; - } - return nullptr; -} - void SetBackgroundImagePixelMap(ani_env* env, ArkUINodeHandle node, ani_ref pixelMapPtr, ArkUI_Int32 repeat) { auto frameNode = reinterpret_cast(node); @@ -766,14 +730,12 @@ void ApplyParentThemeScopeId(ani_env* env, ani_long self, ani_long parent) const ArkUIAniCommonModifier* GetCommonAniModifier() { static const ArkUIAniCommonModifier impl = { - .getHostContext = OHOS::Ace::NG::GetHostContext, .syncInstanceId = OHOS::Ace::NG::SyncInstanceId, .restoreInstanceId = OHOS::Ace::NG::RestoreInstanceId, .setDrawCallback = OHOS::Ace::NG::SetDrawCallback, .getCurrentInstanceId = OHOS::Ace::NG::GetCurrentInstanceId, .getFocusedInstanceId = OHOS::Ace::NG::GetFocusedInstanceId, .builderProxyNodeConstruct = OHOS::Ace::NG::BuilderProxyNodeConstruct, - .getSharedLocalStorage = OHOS::Ace::NG::GetSharedLocalStorage, .setBackgroundImagePixelMap = OHOS::Ace::NG::SetBackgroundImagePixelMap, .setCustomCallback = OHOS::Ace::NG::SetCustomCallback, .requireArkoalaNodeId = OHOS::Ace::NG::RequireArkoalaNodeId,