diff --git a/frameworks/bridge/arkts_frontend/arkts_frontend.h b/frameworks/bridge/arkts_frontend/arkts_frontend.h index d6f51d5eb35f02e34a4b84674cb88527fcaddd18..05aa155f2227592fd0e17391e51790eb97932af6 100644 --- a/frameworks/bridge/arkts_frontend/arkts_frontend.h +++ b/frameworks/bridge/arkts_frontend/arkts_frontend.h @@ -27,6 +27,7 @@ #include "core/common/frontend.h" #include "core/pipeline_ng/pipeline_context.h" #include "frameworks/bridge/common/accessibility/accessibility_node_manager.h" +#include "frameworks/bridge/common/media_query/media_query_info.h" typedef struct __EtsEnv ets_env; // only include ets_napi.h in .cpp files typedef struct __ani_env ani_env; @@ -36,6 +37,7 @@ typedef struct __ani_vm ani_vm; namespace OHOS::Ace { using InspectorFunc = std::function; +using MediaQueryCallback = std::function; class InspectorEvent : public virtual AceType { DECLARE_ACE_TYPE(InspectorEvent, AceType) public: @@ -63,9 +65,23 @@ public: explicit ArktsFrontend(void* runtime); ~ArktsFrontend() override = default; + void SetMediaQueryCallback(MediaQueryCallback&& mediaQueryCallback) + { + mediaQueryCallbacks_ = mediaQueryCallback; + } bool Initialize(FrontendType type, const RefPtr& taskExecutor) override { taskExecutor_ = taskExecutor; + + auto mediaQueryCallback = [weakEngine = AceType::WeakClaim(this)]( + const std::string& callbackId, const std::string& args) { + auto arktsFrontend = weakEngine.Upgrade(); + if (!arktsFrontend) { + return; + } + arktsFrontend->CallbackMediaQuery(callbackId, args); + }; + SetMediaQueryCallback(std::move(mediaQueryCallback)); return true; } @@ -130,7 +146,9 @@ public: } void OnShow() override {} void OnHide() override {} - void OnConfigurationUpdated(const std::string& data) override {} + void OnConfigurationUpdated(const std::string& data) override { + OnMediaQueryUpdate(); + } void OnSaveAbilityState(std::string& data) override {} void OnRestoreAbilityState(const std::string& data) override {} void OnNewWant(const std::string& data) override {} @@ -151,7 +169,42 @@ public: void OnNewRequest(const std::string& data) override {} void OnMemoryLevel(const int32_t level) override {} void CallRouterBack() override {} - void OnSurfaceChanged(int32_t width, int32_t height) override {} + void OnSurfaceChanged(int32_t width, int32_t height) override { + if (mediaQueryInfo_->GetIsInit()) { + mediaQueryInfo_->SetIsInit(false); + } + mediaQueryInfo_->EnsureListenerIdValid(); + OnMediaQueryUpdate(true); + } + void OnMediaQueryUpdate(bool isSynchronous = false) + { + auto containerId = Container::CurrentIdSafely(); + bool isInSubwindow = containerId >= 1000000; + if (isInSubwindow) { + return; + } + if (mediaQueryInfo_->GetIsInit()) { + return; + } + + auto callback = [weak = AceType::WeakClaim(this)] { + auto frontend = weak.Upgrade(); + if (!frontend) { + return; + } + const auto& info = frontend->mediaQueryInfo_->GetMediaQueryInfo(); + const auto& listenerId = frontend->mediaQueryInfo_->GetListenerId(); + frontend->mediaQueryCallbacks_(listenerId, info); + frontend->mediaQueryInfo_->ResetListenerId(); + }; + auto container = Container::Current(); + if (container && container->IsUseStageModel() && isSynchronous) { + callback(); + return; + } + taskExecutor_->PostTask(callback, TaskExecutor::TaskType::JS, "ArkUIMediaQueryUpdate"); + } + void OnLayoutCompleted(const std::string& componentId) override { auto iter = layoutCallbacks_.find(componentId); @@ -269,6 +322,24 @@ public: drawCallbacks_.erase(componentId); } + + virtual void CallbackMediaQuery(const std::string& callbackId, const std::string& args) + { + if (mediaUpdateCallback_) { + mediaUpdateCallback_(this); + } + } + + void RegisterMediaUpdateCallback(std::function cb) + { + mediaUpdateCallback_ = std::move(cb); + } + + void UnregisterMediaUpdateCallback() + { + mediaUpdateCallback_ = nullptr; + } + ani_object CallGetUIContextFunc(); void SetAniContext(int32_t instanceId, ani_ref* context); @@ -288,6 +359,9 @@ private: std::map> layoutCallbacks_; std::map> drawCallbacks_; + MediaQueryCallback mediaQueryCallbacks_; + RefPtr mediaQueryInfo_ = AceType::MakeRefPtr(); + std::function mediaUpdateCallback_; }; } // namespace OHOS::Ace 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 8f7840bc30487dffdebcf13d8c4ccaed882ca2c5..5380ffbee2a7f1a7c6758b6919b4c9dbb4cbbfce 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 @@ -41,6 +41,7 @@ import { TextMenuOptions } from "arkui/component/textCommon" import { Nullable } from "arkui/component/enums" import { KeyProcessingMode } from "arkui/component/focus" import { uiObserver } from "@ohos/arkui/observer" +import { mediaquery } from '@ohos/mediaquery' import { AlertDialog, AlertDialogParamWithConfirm, AlertDialogParamWithButtons, AlertDialogParamWithOptions }from "arkui/component/alertDialog" import inspector from "@ohos/arkui/inspector" @@ -86,6 +87,19 @@ export class Font { } } +export class MediaQuery { + instanceId_: int32 = 100000; + constructor(instanceId: int32) { + this.instanceId_ = instanceId; + } + public matchMediaSync(condition: string): mediaquery.MediaQueryListener { + ArkUIAniModule._Common_Sync_InstanceId(this.instanceId_); + let mediaQueryListener = mediaquery.matchMediaSync(condition); + ArkUIAniModule._Common_Restore_InstanceId(); + return mediaQueryListener; + } +} + export class MeasureUtils { instanceId_: int32; constructor(instanceId: int32) { @@ -274,6 +288,11 @@ export class UIContext { public getFont() : Font { return this.font_; } + + public getMediaQuery(): MediaQuery { + return new MediaQuery(this.instanceId_); + } + public getMeasureUtils() : MeasureUtils { return this.measureUtils_; } diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/@ohos.mediaquery.ts b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/@ohos.mediaquery.ts new file mode 100644 index 0000000000000000000000000000000000000000..393e9d78d4c0ca288f69e78e50bd15ec69742a36 --- /dev/null +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/@ohos.mediaquery.ts @@ -0,0 +1,28 @@ +/* + * 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. + */ + +import { Callback } from 'arkui/component/index'; + +export declare namespace mediaquery { + export interface MediaQueryResult { + readonly matches: boolean; + readonly media: string; + } + export interface MediaQueryListener { + on(type: 'change', callback: Callback): void; + off(type: 'change', callback?: Callback): void; + } + export function matchMediaSync(condition: string): MediaQueryListener; +} diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/arktsconfig-unmemoized.json b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/arktsconfig-unmemoized.json index 9953371b9821b90cd231df148897e45f16242a1f..5e9a07c80144802e15057a1b447b77fec4f02080 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/arktsconfig-unmemoized.json +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/arktsconfig-unmemoized.json @@ -82,6 +82,9 @@ "@ohos/arkui/observer": [ "../@ohos.arkui.observer.ts" ], + "@ohos/mediaquery": [ + "../@ohos.mediaquery.ts" + ], "@ohos/graphics/common2D": [ "../@ohos.graphics.common2D.ts" ], @@ -111,6 +114,7 @@ "src/ani/arkts/*.ts", "build/unmemoized/@ohos.router.ts", "build/unmemoized/@ohos.arkui.observer.ts", + "build/unmemoized/@ohos.mediaquery.ts", "build/unmemoized/@ohos.graphics.common2D.ts", "build/unmemoized/@ohos.graphics.drawing.ts", "build/unmemoized/@ohos.arkui.graphics.ts", diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/tsconfig-unmemoize.json b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/tsconfig-unmemoize.json index 728eda0cf27627441d9f9239049fb721638d2c61..c40e6a0bdd7aad187d086f62c66b5a1045f17a5f 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/tsconfig-unmemoize.json +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui-ohos/tsconfig-unmemoize.json @@ -73,6 +73,9 @@ "@ohos/arkui/observer": [ "./@ohos.arkui.observer.ts" ], + "@ohos/mediaquery": [ + "./@ohos.mediaquery.ts" + ], "@ohos/graphics/common2D": [ "./@ohos.graphics.common2D.ts" ], @@ -103,6 +106,7 @@ "./global/**/*.ts", "./@ohos.router.ts", "./@ohos.arkui.observer.ts", + "./@ohos.mediaquery.ts", "./@ohos.graphics.common2D.ts", "./@ohos.graphics.drawing.ts", "./@ohos.arkui.graphics.ts", diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui/types/index-full.d.ts b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui/types/index-full.d.ts index 83c72e4c54e7a3af9f2cdf9b7931aa7d41458cfd..27704923fde37efe9e7e443ed2d676eb65e8ca72 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui/types/index-full.d.ts +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/arkui/types/index-full.d.ts @@ -8895,6 +8895,17 @@ declare class ComponentObserver { declare class UIInspector { createComponentObserver(id: string): ComponentObserver; } +declare class MediaQueryResult { + readonly matches: boolean; + readonly media: string; +} +declare class MediaQueryListener { + on(type: 'change', callback: Callback): void; + off(type: 'change', callback?: Callback): void; +} +declare class MediaQuery { + matchMediaSync(condition: string): MediaQueryListener; +} declare class UIObserver { on(type: string, callback: () => void): void; off(type: string, callback?: () => void): void; diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/ui2abcconfig-m3.json b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/ui2abcconfig-m3.json index 9187b137d87192ce91585c88893dceb079a3f922..8ee9dbef6f23de0a122eba85fd452a2f170698a5 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/ui2abcconfig-m3.json +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala-arkts/ui2abcconfig-m3.json @@ -59,6 +59,9 @@ "@ohos/font": [ "@ohos.font.ets" ], + "@ohos/mediaquery": [ + "@ohos.mediaquery.ets" + ], "global/resource": [ "global/resource/resource.ets" ], diff --git a/frameworks/bridge/arkts_frontend/koala_projects/arkoala/ets-plugin/src/Importer.ts b/frameworks/bridge/arkts_frontend/koala_projects/arkoala/ets-plugin/src/Importer.ts index deaaccdb515ec17018bfe8ba65afc7ebb2420ab4..c77442021daabc70e096bdf1b76ad660dfe763d8 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/arkoala/ets-plugin/src/Importer.ts +++ b/frameworks/bridge/arkts_frontend/koala_projects/arkoala/ets-plugin/src/Importer.ts @@ -121,7 +121,8 @@ function implementedPackages(kind: ArkUIImplementation): string[] { 'ohos.animator', 'ohos.arkui.componentUtils', 'ohos.arkui.inspector', - 'ohos.observer' + 'ohos.observer', + 'ohos.mediaquery' ] assertUnreachable(kind) diff --git a/frameworks/bridge/arkts_frontend/koala_projects/ui2abc/libarkts/src/utils.ts b/frameworks/bridge/arkts_frontend/koala_projects/ui2abc/libarkts/src/utils.ts index d211a25ec9a50136a5247f3f0954e1d3bab13d40..5011c52dcb5f05a8393d5fa8eef457c33b5aec5e 100644 --- a/frameworks/bridge/arkts_frontend/koala_projects/ui2abc/libarkts/src/utils.ts +++ b/frameworks/bridge/arkts_frontend/koala_projects/ui2abc/libarkts/src/utils.ts @@ -296,6 +296,7 @@ function fixNamespace(code: string) { code = code.replaceAll(/public static (restoreDefault)/g, "export function $1") code = code.replaceAll(/public static (requestFocus\(value)/g, "export function $1") code = code.replaceAll(/public static (createUIObserver\(id)/g, "export function $1") + code = code.replaceAll(/public static (matchMediaSync\(condition)/g, "export function $1") code = code.replaceAll(/public static (createComponentObserver\(id)/g, "export function $1") code = code.replaceAll(/public static (registerPage\(page)/g, "export function $1") code = code.replaceAll(/public static (error\(prefix)/g, "export function $1") diff --git a/interfaces/ets/ani/mediaquery/ets/@ohos.mediaquery.ets b/interfaces/ets/ani/mediaquery/ets/@ohos.mediaquery.ets index c157f3144f6f3a1cf1c9e38af2a301764cd2d832..d9f4f882bcdd6754d6a24f03eb4fc817f8885ca9 100644 --- a/interfaces/ets/ani/mediaquery/ets/@ohos.mediaquery.ets +++ b/interfaces/ets/ani/mediaquery/ets/@ohos.mediaquery.ets @@ -21,6 +21,14 @@ export default namespace mediaquery { readonly matches: boolean; readonly media: string; } + class Result implements MediaQueryResult { + readonly matches: boolean; + readonly media: string; + constructor(matches: boolean, media: string) { + this.matches = matches; + this.media = media; + } + } export interface MediaQueryListener { on(type: string, callback: Callback): void; off(type: string, callback?: Callback): void diff --git a/interfaces/ets/ani/mediaquery/src/mediaquery.cpp b/interfaces/ets/ani/mediaquery/src/mediaquery.cpp index 5b77933584d02dfbdae687958af11818d3c9f93d..21d4c4e6247a27633a403b7dc71d20946f80ebbd 100644 --- a/interfaces/ets/ani/mediaquery/src/mediaquery.cpp +++ b/interfaces/ets/ani/mediaquery/src/mediaquery.cpp @@ -23,6 +23,7 @@ #include #include +#include "frameworks/bridge/arkts_frontend/arkts_frontend.h" #include "frameworks/bridge/declarative_frontend/engine/jsi/jsi_declarative_engine.h" #include "frameworks/base/utils/utils.h" #include "frameworks/bridge/common/utils/engine_helper.h" @@ -65,7 +66,35 @@ struct MediaQueryResult { env->String_NewUTF8(mediac, strlen(mediac), &media); match = static_cast(matches_); env->Object_SetFieldByName_Boolean(result, "matches", match); - env->Object_SetFieldByName_Ref(result, "matches", static_cast(media)); + env->Object_SetFieldByName_Ref(result, "media", static_cast(media)); + env->DestroyLocalScope(); + } + + virtual void AniResultSerializer([[maybe_unused]] ani_env *env, ani_object& result) + { + ani_boolean match; + ani_string media; + static const char *className = "L@ohos/mediaquery/mediaquery/Result;"; + ani_class cls; + if (ANI_OK != env->FindClass(className, &cls)) { + return; + } + ani_method method; + if (ANI_OK != env->Class_FindMethod(cls, "", nullptr, &method)) { + return; + } + ani_size nr_refs = 16; + if (ANI_OK != env->CreateLocalScope(nr_refs)) { + return; + } + const char* mediac = media_.c_str(); + if (ANI_OK != env->String_NewUTF8(mediac, strlen(mediac), &media)) { + return; + } + match = static_cast(matches_); + if (ANI_OK != env->Object_New(cls, method, &result, match, media)) { + return; + } env->DestroyLocalScope(); } }; @@ -88,26 +117,38 @@ public: } } - static void IdlCallback(OHOS::Ace::Framework::JsEngine* jsEngine) + static OHOS::Ace::RefPtr GetFronted() + { + auto context = OHOS::Ace::NG::PipelineContext::GetCurrentContextSafely(); + if (context == nullptr) { + LOGE("mediaquery-ani can not get current context."); + return nullptr; + } + return OHOS::Ace::AceType::DynamicCast(context->GetFrontend()); + } + + static void IdlCallback(OHOS::Ace::ArktsFrontend* arktsFrontend) { - OnIdlCallback(jsEngine); + OnIdlCallback(arktsFrontend); } - static void OnIdlCallback(OHOS::Ace::Framework::JsEngine* jsEngine) + static void OnIdlCallback(OHOS::Ace::ArktsFrontend* arktsFrontend) { std::set> delayDeleteListenerSets; std::set delayDeleteCallbacks; std::vector copyListeners; { std::lock_guard lock(mutex_); - auto& currentListeners = listenerSets_[OHOS::Ace::AceType::WeakClaim(jsEngine)]; + auto& currentListeners = listenerSets_[OHOS::Ace::AceType::WeakClaim(arktsFrontend)]; copyListeners.insert(copyListeners.end(), currentListeners.begin(), currentListeners.end()); } struct Leave { ~Leave() { - for (auto& cbRef : *delayDeleteCallbacks_) { - delayDeleteEnv_->GlobalReference_Delete(cbRef); + if (delayDeleteEnv_) { + for (auto& cbRef : *delayDeleteCallbacks_) { + delayDeleteEnv_->GlobalReference_Delete(cbRef); + } } delayDeleteCallbacks_ = nullptr; delayDeleteListenerSets_ = nullptr; @@ -133,27 +174,35 @@ public: auto& currentCallbacks = listener->cbList_; copyCallbacks.insert(copyCallbacks.end(), currentCallbacks.begin(), currentCallbacks.end()); } - for (const auto &cbRef : copyCallbacks) { if (delayDeleteCallbacks_->find(cbRef) != delayDeleteCallbacks_->end()) { continue; } TAG_LOGI(OHOS::Ace::AceLogTag::ACE_MEDIA_QUERY, "trigger:%{public}s matches:%{public}d", listener->media_.c_str(), listener->matches_); - ani_size nr_refs = 16; - if (ANI_OK != listener->env_->CreateLocalScope(nr_refs)) { + ani_wref cbWref; + if (ANI_OK != listener->env_->WeakReference_Create(cbRef, &cbWref)) { + TAG_LOGI(OHOS::Ace::AceLogTag::ACE_MEDIA_QUERY, "!WeakReference_Create"); return; } - ani_wref cbWref; - listener->env_->WeakReference_Create(cbRef, &cbWref); ani_ref ref; ani_boolean wasReleased; - listener->env_->WeakReference_GetReference(cbWref, &wasReleased, &ref); + if (ANI_OK != listener->env_->WeakReference_GetReference(cbWref, &wasReleased, &ref)) { + TAG_LOGI(OHOS::Ace::AceLogTag::ACE_MEDIA_QUERY, "!listener->env_->WeakReference_GetReference"); + return; + } ani_object result; - listener->MediaQueryResult::AniSerializer(listener->env_, result); + listener->MediaQueryResult::AniResultSerializer(listener->env_, result); ani_ref resultRef = static_cast(result); - listener->env_->FunctionalObject_Call(static_cast(ref), 1, &resultRef, nullptr); - listener->env_->DestroyLocalScope(); + if (resultRef == nullptr) { + TAG_LOGI(OHOS::Ace::AceLogTag::ACE_MEDIA_QUERY, "resultRef == nullptr"); + return; + } + ani_ref fnReturnVal; + if (ANI_OK != listener->env_->FunctionalObject_Call(static_cast(ref), 1, + &resultRef, &fnReturnVal)) { + TAG_LOGI(OHOS::Ace::AceLogTag::ACE_MEDIA_QUERY, "FunctionalObject_Call fail"); + } } } } @@ -175,29 +224,32 @@ public: static void On([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_object object, ani_string type, ani_object callback) { - auto jsEngine = OHOS::Ace::EngineHelper::GetCurrentEngineSafely(); - if (!jsEngine) { - return; - } - jsEngine->RegisterMediaUpdateCallback(MediaQueryListener::IdlCallback); ani_size nr_refs = 16; if (ANI_OK != env->CreateLocalScope(nr_refs)) { return; } size_t argc = ParseArgs(env, object, type, callback); - if (argc == TWO_ARGS) { + if (argc != TWO_ARGS) { env->DestroyLocalScope(); + TAG_LOGI(OHOS::Ace::AceLogTag::ACE_MEDIA_QUERY, "mediaquery argc == TWO_ARGS"); return; } - MediaQueryListener* listener = GetListener(env, object); if (!listener) { env->DestroyLocalScope(); + TAG_LOGI(OHOS::Ace::AceLogTag::ACE_MEDIA_QUERY, "mediaquery listener"); return; } + auto arkTsFrontend = MediaQueryListener::GetFronted(); + if (!arkTsFrontend) { + TAG_LOGI(OHOS::Ace::AceLogTag::ACE_MEDIA_QUERY, "mediaquery arktsFrontend"); + return; + } + arkTsFrontend->RegisterMediaUpdateCallback(MediaQueryListener::IdlCallback); auto iter = listener->FindCbList(callback); if (iter != listener->cbList_.end()) { env->DestroyLocalScope(); + TAG_LOGI(OHOS::Ace::AceLogTag::ACE_MEDIA_QUERY, "mediaquery iter != listener->cbList_.end()"); return; } ani_ref ref; @@ -268,9 +320,9 @@ private: while (iter != listenerSets_.end()) { iter->second.erase(this); if (iter->second.empty()) { - auto jsEngineWeak = iter->first.Upgrade(); - if (jsEngineWeak) { - jsEngineWeak->UnregisterMediaUpdateCallback(); + auto arktsFrontendWeak = iter->first.Upgrade(); + if (arktsFrontendWeak) { + arktsFrontendWeak->UnregisterMediaUpdateCallback(); } iter = listenerSets_.erase(iter); } else { @@ -289,13 +341,14 @@ private: env_ = env; } env->DestroyLocalScope(); - auto jsEngine = OHOS::Ace::EngineHelper::GetCurrentEngineSafely(); - if (!jsEngine) { + auto arkTsFrontend = MediaQueryListener::GetFronted(); + if (!arkTsFrontend) { + TAG_LOGI(OHOS::Ace::AceLogTag::ACE_MEDIA_QUERY, "!arkTsFrontend"); return; } { std::lock_guard lock(mutex_); - listenerSets_[jsEngine].emplace(this); + listenerSets_[arkTsFrontend].emplace(this); } } @@ -346,13 +399,13 @@ private: static std::set>* delayDeleteListenerSets_; static std::set* delayDeleteCallbacks_; static ani_env* delayDeleteEnv_; - static std::map, std::set> listenerSets_; + static std::map, std::set> listenerSets_; static std::mutex mutex_; }; std::set>* MediaQueryListener::delayDeleteListenerSets_; ani_env* MediaQueryListener::delayDeleteEnv_; std::set* MediaQueryListener::delayDeleteCallbacks_; -std::map, std::set> +std::map, std::set> MediaQueryListener::listenerSets_; std::mutex MediaQueryListener::mutex_; @@ -360,7 +413,7 @@ void On([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_object object, ani_s { MediaQueryListener::On(env, object, type, callback); #if defined(PREVIEW) - MediaQueryListener::IdlCallback(AceType::RawPtr(jsEngine)); + MediaQueryListener::IdlCallback(AceType::RawPtr(arktsFrontend)); #endif } @@ -380,7 +433,7 @@ static ani_object JSMatchMediaSync([[maybe_unused]] ani_env *env, ani_string con utf8Buffer[bytes_written] = '\0'; std::string mediaCondition = std::string(utf8Buffer); - static const char *className = "L@ohos/mediaquery/mediaquery;"; + static const char *className = "L@ohos/mediaquery/mediaquery/Mediaquery;"; ani_object mediaquery_obj = {}; ani_class cls; if (ANI_OK != env->FindClass(className, &cls)) {